MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Interceptando tráfego de Firefox OS usando um proxy

Nesta parte do artigo de depuração e testes de segurança olhamos para interceptar tráfego de Firefox OS usando uma ferramenta de proxy, incluindo listas brancas certificado SSL do proxy para Firefox OS não se importa com alguém interceptar e re-criptografar a comunicação HTTPS. Se você usar o B2G Área de Trabalho, na primeira parte do tutorial sobre como instalá-lo e anexar o shell de depuração Marionette JavaScript é explicado em Debugging e segurança de testes com o Firefox OS.

Trabalhando com aplicativos que não são nada mais do que HTML e JavaScript, você vai descobrir que uma grande parte do trabalho realmente interessante envolve o uso de APIs que transferem dados através da Web. Isso significa que muitas vezes é útil olhar para as solicitações HTTP que esses aplicativos executam. Ferramentas de proxy como Burp e ZAP tem características úteis para o monitoramento desse tráfego. Elas fornecem os manifestos que contenham informações sobre como os clientes devem configurar, incluindo os certificados de raiz para instalar para a terminação TLS etc.

Combinado com o recurso do 'processo principal de debug Firefox OS' do app manager, eles permitem que você instale a cert raiz do seu proxy para o seu dispositivo executando algum código a partir de um rascunho.

Depurando o processo principal do Firefox OS

Então como você depura o processo principal no Firefox? Se você estiver usando o Firefox Simulator ou um dispositivo real, é possível depurar aplicativos certificados através da App Manager, definindo algumas prefs em seu perfil. Siga estes passos em primeiro lugar, em seguida, defina o devtools.chrome.enabled pref para true no about:config, antes de reiniciar o browser.

Em seguida, conecte o seu dispositivo / simulador usando o Gerenciador de App, em seguida, na tela do dispositivo, você verá um botão "PROCESSO PRINCIPAL DE DEBUG"; clique nele e você poderá depurar JSMS e executar JavaScript privilegiado no rascunho.

Nota: Cuidado com o que você executa contra o processo principal: você pode acidentalmente destruir o seu dispositivo!

Introduzindo ZAP

Primeiro, vamos continuar o processo usando ZAP. ZAP é um proxy interceptor que intercepta e criptografa novamente o tráfego HTTPS para facilitar a depuração. Clique no botão azul grande na ZAP homepage para baixá-lo. Se você optar por usar outro proxy sinta-se a vontade para fazê-lo, nossa abordagem deve funcionar com ambos.

Certificado ZAP

Agora, em qualquer proxy que você usar, deixe-o exportar seu certificado para um arquivo, como owasp_zap_root_ca.cer (vá em Ferramentas > Opções > Certificados SSL dinâmicos > Salvar). Quando ZAP inicia, ele gera um certificado válido durante um ano. Você também pode gerar um novo a partir da seção Certificados SSL dinâmico.

Proxy local

If you're using B2G desktop, you have to make sure that ZAP does not listen on localhost, but instead on your attributed IP address (ethernet or Wi-Fi). This is because B2G Desktop's localhost does not point to your desktop computer, but something within the b2g binary itself. For our example, we will use my IP address: 10.264.1.5.

Se você está trabalhando com um dispositivo real, você precisa ter certeza de que o seu telefone e o seu computador estão conectados à mesma rede / VLAN e podem se comunicar entre si (se você tiver uma dúvida, tente fazer o ping do IP de um dispositivo de o outro).

Conectando seu dispositivo ao proxy

Você pode extrair as prefs do seu dispositivo, mudá-los para adicionar as preferências de proxy relevantes, colocá-los de volta.

You can pull the default prefs from your device, change them to add the relevant proxy prefs, put them back.

Ou, você pode configurar a sua ferramenta para proxy HTTP and HTTPS transparente em seguida, configurar iptables no seu dispositivo para apontar para o proxy. Por exemplo, para fazer tráfego de HTTPS passar por sua ferramenta de proxy:

adb shell iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 192.168.0.14:8443

E, para redefini-la quando estiver pronto:

adb shell iptables -t nat -F

Configurando um proxy LAN

Se você está perceber que está fazendo muito esse tipo de atividade, há um caminho que é ainda mais conveniente; configurar um teste LAN onde todo o tráfego é aproximado por padrão. Dessa forma, você poderá transformar o proxy e desligar apenas mudando o que wireless LAN que você está conectado.

Nós construímos um usando um raspberry pi e passos semelhantes a estes. Mudamos as regras do iptables para ficar assim:

*filter
:INPUT ACCEPT [49:3128]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [37:3924]
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [1:72]
:INPUT ACCEPT [1:72]
:OUTPUT ACCEPT [1:148]
-A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j DNAT --to-destination <proxy_host>:<http_port>
-A PREROUTING -i wlan0 -p tcp -m tcp --dport 443 -j DNAT --to-destination <proxy_host>:<https_port>
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

Criando um banco de dados certificado

O ato de aceitar certificados acontece em configurações, que são armazenadas nos perfis. Aqui está uma pequena cartilha sobre perfis do Firefox:

  1. Inicie o gerenciador de perfil do Firefox usando a opção -P na linha de comando, e certifique-se de que o Firefox não esteja usando todas as sessões do Firefox existentes (-no-remote):
    • No Linux, você precisa dar o seguinte comando:
      firefox -P -no-remote
    • No Mac OS X:
      /Applications/Firefox.app/Contents/MacOS/firefox -P -no-remote
  2. Agora crie um novo perfil chamado "zapped". Vá para as configurações de certificado - Editar > Preferências > Avançado > Criptografia > Exibir Certificados > Importar. Agora selecione o arquivo owasp_zap_root_ca.cer criado por seu proxy e diga ao Firefox que ele deve confiar neste CA para identificar sites (isto é realmente válido apenas para este perfil).
  3. Após utilizar o Firefox para criar um banco de dados certificado para nós, agora podemos usar esse banco de dados para o nosso perfil B2G. O nome do diretório do perfil do Firefox é uma seqüência aleatória que termina com zapped. A localização depende do seu sistema operacional; veja  Diretórios Runtime para obter detalhes sobre onde ele pode ser encontrado.
  4. Para B2G desktop, precisamos apenas do arquivo cert8.db, que é a base de dados certificados do perfil. Copie-o para o seu perfil B2G diretório b2g/gaia/profile/.
  5. Em um dispositivo, copie o cert9.db em seu diretório de perfil do dispositivo:
    $ adb shell stop b2g
    $ adb push cert9.db /data/b2g/mozilla/*.default

Nota: Isto irá substituir o arquivo existente.

Configurando B2G

O próximo passo é definir ZAP como o proxy padrão para toda a comunicação de rede. As configurações de proxy, como as definições do certificado, não estão atualmente disponíveis a partir da interface do usuário Firefox OS.

Em B2G desktop

Você precisa anexar essas configurações personalizadas para o arquivo de preferências, b2g/gaia/profile/prefs.js:

user_pref("network.proxy.backup.ftp", "10.264.1.5");
user_pref("network.proxy.backup.ftp_port", 8080);
user_pref("network.proxy.backup.socks", "10.264.1.5");
user_pref("network.proxy.backup.socks_port", 8080);
user_pref("network.proxy.backup.ssl", "10.264.1.5");
user_pref("network.proxy.backup.ssl_port", 8080);
user_pref("network.proxy.ftp", "10.264.1.5");
user_pref("network.proxy.ftp_port", 8080);
user_pref("network.proxy.http", "10.264.1.5");
user_pref("network.proxy.http_port", 8080);
user_pref("network.proxy.no_proxies_on", "");
user_pref("network.proxy.share_proxy_settings", true);
user_pref("network.proxy.socks", "10.264.1.5");
user_pref("network.proxy.socks_port", 8080);
user_pref("network.proxy.ssl", "10.264.1.5");
user_pref("network.proxy.ssl_port", 8080);
user_pref("network.proxy.type", 1);

Nota: Lembre-se de substituir o meu endereço IP 10.264.1.5 pelo seu, e se o seu proxy não escuta na porta 8080, certifique-se de alterá-lo neste arquivo também.

Neste momento, você já deverá estar pronto! Inicie o B2G Desktop novamente, e tente alguma navegação. O tráfego de rede deverá aparecer na ZAP.

Em um dispositivo

Para habilitar essa funcionalidade em um dispositivo, você precisará modificar o arquivo  prefs.js file localizado no seu perfil do seu dispositivo. Conecte o dispositivo ao computador que tenha sido previamente configurado com as ferramentas EDA.

Primeiro, você precisa saber qual é o nome do seu diretório de perfil. Você pode encontrá-lo assim:

adb shell ls /data/b2g/mozilla

Entre a saída, você verá um diretório chamado com uma série de letras e números aleatórios que terminam em ".default". Este é o seu diretório de perfil. Use este nome, onde você vê "xxxxxxxx" daqui em diante.

Em seguida, pegue o arquivo prefs.js para que você possa editá-lo:

adb pull /data/b2g/mozilla/xxxxxxx.default/prefs.js

Abra o arquivo resultante em seu editor de texto favorito; no final do arquivo, adicione as configurações personalizadas indicadas na seção acima e salve as alterações. Agora tudo que você precisa fazer é empurrar o arquivo alterado de volta para o dispositivo e reiniciar o processo de B2G para pegar as alterações, como segue (o processo B2G já deve ser interrompido se você seguiu as instruções anteriores para empurrar cert9.db):

adb push pref.js /data/b2g/mozilla/xxxxxxxx.default
adb shell start b2g

Charles Proxy

Usuários que desejam usar Charles Proxy deverão ver este post: https://muffinresearch.co.uk/proxying-connections-from-ffos/

 

Etiquetas do documento e colaboradores

 Colaboradores desta página: chrisdavidmills, jwhitlock, PriscillaAlcalde
 Última atualização por: chrisdavidmills,