Durante os dias 20 e 21 de maio foi realizada mais uma edição da BSides São Paulo. Trata-se de uma mini-conferência inspirada na Security B-Sides, que sempre acontece em conjunto com algum grande evento de segurança e tem como objetivo apoiar o evento principal, atraindo participantes e palestras para ambos encontros.
A última edição contou com mais de 24h de atividades, iniciando-se no último sábado com workshops e uma competição de “Capture the Flag”, que misturou as modalidades Jeopardy e Cyber Range. No domingo, ocorreram outros workshops, palestras, além do tradicional Churrascker, que atraiu diversos profissionais e entusiastas da área de segurança da informação.
Em uma das atividades oferecidas no domingo, tive a oportunidade de realizar o workshop Revers@android – inspirado em uma pesquisa realizada pela nossa colega Denise Giusto, na Argentina.
A turma que participou da atividade lotou o laboratório e, dentre muitas perguntas interessantes, me questionaram como poderiam reproduzir a atividade em seus computadores pessoais. Conforme prometido, neste post, vou indicar como é possível buscar o material utilizado na atividade e reproduzir o que foi visto.
Workshop: Revers@ndroid
A proposta foi de apresentar conceitos básicos de análise de APKs (i.e. apps para Android) e verificar como fazer a engenharia reversa de ransomwares mobile das famílias Simplocker (2014) e Lockerpin (2015).
Ambas famílias possuem fragilidades que permitem (facilmente) obter as chaves utilizadas para a encriptação dos arquivos. De posse dessa chave, é possivel recuperar os dados afetados contando com conhecimentos simples de programação – Python, no caso da atividade.
Na atividade, vimos como a distribuição Linux Santoku pode auxiliar na preparação de um ambiente de análise de dispositivos móveis – principalmente para apps Android.
Vimos que os apps Android são executados em ambientes virtuais provisionados no Android Runtime. Nesse ambiente está presente uma máquina virtual capaz de executar instruções no formato DEX (“Dalvik Executable”) – por padrão, a máquina virtual era anteriormente a “Dalvik Machine”, e a partir do Android 5.0, “Android Runtime (ART)”.
Essa visão sobre a arquitetura do Android ajuda a dar base para a compreensão do funcionamento das ferramentas utilizadas na atividade. Vimos também que um APK consiste basicamente em um ZIP que contém alguns arquivos e estruturas pré-definidas:
Componente | Finalidade |
AndroidManifest.xml | Apresenta informações essenciais sobre o aplicativo ao sistema Android |
classes.dex | Arquivo executável (pelo Android Runtime) em formato DEX |
resources.arsc | Arquivo contendo recursos pré-compilados do app |
res/ | Diretório contendo recursos não compilados no resources.arsc |
assets/ | [opcional] Diretório contendo recursos que podem ser acessados pela classe AssetManager |
lib/ | [opcional] Diretório contendo bibliotecas compiladas em código nativo do Android (ver: Android NDK) |
META-INF/ | Diretório contendo metadados do app |
Com isso, pretende-se esclarecer de maneira geral o que ocorre ao se utilizar ferramentas, como DEX2JAR, para recuperar (com razoável grau de precisão) o código fonte de um APK.
A partir desse entendimento, prosseguimos a análise com a seguinte abordagem e ferramentas:
O restante da atividade consistiu em realizar a análise dos APKs, começando pelo ransomware Simplocker e depois analisando o Lockerpin.
No caso do Simplocker, nota-se que há um password hardcoded no app, de maneira que os arquivos comprometidos podem ser recuperados a partir de informações obtidas diretamente na análise estática do APK.
No caso do Lockerpin, o ransomware gera a chave (simétrica) de encriptação dos arquivos no próprio dispositivo.
No entanto, ao invés de proteger essa chave utilizando meios que fazem uso de criptografia assimétrica, a chave é simplemente armazenada no contexto da aplicação e fica acessível via a interface SharedPreferences. Assim, tendo acesso a esse dado do aplicativo – o que usualmente demanda privilégio de root – é possível recuperar a chave para descriptografar os arquivos comprometidos.
Dessa forma, espera-se que os participantes tenham conhecido um pouco mais a respeito das ameaças digitais, inclusive ransomwares, que podem comprometer dispositivos móveis como smartphones e tablets.
Além disso, perceber que mesmo para aqueles que conhecem pouco a respeito de análise de apps é possivel realizar engenharia reversa de ransomwares como Simplocker e Lockerpin, que apesar de simples, causaram um grande impacto ao longo desses anos.
Para quem quiser colocar a mão na massa, deixo aqui as indicações de como encontrar o material dessa atividade. A apresentação encontra-se disponível no SlideShare, enquanto os materiais utilizados podem ser encontrados no GitHub.
Amostras analisadas:
Detecção | Hash (SHA1) |
Android/Simplocker.A | 725E9553040845D4B7AD2B0FD806597666D61605 |
Android/Lockerpin.B | 06771F939751575D33A3CAF085D0ACE6C1B10D33 |
Imagem: foto cedida por Anchises Moraes (organização da BSides).