


CWE_CHECKER é um conjunto de verificações para detectar classes de bug comuns, como desreferências do ponteiro nulo e transbordamentos de buffer. Essas classes de insetos são formalmente conhecidas como enumerações comuns de fraqueza (CWEs). As verificações são baseadas em uma variedade de técnicas de Anaylsis, que variam de heurísticas simples a análises de fluxo de dados baseadas em interpretação abstrata. Seu principal objetivo é ajudar os analistas a encontrar rapidamente caminhos de código potencialmente vulneráveis.
Seu foco principal são os binários ELF que são comumente encontrados nos sistemas operacionais Linux e UNIX. O CWE_CHECKER usa Ghidra para desmontar binários em uma representação intermediária comum e implementa suas próprias análises neste IR. Portanto, as análises podem ser executadas na maioria das arquiteturas da CPU que Ghidra pode desmontar, o que faz do CWE_CHECKER uma ferramenta valiosa para análise de firmware.
Os argumentos a seguir devem convencê -lo a experimentar o CWE_CHECKER :

A maneira mais simples é extrair a imagem mais recente do Docker do Registro de Container Github:
docker pull ghcr.io/fkie-cad/cwe_checker:latest produz uma imagem com base na atual filial principal.docker pull ghcr.io/fkie-cad/cwe_checker:stable produz uma imagem com base na mais recente versão de versão estável.docker pull ghcr.io/fkie-cad/cwe_checker:v0.9 produz uma imagem com base na versão de liberação estável v0.9. No entanto, é recomendável mudar para lançamentos estáveis mais recentes assim que forem publicados, pois as melhorias entre versões estáveis podem ser bastante significativas.Se você quiser construir a imagem do Docker, basta correr
docker build -t cwe_checker .
Dessa forma, você também pode criar imagens nativas do Docker para PCs baseados em ARM (por exemplo, Macs Apple mais recentes). Atualmente, as imagens pré-construídas do Docker são baseadas em X86.
As seguintes dependências devem ser instaladas para construir e instalar o CWE_CHECKER localmente:
Executar make all GHIDRA_PATH=/path/to/ghidra_folder (com o caminho correto para a instalação local de ghidra inserida) para compilar e instalar o CWE_CHECKER. Se você omitir o argumento GHIDRA_PATH , o instalador pesquisará seu sistema de arquivos por uma instalação local de ghidra.
O CWE_CHECKER toma um binário como entrada, executa várias verificações com base na análise estática no binário e, em seguida, produz uma lista de avisos da CWE que foram encontrados durante a análise.
Se você usar a imagem oficial do Docker, basta executar
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputSe você instalou o cwe_checker localmente, execute
cwe_checker BINARYSe você usar flocos nix, corra
nix run github:fkie-cad/cwe_checker -- BINARY Você pode ajustar o comportamento da maioria das verificações por meio de um arquivo de configuração localizado em src/config.json . Se você o modificar, adicione o sinalizador da linha de comando --config=src/config.json para dizer ao CWE_CHECKER para usar o arquivo modificado. Para obter informações sobre outros sinalizadores de linha de comando disponíveis, você pode passar o sinalizador --help para o CWE_CHECKER .
Há suporte experimental para a análise dos módulos de kernel carregáveis do Linux (LKMs). O CWE_CHECKER reconhecerá se você passar por um LKM e executará um subconjunto das verificações da CWE disponíveis para programas de espaço do usuário. As análises são configuráveis por meio de um arquivo de configuração separado.
Se você usar a versão estável, também poderá observar a documentação on -line para obter mais informações.
O CWE_CHECKER oferece suporte experimental para analisar binários de metal nu. Para isso, é preciso fornecer um arquivo de configuração de metal nu por meio da opção --bare-metal-config . Um exemplo para esse arquivo de configuração pode ser encontrado em bare_metal/stm32f407vg.json (que foi criado e testado para um MCU STM32F407VG).
Para mais informações, consulte a documentação on -line.
Os binários de teste para o nosso conjunto de testes podem ser construídos com make compile_test_files (precisa que o Docker seja instalado!). O conjunto de testes pode então ser executado com make test .
A documentação do código -fonte pode ser construída com make documentation . Para a versão estável, a documentação pode ser encontrada aqui.
Até agora, as seguintes análises são implementadas:
Observe que os falsos positivos e os falsos negativos devem ser esperados devido a atalhos e à natureza da análise estática, bem como à abrangência. Você pode encontrar informações sobre o funcionamento interno de cada verificação, bem como razões conhecidas de falsos positivos e falsos negativos nas páginas de documentação específicas do cheque.
O CWE_CHECKER vem com um script para Ghidra, que analisa a saída do CWE_CHECKER e anota os CWEs encontrados no desmontador para uma análise manual mais fácil. O script está localizado em ghidra_plugin/cwe_checker_ghidra_plugin.py , as instruções de uso estão contidas no arquivo.

O CWE_CHECKER também é integrado como um plug -in. Se você deseja integrar o CWE_CHECKER à sua própria cadeia de ferramentas de análise, poderá usar o sinalizador de linha de comando --json (em combinação com as opções -As opções de linha de comando --quiet ou --out=...
Construir a documentação usando cargo doc --open --document-private-items --no-deps fornecerá mais informações sobre a estrutura interna do CWE_CHECKER. No entanto, a melhor documentação ainda é o próprio código -fonte. Se você tiver dúvidas, não deixe de perguntar em nossa página de discussões! Estamos constantemente nos esforçando para melhorar a extensibilidade e a documentação e suas perguntas nos ajudarão a conseguir isso!
Para obter uma visão geral rápida/inicial de seus internos, você também pode olhar para os slides das apresentações da conferência no CWE_CHECKER na pasta Doc . Apresentamos o CWE_CHECKER nas seguintes conferências até agora:
As contribuições são sempre bem -vindas. Apenas bifurque -o e abra um pedido de tração!
Este projeto é parcialmente financiado pelo Escritório Federal Alemão de Segurança da Informação (BSI).
Um agradecimento especial é para a comunidade BAP (especialmente o Gitter oficial) por responder a perguntas e discutir soluções.
Copyright (C) 2018 - 2024 Fraunhofer FKIE ([email protected])
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.