ofuscação
o que é ofuscação?Ofuscação significa tornar algo difícil de entender. O código de programação é frequentemente ofuscado para proteger a propriedade intelectual ou segredos comerciais e para evitar que um invasor inverta a engenharia de um programa de software proprietário.
criptografar alguns ou todos os códigos de um programa é um método de ofuscação. Outras abordagens incluem remover metadados potencialmente reveladores, substituir nomes de classes e variáveis por rótulos sem sentido e adicionar código não utilizado ou sem sentido a um script de aplicativo. Uma ferramenta chamada obfuscator converterá automaticamente o código-fonte direto em um programa que funciona da mesma maneira, mas é mais difícil de ler e entender.Infelizmente, codificadores maliciosos também usam esses métodos para impedir que seus mecanismos de ataque sejam detectados por ferramentas antimalware. O ataque SolarWinds 2020 é um exemplo de hackers usando ofuscação para fugir das defesas.
as técnicas de Desobfuscação podem ser usadas para fazer engenharia reversa-ou desfazer-ofuscação. Essas técnicas incluem o corte do programa, que envolve o estreitamento do Código do programa apenas para as declarações relevantes em um determinado ponto do programa. A otimização do compilador e a síntese do programa são duas outras técnicas de desobfuscação. Ofuscação visa tornar a engenharia reversa difícil e não vale a pena o problema.
como funciona a ofuscação?
ofuscação em código de computador usa frases rotundas complexas e lógica redundante para tornar o código difícil para o leitor entender. O objetivo é distrair o leitor com a sintaxe complicada do que está lendo e dificultar a determinação do verdadeiro conteúdo da mensagem.
com código de computador, o leitor pode ser uma pessoa, um dispositivo de computação ou outro programa. A ofuscação também é usada para enganar ferramentas antivírus e outros programas que dependem muito de assinaturas digitais para interpretar o código. Decompilers estão disponíveis para linguagens como Java, sistemas operacionais, como Android e iOS, e plataformas de desenvolvimento como .LÍQUIDA. Eles podem, automaticamente, fazer engenharia reversa de código-fonte; ofuscação visa torná-lo difícil para esses programas para fazer o seu descompilação bem.
a ofuscação de código não se trata de alterar o conteúdo do código original de um programa, mas de tornar o método de entrega e a apresentação desse código mais confusos. A ofuscação não altera a forma como o programa funciona ou sua saída final.
o que se segue é um trecho de exemplo de código JavaScript normal:
var greeting = 'Hello World';greeting = 10;var product = greeting * greeting;
esse mesmo trecho em forma ofuscada se parece com isso:
var _0x154f=;var _0x52df=function(_0x159d61,_0x12b953){_0x159d61=_0x159d61-0x122;var _0x154f4b=_0x154f;return _0x154f4b;};(function(_0x19e682,_0x2b7215){var _0x5e377c=_0x52df;while(!!){try{var _0x2d3a87=-parseInt(_0x5e377c(0x129))*parseInt(_0x5e377c(0x123))+-parseInt(_0x5e377c(0x125))*parseInt(_0x5e377c(0x12e))+parseInt(_0x5e377c(0x127))*-parseInt(_0x5e377c(0x126))+-parseInt(_0x5e377c(0x124))*-parseInt(_0x5e377c(0x12f))+-parseInt(_0x5e377c(0x128))*-parseInt(_0x5e377c(0x12b))+parseInt(_0x5e377c(0x12a))*parseInt(_0x5e377c(0x12d))+parseInt(_0x5e377c(0x12c))*parseInt(_0x5e377c(0x122));if(_0x2d3a87===_0x2b7215)break;else _0x19e682(_0x19e682());}catch(_0x22c179){_0x19e682(_0x19e682());}}}(_0x154f,0x1918c));var greeting='Hello\x20World';greeting=0xa;var product=greeting*greeting;
a versão ofuscada é quase impossível de seguir usando o olho humano.
técnicas de ofuscação
a ofuscação envolve vários métodos diferentes. Muitas vezes, várias técnicas são usadas para criar um efeito em camadas.
programas escritos em linguagens de software compiladas, como C# e Java, são mais fáceis de ofuscar. Isso ocorre porque eles criam instruções de nível intermediário que geralmente são mais fáceis de ler. Em contraste, o C++ é mais difícil de ofuscar, porque compila para o código da máquina, o que é mais difícil para as pessoas trabalharem.
algumas técnicas comuns de ofuscação incluem o seguinte:
- renomeação. O ofuscador altera os métodos e nomes das variáveis. Os novos nomes podem incluir caracteres não imprimíveis ou invisíveis.
- embalagem. Isso comprime todo o programa para tornar o código ilegível.
- fluxo de controle. O código descompilado é feito para se parecer com a lógica spaghetti, que é desestruturada e difícil de manter o código onde a linha de pensamento é obscurecida. Os resultados deste código não são claros e é difícil dizer qual é o ponto do Código olhando para ele.
- transformação do padrão de instrução. Essa abordagem usa instruções comuns criadas pelo compilador e as troca por instruções mais complexas e menos comuns que efetivamente fazem a mesma coisa.
- inserção de código fictício. O código fictício pode ser adicionado a um programa para dificultar a leitura e a engenharia reversa, mas não afeta a lógica ou o resultado do programa.
- metadados ou remoção de código não utilizada. O código e os metadados não utilizados fornecem ao leitor informações extras sobre o programa, bem como anotações em um documento do Word, que podem ajudá-lo a lê-lo e depurá-lo. A remoção de metadados e código não utilizado deixa o leitor com menos informações sobre o programa e seu código.
- inserção de predicado opaco. Um predicado no código é uma expressão lógica que é verdadeira ou falsa. Predicados opacos são ramos condicionais – ou declarações if-then-onde os resultados não podem ser facilmente determinados com análise estatística. Inserir um predicado opaco introduz código desnecessário que nunca é executado, mas é intrigante para o leitor que tenta entender a saída descompilada.
- anti-depuração. Engenheiros de software legítimos e hackers usam ferramentas de depuração para examinar o código linha por linha. Com essas ferramentas, os engenheiros de software podem detectar problemas com o código e os hackers podem usá-los para fazer engenharia reversa do Código. Os profissionais de segurança de TI podem usar ferramentas anti-depuração para identificar quando um hacker está executando um programa de depuração como parte de um ataque. Os Hackers podem executar ferramentas anti-depuração para identificar quando uma ferramenta de depuração está sendo usada para identificar as alterações que estão fazendo no código.
- anti-adulteração. Essas ferramentas detectam o código que foi adulterado e, se ele foi modificado, ele interrompe o programa.
- criptografia de String. Este método usa criptografia para ocultar as strings no executável e só restaura os valores quando eles são necessários para executar o programa. Isso torna difícil passar por um programa e procurar strings específicas.
- transposição de código. Esta é a reordenação de rotinas e ramificações no código sem ter um efeito visível em seu comportamento.
como medir o sucesso da ofuscação
o sucesso dos métodos de ofuscação pode ser medido usando os seguintes critérios:
- força. A medida em que o código transformado resiste a tentativas automatizadas de desobfuscação determina a força. Quanto mais esforço, tempo e recursos forem necessários, mais forte será o código.
- diferenciação. O grau em que o código transformado difere do original é outra medida de quão eficaz ele é. Algumas das maneiras usadas para julgar a diferenciação incluem:
- o número de predicados que o novo código contém.
- a profundidade da árvore de herança (DIT) – uma métrica usada para indicar a complexidade do Código. Um DIT mais alto significa um programa mais complexo.
- despesa. Um método de ofuscação econômico será mais útil do que um que é caro, particularmente quando se trata de quão bem ele escala para aplicações maiores.
- complexidade. Quanto mais camadas o ofuscador adicionar, mais complexo será o programa, tornando a ofuscação mais bem-sucedida.
vantagens da ofuscação
as principais vantagens da ofuscação são as seguintes:
- segredo. A ofuscação oculta as informações valiosas contidas no código. Esta é uma vantagem para organizações legítimas que procuram proteger o código de concorrentes e atacantes. Por outro lado, os maus atores capitalizam o sigilo da ofuscação para esconder seu código malicioso.
- eficiência. Algumas técnicas de ofuscação, como a remoção de código não utilizada, têm o efeito de reduzir o programa e torná-lo menos intensivo em recursos para ser executado.
- segurança. A ofuscação é um método de segurança integrado, às vezes chamado de autoproteção de aplicativo. Em vez de usar um método de segurança externo, ele funciona dentro do que está sendo protegido. É adequado para proteger aplicativos que são executados em um ambiente não confiável e que contêm informações confidenciais.
desvantagens da ofuscação
uma das principais desvantagens da ofuscação é que ela também é usada em malware. Escritores de Malware usá-lo para fugir de programas antivírus que digitalizam o código para recursos específicos. Ao obscurecer esses recursos, o malware parece legítimo para o software antivírus.
técnicas comuns que os autores de malware usam incluem:
- exclusivo ou (XOR). Uma operação que oculta dados aplicando valores XOR ao código para que apenas um olho treinado possa descriptografá-lo.
- ROT-13. Uma instrução que substitui o código por caracteres aleatórios.
com ofuscação, em vez de desenvolver um novo malware, os autores reembalam os métodos de ataque de commodities comumente usados para disfarçar seus recursos. Em alguns casos, atores maliciosos incluem técnicas específicas do Fornecedor.
outra desvantagem da ofuscação é que pode tornar o código mais difícil de ler. Por exemplo, o código que usa o método de ofuscação de criptografia de string requer a descriptografia das strings em tempo de execução, o que retarda o desempenho.
ofuscação e SolarWinds
um ataque à SolarWinds, uma fabricante de software de gerenciamento e monitoramento de TI de Austin, Texas, que se acredita ter começado em setembro de 2019, resultou em uma série de outras empresas e agências governamentais sendo violadas. O ataque foi descoberto em dezembro de 2020 e é atribuído a hackers russos. Inicialmente, comprometeu a plataforma de gerenciamento de TI Orion da SolarWinds.
os invasores usaram Malware Sunburst, que combinava técnicas de ofuscação, aprendizado de máquina e ia para plantar um backdoor em atualizações de software para a plataforma Orion. Para disfarçar seus esforços e contornar as defesas, eles alteraram os logs de auditoria, arquivos e programas excluídos após o uso e falsificaram a atividade para fazê-la aparecer como aplicativos legítimos na rede.
suspeita-se que este ataque à cadeia de suprimentos tenha permanecido sem ser detectado por mais de um ano. O malware inserido no Código Orion estava inativo e oculto até que os usuários baixassem as atualizações infectadas. Em seguida, ele se espalhou pela rede sem ser detectado e infectou uma longa lista de organizações que usam o Orion.A ofuscação é uma das muitas técnicas que os hackers empregam para invadir sistemas de TI. Saiba mais sobre a defesa contra vários tipos de ataques de segurança cibernética no guia detalhado de planejamento de segurança cibernética da TechTarget.