it-swarm-pt.tech

Como posso estar protegido contra vulnerabilidades de imagens?

Acabei de ler esta pergunta Qual é a vulnerabilidade de imagem corrompida? Como funciona? (GIFAR, dados EXIF ​​com javascript, etc.)

Estou me perguntando como posso proteger a mim e aos usuários do meu site.

Meus usuários têm permissão para fazer upload de suas próprias imagens (por exemplo, avatares do fórum, imagens como parte de uma mensagem), essas imagens sendo exibidas para todos os outros visitantes da página correspondente.

O que posso fazer para garantir que um arquivo carregado seja uma imagem real e simples e não outra coisa? Não estou perguntando sobre uma maneira de superar vulnerabilidades específicas, estou perguntando como posso ter certeza de que o arquivo não contém nada além de dados de imagem simples? (então provavelmente estarei protegido também contra vulnerabilidades 'ainda não encontradas')

25
xun

Eu tenho algumas sugestões:

  1. Use um domínio separado. Hospede as imagens em um domínio separado que é usado apenas para hospedar imagens fornecidas pelo usuário.

    Isso garantirá que muitos ataques no nível do navegador possam ter apenas efeitos limitados. Por exemplo, suponha que o navegador do usuário esteja vulnerável a ataques de sniffing do tipo de conteúdo; portanto, é possível fazer upload de uma imagem que alguns navegadores tratem como HTML contendo Javascript malicioso; essa defesa garante que o Javascript malicioso só possa adulterar as imagens de outros usuários e não pode acessar os cookies ou o conteúdo do seu site ou outros itens sensíveis à segurança. No entanto, isso não se defende contra ataques de injeção de código que exploram uma vulnerabilidade (por exemplo, uma saturação de buffer, uma liberação dupla) e executam código nativo.

  2. Defenda-se contra o sniffing do tipo de conteúdo. Siga práticas que descrevi em outros lugares para se defender contra ataques de sniffing do tipo de conteúdo. O mais importante é definir um cabeçalho Content-Type: Correto nas respostas HTTP em que você serve a imagem. Também pode ser útil incluir um cabeçalho X-Content-Type-Options: nosniff, Para impedir que algumas versões do IE tentem fazer sniffing do tipo de conteúdo.

  3. Converta para um formato fixo. Converta a imagem de entrada em um bitmap (mantendo apenas os dados do bitmap e jogando fora todas as anotações extras) e, em seguida, converta o bitmap para o formato de saída desejado. Uma maneira razoável de fazer isso é converter para o formato PBM e depois para PNG.

    Essa não é uma maneira confiável de interromper os ataques, mas reduz parte da superfície de ataque disponível para o atacante. Por exemplo, impede o invasor de anexar metadados maliciosos criados para explorar alguma vulnerabilidade no analisador de imagens. Também não oferece ao invasor a opção de formatos de imagem. Para derrotar essa defesa, o atacante deve encontrar uma vulnerabilidade no decodificador PNG, no código que lê os dados de pixel da imagem. Isso evita que o invasor explore uma vulnerabilidade no decodificador para outro formato de imagem ou na parte do analisador PNG que lê metadados. Portanto, embora potencialmente útil na redução do risco, eu não esperaria que essa defesa fosse suficiente.

  4. Considere a randomização. Considere a inserção de algum ruído aleatório na imagem. Por exemplo, você pode fazer um loop sobre todos os pixels e, para cada uma das três intensidades (correspondentes a RGB) para esse pixel, escolher aleatoriamente entre adicionar 1, subtrair 1 ou deixar esse valor de intensidade sozinho. Isso introduz um pouquinho de ruído na imagem, mas espero que não seja suficiente para ser percebido pelos espectadores. E, se você tiver sorte, poderá haver menos chances de sucesso de alguns ataques, porque o atacante não pode prever completamente o resultado da transformação. Essa defesa é altamente heurística e certamente não é garantida como eficaz, mas é possível que ajude, se usada em conjunto com as outras defesas que descrevi, como uma espécie de estratégia de defesa em profundidade do cinto e suspensórios . Mas, por favor, entenda que essa defesa sozinha provavelmente não é adequada.

Dependendo de como você está preocupado com esses riscos e a sensibilidade do seu site, você não precisa executar os quatro. Se você não está preocupado com as vulnerabilidades de injeção de código no navegador, você pode fazer apenas os itens 1 e 2. Se você deseja proteção parcial contra vulnerabilidades de injeção de código no navegador, pode fazer apenas os itens 1, 2 e 3.

20
D.W.

Uma solução possível seria reescrever o arquivo como um formato conhecido simples antes de exibir a imagem no site. por exemplo. alguém carrega uma imagem (possivelmente com uma exploração), imediatamente, o servidor lê a imagem de uma forma segura e escreve uma nova imagem. Se o programa/script que costumava ler a imagem carregada ler apenas dados de cores, a nova imagem poderá conter apenas dados de cores.

6
dvb

Eu acho que depende da perspectiva? Do ponto de vista do usuário final, proteger-se contra explorações (especialmente sobrecargas de memória/buffer) de imagens ou qualquer outra fonte (novamente, que explora vulnerabilidades de estouro de buffer) se beneficiaria de garantir que os recursos de proteção de memória estivessem totalmente ativados. No Windows, mecanismos como DEP (baseado no NX/XD) e ASLR, entre outros, são utilizados para reduzir a probabilidade de execução de código devido a uma saturação de buffer. A DEP pode ser ativada por padrão para todos os aplicativos, em vez de apenas aceitar, por exemplo.

Isso é uma adição às sugestões usuais de uso de antivírus, manutenção de software corrigido e outras coisas óbvias.

Se você tiver a opção de colocar seus aplicativos em área restrita para limitar os danos (pós-exploração), essa também é uma via viável. No mínimo, você pode usar o princípio do menor privilégio (por exemplo, não usando contas administrativas onde não for necessário).

Espero que ajude.

4
Garrett