.. | ||
drozer-tutorial | ||
frida-tutorial | ||
adb-commands.md | ||
android-applications-basics.md | ||
android-burp-suite-settings.md | ||
android-task-hijacking.md | ||
apk-decompilers.md | ||
avd-android-virtual-device.md | ||
bypass-biometric-authentication-android.md | ||
content-protocol.md | ||
exploiting-a-debuggeable-applciation.md | ||
google-ctf-2018-shall-we-play-a-game.md | ||
inspeckage-tutorial.md | ||
install-burp-certificate.md | ||
intent-injection.md | ||
make-apk-accept-ca-certificate.md | ||
manual-deobfuscation.md | ||
react-native-application.md | ||
README.md | ||
reversing-native-libraries.md | ||
smali-changes.md | ||
spoofing-your-location-in-play-store.md | ||
tapjacking.md | ||
webview-attacks.md |
Teste de Penetração em Aplicativos Android
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Junte-se ao servidor HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Percepções de Hacking
Envolver-se com conteúdo que mergulha na emoção e desafios do hacking
Notícias de Hacking em Tempo Real
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
Últimos Anúncios
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Conceitos Básicos de Aplicativos Android
É altamente recomendável começar lendo esta página para saber sobre as partes mais importantes relacionadas à segurança do Android e os componentes mais perigosos em um aplicativo Android:
{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}
ADB (Android Debug Bridge)
Esta é a principal ferramenta que você precisa para se conectar a um dispositivo Android (emulado ou físico).
ADB permite controlar dispositivos via USB ou Rede a partir de um computador. Esta utilidade permite a cópia de arquivos em ambas as direções, instalação e desinstalação de aplicativos, execução de comandos de shell, backup de dados, leitura de logs, entre outras funções.
Dê uma olhada na seguinte lista de Comandos ADB para aprender como usar o adb.
Smali
Às vezes é interessante modificar o código do aplicativo para acessar informações ocultas (talvez senhas bem ofuscadas ou flags). Então, pode ser interessante descompilar o apk, modificar o código e recompilá-lo.
Neste tutorial você pode aprender como descompilar um APK, modificar o código Smali e recompilar o APK com a nova funcionalidade. Isso pode ser muito útil como uma alternativa para vários testes durante a análise dinâmica que serão apresentados. Então, sempre tenha em mente essa possibilidade.
Outros truques interessantes
- Falsificar sua localização na Play Store
- Baixar APKs: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/
- Extrair APK do dispositivo:
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
Análise Estática
Primeiramente, para analisar um APK você deve dar uma olhada no código Java usando um decompilador.
Por favor, leia aqui para encontrar informações sobre diferentes decompiladores disponíveis.
Procurando por Informações Interessantes
Apenas olhando para as strings do APK você pode procurar por senhas, URLs (https://github.com/ndelphit/apkurlgrep), chaves de API, criptografia, UUIDs de bluetooth, tokens e qualquer coisa interessante... procure até por backdoors de execução de código ou backdoors de autenticação (credenciais de administrador codificadas no aplicativo).
Firebase
Preste atenção especial às URLs do firebase e verifique se estão mal configuradas. Mais informações sobre o que é o Firebase e como explorá-lo aqui.
Compreensão básica da aplicação - Manifest.xml, strings.xml
A análise dos arquivos Manifest.xml e strings.xml de uma aplicação pode revelar vulnerabilidades de segurança potenciais. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e descompactando-o.
Vulnerabilidades identificadas no Manifest.xml incluem:
- Aplicativos Debugáveis: Aplicativos definidos como debugáveis (
debuggable="true"
) no arquivo Manifest.xml representam um risco, pois permitem conexões que podem levar à exploração. Para entender melhor como explorar aplicativos debugáveis, consulte um tutorial sobre como encontrar e explorar aplicativos debugáveis em um dispositivo. - Configurações de Backup: O atributo
android:allowBackup="false"
deve ser definido explicitamente para aplicativos que lidam com informações sensíveis para evitar backups não autorizados via adb, especialmente quando a depuração USB está ativada. - Segurança de Rede: Configurações personalizadas de segurança de rede (
android:networkSecurityConfig="@xml/network_security_config"
) em res/xml/ podem especificar detalhes de segurança como pins de certificado e configurações de tráfego HTTP. Um exemplo é permitir tráfego HTTP para domínios específicos. - Atividades e Serviços Exportados: Identificar atividades e serviços exportados no manifesto pode destacar componentes que podem ser mal utilizados. Uma análise adicional durante os testes dinâmicos pode revelar como explorar esses componentes.
- Provedores de Conteúdo e FileProviders: Provedores de conteúdo expostos podem permitir acesso ou modificação não autorizados de dados. A configuração dos FileProviders também deve ser examinada.
- Receptores de Broadcast e Esquemas de URL: Esses componentes podem ser aproveitados para exploração, com atenção especial à forma como os esquemas de URL são gerenciados para vulnerabilidades de entrada.
- Versões do SDK: Os atributos
minSdkVersion
,targetSDKVersion
emaxSdkVersion
indicam as versões do Android suportadas, destacando a importância de não suportar versões desatualizadas e vulneráveis do Android por motivos de segurança.
Do arquivo strings.xml, informações sensíveis como chaves de API, esquemas personalizados e outras notas de desenvolvedor podem ser descobertas, destacando a necessidade de uma revisão cuidadosa desses recursos.
Tapjacking
Tapjacking é um ataque onde um aplicativo malicioso é lançado e se posiciona sobre um aplicativo vítima. Uma vez que ele obscurece visualmente o aplicativo vítima, sua interface de usuário é projetada de forma a enganar o usuário para interagir com ele, enquanto passa a interação para o aplicativo vítima.
Na prática, ele impede o usuário de saber que está realmente realizando ações no aplicativo vítima.
Encontre mais informações em:
{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}
Sequestro de Tarefas
Uma atividade com o launchMode
definido como singleTask
sem taskAffinity
definido é vulnerável ao sequestro de tarefas. Isso significa que um aplicativo pode ser instalado e, se lançado antes do aplicativo real, pode sequestrar a tarefa do aplicativo real (então o usuário estará interagindo com o aplicativo malicioso pensando que está usando o real).
Mais informações em:
{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}
Armazenamento de Dados Inseguro
Armazenamento Interno
No Android, arquivos armazenados no armazenamento interno são projetados para serem acessíveis exclusivamente pelo aplicativo que os criou. Essa medida de segurança é imposta pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria dos aplicativos. No entanto, os desenvolvedores às vezes utilizam modos como MODE_WORLD_READABLE
e MODE_WORLD_WRITABLE
para permitir que arquivos sejam compartilhados entre diferentes aplicativos. No entanto, esses modos não restringem o acesso a esses arquivos por outros aplicativos, incluindo possivelmente maliciosos.
- Análise Estática:
- Garanta que o uso de
MODE_WORLD_READABLE
eMODE_WORLD_WRITABLE
seja cuidadosamente examinado. Esses modos podem potencialmente expor arquivos a acessos não intencionais ou não autorizados.
- Análise Dinâmica:
- Verifique as permissões definidas nos arquivos criados pelo aplicativo. Especificamente, verifique se algum arquivo está configurado para ser legível ou gravável globalmente. Isso pode representar um risco significativo à segurança, pois permitiria que qualquer aplicativo instalado no dispositivo, independentemente de sua origem ou intenção, leia ou modifique esses arquivos.
Armazenamento Externo
Ao lidar com arquivos no armazenamento externo, como cartões SD, certas precauções devem ser tomadas:
- Acessibilidade:
- Arquivos no armazenamento externo são globalmente legíveis e graváveis. Isso significa que qualquer aplicativo ou usuário pode acessar esses arquivos.
- Preocupações de Segurança:
- Dada a facilidade de acesso, é aconselhável não armazenar informações sensíveis no armazenamento externo.
- O armazenamento externo pode ser removido ou acessado por qualquer aplicativo, tornando-o menos seguro.
- Manuseio de Dados do Armazenamento Externo:
- Sempre realize validação de entrada nos dados recuperados do armazenamento externo. Isso é crucial porque os dados são de uma fonte não confiável.
- Armazenar executáveis ou arquivos de classe no armazenamento externo para carregamento dinâmico é fortemente desencorajado.
- Se seu aplicativo precisar recuperar arquivos executáveis do armazenamento externo, garanta que esses arquivos sejam assinados e verificados criptograficamente antes de serem carregados dinamicamente. Este passo é vital para manter a integridade de segurança do seu aplicativo.
O armazenamento externo pode ser acessado em /storage/emulated/0
, /sdcard
, /mnt/sdcard
{% hint style="info" %} A partir do Android 4.4 (API 17), o cartão SD possui uma estrutura de diretório que limita o acesso de um aplicativo ao diretório especificamente para esse aplicativo. Isso impede que aplicativos maliciosos obtenham acesso de leitura ou gravação aos arquivos de outro aplicativo. {% endhint %}
Dados sensíveis armazenados em texto claro
- Preferências compartilhadas: O Android permite que cada aplicativo salve facilmente arquivos xml no caminho
/data/data/<nomedopacote>/shared_prefs/
e às vezes é possível encontrar informações sensíveis em texto claro nessa pasta. - Bancos de Dados: O Android permite que cada aplicativo salve bancos de dados sqlite facilmente no caminho
/data/data/<nomedopacote>/databases/
e às vezes é possível encontrar informações sensíveis em texto claro nessa pasta.
TLS Quebrado
Aceitar Todos os Certificados
Por algum motivo, às vezes os desenvolvedores aceitam todos os certificados, mesmo que, por exemplo, o nome do host não corresponda com linhas de código como a seguinte:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Criptografia Quebrada
Processos de Gerenciamento de Chave Fracos
Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os criptografam com uma chave codificada/previsível no código. Isso não deve ser feito, pois a reversão pode permitir que os atacantes extraiam as informações confidenciais.
Uso de Algoritmos Inseguros e/ou Obsoletos
Os desenvolvedores não devem usar algoritmos obsoletos para realizar verificações de autorização, armazenar ou enviar dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se hashes forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com salt.
Outras Verificações
- É recomendado ofuscar o APK para dificultar o trabalho de engenharia reversa para os atacantes.
- Se o aplicativo for sensível (como aplicativos bancários), ele deve realizar suas próprias verificações para ver se o dispositivo móvel está rooteado e agir em conformidade.
- Se o aplicativo for sensível (como aplicativos bancários), ele deve verificar se um emulador está sendo usado.
- Se o aplicativo for sensível (como aplicativos bancários), ele deve verificar sua própria integridade antes de executá-lo para verificar se foi modificado.
- Use APKiD para verificar qual compilador/packer/ofuscador foi usado para construir o APK.
Aplicativo React Native
Leia a seguinte página para aprender como acessar facilmente o código JavaScript de aplicativos React:
{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}
Aplicativos Xamarin
Leia a seguinte página para aprender como acessar facilmente o código C# de aplicativos Xamarin:
{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}
Aplicativos Supercompactados
De acordo com este post de blog, supercompactado é um algoritmo Meta que comprime o conteúdo de um aplicativo em um único arquivo. O blog fala sobre a possibilidade de criar um aplicativo que descomprima esse tipo de aplicativo... e uma maneira mais rápida que envolve executar o aplicativo e reunir os arquivos descompactados do sistema de arquivos.
Análise Estática Automatizada de Código
A ferramenta mariana-trench é capaz de encontrar vulnerabilidades escaneando o código do aplicativo. Esta ferramenta contém uma série de fontes conhecidas (que indicam à ferramenta os locais onde a entrada é controlada pelo usuário), sinks (que indicam à ferramenta locais perigosos onde a entrada maliciosa do usuário poderia causar danos) e regras. Essas regras indicam a combinação de fontes-sinks que indicam uma vulnerabilidade.
Com esse conhecimento, mariana-trench revisará o código e encontrará possíveis vulnerabilidades nele.
Segredos Vazados
Um aplicativo pode conter segredos (chaves de API, senhas, URLs ocultas, subdomínios...) que você pode descobrir. Você pode usar uma ferramenta como https://github.com/dwisiswant0/apkleaks
Bypass na Autenticação Biométrica
{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}
Outras funções interessantes
- Execução de Código:
Runtime.exec(), ProcessBuilder(), código nativo:system()
- Enviar SMS:
sendTextMessage, sendMultipartTestMessage
- Funções nativas declaradas como
native
:public native, System.loadLibrary, System.load
- Leia isso para aprender como reverter funções nativas
Outros truques
{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}
Junte-se ao servidor HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Percepções de Hacking
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
Notícias de Hacking em Tempo Real
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e insights em tempo real
Últimos Anúncios
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Análise Dinâmica
Primeiramente, você precisa de um ambiente onde possa instalar o aplicativo e todo o ambiente (certificado Burp CA, Drozer e Frida principalmente). Portanto, um dispositivo rooteado (emulado ou não) é extremamente recomendado.
Análise Dinâmica Online
Você pode criar uma conta gratuita em: https://appetize.io/. Esta plataforma permite que você faça upload e execute APKs, sendo útil para ver como um APK está se comportando.
Você pode até ver os logs do seu aplicativo na web e conectar-se por meio de adb.
Graças à conexão ADB, você pode usar Drozer e Frida dentro dos emuladores.
Análise Dinâmica Local
Usando um emulador
- Android Studio (Você pode criar dispositivos x86 e arm, e de acordo com este último x86 versões suportam bibliotecas ARM sem precisar de um emulador ARM lento).
- Aprenda a configurá-lo nesta página:
{% content-ref url="avd-android-virtual-device.md" %} avd-android-virtual-device.md {% endcontent-ref %}
- Genymotion (Versão gratuita: Personal Edition, você precisa criar uma conta. É recomendado baixar a versão COM VirtualBox para evitar erros potenciais.)
- Nox (Gratuito, mas não suporta Frida ou Drozer).
{% hint style="info" %} Ao criar um novo emulador em qualquer plataforma, lembre-se de que quanto maior a tela, mais lento o emulador funcionará. Portanto, selecione telas pequenas, se possível. {% endhint %}
Para instalar serviços do Google (como a Play Store) no Genymotion, você precisa clicar no botão marcado de vermelho na seguinte imagem:
Além disso, observe que na configuração da VM Android no Genymotion você pode selecionar o modo Bridge Network (isso será útil se você for conectar-se à VM Android de uma VM diferente com as ferramentas).
Usar um dispositivo físico
Você precisa ativar as opções de depuração e será legal se você puder fazer root nele:
- Configurações.
- (A partir do Android 8.0) Selecione Sistema.
- Selecione Sobre o telefone.
- Pressione Número da compilação 7 vezes.
- Volte e você encontrará as Opções do desenvolvedor.
Depois de instalar o aplicativo, a primeira coisa que você deve fazer é testá-lo e investigar o que ele faz, como funciona e se familiarizar com ele.
Eu sugiro realizar essa análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat, para que possamos aprender como o aplicativo funciona enquanto o MobSF captura muitos dados interessantes que você pode revisar posteriormente.
Vazamento de Dados Não Intencional
Registro
Os desenvolvedores devem ter cuidado ao expor informações de depuração publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas pidcat e adb logcat
são recomendadas para monitorar os logs do aplicativo a fim de identificar e proteger informações sensíveis. Pidcat é preferido por sua facilidade de uso e legibilidade.
{% hint style="warning" %}
Observe que a partir do Android mais recente que o 4.0, os aplicativos só podem acessar seus próprios logs. Portanto, os aplicativos não podem acessar os logs de outros aplicativos.
De qualquer forma, ainda é recomendável não registrar informações sensíveis.
{% endhint %}
Armazenamento em Cache de Copiar/Colar
O framework baseado em área de transferência do Android permite funcionalidades de copiar e colar em aplicativos, mas representa um risco, pois outros aplicativos podem acessar a área de transferência, expondo potencialmente dados sensíveis. É crucial desativar as funções de copiar/colar para seções sensíveis de um aplicativo, como detalhes de cartão de crédito, para evitar vazamentos de dados.
Logs de Falhas
Se um aplicativo falhar e salvar logs, esses logs podem ajudar os atacantes, especialmente quando o aplicativo não pode ser engenhado reversamente. Para mitigar esse risco, evite registrar em falhas e, se os logs precisarem ser transmitidos pela rede, garanta que sejam enviados por meio de um canal SSL para segurança.
Como pentester, tente dar uma olhada nesses logs.
Dados Analíticos Enviados a Terceiros
Os aplicativos frequentemente integram serviços como Google Adsense, que podem inadvertidamente vazar dados sensíveis devido a uma implementação inadequada pelos desenvolvedores. Para identificar possíveis vazamentos de dados, é aconselhável interceptar o tráfego do aplicativo e verificar se há algum envio de informações sensíveis para serviços de terceiros.
Bancos de Dados SQLite
A maioria dos aplicativos usará bancos de dados SQLite internos para salvar informações. Durante o pentest, dê uma olhada nos bancos de dados criados, nos nomes das tabelas e colunas e em todos os dados salvos, pois você pode encontrar informações sensíveis (o que seria uma vulnerabilidade).
Os bancos de dados devem estar localizados em /data/data/o.nome.do.pacote/databases
como /data/data/com.mwr.example.sieve/databases
Se o banco de dados estiver salvando informações confidenciais e estiver criptografado, mas você pode encontrar a senha dentro do aplicativo, ainda é uma vulnerabilidade.
Enumere as tabelas usando .tables
e enumere as colunas das tabelas fazendo .schema <nome_da_tabela>
Drozer (Atividades de Exploração, Provedores de Conteúdo e Serviços)
Do Drozer Docs: Drozer permite que você assuma o papel de um aplicativo Android e interaja com outros aplicativos. Ele pode fazer qualquer coisa que um aplicativo instalado possa fazer, como fazer uso do mecanismo de Comunicação entre Processos (IPC) do Android e interagir com o sistema operacional subjacente.
Drozer é uma ferramenta útil para explorar atividades exportadas, serviços exportados e Provedores de Conteúdo, como você aprenderá nas seções a seguir.
Explorando Atividades Exportadas
Leia isso se quiser relembrar o que é uma Atividade Android.
Lembre-se também de que o código de uma atividade começa no método onCreate
.
Burla de Autorização
Quando uma Atividade é exportada, você pode invocar sua tela de um aplicativo externo. Portanto, se uma atividade com informações sensíveis for exportada, você poderia burlar os mecanismos de autenticação para acessá-la.
Aprenda como explorar atividades exportadas com o Drozer.
Você também pode iniciar uma atividade exportada a partir do adb:
- Nome do Pacote é com.example.demo
- Nome da Atividade Exportada é com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
NOTA: O MobSF detectará como malicioso o uso de singleTask/singleInstance como android:launchMode
em uma atividade, mas devido a este, aparentemente isso é perigoso apenas em versões antigas (versões de API < 21).
{% hint style="info" %} Note que uma violação de autorização nem sempre é uma vulnerabilidade, isso dependerá de como a violação funciona e quais informações são expostas. {% endhint %}
Vazamento de informações sensíveis
As atividades também podem retornar resultados. Se você conseguir encontrar uma atividade exportada e desprotegida chamando o método setResult
e retornando informações sensíveis, há um vazamento de informações sensíveis.
Tapjacking
Se o tapjacking não for prevenido, você poderia abusar da atividade exportada para fazer o usuário realizar ações inesperadas. Para mais informações sobre o que é Tapjacking, siga o link.
Explorando Provedores de Conteúdo - Acessando e manipulando informações sensíveis
Leia isso se quiser relembrar o que é um Provedor de Conteúdo.
Os provedores de conteúdo são basicamente usados para compartilhar dados. Se um aplicativo tiver provedores de conteúdo disponíveis, você pode ser capaz de extrair dados sensíveis deles. Também é interessante testar possíveis injeções de SQL e travessias de caminho pois eles podem ser vulneráveis.
Aprenda como explorar Provedores de Conteúdo com o Drozer.
Explorando Serviços
Leia isso se quiser relembrar o que é um Serviço.
Lembre-se que as ações de um Serviço começam no método onStartCommand
.
Um serviço é basicamente algo que pode receber dados, processá-los e retornar (ou não) uma resposta. Então, se um aplicativo estiver exportando alguns serviços, você deve verificar o código para entender o que ele está fazendo e testá-lo dinamicamente para extrair informações confidenciais, burlar medidas de autenticação...
Aprenda como explorar Serviços com o Drozer.
Explorando Receptores de Transmissão
Leia isso se quiser relembrar o que é um Receptor de Transmissão.
Lembre-se que as ações de um Receptor de Transmissão começam no método onReceive
.
Um receptor de transmissão estará aguardando por um tipo de mensagem. Dependendo de como o receptor lida com a mensagem, ele pode ser vulnerável.
Aprenda como explorar Receptores de Transmissão com o Drozer.
Explorando Esquemas / Links Profundos
Você pode procurar links profundos manualmente, usando ferramentas como o MobSF ou scripts como este.
Você pode abrir um esquema declarado usando adb ou um navegador:
{% code overflow="wrap" %}
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
{% endcode %}
Obs: você pode omitir o nome do pacote e o celular automaticamente chamará o aplicativo que deve abrir o link.
{% code overflow="wrap" %}
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
{% endcode %}
Código executado
Para encontrar o código que será executado no aplicativo, vá para a atividade chamada pelo deeplink e procure a função onNewIntent
.
Informações sensíveis
Sempre que encontrar um deep link, verifique se não está recebendo dados sensíveis (como senhas) por meio de parâmetros de URL, pois qualquer outro aplicativo poderia fingir ser o deep link e roubar esses dados!
Parâmetros no caminho
Você também deve verificar se algum deep link está usando um parâmetro dentro do caminho do URL, como: https://api.example.com/v1/users/{username}
, nesse caso você pode forçar uma travessia de caminho acessando algo como: example://app/users?username=../../unwanted-endpoint%3fparam=value
.
Observe que se você encontrar os endpoints corretos dentro do aplicativo, poderá causar um Redirecionamento Aberto (se parte do caminho for usada como nome de domínio), assumir o controle da conta (se puder modificar detalhes de usuários sem token CSRF e o endpoint vulnerável usar o método correto) e qualquer outra vulnerabilidade. Mais informações sobre isso aqui.
Mais exemplos
Um relatório interessante de recompensa por bugs sobre links (/.well-known/assetlinks.json).
Inspeção da Camada de Transporte e Falhas de Verificação
- Certificados nem sempre são inspecionados corretamente por aplicativos Android. É comum esses aplicativos ignorarem avisos e aceitarem certificados autoassinados ou, em alguns casos, voltarem a usar conexões HTTP.
- Negociações durante o handshake SSL/TLS às vezes são fracas, empregando conjuntos de cifras inseguros. Essa vulnerabilidade torna a conexão suscetível a ataques do tipo homem-no-meio (MITM), permitindo que invasores descriptografem os dados.
- Vazamento de informações privadas é um risco quando aplicativos autenticam usando canais seguros, mas depois comunicam-se por canais não seguros para outras transações. Essa abordagem falha em proteger dados sensíveis, como cookies de sessão ou detalhes do usuário, de interceptação por entidades maliciosas.
Verificação de Certificado
Vamos focar na verificação de certificado. A integridade do certificado do servidor deve ser verificada para aumentar a segurança. Isso é crucial porque configurações TLS inseguras e a transmissão de dados sensíveis por canais não criptografados podem representar riscos significativos. Para etapas detalhadas sobre a verificação de certificados de servidor e abordagem de vulnerabilidades, este recurso fornece orientações abrangentes.
SSL Pinning
SSL Pinning é uma medida de segurança em que o aplicativo verifica o certificado do servidor em relação a uma cópia conhecida armazenada dentro do próprio aplicativo. Este método é essencial para prevenir ataques MITM. Implementar o SSL Pinning é altamente recomendado para aplicativos que lidam com informações sensíveis.
Inspeção de Tráfego
Para inspecionar o tráfego HTTP, é necessário instalar o certificado da ferramenta de proxy (por exemplo, Burp). Sem instalar este certificado, o tráfego criptografado pode não ser visível através do proxy. Para um guia sobre como instalar um certificado CA personalizado, clique aqui.
Aplicativos direcionados ao Nível de API 24 e acima requerem modificações na Configuração de Segurança de Rede para aceitar o certificado CA do proxy. Este passo é crucial para inspecionar o tráfego criptografado. Para instruções sobre como modificar a Configuração de Segurança de Rede, consulte este tutorial.
Bypass do SSL Pinning
Quando o SSL Pinning é implementado, torna-se necessário contorná-lo para inspecionar o tráfego HTTPS. Vários métodos estão disponíveis para esse fim:
- Modificar automaticamente o apk para burlar o SSLPinning com apk-mitm. A maior vantagem dessa opção é que você não precisará de acesso root para burlar o SSL Pinning, mas precisará excluir o aplicativo e reinstalar o novo, e isso nem sempre funcionará.
- Você pode usar o Frida (discutido abaixo) para burlar essa proteção. Aqui está um guia para usar Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
- Você também pode tentar burlar automaticamente o SSL Pinning usando objection:
objection --gadget com.package.app explore --startup-command "android sslpinning disable"
- Você também pode tentar burlar automaticamente o SSL Pinning usando análise dinâmica do MobSF (explicado abaixo)
- Se você achar que ainda há tráfego que não está capturando, pode tentar encaminhar o tráfego para o burp usando iptables. Leia este blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
Procurando por Vulnerabilidades Comuns na Web
Também é importante procurar por vulnerabilidades comuns na web dentro do aplicativo. Informações detalhadas sobre a identificação e mitigação dessas vulnerabilidades estão além do escopo deste resumo, mas são extensamente abordadas em outros lugares.
Frida
Frida é um kit de ferramentas de instrumentação dinâmica para desenvolvedores, engenheiros reversos e pesquisadores de segurança.
Você pode acessar o aplicativo em execução e enganchar métodos em tempo de execução para alterar o comportamento, alterar valores, extrair valores, executar código diferente...
Se você deseja fazer pentest em aplicativos Android, precisa saber como usar o Frida.
- Aprenda a usar o Frida: Tutorial do Frida
- Algum "GUI" para ações com o Frida: https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- Ojection é ótimo para automatizar o uso do Frida: https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- Você pode encontrar alguns scripts incríveis do Frida aqui: https://codeshare.frida.re/
- Tente burlar mecanismos anti-depuração / anti-Frida carregando o Frida conforme indicado em https://erfur.github.io/blog/dev/code-injection-without-ptrace (ferramenta linjector)
Despejo de Memória - Fridump
Verifique se o aplicativo está armazenando informações sensíveis na memória que não deveria, como senhas ou mnemônicos.
Usando Fridump3 você pode despejar a memória do aplicativo com:
# With PID
python3 fridump3.py -u <PID>
# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"
Isso irá despejar a memória na pasta ./dump e lá você poderá usar o grep com algo como:
{% code overflow="wrap" %}
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
{% endcode %}
Dados sensíveis no Keystore
No Android, o Keystore é o melhor lugar para armazenar dados sensíveis, no entanto, com privilégios suficientes ainda é possível acessá-lo. Como os aplicativos tendem a armazenar aqui dados sensíveis em texto claro, os testes de penetração devem verificar isso, pois um usuário root ou alguém com acesso físico ao dispositivo pode ser capaz de roubar esses dados.
Mesmo que um aplicativo armazene dados no keystore, os dados devem ser criptografados.
Para acessar os dados dentro do keystore, você pode usar este script Frida: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
Bypass de Impressão Digital/Biometria
Usando o seguinte script do Frida, poderia ser possível burlar a autenticação por impressão digital que aplicativos Android podem estar realizando para proteger áreas sensíveis específicas:
{% code overflow="wrap" %}
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
{% endcode %}
Imagens de Fundo
Quando você coloca um aplicativo em segundo plano, o Android armazena um instantâneo do aplicativo para que, quando ele for recuperado para o primeiro plano, comece a carregar a imagem antes do aplicativo, para que pareça que o aplicativo foi carregado mais rapidamente.
No entanto, se esse instantâneo contiver informações sensíveis, alguém com acesso ao instantâneo pode roubar essas informações (observe que é necessário ter acesso root para acessá-lo).
Os instantâneos geralmente são armazenados em: /data/system_ce/0/snapshots
O Android fornece uma maneira de prevenir a captura de tela definindo o FLAG_SECURE como parâmetro de layout. Ao usar essa bandeira, o conteúdo da janela é tratado como seguro, impedindo que ele apareça em capturas de tela ou seja visualizado em displays não seguros.
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Analisador de Aplicativos Android
Esta ferramenta pode ajudá-lo a gerenciar diferentes ferramentas durante a análise dinâmica: https://github.com/NotSoSecure/android_application_analyzer
Injeção de Intenção
Os desenvolvedores frequentemente criam componentes de proxy como atividades, serviços e receptores de transmissão que lidam com essas Intenções e as passam para métodos como startActivity(...)
ou sendBroadcast(...)
, o que pode ser arriscado.
O perigo está em permitir que atacantes acionem componentes de aplicativos não exportados ou acessem provedores de conteúdo sensíveis ao desviar essas Intenções. Um exemplo notável é o componente WebView
convertendo URLs em objetos Intent
via Intent.parseUri(...)
e então executando-os, potencialmente levando a injeções maliciosas de Intenção.
Pontos Essenciais
- Injeção de Intenção é semelhante ao problema de Redirecionamento Aberto na web.
- As explorações envolvem passar objetos
Intent
como extras, que podem ser redirecionados para executar operações inseguras. - Pode expor componentes não exportados e provedores de conteúdo a atacantes.
- A conversão de URL para
Intent
doWebView
pode facilitar ações não intencionais.
Injeções no Lado do Cliente Android e outros
Provavelmente você conhece esse tipo de vulnerabilidades da Web. Você deve ter cuidado especial com essas vulnerabilidades em um aplicativo Android:
- Injeção de SQL: Ao lidar com consultas dinâmicas ou Provedores de Conteúdo, certifique-se de estar usando consultas parametrizadas.
- Injeção de JavaScript (XSS): Verifique se o suporte a JavaScript e Plugins está desativado para quaisquer WebViews (desativado por padrão). Mais informações aqui.
- Inclusão de Arquivo Local: WebViews devem ter acesso ao sistema de arquivos desativado (ativado por padrão) -
(webview.getSettings().setAllowFileAccess(false);)
. Mais informações aqui. - Cookies eternos: Em vários casos, quando o aplicativo Android encerra a sessão, o cookie não é revogado ou pode até ser salvo no disco.
- Flag Segura em cookies
Junte-se ao servidor HackenProof Discord para se comunicar com hackers experientes e caçadores de recompensas por bugs!
Percepções de Hacking
Interaja com conteúdo que explora a emoção e os desafios do hacking
Notícias de Hacking em Tempo Real
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
Últimos Anúncios
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Análise Automática
MobSF
Análise estática
Avaliação de vulnerabilidades do aplicativo usando uma agradável interface web. Você também pode realizar análises dinâmicas (mas precisa preparar o ambiente).
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Observe que o MobSF pode analisar aplicativos Android(apk), IOS(ipa) e Windows(apx) (os aplicativos do Windows devem ser analisados a partir de um MobSF instalado em um host Windows).
Além disso, se você criar um arquivo ZIP com o código-fonte de um aplicativo Android ou IOS (vá até a pasta raiz do aplicativo, selecione tudo e crie um arquivo ZIP), o MobSF também poderá analisá-lo.
O MobSF também permite que você faça a diferença/comparação de análises e integre o VirusTotal (você precisará configurar sua chave de API em MobSF/settings.py e habilitá-la: VT_ENABLED = TRUE
VT_API_KEY = <Sua chave de API>
VT_UPLOAD = TRUE
). Você também pode definir VT_UPLOAD
como False
, então o hash será enviado em vez do arquivo.
Análise Dinâmica Assistida com o MobSF
O MobSF também pode ser muito útil para análise dinâmica no Android, mas nesse caso você precisará instalar o MobSF e o genymotion em seu host (uma VM ou Docker não funcionará). Nota: Você precisa iniciar primeiro uma VM no genymotion e depois o MobSF.
O analisador dinâmico do MobSF pode:
- Extrair dados do aplicativo (URLs, logs, área de transferência, capturas de tela feitas por você, capturas de tela feitas pelo "Exported Activity Tester", e-mails, bancos de dados SQLite, arquivos XML e outros arquivos criados). Tudo isso é feito automaticamente, exceto pelas capturas de tela, você precisa pressionar quando desejar uma captura de tela ou pressionar "Exported Activity Tester" para obter capturas de tela de todas as atividades exportadas.
- Capturar tráfego HTTPS
- Usar o Frida para obter informações em tempo de execução
A partir das versões do Android > 5, ele iniciará automaticamente o Frida e definirá as configurações globais de proxy para capturar o tráfego. Ele capturará apenas o tráfego do aplicativo testado.
Frida
Por padrão, ele também usará alguns Scripts do Frida para burlar a verificação de SSL, detecção de root e detecção de depurador e para monitorar APIs interessantes.
O MobSF também pode invocar atividades exportadas, capturar capturas de tela delas e salvá-las para o relatório.
Para iniciar o teste dinâmico, pressione o botão verde: "Iniciar Instrumentação". Pressione "Frida Live Logs" para ver os logs gerados pelos scripts do Frida e "Monitor de API ao Vivo" para ver todas as invocações aos métodos conectados, argumentos passados e valores retornados (isso aparecerá após pressionar "Iniciar Instrumentação").
O MobSF também permite carregar seus próprios scripts do Frida (para enviar os resultados de seus scripts do Frida para o MobSF, use a função send()
). Ele também possui vários scripts pré-escritos que você pode carregar (você pode adicionar mais em MobSF/DynamicAnalyzer/tools/frida_scripts/others/
), basta selecioná-los, pressionar "Carregar" e pressionar "Iniciar Instrumentação" (você poderá ver os logs desses scripts dentro de "Frida Live Logs").
Além disso, você tem algumas funcionalidades auxiliares do Frida:
- Enumerar Classes Carregadas: Ele imprimirá todas as classes carregadas
- Capturar Strings: Ele imprimirá todas as strings capturadas ao usar o aplicativo (muito ruidoso)
- Capturar Comparação de Strings: Pode ser muito útil. Ele mostrará as 2 strings sendo comparadas e se o resultado foi Verdadeiro ou Falso.
- Enumerar Métodos de Classe: Insira o nome da classe (como "java.io.File") e ele imprimirá todos os métodos da classe.
- Pesquisar Padrão de Classe: Pesquisar classes por padrão
- Rastrear Métodos de Classe: Rastrear uma classe inteira (ver entradas e saídas de todos os métodos da classe). Lembre-se de que por padrão o MobSF rastreia vários métodos interessantes da API do Android.
Depois de selecionar o módulo auxiliar que deseja usar, você precisa pressionar "Iniciar Instrumentação" e verá todas as saídas em "Frida Live Logs".
Shell
O Mobsf também oferece um shell com alguns comandos adb, comandos do MobSF e comandos shell comuns na parte inferior da página de análise dinâmica. Alguns comandos interessantes:
help
shell ls
activities
exported_activities
services
receivers
Ferramentas HTTP
Quando o tráfego http é capturado, você pode ver uma visualização feia do tráfego capturado no fundo "HTTP(S) Traffic" ou uma visualização mais agradável no fundo verde "Start HTTPTools". A partir da segunda opção, você pode enviar as solicitações capturadas para proxies como Burp ou Owasp ZAP.
Para fazer isso, ligue o Burp --> desative o Intercept --> no MobSB HTTPTools selecione a solicitação --> pressione "Enviar para Fuzzer" --> selecione o endereço do proxy (http://127.0.0.1:8080\).
Após concluir a análise dinâmica com o MobSF, você pode pressionar "Iniciar Web API Fuzzer" para fuzzar solicitações http e procurar por vulnerabilidades.
{% hint style="info" %} Após realizar uma análise dinâmica com o MobSF, as configurações do proxy podem estar incorretas e você não poderá corrigi-las pela GUI. Você pode corrigir as configurações do proxy fazendo:
adb shell settings put global http_proxy :0
{% endhint %}
Análise Dinâmica Assistida com Inspeckage
Você pode obter a ferramenta em Inspeckage.
Esta ferramenta usará alguns Hooks para informar o que está acontecendo no aplicativo enquanto você realiza uma análise dinâmica.
Yaazhini
Esta é uma ótima ferramenta para realizar análise estática com uma GUI
Qark
Esta ferramenta é projetada para procurar várias vulnerabilidades de segurança relacionadas a aplicativos Android, seja no código-fonte ou em APKs empacotados. A ferramenta também é capaz de criar um APK implantável "Proof-of-Concept" e comandos ADB para explorar algumas das vulnerabilidades encontradas (atividades expostas, intenções, tapjacking...). Assim como o Drozer, não é necessário fazer root no dispositivo de teste.
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
ReverseAPK
- Exibe todos os arquivos extraídos para fácil referência
- Decompila automaticamente arquivos APK para formato Java e Smali
- Analisa AndroidManifest.xml em busca de vulnerabilidades e comportamentos comuns
- Análise estática de código-fonte em busca de vulnerabilidades e comportamentos comuns
- Informações do dispositivo
- e muito mais
reverse-apk relative/path/to/APP.apk
SUPER Android Analyzer
O SUPER é uma aplicação de linha de comando que pode ser usada no Windows, MacOS X e Linux, que analisa arquivos .apk em busca de vulnerabilidades. Ele faz isso descomprimindo os APKs e aplicando uma série de regras para detectar essas vulnerabilidades.
Todas as regras estão centralizadas em um arquivo rules.json
, e cada empresa ou testador pode criar suas próprias regras para analisar o que precisam.
Baixe os binários mais recentes na página de download
super-analyzer {apk_file}
StaCoAn
StaCoAn é uma ferramenta multiplataforma que auxilia desenvolvedores, caçadores de bugs e hackers éticos na realização de análise de código estático em aplicativos móveis.
O conceito é que você arraste e solte o arquivo do seu aplicativo móvel (um arquivo .apk ou .ipa) na aplicação StaCoAn e ela irá gerar um relatório visual e portátil para você. Você pode ajustar as configurações e listas de palavras para obter uma experiência personalizada.
Baixe a última versão:
./stacoan
AndroBugs
O AndroBugs Framework é um sistema de análise de vulnerabilidades do Android que ajuda desenvolvedores ou hackers a encontrar possíveis vulnerabilidades de segurança em aplicativos Android.
Windows releases
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
Androwarn
Androwarn é uma ferramenta cujo principal objetivo é detectar e alertar o usuário sobre possíveis comportamentos maliciosos desenvolvidos por um aplicativo Android.
A detecção é realizada com a análise estática do bytecode Dalvik do aplicativo, representado como Smali, com a biblioteca androguard
.
Esta ferramenta procura por comportamentos comuns de aplicativos "ruins" como: exfiltração de identificadores de telefonia, interceptação de fluxo de áudio/vídeo, modificação de dados PIM, execução de código arbitrário...
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
Framework MARA
MARA é um Framework de Reverse engineering e Análise de Aplicativos Móveis. É uma ferramenta que reúne ferramentas comumente usadas para reverse engineering e análise de aplicativos móveis, para auxiliar no teste de aplicativos móveis contra as ameaças de segurança móvel da OWASP. Seu objetivo é tornar essa tarefa mais fácil e amigável para desenvolvedores de aplicativos móveis e profissionais de segurança.
Ele é capaz de:
- Extrair código Java e Smali usando diferentes ferramentas
- Analisar APKs usando: smalisca, ClassyShark, androbugs, androwarn, APKiD
- Extrair informações privadas do APK usando regexps.
- Analisar o Manifest.
- Analisar domínios encontrados usando: pyssltest, testssl e whatweb
- Desofuscar APK via apk-deguard.com
Koodous
Útil para detectar malware: https://koodous.com/
Ofuscando/Desofuscando código
Observe que, dependendo do serviço e configuração que você usa para ofuscar o código, segredos podem ou não ser desofuscados.
ProGuard
Do Wikipedia: ProGuard é uma ferramenta de linha de comando de código aberto que reduz, otimiza e ofusca o código Java. Ele é capaz de otimizar o bytecode, bem como detectar e remover instruções não utilizadas. O ProGuard é um software gratuito e é distribuído sob a Licença Pública Geral GNU, versão 2.
O ProGuard é distribuído como parte do Android SDK e é executado ao compilar o aplicativo no modo de lançamento.
DexGuard
Encontre um guia passo a passo para desofuscar o apk em https://blog.lexfo.fr/dexguard.html
(Do guia) Da última vez que verificamos, o modo de operação do Dexguard era:
- carregar um recurso como um InputStream;
- alimentar o resultado para uma classe herdando de FilterInputStream para descriptografá-lo;
- fazer alguma obfuscação inútil para desperdiçar alguns minutos de tempo de um reversor;
- alimentar o resultado descriptografado para um ZipInputStream para obter um arquivo DEX;
- finalmente carregar o DEX resultante como um Recurso usando o método
loadDex
.
DeGuard
DeGuard reverte o processo de obfuscação realizado por ferramentas de obfuscação do Android. Isso permite inúmeras análises de segurança, incluindo inspeção de código e previsão de bibliotecas.
Você pode fazer upload de um APK obfuscado para a plataforma deles.
Simplify
É um desofuscador genérico para Android. Simplify executa virtualmente um aplicativo para entender seu comportamento e então tenta otimizar o código para que ele se comporte de forma idêntica, mas seja mais fácil para um humano entender. Cada tipo de otimização é simples e genérico, então não importa qual o tipo específico de obfuscação usado.
APKiD
APKiD fornece informações sobre como um APK foi feito. Ele identifica muitos compiladores, empacotadores, obfuscadores e outras coisas estranhas. É PEiD para Android.
Manual
Leia este tutorial para aprender alguns truques sobre como reverter obfuscação personalizada
Laboratórios
Androl4b
AndroL4b é uma máquina virtual de segurança Android baseada no ubuntu-mate que inclui a coleção dos últimos frameworks, tutoriais e laboratórios de diferentes geeks de segurança e pesquisadores para engenharia reversa e análise de malware.
Referências
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ É uma ótima lista de recursos
- https://maddiestone.github.io/AndroidAppRE/ Curso rápido de Android
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
Ainda a ser testado
Junte-se ao HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Percepções de Hacking
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
Notícias de Hacking em Tempo Real
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
Últimos Anúncios
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o HackTricks e HackTricks Cloud github repos.