Executei um scanner de malware em meu site e ele marcou vários arquivos EXE compactados como arquivos de risco em potencial (esses arquivos foram carregados pelos usuários). Como sou capaz de descompactar os arquivos no meu Mac, presumo que sejam arquivos ZIP reais e não apenas algo como arquivos PHP renomeados.
Portanto, o arquivo ZIP não deve ser um risco para o meu servidor web, certo?
Se eles são realmente arquivos exe do Windows compactados, eles devem ser inofensivos para o seu sistema Linux, a menos que você tenha algo como o Wine instalado que possa tentar executá-los.
Mas se eles estiverem em seu caminho na web, eles podem ser malware e representar um grande risco para os visitantes de seus sites (e você, por sua vez, se acabar sendo marcado como fonte de malware e os usuários receberem avisos feios quando tentarem visitar seu local).
Embora você provavelmente esteja certo neste caso, sua suposição pode nem sempre ser válida. Um arquivo ZIP permanece válido mesmo se você adicionar dados arbitrários a ele , então é bem possível criar um arquivo que seja simultaneamente um arquivo ZIP válido contendo dados inocentes e também um script PHP malicioso. Nem é particularmente difícil; apenas concatene o código PHP e o arquivo ZIP e certifique-se (por exemplo, usando
__halt_compiler()
) de que o PHP não tentará analisar os dados do arquivo ZIP anexado.Esse truque é legitimamente usado para criar arquivos ZIP de extração automática, mas é perfeitamente possível anexar qualquer outro dado oculto ou código executável em um arquivo ZIP da mesma maneira. Alguns programas podem se recusar a abrir esses arquivos ZIP modificados (mas, se assim for, eles estão violando tecnicamente a especificação do formato ZIP) ou podem identificar o arquivo como algo diferente de um arquivo ZIP por padrão, mas geralmente, se você alimentar tal arquivo em código que espera um arquivo ZIP, provavelmente será aceito como um.
Um uso malicioso mais comum desses truques é disfarçar o código de exploração em um contêiner baseado em ZIP (por exemplo, um arquivo JAR) como algo inofensivo (como uma imagem GIF, como no exploit GIFAR ), mas não há razão para que não possa ser usado em outra direção também, por exemplo, para ignorar um filtro de upload de arquivo ingênuo que proíbe o upload de scripts PHP, mas permite arquivos ZIP, sem verificar se o arquivo carregado pode ser ambos ao mesmo tempo.
Há pelo menos duas considerações notáveis que você deve levar em conta:
Então, dependendo do que seu servidor faz, o arquivo pode ser prejudicial para seu servidor ou outros usuários. Como sou bastante cauteloso com EXEs baixados da Internet, diria que possíveis downloaders são os usuários em maior risco aqui.
Você pode verificar se os arquivos podem ser executados em seu servidor Linux simplesmente verificando-os com
file FILENAME.exe
o comando. Os binários Elf (o formato executável usado no Linux) podem ser nomeados com.exe
extensão para confundir um administrador desavisado do Linux, então provavelmente é uma boa ideia fazer essa verificação antes de confiar cegamente que esses arquivos não são executáveis.Estou surpreso que ninguém mencionou que quaisquer dados podem ser (ou podem ser) prejudiciais a qualquer programa (com bugs). Essa é a base do fuzzying. Por exemplo, você pode ter um arquivo JPEG (ou semelhante a JPEG) que causa um estouro de buffer em decodificadores JPEG (específicos), causando qualquer coisa, desde uma negação de serviço até a execução arbitrária de código. Trata-se de subverter um programa de processamento de dados existente; não há necessidade de trazer um novo executável! E esta é a razão pela qual são necessários princípios de sandboxing, sanitização de entrada e privilégios mínimos.
Portanto, no seu caso, você pode ter um arquivo ZIP causando problemas em mecanismos de decodificação ZIP (específicos). Não é necessário que o arquivo ZIP contenha um executável nativo para que seja prejudicial.
Dito isto, seu scanner está funcionando em outro nível, mais grosseiro. Se o tipo de risco de que estou falando existisse nesses arquivos, você já foi atingido no momento em que os processou :).
Houve ataques que incorporam dados e ainda apresentam arquivos como válidos. Em um servidor configurado incorretamente ou em um aplicativo codificado incorretamente, isso pode fazer com que o código seja executado em seu servidor.
Então, cuidado com isso também.
Uma verificação adicional que você idealmente deve implementar é o método php finfo para verificar se os arquivos que estão sendo carregados pelos usuários são realmente o que você permitiu, e não algo que os usuários renomearam os arquivos apenas para enganar o sistema.
.exe descompactados também são inofensivos para servidores Linux.