mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-21 18:43:29 +00:00
850 lines
61 KiB
Markdown
850 lines
61 KiB
Markdown
# Teste de Penetração em Aplicativos Android
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof é o lar de todas as recompensas por bugs de criptografia.**
|
|
|
|
**Seja recompensado sem atrasos**\
|
|
As recompensas do HackenProof são lançadas apenas quando os clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug.
|
|
|
|
**Adquira experiência em teste de penetração web3**\
|
|
Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão.
|
|
|
|
**Torne-se a lenda do hacker web3**\
|
|
Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal.
|
|
|
|
[**Cadastre-se no HackenProof**](https://hackenproof.com/register) comece a ganhar com seus hacks!
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
## Conceitos Básicos de Aplicativos Android
|
|
|
|
É altamente recomendado começar a ler esta página para conhecer 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](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).\
|
|
Ele permite que você controle seu dispositivo por **USB** ou **Rede** a partir de um computador, **copie** arquivos de ida e volta, **instale** e desinstale aplicativos, execute comandos **shell**, faça **backups**, leia **logs** e muito mais.
|
|
|
|
Dê uma olhada na seguinte lista de [**Comandos ADB**](adb-commands.md) para aprender como usar o adb.
|
|
|
|
## Smali
|
|
|
|
Às vezes, é interessante **modificar o código do aplicativo** para acessar **informações ocultas** (talvez senhas ou flags bem ofuscadas). Nesse caso, 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](smali-changes.md). Isso pode ser muito útil como uma **alternativa para vários testes durante a análise dinâmica** que serão apresentados. Portanto, **sempre tenha isso em mente**.
|
|
|
|
## Outros truques interessantes
|
|
|
|
* [Falsificando sua localização na Play Store](spoofing-your-location-in-play-store.md)
|
|
* **Baixar APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
|
|
* Extrair APK do dispositivo:
|
|
```bash
|
|
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
|
|
|
|
Antes de tudo, 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**](apk-decompilers.md).
|
|
|
|
### Procurando por informações interessantes
|
|
|
|
Apenas olhando para as **strings** do APK, você pode procurar por **senhas**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **chaves de API**, **criptografia**, **UUIDs de Bluetooth**, **tokens** e qualquer coisa interessante... procure até mesmo 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.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
|
|
|
### Compreensão básica do aplicativo - Manifest.xml, strings.xml
|
|
|
|
Usando qualquer um dos **decompiladores** mencionados [**aqui**](apk-decompilers.md), você poderá ler o _Manifest.xml_. Você também pode **renomear** o arquivo APK para a extensão **.zip** e **descompactá-lo**.\
|
|
Lendo o **manifest**, você pode encontrar **vulnerabilidades**:
|
|
|
|
* Primeiro, verifique se **o aplicativo pode ser depurado**. Um APK de produção não deve ser (ou outros poderão se conectar a ele). Você pode verificar se um aplicativo pode ser depurado procurando no manifesto pelo atributo `debuggable="true"` dentro da tag _\<application_ Exemplo: `<application theme="@2131296387" debuggable="true"`
|
|
* [Aprenda aqui](drozer-tutorial/#is-debuggeable) como encontrar aplicativos depuráveis em um telefone e explorá-los
|
|
* **Backup**: O atributo **`android:allowBackup`** define se os dados do aplicativo podem ser salvos e restaurados por um usuário que tenha habilitado a depuração USB. Se a sinalização de backup estiver definida como verdadeira, ela permite que um invasor faça backup dos dados do aplicativo via adb, mesmo que o dispositivo não esteja rooteado. Portanto, aplicativos que manipulam e armazenam informações sensíveis, como detalhes de cartão, senhas etc., devem ter essa configuração explicitamente definida como **false**, porque por padrão ela é definida como **true** para evitar esses riscos.
|
|
* `<application android:allowBackup="false"`
|
|
* **NetworkSecurity:** A segurança de rede do aplicativo pode substituir os valores padrão com **`android:networkSecurityConfig="@xml/network_security_config"`**. Um arquivo com esse nome pode ser colocado em _**res/xml.**_ Esse arquivo configurará configurações de segurança importantes, como pinos de certificado ou se permite tráfego HTTP. Você pode ler aqui mais informações sobre todas as coisas que podem ser configuradas, mas verifique este exemplo sobre como configurar o tráfego HTTP para alguns domínios:
|
|
* `<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>`
|
|
* **Atividades exportadas**: Verifique as atividades exportadas no manifesto, pois isso pode ser perigoso. Mais tarde, na análise dinâmica, será explicado como [você pode abusar desse comportamento](./#exploiting-exported-activities-authorisation-bypass).
|
|
* **Provedores de conteúdo**: Se um provedor exportado estiver sendo exposto, você poderá acessar/modificar informações interessantes. Na análise dinâmica, [você aprenderá como abusar deles](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information).
|
|
* Verifique as configurações de **FileProviders** no atributo `android:name="android.support.FILE_PROVIDER_PATHS"`. [Leia aqui para saber mais sobre FileProviders](./#fileprovider).
|
|
* **Serviços expostos**: Dependendo do que o serviço está fazendo internamente, vulnerabilidades podem ser exploradas. Na análise dinâmica, [você aprenderá como abusar deles](./#exploiting-services).
|
|
* **Receptores de transmissão**: [Você aprenderá como possivelmente explorá-los](./#exploiting-broadcast-receivers) durante a análise dinâmica.
|
|
* **Esquema de URL**: Leia o código da atividade que gerencia o esquema e procure por vulnerabilidades no gerenciamento da entrada do usuário. Mais informações sobre [o que é um esquema de URL aqui](./#url-schemes).
|
|
* **minSdkVersion**, **targetSDKVersion**, **maxSdkVersion**: Eles indicam as versões do Android em que o aplicativo será executado. É importante ter isso em mente porque, do ponto de vista da segurança, o suporte a versões antigas permitirá que versões vulneráveis conhecidas do Android o executem.
|
|
|
|
Lendo **resources.arsc/strings.xml**, você pode encontrar algumas **informações interessantes**:
|
|
|
|
* Chaves de API
|
|
* Esquemas personalizados
|
|
* Outras informações interessantes que os desenvolvedores salvam neste arquivo
|
|
|
|
### Tapjacking
|
|
|
|
**Tapjacking** é um ataque em que um **aplicativo malicioso** é lançado e **se posiciona sobre um aplicativo vítima**. Uma vez que ele obscurece visivelmente o aplicativo vítima, sua interface do usuário é projetada de forma a enganar o usuário para interagir com ele, enquanto ele está passando a interação para o aplicativo vítima.\
|
|
Na prática, ele **impede que o usuário saiba que está realmente realizando ações no aplicativo vítima**.
|
|
|
|
Encontre mais informações em:
|
|
|
|
{% content-ref url="tapjacking.md" %}
|
|
[tapjacking.md](tapjacking.md)
|
|
{% endcontent-ref %}
|
|
|
|
### Sequestro de Tarefas
|
|
|
|
Uma **atividade** com o **`launchMode`** definido como **`singleTask` sem nenhuma `taskAffinity`** definida é vulnerável a sequestro de tarefas. Isso significa que um **aplicativo** pode ser instalado e, se for lançado antes do aplicativo real, ele 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](android-task-hijacking.md)
|
|
{% endcontent-ref %}
|
|
|
|
### Armazenamento inseguro de dados
|
|
|
|
**Armazenamento interno**
|
|
|
|
Arquivos **criados** no **armazenamento interno** são **acessíveis** apenas pelo **aplicativo**. Essa proteção é implementada pelo Android e é suficiente para a maioria dos aplicativos. Mas os desenvolvedores frequentemente usam `MODE_WORLD_READBALE` e `MODE_WORLD_WRITABLE` para dar acesso a esses arquivos a um aplicativo diferente, mas isso não impede que outros aplicativos (maliciosos) acessem esses arquivos.\
|
|
Durante a **análise estática**, verifique o uso desses **modos**, durante a **análise dinâmica**, verifique as **permissões** dos arquivos criados (talvez alguns deles sejam legíveis/graváveis em todo o mundo).\
|
|
[Mais informações sobre essa vulnerabilidade e como corrigi-la aqui.](https://manifestsecurity.com/android-application-security-part-8/)
|
|
|
|
**Armazenamento externo**
|
|
|
|
Arquivos criados no **armazenamento externo**, como cartões SD, são **globalmente legíveis e graváveis**. Como o armazenamento externo pode ser removido pelo usuário e também modificado por qualquer aplicativo, você não deve armazenar informações sensíveis usando o armazenamento externo.\
|
|
Assim como dados de qualquer fonte não confiável, você deve **realizar validação de entrada** ao lidar com **dados do armazenamento externo**. Recomendamos fortemente que você não armazene arquivos executáveis ou arquivos de classe no armazenamento externo antes do carregamento dinâmico. Se o seu aplicativo recuperar arquivos executáveis do armazenamento externo, os arquivos devem ser assinados e verificados criptograficamente antes do carregamento dinâmico.\
|
|
Informações retiradas daqui [aqui](https://manifestsecurity.com/android-application-security-part-8/).
|
|
|
|
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órios que **limita o acesso de um aplicativo ao diretório específico para esse aplicativo**. Isso impede que um aplicativo malicioso obtenha 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 facilmente bancos de dados SQLite no caminho `/data/data
|
|
### 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 as linhas de código como a seguinte:
|
|
```java
|
|
SSLSocketFactory sf = new cc(trustStore);
|
|
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|
```
|
|
Uma boa maneira de testar isso é tentar capturar o tráfego usando um proxy como o Burp sem autorizar o CA do Burp dentro do dispositivo. Além disso, você pode gerar com o Burp um certificado para um nome de host diferente e usá-lo.
|
|
|
|
### 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 sal.
|
|
|
|
### 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 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 executá-lo para verificar se foi modificado.
|
|
* Use [**APKiD**](https://github.com/rednaga/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](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](../xamarin-apps.md)
|
|
{% endcontent-ref %}
|
|
|
|
### Aplicativos Superpacked
|
|
|
|
De acordo com este [**post de blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), o superpacked é um meta algoritmo 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 coletar os arquivos descomprimidos do sistema de arquivos**.
|
|
|
|
### Análise Estática Automatizada de Código
|
|
|
|
A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar vulnerabilidades escaneando o código do aplicativo. Essa 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 pode causar danos) e regras. Essas regras indicam a combinação de fontes-sinks que indica uma vulnerabilidade.
|
|
|
|
Com esse conhecimento, o mariana-trench revisará o código e encontrará possíveis vulnerabilidades nele.
|
|
|
|
### Vazamento de segredos
|
|
|
|
Um aplicativo pode conter segredos (chaves de API, senhas, URLs ocultas, subdomínios...) dentro dele que você pode descobrir. Você pode usar uma ferramenta como [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
|
|
|
### Bypass na autenticação biométrica
|
|
|
|
{% content-ref url="bypass-biometric-authentication-android.md" %}
|
|
[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()`
|
|
* **Envio de SMS**: `sendTextMessage, sendMultipartTestMessage`
|
|
* Funções nativas declaradas como `native`: `public native, System.loadLibrary, System.load`
|
|
* [Leia isso para aprender **como reverter funções nativas**](reversing-native-libraries.md)
|
|
|
|
### **Outros truques**
|
|
|
|
{% content-ref url="content-protocol.md" %}
|
|
[content-protocol.md](content-protocol.md)
|
|
{% endcontent-ref %}
|
|
|
|
***
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof é o lar de todas as recompensas por bugs de criptografia.**
|
|
|
|
**Seja recompensado sem atrasos**\
|
|
As recompensas do HackenProof são lançadas apenas quando os clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug.
|
|
|
|
**Adquira experiência em pentesting web3**\
|
|
Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão.
|
|
|
|
**Torne-se a lenda do hacker web3**\
|
|
Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal.
|
|
|
|
[**Cadastre-se no HackenProof**](https://hackenproof.com/register) e comece a ganhar com seus hacks!
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
***
|
|
|
|
## Análise Dinâmica
|
|
|
|
> Primeiro, você precisa de um ambiente onde possa instalar o aplicativo e todo o ambiente (certificado CA do Burp, Drozer e Frida principalmente). Portanto, um dispositivo com root (emulado ou não) é extremamente recomendado.
|
|
|
|
### Análise Dinâmica Online
|
|
|
|
Você pode criar uma **conta gratuita** em: [https://appetize.io/](https://appetize.io). Essa 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 do **adb**.
|
|
|
|
![](<../../.gitbook/assets/image (60).png>)
|
|
|
|
Graças à conexão ADB, você pode usar o **Drozer** e o **Frida** nos emuladores.
|
|
|
|
### Análise Dinâmica Local
|
|
|
|
#### Usando um emulador
|
|
|
|
* [**Android Studio**](https://developer.android.com/studio) (Você pode criar dispositivos **x86** e **arm**, e de acordo com [**este** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**últimas versões x86** 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](avd-android-virtual-device.md)
|
|
{% endcontent-ref %}
|
|
|
|
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versão gratuita:** Personal Edition, você precisa criar uma conta. _É recomendado **baixar** a versão **COM**_ _**VirtualBox** para evitar erros potenciais._)
|
|
* [**Nox**](https://es.bignox.com) (Grátis, 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 será executado. Portanto, selecione telas pequenas, se possível.
|
|
{% endhint %}
|
|
|
|
Para **instalar serviços do Google** (como AppStore) no Genymotion, você precisa clicar no botão marcado em vermelho na seguinte imagem:
|
|
|
|
![](<../../.gitbook/assets/image (200) (1).png>)
|
|
|
|
Além disso, observe 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).
|
|
#### Usar um dispositivo físico
|
|
|
|
Você precisa ativar as opções de **depuração** e seria bom se você pudesse **rootear**:
|
|
|
|
1. **Configurações**.
|
|
2. (A partir do Android 8.0) Selecione **Sistema**.
|
|
3. Selecione **Sobre o telefone**.
|
|
4. Pressione **Número da versão** 7 vezes.
|
|
5. 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.\
|
|
> Sugiro **realizar essa análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que você possa **aprender como o aplicativo funciona** enquanto o MobSF **captura** muitos **dados** **interessantes** que você pode revisar posteriormente.
|
|
|
|
### Vazamento de dados não intencional
|
|
|
|
**Registro**
|
|
|
|
Muitas vezes, os desenvolvedores deixam informações de depuração publicamente. Portanto, qualquer aplicativo com permissão `READ_LOGS` pode **acessar esses registros** e obter informações sensíveis por meio deles.\
|
|
Ao navegar pelo aplicativo, use o [**pidcat**](https://github.com/JakeWharton/pidcat)_(Recomendado, é mais fácil de usar e ler)_ ou [adb logcat](adb-commands.md#logcat) para ler os registros criados e **procurar informações sensíveis**.
|
|
|
|
{% hint style="warning" %}
|
|
Observe que, a partir das versões posteriores ao Android 4.0, **os aplicativos só podem acessar seus próprios registros**. Portanto, os aplicativos não podem acessar os registros de outros aplicativos.\
|
|
De qualquer forma, ainda é recomendado **não registrar informações sensíveis**.
|
|
{% endhint %}
|
|
|
|
**Armazenamento em buffer de cópia/colagem**
|
|
|
|
O Android fornece um framework baseado em **clipboard** para fornecer a função de copiar e colar em aplicativos Android. Mas isso cria um problema sério quando algum **outro aplicativo** pode **acessar** a **área de transferência** que contém dados sensíveis. A função de **copiar/colar** deve ser **desativada** para **partes sensíveis** do aplicativo. Por exemplo, desative a cópia de detalhes do cartão de crédito.
|
|
|
|
**Registros de falhas**
|
|
|
|
Se um aplicativo **falhar** durante a execução e **salvar registros** em algum lugar, esses registros podem ser úteis para um invasor, especialmente em casos em que o aplicativo Android não pode ser engenharia reversa. Portanto, evite criar registros quando o aplicativo falhar e, se os registros forem enviados pela rede, verifique se eles são enviados por um canal SSL.\
|
|
Como pentester, **tente dar uma olhada nesses registros**.
|
|
|
|
**Dados de análise enviados para terceiros**
|
|
|
|
A maioria dos aplicativos usa outros serviços em seu aplicativo, como o Google Adsense, mas às vezes eles **vazam alguns dados sensíveis** ou dados que não precisam ser enviados para esse serviço. Isso pode acontecer porque o desenvolvedor não implementou o recurso corretamente. Você pode **verificar interceptando o tráfego** do aplicativo e ver se algum dado sensível é enviado para terceiros ou não.
|
|
|
|
### Bancos de dados SQLite
|
|
|
|
A maioria dos aplicativos usará **bancos de dados SQLite internos** para salvar informações. Durante o teste de penetração, 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ê conseguir **encontrar** a **senha** dentro do aplicativo, ainda é uma **vulnerabilidade**.
|
|
|
|
Enumere as tabelas usando `.tables` e enumere as colunas das tabelas usando `.schema <nome_da_tabela>`
|
|
|
|
### Drozer (Explorando Atividades, Provedores de Conteúdo e Serviços)
|
|
|
|
**Drozer** permite que você **assuma o papel de um aplicativo Android** e interaja com outros aplicativos. Ele pode fazer **tudo o que um aplicativo instalado pode fazer**, como usar o mecanismo de Comunicação entre Processos (IPC) do Android e interagir com o sistema operacional subjacente. Do [Guia do Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf).\
|
|
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 você quiser relembrar o que é uma Atividade Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
|
Lembre-se também de que o código de uma atividade começa com o 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ê pode **burlar** os mecanismos de **autenticação** para acessá-la.\
|
|
[**Aprenda como explorar atividades exportadas com o Drozer.**](drozer-tutorial/#activities)
|
|
|
|
Você também pode iniciar uma atividade exportada pelo adb:
|
|
|
|
* PackageName é com.example.demo
|
|
* Nome da atividade exportada é com.example.test.MainActivity
|
|
```bash
|
|
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 [isso](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), aparentemente isso é apenas perigoso em versões antigas (versões de API < 21).
|
|
|
|
{% hint style="info" %}
|
|
Observe 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 que chame o método **`setResult`** e **retorne informações sensíveis**, haverá um vazamento de informações sensíveis.
|
|
|
|
#### Tapjacking
|
|
|
|
Se o tapjacking não for prevenido, você poderá abusar da atividade exportada para fazer com que o **usuário execute ações inesperadas**. Para obter mais informações sobre [**o que é Tapjacking, siga o link**](./#tapjacking).
|
|
|
|
### Explorando Provedores de Conteúdo - Acessando e manipulando informações sensíveis
|
|
|
|
[**Leia isso se você quiser relembrar o que é um Provedor de Conteúdo.**](android-applications-basics.md#content-provider)\
|
|
Os provedores de conteúdo são basicamente usados para **compartilhar dados**. Se um aplicativo tiver provedores de conteúdo disponíveis, você poderá **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.**](drozer-tutorial/#content-providers)
|
|
|
|
### **Explorando Serviços**
|
|
|
|
[**Leia isso se você quiser relembrar o que é um Serviço.**](android-applications-basics.md#services)\
|
|
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. Portanto, 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 o Drozer.**](drozer-tutorial/#services)
|
|
|
|
### **Explorando Receptores de Transmissão**
|
|
|
|
[**Leia isso se você quiser relembrar o que é um Receptor de Transmissão.**](android-applications-basics.md#broadcast-receivers)\
|
|
Lembre-se de que as ações de um Receptor de Transmissão começam no método `onReceive`.
|
|
|
|
Um receptor de transmissão estará aguardando um tipo de mensagem. Dependendo de como o receptor manipula a mensagem, ele pode ser vulnerável.\
|
|
[**Aprenda como explorar Receptores de Transmissão com o Drozer.**](./#exploiting-broadcast-receivers)
|
|
|
|
### **Explorando Esquemas / Deep links**
|
|
|
|
Você pode procurar deep links manualmente, usando ferramentas como o MobSF ou scripts como [este](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
|
Você pode **abrir** um **esquema** declarado usando o **adb** ou um **navegador**:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
|
```
|
|
{% endcode %}
|
|
|
|
_Observação: você pode **omitir o nome do pacote** e o celular automaticamente chamará o aplicativo que deve abrir esse link._
|
|
|
|
{% code overflow="wrap" %}
|
|
```markup
|
|
<!-- 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 deep link e procure a função **`onNewIntent`**.
|
|
|
|
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
|
|
|
|
**Informações sensíveis**
|
|
|
|
Sempre que encontrar um deep link, verifique se ele não está recebendo dados sensíveis (como senhas) por meio de parâmetros de URL, pois qualquer outro aplicativo pode **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`.\
|
|
Observe que se você encontrar os endpoints corretos dentro do aplicativo, poderá causar um **Redirecionamento Aberto** (se parte do caminho for usado como nome de domínio), **assumir a conta** (se você puder modificar os detalhes dos 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](http://dphoeniixx.com/2020/12/13-2/).
|
|
|
|
**Mais exemplos**
|
|
|
|
Um [relatório interessante de recompensa por bugs](https://hackerone.com/reports/855618) sobre links (_/.well-known/assetlinks.json_).
|
|
|
|
### Proteção Insuficiente da Camada de Transporte
|
|
|
|
* **Falta de Inspeção de Certificado:** O aplicativo Android não verifica a identidade do certificado apresentado a ele. A maioria dos aplicativos ignora os avisos e aceita qualquer certificado autoassinado apresentado. Alguns aplicativos, em vez disso, passam o tráfego por uma conexão HTTP.
|
|
* **Negociação de Handshake Fraca:** O aplicativo e o servidor realizam um handshake SSL/TLS, mas usam uma suíte de cifras insegura que é vulnerável a ataques MITM. Assim, qualquer atacante pode facilmente descriptografar essa conexão.
|
|
* **Vazamento de Informações de Privacidade:** Na maioria das vezes, acontece que os aplicativos fazem autenticação por meio de um canal seguro, mas todas as outras conexões são feitas por meio de um canal não seguro. Isso não adiciona segurança ao aplicativo, pois dados sensíveis restantes, como cookie de sessão ou dados do usuário, podem ser interceptados por um usuário mal-intencionado.
|
|
|
|
Dos 3 cenários apresentados, vamos discutir **como verificar a identidade do certificado**. Os outros 2 cenários dependem da **configuração do TLS** do servidor e se o **aplicativo envia dados não criptografados**. O pentester deve verificar por conta própria a configuração do TLS do servidor ([aqui](../../network-services-pentesting/pentesting-web/#ssl-tls-vulnerabilites)) e detectar se alguma **informação confidencial é enviada por um canal não criptografado/vulnerável**.\
|
|
Mais informações sobre como descobrir e corrigir esse tipo de vulnerabilidade [**aqui**](https://manifestsecurity.com/android-application-security-part-10/).
|
|
|
|
**SSL Pinning**
|
|
|
|
Por padrão, ao fazer uma conexão SSL, o cliente (aplicativo Android) verifica se o certificado do servidor possui uma cadeia de confiança verificável até um certificado confiável (raiz) e corresponde ao nome do host solicitado. Isso leva ao problema de **Ataques Man-in-the-Middle (MITM)**.\
|
|
No SSL Pinning, um aplicativo Android contém o certificado do servidor e só transmite dados se o mesmo certificado for apresentado.\
|
|
É recomendado **aplicar o SSL Pinning** nos sites onde informações sensíveis serão enviadas.
|
|
|
|
### Inspeção do tráfego HTTP
|
|
|
|
Antes de tudo, você deve (deve) **instalar o certificado** da ferramenta de **proxy** que você vai usar, provavelmente o Burp. Se você não instalar o certificado CA da ferramenta de proxy, provavelmente não verá o tráfego criptografado no proxy.\
|
|
**Por favor,** [**leia este guia para aprender como instalar um certificado CA personalizado**](android-burp-suite-settings.md)**.**
|
|
|
|
Para aplicativos direcionados ao **API Level 24+ não é suficiente instalar o certificado CA** do Burp no dispositivo. Para contornar essa nova proteção, você precisa modificar o arquivo de Configuração de Segurança de Rede. Portanto, você pode modificar esse arquivo para autorizar seu certificado CA ou pode [**ler esta página para um tutorial sobre como forçar o aplicativo a aceitar novamente todos os certificados instalados no dispositivo**](make-apk-accept-ca-certificate.md).
|
|
|
|
**SSL Pinning**
|
|
|
|
Já discutimos o que é o SSL Pinning apenas 2 parágrafos antes. Quando implementado em um aplicativo, você precisará contorná-lo para inspecionar o tráfego HTTPS ou não o verá.\
|
|
Aqui vou apresentar algumas opções que usei para contornar essa proteção:
|
|
|
|
* **Modificar automaticamente** o **apk** para **contornar** o SSL Pinning com [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). A melhor vantagem dessa opção é que você não precisará de acesso root para contornar 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 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/](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**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
|
* Você também pode tentar **contornar automaticamente o SSL Pinning** usando a **análise dinâmica do MobSF** (explicada 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](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
|
|
|
**Vulnerabilidades Web comuns**
|
|
|
|
Observe que nesta etapa você deve procurar por vulnerabilidades web comuns. Muitas informações sobre vulnerabilidades web podem ser encontradas neste livro, então não vou mencioná-las aqui.
|
|
|
|
### Frida
|
|
|
|
Kit de instrumentação dinâmica para desenvolvedores, engenheiros reversos e pesquisadores de segurança. Saiba mais em [www.frida.re](https://www.frida.re).\
|
|
**É incrível, você pode acessar o aplicativo em execução e interceptar 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**](frida-tutorial/)\
|
|
**Algumas "GUI" para ações com o Frida:** [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)\
|
|
**Algumas outras abstrações baseadas no Frida:** [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)\
|
|
**Você pode encontrar alguns scripts incríveis do Frida aqui:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
|
### **Dump de Memória - Fridump**
|
|
|
|
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 o [**Fridump3**](https://github.com/rootbsd/fridump3), você pode fazer o dump da memória do aplicativo com:
|
|
```bash
|
|
# 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ê pode usar o comando grep com algo como:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
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 do Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
|
```bash
|
|
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
|
```
|
|
### **Bypass de Impressão Digital/Biometria**
|
|
|
|
Usando o seguinte script Frida, é possível **burlar a autenticação por impressão digital** que os aplicativos Android podem estar realizando para **proteger determinadas áreas sensíveis:**
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
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 uma **captura de tela do aplicativo**, para que, quando ele seja recuperado para o primeiro plano, ele comece a carregar a imagem antes do aplicativo, dando a impressão de que o aplicativo foi carregado mais rápido.
|
|
|
|
No entanto, se essa captura de tela contiver **informações sensíveis**, alguém com acesso a ela pode **roubar essas informações** (observe que é necessário ter acesso root para acessá-la).
|
|
|
|
As capturas de tela geralmente são armazenadas em: **`/data/system_ce/0/snapshots`**
|
|
|
|
O Android oferece 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 ele apareça em capturas de tela ou seja visualizado em displays não seguros.
|
|
```bash
|
|
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](https://github.com/NotSoSecure/android\_application\_analyzer)
|
|
|
|
### Injeção de Intenção
|
|
|
|
Essa vulnerabilidade se assemelha ao **Redirecionamento Aberto na segurança da web**. Como a classe `Intent` é `Parcelable`, **objetos pertencentes a essa classe** podem ser **passados** como **dados extras** em outro objeto `Intent`.\
|
|
Muitos desenvolvedores fazem **uso** dessa **funcionalidade** e criam **componentes proxy** (atividades, receptores de transmissão e serviços) que **recebem uma Intenção incorporada e a passam para métodos perigosos** como `startActivity(...)`, `sendBroadcast(...)`, etc.\
|
|
Isso é perigoso porque **um invasor pode forçar o aplicativo a iniciar um componente não exportado que não pode ser iniciado diretamente de outro aplicativo**, ou conceder ao invasor acesso aos seus provedores de conteúdo. **`WebView`** às vezes também altera um **URL de uma string para um objeto `Intent`**, usando o método `Intent.parseUri(...)`, e o passa para `startActivity(...)`.
|
|
|
|
### Injeções no Lado do Cliente Android e outros
|
|
|
|
Provavelmente você já conhece esse tipo de vulnerabilidade na 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, verifique se está usando consultas parametrizadas.
|
|
* **Injeção de JavaScript (XSS):** Verifique se o suporte a JavaScript e plugins está desativado para qualquer WebView (desativado por padrão). [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
|
* **Inclusão de Arquivo Local:** Verifique se o acesso ao sistema de arquivos está desativado para qualquer WebView (ativado por padrão) `(webview.getSettings().setAllowFileAccess(false);)`. [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
|
* **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](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
|
|
|
***
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof é o lar de todas as recompensas por bugs de criptografia.**
|
|
|
|
**Seja recompensado sem atrasos**\
|
|
As recompensas do HackenProof são lançadas apenas quando seus clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug.
|
|
|
|
**Adquira experiência em pentesting web3**\
|
|
Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão.
|
|
|
|
**Torne-se a lenda do hacker web3**\
|
|
Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal.
|
|
|
|
[**Cadastre-se no HackenProof**](https://hackenproof.com/register) comece a ganhar com seus hacks!
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
## Análise Automática
|
|
|
|
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
|
|
|
**Análise estática**
|
|
|
|
![](<../../.gitbook/assets/image (61).png>)
|
|
|
|
**Avaliação de vulnerabilidades do aplicativo** usando uma interface web agradável. Você também pode realizar análise dinâmica (mas precisa preparar o ambiente).
|
|
```bash
|
|
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), ele também poderá analisá-lo.
|
|
|
|
O MobSF também permite que você faça **diff/Comparação** de análises e integre o **VirusTotal** (você precisará configurar sua chave de API em _MobSF/settings.py_ e ativá-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á). _Observação: 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 o 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 do Frida e "**Live API Monitor**" para ver todas as invocações aos métodos conectados, argumentos passados e valores retornados (isso aparecerá após pressionar "Start Instrumentation").\
|
|
O MobSF também permite que você carregue 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 "**Load**" e pressionar "**Start Instrumentation**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**").
|
|
|
|
![](<../../.gitbook/assets/image (215).png>)
|
|
|
|
Além disso, você tem algumas funcionalidades auxiliares do Frida:
|
|
|
|
* **Enumerate Loaded Classes**: Ele imprimirá todas as classes carregadas
|
|
* **Capture Strings**: Ele imprimirá todas as strings capturadas durante o uso do aplicativo (muito barulhento)
|
|
* **Capture String Comparisons**: Pode ser muito útil. Ele mostrará as 2 strings sendo comparadas e se o resultado foi verdadeiro ou falso.
|
|
* **Enumerate Class Methods**: Insira o nome da classe (como "java.io.File") e ele imprimirá todos os métodos da classe.
|
|
* **Search Class Pattern**: Pesquisar classes por padrão
|
|
* **Trace Class Methods**: **Traçar** 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 "**Start Intrumentation**" 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 comuns do **shell** na parte inferior da página de análise dinâmica. Alguns comandos interessantes:
|
|
```bash
|
|
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 na parte inferior "**HTTP(S) Traffic**" ou uma visualização mais agradável no botão verde "**Start HTTPTools**". A partir da segunda opção, você pode **enviar** as **solicitações capturadas** para **proxies** como o Burp ou o Owasp ZAP.\
|
|
Para fazer isso, _ligue o Burp -->_ _desligue o Intercept --> no MobSB HTTPTools selecione a solicitação_ --> pressione "**Send to Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
|
|
|
Após concluir a análise dinâmica com o MobSF, você pode pressionar "**Start Web API Fuzzer**" para **fuzz http requests** 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**](https://github.com/ac-pm/Inspeckage).\
|
|
Esta ferramenta usa alguns **Hooks** para informar **o que está acontecendo no aplicativo** enquanto você realiza uma **análise dinâmica**.
|
|
|
|
{% content-ref url="inspeckage-tutorial.md" %}
|
|
[inspeckage-tutorial.md](inspeckage-tutorial.md)
|
|
{% endcontent-ref %}
|
|
|
|
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
|
|
|
Esta é uma **ótima ferramenta para realizar análise estática com uma interface gráfica**
|
|
|
|
![](<../../.gitbook/assets/image (527).png>)
|
|
|
|
### [Qark](https://github.com/linkedin/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, intents, tapjacking...). Assim como o Drozer, não é necessário fazer root no dispositivo de teste.
|
|
```bash
|
|
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**](https://github.com/1N3/ReverseAPK.git)
|
|
|
|
* Exibe todos os arquivos extraídos para fácil referência
|
|
* Decompila automaticamente arquivos APK para formato Java e Smali
|
|
* Analisa o AndroidManifest.xml em busca de vulnerabilidades e comportamentos comuns
|
|
* Análise estática do código-fonte em busca de vulnerabilidades e comportamentos comuns
|
|
* Informações do dispositivo
|
|
* Intents
|
|
* Execução de comandos
|
|
* Referências do SQLite
|
|
* Referências de log
|
|
* Provedores de conteúdo
|
|
* Receptores de broadcast
|
|
* Referências de serviço
|
|
* Referências de arquivo
|
|
* Referências de criptografia
|
|
* Segredos codificados
|
|
* URLs
|
|
* Conexões de rede
|
|
* Referências SSL
|
|
* Referências do WebView
|
|
```
|
|
reverse-apk relative/path/to/APP.apk
|
|
```
|
|
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
|
|
|
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 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](https://superanalyzer.rocks/download.html)
|
|
```
|
|
super-analyzer {apk_file}
|
|
```
|
|
### [StaCoAn](https://github.com/vincentcox/StaCoAn)
|
|
|
|
![](<../../.gitbook/assets/image (62).png>)
|
|
|
|
StaCoAn é uma ferramenta **multiplataforma** que auxilia desenvolvedores, caçadores de recompensas por bugs e hackers éticos a realizar [análise estática de código](https://en.wikipedia.org/wiki/Static\_program\_analysis) 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 [versão mais recente](https://github.com/vincentcox/StaCoAn/releases):
|
|
```
|
|
./stacoan
|
|
```
|
|
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
|
|
|
|
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.\
|
|
[Versões para Windows](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
|
|
```
|
|
python androbugs.py -f [APK file]
|
|
androbugs.exe -f [APK file]
|
|
```
|
|
### [Androwarn](https://github.com/maaaaz/androwarn)
|
|
|
|
**Androwarn** é uma ferramenta cujo objetivo principal é 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`](https://github.com/androguard/androguard).
|
|
|
|
Essa 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
|
|
```
|
|
### [MARA Framework](https://github.com/xtiankisutsa/MARA_Framework)
|
|
|
|
![](<../../.gitbook/assets/image (81).png>)
|
|
|
|
**MARA** é um **F**ramework de **R**everse engineering e **A**nálise de **A**plicações **M**óveis. É uma ferramenta que reúne ferramentas comumente usadas para reverse engineering e análise de aplicativos móveis, para auxiliar nos testes de segurança de aplicativos móveis em relação às 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](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
|
* Extrair informações privadas do APK usando regexps.
|
|
* Analisar o Manifesto.
|
|
* Analisar domínios encontrados usando: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) e [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
|
* Desofuscar APK via [apk-deguard.com](http://www.apk-deguard.com)
|
|
|
|
### Koodous
|
|
|
|
Útil para detectar malware: [https://koodous.com/](https://koodous.com)
|
|
|
|
## Ofuscando/Desofuscando código
|
|
|
|
Observe que, dependendo do serviço e da configuração que você usa para ofuscar o código, os segredos podem ou não ser ofuscados.
|
|
|
|
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
|
|
|
**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.
|
|
|
|
De: [https://en.wikipedia.org/wiki/ProGuard\_(software)](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
|
|
|
### [DexGuard](https://www.guardsquare.com/dexguard)
|
|
|
|
Encontre um guia passo a passo para desofuscar o apk em [https://blog.lexfo.fr/dexguard.html](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 ofuscação inútil para desperdiçar alguns minutos do tempo de um reverser;
|
|
* 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](http://apk-deguard.com)
|
|
|
|
**DeGuard reverte o processo de ofuscação realizado por ferramentas de ofuscação do Android. Isso permite várias análises de segurança, incluindo inspeção de código e previsão de bibliotecas.**
|
|
|
|
Você pode fazer upload de um APK ofuscado para a plataforma deles.
|
|
|
|
### [Simplify](https://github.com/CalebFenton/simplify)
|
|
|
|
É um **desofuscador genérico para Android**. Simplify **executa virtualmente um aplicativo** para entender seu comportamento e, em seguida, **tenta otimizar o código** para que ele se comporte de forma idêntica, mas seja mais fácil de entender para um humano. Cada tipo de otimização é simples e genérico, portanto, não importa qual seja o tipo específico de ofuscação usado.
|
|
|
|
### [APKiD](https://github.com/rednaga/APKiD)
|
|
|
|
APKiD fornece informações sobre **como um APK foi feito**. Ele identifica muitos **compiladores**, **empacotadores**, **ofuscadores** e outras coisas estranhas. É o [_PEiD_](https://www.aldeid.com/wiki/PEiD) para Android.
|
|
|
|
### Manual
|
|
|
|
[Leia este tutorial para aprender alguns truques sobre **como reverter ofuscação personalizada**](manual-deobfuscation.md)
|
|
|
|
## Laboratórios
|
|
|
|
### [Androl4b](https://github.com/sh4hin/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 especialistas em segurança e pesquisadores para engenharia reversa e análise de malware.
|
|
|
|
### OWASP
|
|
|
|
{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}
|
|
|
|
### Repositórios Git
|
|
|
|
[https://github.com/riddhi-shree/nullCommunity/tree/master/Android](https://github.com/riddhi-shree/nullCommunity/tree/master/Android)\
|
|
[https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab\_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab\_channel=B3nacSec)
|
|
|
|
## Referências
|
|
|
|
Para mais informações, visite:
|
|
|
|
* [https://appsecwiki.com/#/](https://appsecwiki.com/#/) É uma ótima lista de recursos
|
|
* [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Curso rápido de Android
|
|
* [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
|
|
* [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
|
|
|
|
## Para Testar
|
|
|
|
* [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
|
* [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof é o lar de todas as recompensas por bugs de criptografia.**
|
|
|
|
**Seja recompensado sem atrasos**\
|
|
As recompensas do HackenProof são lançadas apenas quando seus clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug.
|
|
|
|
**Adquira experiência em pentesting web3**\
|
|
Protocolos blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão.
|
|
|
|
**Torne-se a lenda do hacker web3**\
|
|
Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal.
|
|
|
|
[**Cadastre-se no HackenProof**](https://hackenproof.com/register) comece a ganhar com seus hacks!
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Adquira o [**swag oficial da PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) **grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me no Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|