Android Applications Pentesting
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Junte-se ao HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Insights 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 através de notícias e insights em tempo real
Últimos Anúncios Fique informado sobre os novos programas de recompensas por bugs lançados e atualizações cruciais da plataforma
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
É altamente recomendável começar a ler esta página para conhecer as partes mais importantes relacionadas à segurança do Android e os componentes mais perigosos em uma aplicação Android:
Android Applications BasicsEsta é a principal ferramenta que você precisa para se conectar a um dispositivo android (emulado ou físico). ADB permite controlar dispositivos tanto via USB quanto via Rede a partir de um computador. Esta utilidade possibilita a cópia de arquivos em ambas as direções, instalação e desinstalação de aplicativos, execução de comandos 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.
Às vezes, é interessante modificar o código da aplicação para acessar informações ocultas (talvez senhas ou flags bem ofuscadas). 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, mantenha sempre em mente essa possibilidade.
Extrair APK do dispositivo:
Mescle todos os splits e apks base com APKEditor:
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.
Apenas dando uma olhada nas strings do APK você pode procurar por senhas, URLs (https://github.com/ndelphit/apkurlgrep), chaves api, criptografia, bluetooth uuids, tokens e qualquer coisa interessante... procure até por backdoors de execução de código ou backdoors de autenticação (credenciais de admin hardcoded para o app).
Firebase
Preste atenção especial às URLs do firebase e verifique se está mal configurado. Mais informações sobre o que é o Firebase e como explorá-lo aqui.
A examinação dos arquivos _Manifest.xml** e **strings.xml_** pode revelar potenciais vulnerabilidades de segurança**. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e, em seguida, descompactando-o.
As vulnerabilidades identificadas no Manifest.xml incluem:
Aplicações Debugáveis: Aplicações definidas como debuggable (debuggable="true"
) no arquivo Manifest.xml representam um risco, pois permitem conexões que podem levar à exploração. Para uma melhor compreensão sobre como explorar aplicações debuggables, consulte um tutorial sobre como encontrar e explorar aplicações debuggables em um dispositivo.
Configurações de Backup: O atributo android:allowBackup="false"
deve ser explicitamente definido para aplicações que lidam com informações sensíveis para evitar backups de dados não autorizados via adb, especialmente quando a depuração USB está habilitada.
Segurança de Rede: Configurações de segurança de rede personalizadas (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.
Content Providers e FileProviders: Content providers expostos podem permitir acesso ou modificação não autorizada de dados. A configuração de FileProviders também deve ser analisada.
Broadcast Receivers e Esquemas de URL: Esses componentes podem ser aproveitados para exploração, com atenção especial a como os esquemas de URL são gerenciados para vulnerabilidades de entrada.
Versões do SDK: Os atributos minSdkVersion
, targetSDKVersion
e maxSdkVersion
indicam as versões do Android suportadas, destacando a importância de não suportar versões do Android desatualizadas e vulneráveis por razões 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, sublinhando a necessidade de uma revisão cuidadosa desses recursos.
Tapjacking é um ataque onde uma aplicação maliciosa é lançada e se posiciona em cima de uma aplicação vítima. Uma vez que obscurece visivelmente o app vítima, sua interface de usuário é projetada de tal forma a enganar o usuário a interagir com ela, enquanto passa a interação para o app vítima. Na prática, isso cega o usuário para saber que ele está realmente realizando ações no app vítima.
Encontre mais informações em:
TapjackingUma atividade com o launchMode
definido como singleTask
sem qualquer taskAffinity
definido é vulnerável ao sequestro de tarefa. Isso significa que uma aplicação pode ser instalada e, se lançada antes da aplicação real, pode sequestrar a tarefa da aplicação real (assim o usuário estará interagindo com a aplicação maliciosa pensando que está usando a real).
Mais informações em:
Android Task HijackingArmazenamento Interno
No Android, arquivos armazenados no armazenamento interno são projetados para serem acessíveis exclusivamente pelo app que os criou. Essa medida de segurança é imposta pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria das aplicações. No entanto, os desenvolvedores às vezes utilizam modos como MODE_WORLD_READABLE
e MODE_WORLD_WRITABLE
para permitir que arquivos sejam compartilhados entre diferentes aplicações. No entanto, esses modos não restringem o acesso a esses arquivos por outras aplicações, incluindo aquelas potencialmente maliciosas.
Análise Estática:
Assegure-se de que o uso de MODE_WORLD_READABLE
e MODE_WORLD_WRITABLE
seja cuidadosamente analisado. Esses modos podem potencialmente expor arquivos a acessos não intencionais ou não autorizados.
Análise Dinâmica:
Verifique as permissões definidas em arquivos criados pelo app. Especificamente, verifique se algum arquivo está definido para ser legível ou gravável globalmente. Isso pode representar um risco significativo à segurança, pois permitiria que qualquer aplicação instalada no dispositivo, independentemente de sua origem ou intenção, lesse ou modificasse 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 aplicação 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 aplicação, tornando-o menos seguro.
Manipulação 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 sua aplicação precisar recuperar arquivos executáveis do armazenamento externo, assegure-se de que esses arquivos sejam assinados e verificados criptograficamente antes de serem carregados dinamicamente. Essa etapa é vital para manter a integridade de segurança da sua aplicação.
O armazenamento externo pode ser acessado em /storage/emulated/0
, /sdcard
, /mnt/sdcard
A partir do Android 4.4 (API 17), o cartão SD possui uma estrutura de diretórios que limita o acesso de um app ao diretório que é especificamente para aquele app. Isso impede que aplicações maliciosas ganhem acesso de leitura ou gravação aos arquivos de outro app.
Dados sensíveis armazenados em texto claro
Preferências compartilhadas: O Android permite que cada aplicação salve facilmente arquivos xml no caminho /data/data/<packagename>/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 aplicação salve facilmente bancos de dados sqlite no caminho /data/data/<packagename>/databases/
e às vezes é possível encontrar informações sensíveis em texto claro nessa pasta.
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 a linhas de código como a seguinte:
Uma boa maneira de testar isso é tentar capturar o tráfego usando algum proxy como Burp sem autorizar o Burp CA dentro do dispositivo. Além disso, você pode gerar com o Burp um certificado para um hostname diferente e usá-lo.
Processos de Gerenciamento de Chaves Ruins
Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os criptografam com uma chave hardcoded/predizível no código. Isso não deve ser feito, pois alguma engenharia reversa pode permitir que 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 força bruta devem ser usados com sal.
É 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 celular está rooteado e agir em consequência.
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 executar para checar se foi modificado.
Use APKiD para verificar qual compilador/pacote/ofuscador foi usado para construir o APK.
Leia a página a seguir para aprender como acessar facilmente o código javascript de aplicações React:
React Native ApplicationLeia a página a seguir para aprender como acessar facilmente o código C# de aplicações xamarin:
Xamarin AppsDe acordo com este post de blog, superpacked é um algoritmo Meta que comprime o conteúdo de uma aplicação em um único arquivo. O blog fala sobre a possibilidade de criar um aplicativo que descompacte esse tipo de aplicativo... e uma maneira mais rápida que envolve executar a aplicação e coletar os arquivos descompactados do sistema de arquivos.
A ferramenta mariana-trench é capaz de encontrar vulnerabilidades ao escanear o código da aplicação. Esta ferramenta contém uma série de fontes conhecidas (que indicam ao ferramenta os lugares onde a entrada é controlada pelo usuário), sinks (que indicam ao ferramenta lugares perigosos onde a entrada maliciosa do usuário pode causar danos) e regras. Essas regras indicam a combinação de fontes-sinks que indica uma vulnerabilidade.
Com esse conhecimento, mariana-trench revisará o código e encontrará possíveis vulnerabilidades nele.
Uma aplicação pode conter segredos (chaves de API, senhas, URLs ocultas, subdomínios...) dentro dela que você pode ser capaz de descobrir. Você poderia usar uma ferramenta como https://github.com/dwisiswant0/apkleaks.
Execução de código: Runtime.exec(), ProcessBuilder(), native code:system()
Enviar SMSs: sendTextMessage, sendMultipartTestMessage
Funções nativas declaradas como native
: public native, System.loadLibrary, System.load
Junte-se ao servidor HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Insights de Hacking Engaje-se com conteúdo que mergulha na emoção e nos desafios do hacking.
Notícias de Hack em Tempo Real Mantenha-se atualizado com o mundo acelerado do hacking através de notícias e insights em tempo real.
Últimos Anúncios Fique informado sobre os novos bugs bounties lançando e atualizações cruciais da plataforma.
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Primeiro de tudo, você precisa de um ambiente onde possa instalar a aplicação e todo o ambiente (certificado Burp CA, Drozer e Frida principalmente). Portanto, um dispositivo rooteado (emulado ou não) é extremamente recomendado.
Você pode criar uma conta gratuita em: https://appetize.io/. Esta plataforma permite que você faça upload e execute APKs, então é útil para ver como um apk está se comportando.
Você pode até ver os logs da sua aplicação na web e se conectar através do adb.
Graças à conexão ADB, você pode usar Drozer e Frida dentro dos emuladores.
Android Studio (Você pode criar dispositivos x86 e arm, e de acordo com issoas últimas versões x86 suportam bibliotecas ARM sem precisar de um emulador arm lento).
Aprenda a configurá-lo nesta página:
Genymotion (Versão gratuita: Edição Pessoal, você precisa criar uma conta. _É recomendável baixar a versão COM VirtualBox para evitar erros potenciais.)
Nox (Gratuito, mas não suporta Frida ou Drozer).
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.
Para instalar os serviços do google (como AppStore) no Genymotion, você precisa clicar no botão marcado em vermelho da imagem a seguir:
Além disso, note que na configuração da VM Android no Genymotion você pode selecionar o modo de rede Bridge (isso será útil se você estiver se conectando à VM Android de uma VM diferente com as ferramentas).
Você precisa ativar as opções de depuração e será legal se você puder rootear:
Configurações.
(A partir do Android 8.0) Selecione Sistema.
Selecione Sobre o telefone.
Pressione Número da versão 7 vezes.
Volte e você encontrará as Opções de desenvolvedor.
Uma vez que você tenha instalado a aplicação, a primeira coisa que deve fazer é testá-la e investigar o que ela faz, como funciona e se familiarizar com ela. Sugiro realizar esta análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat, para que possamos aprender como a aplicação funciona enquanto o MobSF captura muitos dados interessantes que você pode revisar mais tarde.
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 da aplicação para identificar e proteger informações sensíveis. Pidcat é preferido por sua facilidade de uso e legibilidade.
Note que a partir de versões mais recentes que o Android 4.0, as aplicações só conseguem acessar seus próprios logs. Portanto, as aplicações não podem acessar os logs de outros aplicativos. De qualquer forma, ainda é recomendado não registrar informações sensíveis.
Cache de Buffer de Copiar/Colar
O framework baseado em clipboard do Android permite a funcionalidade de copiar e colar em aplicativos, mas apresenta um risco, pois outros aplicativos podem acessar a área de transferência, potencialmente expondo dados sensíveis. É crucial desabilitar funções de copiar/colar para seções sensíveis de uma aplicação, como detalhes de cartão de crédito, para evitar vazamentos de dados.
Logs de Crash
Se uma aplicação crash e salva logs, esses logs podem ajudar atacantes, especialmente quando a aplicação não pode ser revertida. Para mitigar esse risco, evite registrar em crashes, e se os logs precisarem ser transmitidos pela rede, assegure-se de que sejam enviados através de um canal SSL para segurança.
Como pentester, tente dar uma olhada nesses logs.
Dados de Análise Enviados a Terceiros
As aplicações frequentemente integram serviços como Google Adsense, que podem inadvertidamente vazar dados sensíveis devido à implementação inadequada pelos desenvolvedores. Para identificar possíveis vazamentos de dados, é aconselhável interceptar o tráfego da aplicação e verificar se há informações sensíveis sendo enviadas para serviços de terceiros.
A maioria das aplicações usará bancos de dados SQLite internos para salvar informações. Durante o pentest, dê uma olhada nos bancos de dados criados, os nomes das tabelas e colunas e 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/the.package.name/databases
como /data/data/com.mwr.example.sieve/databases
.
Se o banco de dados estiver salvando informações confidenciais e estiver criptografado, mas você conseguir encontrar a senha dentro da aplicação, ainda é uma vulnerabilidade.
Enumere as tabelas usando .tables
e enumere as colunas das tabelas fazendo .schema <table_name>
.
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 pode fazer, como fazer uso do mecanismo de Comunicação Inter-Processo (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 seguintes.
Leia isso se você quiser refrescar o que é uma Atividade Android.
Além disso, lembre-se de que o código de uma atividade começa no método onCreate
.
Bypass 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ê poderá burlar os mecanismos de autenticação para acessá-la.
Aprenda como explorar atividades exportadas com Drozer.
Você também pode iniciar uma atividade exportada a partir do adb:
PackageName é com.example.demo
Exported ActivityName é com.example.test.MainActivity
NOTA: O MobSF detectará como malicioso o uso de singleTask/singleInstance como android:launchMode
em uma atividade, mas devido a isso, aparentemente isso é perigoso apenas em versões antigas (versões da API < 21).
Observe que uma bypass de autorização nem sempre é uma vulnerabilidade, isso dependerá de como o bypass funciona e quais informações são expostas.
Vazamento de informações sensíveis
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.
Se o tapjacking não for prevenido, você pode abusar da atividade exportada para fazer o usuário realizar ações inesperadas. Para mais informações sobre o que é Tapjacking siga o link.
Leia isso se você quiser relembrar o que é um Provedor de Conteúdo. 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 SQL e Path Traversals, pois podem ser vulneráveis.
Aprenda como explorar Provedores de Conteúdo com Drozer.
Leia isso se você quiser relembrar o que é um Serviço.
Lembre-se de 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, contornar medidas de autenticação... Aprenda como explorar Serviços com Drozer.
Leia isso se você quiser relembrar o que é um Broadcast Receiver.
Lembre-se de que as ações de um Broadcast Receiver começam no método onReceive
.
Um broadcast receiver estará aguardando um tipo de mensagem. Dependendo de como o receptor lida com a mensagem, ele pode ser vulnerável. Aprenda como explorar Broadcast Receivers com Drozer.
Você pode procurar por deep links manualmente, usando ferramentas como MobSF ou scripts como este. Você pode abrir um scheme declarado usando adb ou um navegador:
Observe que você pode omitir o nome do pacote e o mobile chamará automaticamente o aplicativo que deve abrir esse link.
Código executado
Para encontrar o código que será executado no App, vá para a atividade chamada pelo deeplink e procure a função onNewIntent
.
Informações sensíveis
Toda vez que você encontrar um deep link, verifique se não está recebendo dados sensíveis (como senhas) via parâmetros de URL, porque qualquer outro aplicativo poderia se passar pelo 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 da 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
.
Note que se você encontrar os endpoints corretos dentro do aplicativo, pode ser capaz de causar um Open Redirect (se parte do caminho for usada como nome de domínio), assumir a conta (se você puder modificar os detalhes dos usuários sem o 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 de bug bounty interessante sobre links (/.well-known/assetlinks.json).
Os certificados nem sempre são inspecionados corretamente por aplicativos Android. É comum que esses aplicativos ignorem avisos e aceitem certificados autoassinados ou, em alguns casos, revertam para o uso de conexões HTTP.
As negociações durante o handshake SSL/TLS às vezes são fracas, empregando suítes de cifra inseguras. Essa vulnerabilidade torna a conexão suscetível a ataques man-in-the-middle (MITM), permitindo que atacantes decifrem os dados.
Vazamento de informações privadas é um risco quando aplicativos se autenticam usando canais seguros, mas depois se comunicam por canais não seguros para outras transações. Essa abordagem não protege dados sensíveis, como cookies de sessão ou detalhes do usuário, de interceptação por entidades maliciosas.
Focaremos 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 como verificar certificados de servidor e abordar vulnerabilidades, este recurso fornece orientações abrangentes.
SSL Pinning é uma medida de segurança onde o aplicativo verifica o certificado do servidor contra uma cópia conhecida armazenada dentro do próprio aplicativo. Esse método é essencial para prevenir ataques MITM. Implementar SSL Pinning é fortemente recomendado para aplicativos que lidam com informações sensíveis.
Para inspecionar o tráfego HTTP, é necessário instalar o certificado da ferramenta proxy (por exemplo, Burp). Sem instalar esse 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 que visam API Level 24 e acima requerem modificações na Configuração de Segurança da Rede para aceitar o certificado CA do proxy. Este passo é crítico para inspecionar tráfego criptografado. Para instruções sobre como modificar a Configuração de Segurança da Rede, consulte este tutorial.
Quando o SSL Pinning é implementado, contorná-lo se torna necessário para inspecionar o tráfego HTTPS. Vários métodos estão disponíveis para esse propósito:
Modifique automaticamente o apk para contornar SSLPinning com apk-mitm. A melhor vantagem dessa opção é que você não precisará de root para contornar o SSL Pinning, mas precisará excluir o aplicativo e reinstalar o novo, e isso nem sempre funcionará.
Você pode usar Frida (discutido abaixo) para contornar 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 contornar automaticamente o SSL Pinning usando objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
Você também pode tentar contornar automaticamente o SSL Pinning usando análise dinâmica do MobSF (explicado abaixo)
Se você ainda acha que há algum 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
É importante também procurar vulnerabilidades comuns na web dentro do aplicativo. Informações detalhadas sobre como identificar e mitigar essas vulnerabilidades estão além do escopo deste resumo, mas são amplamente cobertas em outros lugares.
Frida é uma ferramenta de instrumentação dinâmica para desenvolvedores, engenheiros reversos e pesquisadores de segurança. Você pode acessar aplicativos em execução e conectar métodos em tempo de execução para mudar o comportamento, alterar valores, extrair valores, executar códigos diferentes... Se você deseja fazer pentesting em aplicativos Android, precisa saber como usar o Frida.
Aprenda a usar o Frida: Tutorial Frida
Algumas "GUI" para ações com 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 Frida incríveis aqui: https://codeshare.frida.re/
Tente contornar mecanismos de anti-debugging / anti-frida carregando o Frida como indicado em https://erfur.github.io/blog/dev/code-injection-without-ptrace (ferramenta linjector)
Verifique se o aplicativo está armazenando informações sensíveis na memória que não deveria estar armazenando, como senhas ou mnemônicos.
Usando Fridump3, você pode despejar a memória do aplicativo com:
Isso irá despejar a memória na pasta ./dump, e lá você pode grep com algo como:
No Android, o Keystore é o melhor lugar para armazenar dados sensíveis, no entanto, com privilégios suficientes, ainda é possível acessá-lo. Como as aplicações tendem a armazenar aqui dados sensíveis em texto claro, os pentests devem verificar isso como usuário root ou alguém com acesso físico ao dispositivo poderia 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
Usando o seguinte script Frida, pode ser possível burlar a autenticação por impressão digital que aplicativos Android podem estar realizando para proteger certas áreas sensíveis:
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, fazendo parecer que o aplicativo foi carregado mais rápido.
No entanto, se esse instantâneo contiver informações sensíveis, alguém com acesso ao instantâneo pode roubar essas informações (note que você precisa de 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 parâmetro de layout FLAG_SECURE. Ao usar essa flag, o conteúdo da janela é tratado como seguro, impedindo que apareça em capturas de tela ou seja visualizado em displays não seguros.
Esta ferramenta pode ajudar você a gerenciar diferentes ferramentas durante a análise dinâmica: https://github.com/NotSoSecure/android_application_analyzer
Os desenvolvedores frequentemente criam componentes proxy como atividades, serviços e receptores de broadcast que manipulam esses Intents e os passam para métodos como startActivity(...)
ou sendBroadcast(...)
, o que pode ser arriscado.
O perigo reside em permitir que atacantes acionem componentes de aplicativo não exportados ou acessem provedores de conteúdo sensíveis ao redirecionar esses Intents. Um exemplo notável é o componente WebView
convertendo URLs em objetos Intent
via Intent.parseUri(...)
e, em seguida, executando-os, potencialmente levando a injeções de Intent maliciosas.
Injeção de Intent é semelhante ao problema de Redirecionamento Aberto da web.
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
do WebView
pode facilitar ações não intencionais.
Provavelmente você conhece esse tipo de vulnerabilidades da Web. Você deve ter cuidado especial com essas vulnerabilidades em uma aplicação Android:
Injeção SQL: Ao lidar com consultas dinâmicas ou Content-Providers, certifique-se de usar 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 a aplicação android finaliza a sessão, o cookie não é revogado ou pode até ser salvo no disco.
Junte-se ao HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Insights de Hacking Engaje-se com conteúdo que mergulha na emoção e nos desafios do hacking.
Notícias de Hack em Tempo Real Mantenha-se atualizado com o mundo do hacking em ritmo acelerado através de notícias e insights em tempo real.
Últimos Anúncios Fique informado sobre as novas recompensas de bugs lançadas e atualizações cruciais da plataforma.
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Análise estática
Avaliação de vulnerabilidade da aplicação usando uma interface web agradável. Você também pode realizar análise dinâmica (mas precisa preparar o ambiente).
Notice que o MobSF pode analisar Android(apk), IOS(ipa) e Windows(apx) aplicações (As aplicações do Windows devem ser analisadas a partir de um MobSF instalado em um host Windows). Além disso, se você criar um ZIP com o código-fonte de um aplicativo Android ou IOS (vá para a pasta raiz do aplicativo, selecione tudo e crie um arquivo ZIP), ele também poderá analisá-lo.
O MobSF também permite que você diff/Compare análises e integre VirusTotal (você precisará definir 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á upload em vez do arquivo.
MobSF também pode ser muito útil para análise dinâmica em Android, mas nesse caso você precisará instalar o MobSF e 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:
Dump de dados da aplicação (URLs, logs, área de transferência, capturas de tela feitas por você, capturas de tela feitas por "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 quiser uma captura de tela ou precisa pressionar "Exported Activity Tester" para obter capturas de tela de todas as atividades exportadas.
Capturar tráfego HTTPS
Usar Frida para obter informações em tempo de execução
A partir das versões Android > 5, ele iniciará automaticamente o Frida e definirá configurações de proxy globais para capturar tráfego. Ele capturará apenas o tráfego do aplicativo testado.
Frida
Por padrão, ele também usará alguns Scripts Frida para burlar SSL pinning, 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: "Start Instrumentation". Pressione "Frida Live Logs" para ver os logs gerados pelos scripts Frida e "Live API Monitor" para ver todas as invocações para métodos hookeados, argumentos passados e valores retornados (isso aparecerá após pressionar "Start Instrumentation").
O MobSF também permite que você carregue seus próprios scripts Frida (para enviar os resultados dos seus scripts 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 "Load" e pressionar "Start Instrumentation" (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 enquanto usa o aplicativo (muito barulhento)
Capturar Comparações 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: Coloque 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 Android.
Uma vez que você tenha selecionado o módulo auxiliar que deseja usar, você precisa pressionar "Start Intrumentation" e verá todas as saídas em "Frida Live Logs".
Shell
O MobSF também traz um shell com alguns comandos adb, comandos MobSF e comandos comuns de shell na parte inferior da página de análise dinâmica. Alguns comandos interessantes:
HTTP tools
Quando o tráfego http é capturado, você pode ver uma visão feia do tráfego capturado no "HTTP(S) Traffic" na parte inferior ou uma visão mais agradável no botão verde "Start HTTPTools". A partir da segunda opção, você pode enviar as requisições capturadas para proxies como Burp ou Owasp ZAP. Para fazer isso, ligue o Burp --> desative o Intercept --> no MobSB HTTPTools selecione a requisição --> pressione "Send to Fuzzer" --> selecione o endereço do proxy (http://127.0.0.1:8080\).
Uma vez que você termine a análise dinâmica com MobSF, você pode pressionar em "Start Web API Fuzzer" para fuzz http requests e procurar por vulnerabilidades.
Após realizar uma análise dinâmica com MobSF, as configurações do proxy podem estar mal configuradas e você não conseguirá corrigi-las pela GUI. Você pode corrigir as configurações do proxy fazendo:
Você pode obter a ferramenta em Inspeckage. Esta ferramenta usará alguns Hooks para te informar o que está acontecendo na aplicação enquanto você realiza uma análise dinâmica.
Esta é uma ótima ferramenta para realizar análise estática com uma GUI
Esta ferramenta é projetada para procurar várias vulnerabilidades relacionadas à segurança em aplicações Android, seja no código-fonte ou em APKs empacotados. A ferramenta também é capaz de criar um APK "Proof-of-Concept" implantável e comandos ADB, para explorar algumas das vulnerabilidades encontradas (Atividades expostas, intents, tapjacking...). Assim como com o Drozer, não há necessidade de rootear o dispositivo de teste.
Exibe todos os arquivos extraídos para fácil referência
Descompila automaticamente arquivos APK para os formatos Java e Smali
Analisa AndroidManifest.xml em busca de vulnerabilidades comuns e comportamento
Análise estática de código-fonte para vulnerabilidades e comportamento comuns
Informações do dispositivo
e mais
SUPER é um aplicativo de linha de comando que pode ser usado no Windows, MacOS X e Linux, que analisa arquivos .apk em busca de vulnerabilidades. Ele faz isso descompactando APKs e aplicando uma série de regras para detectar essas vulnerabilidades.
Todas as regras estão centradas 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
StaCoAn é uma ferramenta multiplataforma que ajuda desenvolvedores, caçadores de bugs e hackers éticos a realizar análise de código estático em aplicativos móveis.
O conceito é que você arrasta e solta seu arquivo de aplicativo móvel (um arquivo .apk ou .ipa) na aplicação StaCoAn e ela 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 versão mais recente:
AndroBugs Framework é um sistema de análise de vulnerabilidades Android que ajuda desenvolvedores ou hackers a encontrar potenciais vulnerabilidades de segurança em aplicativos Android. Versões para Windows
Androwarn é uma ferramenta cujo principal objetivo é detectar e alertar o usuário sobre comportamentos potencialmente 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...
MARA é um Mobile Application Reverse engineering e Analysis Framework. É uma ferramenta que reúne ferramentas comumente usadas para engenharia reversa e análise de aplicativos móveis, para auxiliar na testagem 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.
É 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.
Deofuscar APK via apk-deguard.com
Útil para detectar malware: https://koodous.com/
Observe que dependendo do serviço e configuração que você usa para ofuscar o código. Segredos podem ou não acabar ofuscados.
De Wikipedia: ProGuard é uma ferramenta de linha de comando de código aberto que reduz, otimiza e ofusca código Java. É capaz de otimizar bytecode, bem como detectar e remover instruções não utilizadas. ProGuard é software livre e é distribuído sob a Licença Pública Geral GNU, versão 2.
ProGuard é distribuído como parte do SDK do Android e é executado ao construir o aplicativo em modo de lançamento.
Encontre um guia passo a passo para deofuscar o apk em https://blog.lexfo.fr/dexguard.html
(Do guia) Na última vez que verificamos, o modo de operação do Dexguard era:
carregar um recurso como um InputStream;
alimentar o resultado a uma classe que herda de FilterInputStream para descriptografá-lo;
fazer alguma ofuscação inútil para desperdiçar alguns minutos do tempo de um reverser;
alimentar o resultado descriptografado a um ZipInputStream para obter um arquivo DEX;
finalmente carregar o DEX resultante como um Recurso usando o método loadDex
.
DeGuard reverte o processo de ofuscação realizado por ferramentas de ofuscação do Android. Isso possibilita inúmeras análises de segurança, incluindo inspeção de código e previsão de bibliotecas.
Você pode enviar um APK ofuscado para a plataforma deles.
É um deofuscador android genérico. Simplify executa virtualmente um aplicativo para entender seu comportamento e então tenta otimizar o código para que 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 ofuscação utilizado.
APKiD fornece informações sobre como um APK foi feito. Ele identifica muitos compiladores, empacotadores, ofuscadores e outras coisas estranhas. É o PEiD para Android.
Leia este tutorial para aprender alguns truques sobre como reverter ofuscação personalizada
AndroL4b é uma máquina virtual de segurança Android baseada em ubuntu-mate que inclui a coleção dos últimos frameworks, tutoriais e labs de diferentes especialistas em segurança e pesquisadores para engenharia reversa e análise de malware.
https://appsecwiki.com/#/ É uma ótima lista de recursos
https://maddiestone.github.io/AndroidAppRE/ Curso rápido de Android
Junte-se ao HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!
Hacking Insights Engaje-se com conteúdo que mergulha na emoção e nos desafios da hacking
Real-Time Hack News Mantenha-se atualizado com o mundo acelerado da hacking através de notícias e insights em tempo real
Latest Announcements Fique informado sobre os novos bugs bounties lançando e atualizações cruciais da plataforma
Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)