
O Web Exploit Detector é uma aplicação Node.js usada para detectar possíveis infecções, código malicioso e arquivos suspeitos em ambientes de hospedagem web.

O Detector de Exploits Web é uma aplicação Node.js (e módulo NPM) usada para detetar possíveis infeções, código malicioso e ficheiros suspeitos em ambientes de alojamento web. Esta aplicação destina-se a ser executada em servidores web que alojam um ou mais sites. A execução da aplicação gera uma lista de ficheiros potencialmente infetados, juntamente com uma descrição da infeção e referências a recursos online relacionados.
A partir da versão 1.1.0, a aplicação também inclui utilitários para gerar e comparar instantâneos de uma estrutura de diretórios, permitindo aos utilizadores verificar se algum ficheiro foi modificado, adicionado ou removido.
A aplicação está alojada aqui no GitHub para que outros possam beneficiar dela, bem como permitir que outros contribuam com as suas próprias regras de deteção.
A forma mais simples de instalar o Detector de Exploits Web é como um módulo NPM global: -
npm install -g web_exploit_detector
Se estiver a executar Linux ou outro SO baseado em Unix, poderá ser necessário executar este comando como root (ex.: sudo npm install -g web_exploit_detector).
O módulo deve ser atualizado regularmente para garantir que todas as regras de deteção mais recentes estão presentes. Executar o comando acima irá sempre descarregar a versão estável (testada) mais recente. Para atualizar uma versão já instalada, basta executar o seguinte: -
npm update -g web_exploit_detector
Novamente, poderá ter de usar o comando sudo como acima.
Também pode clonar o repositório Git e executar o script diretamente da seguinte forma: -
git clone https://github.com/polaris64/web_exploit_detectorcd web_exploit_detectornpm installSe instalou o Detector de Exploits Web como um módulo NPM (veja acima), então executar o scanner é tão simples quanto executar o seguinte comando, passando o caminho para a sua raiz web (localização dos ficheiros do seu site): -
wed-scanner --webroot=/var/www/html
Outras opções de linha de comando estão disponíveis, basta executar wed-scanner --help para ver uma mensagem de ajuda a descrevê-las.
Executar o script desta forma produzirá saída legível por humanos na consola. Isto é muito útil ao executar o script com cron, por exemplo, pois a saída pode ser enviada como um e-mail sempre que o script for executado.
O script também suporta a escrita dos resultados num formato JSON mais amigável para computadores para processamento posterior. Para ativar esta saída, veja o argumento de linha de comando --output.
Simplesmente chame o script através do node e passe o caminho para a sua raiz web da seguinte forma: -
node index.js --webroot=/var/www/html
O Detector de Exploits Web também vem com dois utilitários para ajudar a identificar ficheiros que possam ter sido alterados inesperadamente. Um ataque bem-sucedido a um site geralmente envolve a eliminação de ficheiros, adição de novos ficheiros ou alteração de ficheiros existentes de alguma forma.
Um instantâneo (conforme usado por estes utilitários) é um ficheiro JSON que lista todos os ficheiros, bem como uma descrição do seu conteúdo no momento em que o instantâneo foi criado. Se, por exemplo, um instantâneo foi gerado na segunda-feira e o site foi atacado na terça-feira, então executar uma comparação entre este instantâneo e os ficheiros atuais do site mostrará que um ou mais ficheiros foram adicionados, eliminados ou alterados. O objetivo destes utilitários é, portanto, permitir que estes instantâneos sejam criados e que as comparações sejam realizadas quando necessário.
O instantâneo armazena cada caminho de ficheiro juntamente com um hash SHA-256 do conteúdo do ficheiro. Um hash, ou resumo, é um pequeno resumo de uma mensagem, que neste caso é o conteúdo do ficheiro. Se o conteúdo do ficheiro mudar, mesmo de forma muito pequena, o hash tornar-se-á completamente diferente. Isto fornece uma boa forma de detetar quaisquer alterações no conteúdo dos ficheiros.
Os seguintes dois utilitários também são instalados como parte do Detector de Exploits Web: -
wed-generate-snapshot: este utilitário permite gerar um instantâneo para todos os ficheiros (recursivamente) num diretório especificado por "--webroot". O instantâneo será guardado num ficheiro especificado na opção "--output".wed-compare-snapshot: uma vez gerado um instantâneo, este pode ser comparado com o conteúdo atual do mesmo diretório. O instantâneo a verificar é especificado usando a opção "--snapshot". O diretório base a verificar está armazenado no instantâneo, mas se o diretório base tiver mudado desde que o instantâneo foi gerado, a opção --webroot pode ser usada.Os instantâneos podem ser gerados com a frequência necessária, mas, como regra geral, devem ser gerados sempre que um site estiver num estado limpo (não infetado) e sempre que uma alteração legítima for feita. Para sites baseados em CMS como WordPress, os instantâneos devem ser criados regularmente, pois novos carregamentos farão com que o novo estado mude em relação ao instantâneo armazenado. Para sites cujos ficheiros nunca devem mudar, um único instantâneo pode ser gerado e depois usado indefinidamente para garantir que nada realmente mude.
O script src/web-exploit-detector.js é um módulo ES6 que exporta o conjunto de regras como rules, bem como várias funções: -
executeTests(settings): executa o verificador de exploração com base no objeto settings passado. Para utilização, consulte o script index.js.formatResult(result): recebe um único result de teste do array retornado por executeTests() e gera uma string de resultados pronta para saída para esse teste.getFileList(path): retorna um array de ficheiros a partir do path base usando readDirRecursive().processRulesOnFile(file, rules): processa todas as regras do array rules num único file (caminho de string).readDirRecursive(path): função recursiva que retorna uma Promise que será resolvida com um array de todos os ficheiros em path e subdiretórios.O script src/cli.js é uma interface de linha de comando (CLI) simples para este módulo, conforme usado pelo script wed-scanner, portanto, ler este script mostra uma forma deste módulo ser usado.
O projeto usa Babel para compilar os módulos ES6 em "src" para módulos JavaScript simples em "lib". Se estiver a executar uma versão mais antiga do Node.js, os módulos podem ser require()'d a partir do diretório "lib".
O pacote contém Babel como uma dependência de desenvolvimento e os scripts "build" e "watch:build". Ao executar o script "build" (npm run build), os módulos ES6 em "./src" serão compilados e guardados em "./lib", onde são incluídos pelos scripts CLI.
O diretório "./lib" está incluído no repositório para que qualquer utilizador possa clonar o repositório e executar a aplicação diretamente sem ter de instalar dependências de desenvolvimento e construir a aplicação.