Ataques de engenharia reversa e adulteração ameaçam todos os aplicativos móveis, mas muitos aplicativos aplicam técnicas básicas de proteção de código (ou nenhuma!) Para se defender contra essas tentativas. Na verdade, a pesquisa mostrou que metade dos principais aplicativos de serviços financeiros do mundo no mercado Android não está usando técnicas de proteção de aplicativos adequadas, como obscurecimento de código e dados.
A ofuscação é uma forma de os desenvolvedores Android protegerem seus aplicativos de tentativas de engenharia reversa e adulteração, mascarando seu código-fonte e dados. Sem esse nível de proteção, os agentes mal-intencionados podem facilmente obter uma compreensão do funcionamento interno de um aplicativo. Isso pode levar a propriedade intelectual roubada, clones de aplicativos distribuídos, dados confidenciais extraídos, perda de receita e potencialmente muito mais.
Vamos explorar por que os desenvolvedores de aplicativos móveis devem considerar o uso de ofuscação para proteger seus aplicativos de maneira eficaz. Também discutiremos os diferentes níveis de ofuscação e por que os desenvolvedores precisam usar várias técnicas avançadas para proteger adequadamente seus aplicativos de ataques estáticos e dinâmicos.
O que é ofuscação de código e dados?
A ofuscação de código e dados é uma forma de proteção de código que garante que um aplicativo seja difícil de descompilar, tornando seu código-fonte e seus dados um desafio para humanos e máquinas entenderem. Quando é mais difícil para terceiros não autorizados obter insights sobre o funcionamento interno de um aplicativo, há menos oportunidades para os agentes de ameaças explorarem o aplicativo roubando informações no aplicativo, como IP ou dados confidenciais, por exemplo.
A ofuscação altera o código e seus dados sem modificar o comportamento do aplicativo ou a experiência do usuário. Ele varia de renomear classes ou métodos para transformar a aritmética ou modificar o fluxo de controle do aplicativo ou criptografar dados do aplicativo. Abaixo está uma análise de algumas das técnicas de ofuscação mais comuns:
- Identificadores: Renomeando classes, métodos, variáveis ou bibliotecas, para citar alguns. Os desenvolvedores tendem a escolher nomes significativos para tornar seu código mais legível e permitir que depure aplicativos com mais facilidade. Substituindo identificadores por caracteres sem sentido, pode tornar o código mais difícil de entender. Vale a pena notar, entretanto, que esse tipo de ofuscação não é suficiente por si só. Os malfeitores ainda podem entender a semântica do aplicativo usando o controle ou fluxo de dados ou por meio de interações visíveis do sistema operacional, em vez de identificadores significativos. Além disso, os identificadores de fontes externas não podem ser alterados.
- Controle de fluxo: Alterando a estrutura do código do aplicativo, a ofuscação do fluxo de controle funciona reordenando linhas de código, simplificando funções, substituindo padrões de código, inserindo código morto e muito mais. Essas transformações aumentam a complexidade da própria lógica, tornando o código tão imprevisível que nem mesmo os descompiladores podem analisá-lo.
- Dados: Criptografar strings e outros dados no código-fonte. Os aplicativos móveis incluem informações confidenciais, como chaves de API, senhas de banco de dados ou chaves secretas embutidas em código. Criptografando-os e ocultando o fluxo de dados relacionado – ou seja, quando o aplicativo usa essas informações – os desenvolvedores de aplicativos podem proteger esses dados mesmo que agentes mal-intencionados realizem engenharia reversa com sucesso em grandes partes do código-fonte.
Essas são apenas três técnicas de ofuscação de código e dados que podem ajudar a proteger seu aplicativo móvel contra agentes mal-intencionados. Para maximizar sua proteção contra descompiladores ou desmontadores, é melhor implementar várias técnicas avançadas, como ofuscação de fluxo de controle e criptografia.
Como a ofuscação evita incidentes de segurança
Os descompiladores e desmontadores costumam ser usados para tornar mais fácil para os agentes mal-intencionados entender como um aplicativo funciona. Mesmo que uma réplica exata do código-fonte original não seja possível porque muitas informações são perdidas durante a compilação em um aplicativo executável, descompiladores e desmontadores produzem um tipo de código-fonte, ou seja, pseudocódigo, que é mais fácil de ler e entender para humanos do que o código executável por máquina. O pseudocódigo do aplicativo pode fornecer um tesouro de informações para os agentes de ameaças. Depois de conhecer a lógica interna de um aplicativo móvel, eles podem manipular sua funcionalidade, resultando potencialmente em roubo de propriedade intelectual e perda de receita. Esses tipos de engenharia reversa e tentativas de adulteração – chamados de ataques de análise estática – dependem da descoberta da lógica de um aplicativo. É por isso que o OWASP recomenda a ofuscação como uma prática de codificação segura que todo desenvolvedor de aplicativo móvel deve implementar ao criar aplicativos que lidam com dados confidenciais e / ou funcionalidade.
Por meio da ofuscação, os desenvolvedores do Android podem garantir que, mesmo usando ferramentas sofisticadas de análise estática, os agentes mal-intencionados terão dificuldade em entender o código de seu aplicativo móvel. Isso requer ir além da simples ofuscação de nome, no entanto, e usar técnicas de ofuscação avançadas que modificam o fluxo lógico do aplicativo e incluem camadas de criptografia adicionais. Compreender desde o início a necessidade de ofuscação e a eficácia das medidas de segurança implementadas em um aplicativo móvel melhora a postura de segurança do próprio aplicativo. Uma vez que a necessidade seja compreendida, testar a segurança do aplicativo móvel continuamente durante o processo de desenvolvimento, encontrar problemas e corrigi-los rapidamente são etapas críticas.
Quanto mais técnicas de ofuscação forem usadas, melhor protegido será seu aplicativo contra ataques de engenharia reversa, porque cada camada torna ainda mais difícil para o código ser compreendido tanto por humanos quanto por ferramentas automatizadas.
Como um ataque típico geralmente vai além da análise estática, os desenvolvedores também devem considerar a implementação de autoproteção de aplicativo em tempo de execução (RASP) para proteger seus aplicativos também contra ataques dinâmicos. As implementações do RASP detectam comportamentos suspeitos e respondem com ações pré-programadas para interromper ameaças durante o tempo de execução.
Desenvolvedores de dispositivos móveis precisam ofuscar seu código
Os desenvolvedores do Android devem implementar medidas de segurança para proteger seus aplicativos contra engenharia reversa, adulteração ou outros ataques. Uma abordagem em camadas para a segurança móvel, incluindo ofuscação de código, é crucial para preservar a integridade de seu aplicativo Android, salvaguardar seus dados e manter a reputação de sua empresa.
O DexGuard da Guardsquare oferece várias camadas de proteção de código e RASP. Isso significa que os desenvolvedores Android podem proteger seus aplicativos de ataques estáticos e dinâmicos. As medidas de segurança do DexGuard também são aplicadas polimorficamente, o que significa que o aplicativo é ofuscado de forma diferente durante cada nova construção. A proteção de aplicativos que evolui com o tempo é a melhor maneira de ficar à frente de agentes mal-intencionados e manter seus aplicativos Android seguros.
Além disso, o AppSweep by Guardsquare permite que os desenvolvedores Android testem continuamente a segurança de seus aplicativos enquanto os desenvolvem e fornece insights acionáveis para corrigir problemas no código e dependências.