Você pode realmente obter um trojan em um arquivo de imagem e, em caso afirmativo, como ele será executado?

11

Acabei de digitalizar alguns LPs e precisei de um pouco de arte de capa. Meu scanner não é grande o suficiente para escanear o álbum, então procurei e baixei as imagens da rede.

Quando fiz isso, o Avast informou que um deles continha o trojan "Win32: Hupigon-ONX" e imediatamente o colocou em quarentena. Não querendo arriscar, baixei uma cópia diferente que relatou como limpa.

Agora, isso era apenas um falso positivo do Avast ou poderia realmente ter havido um trojan no jpg?

Se houvesse como isso seria executado?

Devo admitir que esse aspecto de trojans e vírus sempre me confundiu. Como desenvolvedor de software, sempre verifiquei o tamanho das matrizes, etc., por isso não vejo por que coisas como estouro de buffer devem ocorrer. Eu entendo que as pessoas cortam cantos e cometem erros, e se o software é complexo o suficiente, esses erros podem passar despercebidos.

    
por ChrisF 07.07.2010 / 11:35

4 respostas

11

As explorações em arquivos de imagem aproveitam as falhas de saturação de buffer no código de processamento de imagem do sistema operacional. Houve várias falhas significativas encontradas na camada GDI do Windows alguns anos atrás - os patches foram lançados há muito tempo, mas as imagens de exploração ainda estão por aí, seja porque ficaram ou na esperança de atingir uma máquina que ainda não foi corrigida. .

A causa comum de tal falha de segurança é passar dados de imagem entre funções na pilha de chamadas e não verificar corretamente o comprimento máximo dos dados. Isso pode ser explorado por dados construídos de forma inteligente que são superdimensionados e organizados de forma que acabem sobrescrevendo o código no quadro da pilha (sobrescrevendo-o com outro código) ou sobrescrevendo os ponteiros para o código que será usado para chamar outras funções ou como a função chamada retorna ao chamador (sobrescrevendo um ponteiro para apontar para o código de exploração), ou sobrescrevendo os dados de tal forma que faça com que outro buraco seja exposto. O método exato varia dependendo do buraco de segurança em questão.

As CPUs modernas têm uma proteção que interrompe a maioria dessas explorações, se o código suportar isso. Isso funciona pelo programa / biblioteca marcando explicitamente quais de suas páginas são dados e quais são códigos - a CPU então levantará uma exceção se algo no que deveria ser dados (como dados de imagem) tentar ser executado como código. O IIRC Vista e versões anteriores e posteriores do .Net tiveram todas as suas bibliotecas refeitas para suportar essa proteção, e ele é suportado por outros sistemas operacionais também, mas isso não impede todas essas explorações e só funciona se explicitamente ligado (caso contrário, um monte de código antigo seria quebrado).

    
por 07.07.2010 / 12:01
9

I must admit that this aspect of trojans and viruses has always baffled me. As a software developer I've always checked length of arrays etc. so I don't see why things like buffer overruns should occur.

Bem, bem vindo ao mundo real ;-). Transbordamento de buffer & c. pode acontecer em muitas linguagens (especialmente naquelas com gerenciamento de memória manual como C), e como os desenvolvedores cometem erros, eles fazem acontecer.

Embora normalmente um estouro de buffer apenas cause falha no programa (violação de segmentação ou similar), ele pode permitir que um invasor execute código - > trojan ativado.

Por exemplo:

link

link

E para uma explicação de como isso permite a execução de código:

link

    
por 07.07.2010 / 11:58
3

Houve um exploit que causou um buffer overrun na biblioteca JPEG quebrada que poderia executar código arbitrário em 2006. A Microsoft lançou um patch para consertá-lo mais rápido do que eu já vi. Sua máquina quase certamente não é vulnerável e Hupigon agora gera muitos falsos positivos.

link

    
por 07.07.2010 / 11:59
2

I must admit that this aspect of trojans and viruses has always baffled me. As a software developer I've always checked length of arrays etc. so I don't see why things like buffer overruns should occur. I understand that people do cut corners and make mistakes and if the software is complex enough these errors can slip through.

Talvez você esteja checando todos os ponteiros, matrizes, etc. Mas tem certeza de que todos os programadores de qualquer biblioteca 3rd-patry que você (possa) usar (algum dia) também o fizeram?

A solução mais simples para isso seria baixar um arquivo como "image.jpg.exe" ou algo semelhante em vez de uma imagem real.

As formas mais avançadas de infectar seu PC já foram descritas aqui (por exemplo, Buffer Overflow, ...)

    
por 07.07.2010 / 14:19