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


11

Acabei de digitalizar alguns LPs e precisava de uma capa. Meu scanner não é grande o suficiente para digitalizar o álbum, então procurei e baixei as imagens da rede.

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

Agora, isso era apenas um falso positivo da Avast ou poderia realmente haver um cavalo de Troia no jpg?

Se houvesse como seria executado?

Devo admitir que esse aspecto de cavalos de Troia e vírus sempre me deixou perplexo. Como desenvolvedor de software, eu sempre verifiquei o comprimento das matrizes, etc., portanto não vejo por que coisas como saturação de buffer devem ocorrer. Entendo que as pessoas cortam os cantos e cometem erros e, se o software é complexo o suficiente, esses erros podem passar despercebidos.

Respostas:


11

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

A causa usual de tal falha de segurança é transmitir dados de imagem entre funções na pilha de chamadas e não verificar adequadamente o comprimento máximo dos dados. Isso pode ser explorado por dados inteligentemente construídos, que são superdimensionados e organizados de forma que acabem substituindo o código próximo no quadro da pilha (substituindo-o por outro código) ou substituindo ponteiros para o código que será usado para chamar outras funções ou quando a função chamada retorna ao chamador (sobrescrevendo um ponteiro para apontar para o código de exploração) ou sobrescrevendo dados de maneira a causar a exposição de outro furo. O método exato varia dependendo da falha 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 funciona pelo programa / biblioteca marcando explicitamente quais de suas páginas são dados e quais são códigos - a CPU gerará uma exceção se alguma coisa no que deveria ser dados (como dados de imagem) tentar ser executada como código. O IIRC Vista e versões anteriores e recentes do .Net tiveram todas as suas bibliotecas re-ativadas para oferecer suporte a essa proteção e também são suportadas por outros sistemas operacionais, mas isso não interrompe todas essas explorações e só funciona se explicitamente ativado (caso contrário, um muitos códigos antigos quebrariam).


9

Devo admitir que esse aspecto de cavalos de Troia e vírus sempre me deixou perplexo. Como desenvolvedor de software, eu sempre verifiquei o comprimento das matrizes, etc., portanto não vejo por que coisas como saturação de buffer devem ocorrer.

Bem-vindo ao mundo real ;-). Estouros de buffer & c. pode acontecer em muitas línguas (especialmente naqueles com gerenciamento de memória manual como C), e como os desenvolvedores cometem erros, eles não acontecer.

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

Por exemplo:

http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx

http://secunia.com/advisories/35216/

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

/programming/460519/how-are-buffer-overflows-used-to-exploit-computers


Sei que eles acontecem - é apenas uma das verificações básicas que sempre fiz no processamento de dados - verifique se tenho / aloquei espaço suficiente para os dados.
7779 ChrisF

@ ChrisF, o fato de que você precisa garantir que você verifique (em oposição ao "computador" é o próprio problema.
#

@ Zabba, o que eu quis dizer foi que "codifico o programa para verificar" ao processar dados.
ChrisF


2

Devo admitir que esse aspecto de cavalos de Troia e vírus sempre me deixou perplexo. Como desenvolvedor de software, eu sempre verifiquei o comprimento das matrizes, etc., portanto não vejo por que coisas como saturação de buffer devem ocorrer. Entendo que as pessoas cortam os cantos e cometem erros e, se o software é complexo o suficiente, esses erros podem passar despercebidos.

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

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

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


1
Verdadeiro - mas altero as opções da pasta para mostrar extensões. Tenho certeza de que ocultar extensões conhecidas causou mais problemas do que resolve. Na verdade, não consigo pensar em um problema que ele realmente resolva.
31410 ChrisF

ack completa - é uma das primeiras opções que ativam, quando se trabalha com janelas
Elvith

@ ChrisF: Bem, obviamente, o problema que resolve é que, caso contrário, os usuários podem alterar acidentalmente a extensão de um arquivo quando o renomearem. Isso causa o problema familiar "O ícone do meu documento parece engraçado e não consigo mais abri-lo. Ajuda!" :-) (e sim, às vezes faço suporte técnico para minha família).
sleske

@sleske - o Windows 7 não seleciona a extensão quando você renomeia um arquivo.
21810 ChrisF

1
@ ChrisF: Interessante, não sabia disso. Porém, costumava ser diferente - pelo menos o Windows Server 2003 seleciona o nome inteiro para uma renomeação. De qualquer forma, se os usuários puderem editar a extensão, eles irão :-).
21710 sleske
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.