
uma ferramenta de análise estática para encontrar vulnerabilidades em código-fonte C/C++
Isto é o "flawfinder" por David A. Wheeler.
Flawfinder é um programa simples que analisa código-fonte C/C++ e relata potenciais falhas de segurança. Pode ser uma ferramenta útil para examinar software em busca de vulnerabilidades, e também pode servir como uma introdução simples a ferramentas de análise estática de código fonte em geral. Foi projetado para ser fácil de instalar e usar. Flawfinder suporta a Common Weakness Enumeration (CWE) e é oficialmente CWE-Compatible. Suporta vários formatos de saída, incluindo SARIF, SonarQube e HTML.
Flawfinder pode ser usado em conjunto com ferramentas de análise de código baseadas em IA. A saída do Flawfinder pode ser usada para identificar rapidamente quais áreas de código merecem atenção mais próxima, que um sistema de IA pode então examinar com mais detalhes.
Para mais informações, consulte o site do projeto
Flawfinder é projetado para uso em sistemas Unix/Linux/POSIX (incluindo Cygwin, sistemas baseados em Linux, MacOS e vários BSDs) como uma ferramenta de linha de comando. Requer Python (testamos com Python 3; Python 2.7 deve funcionar, mas está cada vez menos testado).
Se você apenas quer usá-lo, pode instalar o flawfinder com
o "pip" do Python ou com o gerenciador de pacotes do seu sistema (flawfinder tem
pacotes para muitos sistemas). Também suporta instalação fácil
seguindo as convenções usuais de instalação de fonte make install.
O arquivo INSTALL.md tem instruções de instalação mais detalhadas.
Você NÃO PRECISA instalá-lo para executá-lo, mas é mais fácil assim.
Para executar o flawfinder, basta fornecer uma lista de arquivos fonte ou diretórios para examinar. Por exemplo, para examinar todos os arquivos em "src/" e subdiretórios recursivamente:
flawfinder src/
Para examinar todos os arquivos no diretório atual e subdiretórios recursivamente:
flawfinder ./
Os hits (achados) recebem um nível de risco de 0 (risco muito baixo) a 5 (risco alto). Por padrão, são exibidos achados de nível de risco 1 ou superior. Você pode mostrar apenas os hits de nível de risco 4 ou superior no diretório atual e abaixo desta forma:
flawfinder --minlevel 4 ./
A página de manual (flawfinder.1 ou flawfinder.pdf) descreve como usar
o flawfinder (incluindo suas várias opções) e informações relacionadas
(como ele suporta CWE). Por exemplo, a opção --html gera
saída em formato HTML. A opção --help fornece uma breve lista de opções.
O Flawfinder deve ser capaz de interpretar corretamente a codificação de caracteres do seu código-fonte. Na grande maioria dos casos isso não é um problema, especialmente se o código-fonte estiver codificado corretamente usando UTF-8 e seu sistema estiver configurado para usar UTF-8 (a situação mais comum de longe).
No entanto, é possível que o flawfinder pare se houver um
problema de codificação de caracteres e você estiver usando Python3.
O sintoma usual são mensagens de erro como esta:
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
Infelizmente, o Python3 não fornece recursos internos úteis para lidar com isso. Assim, não é trivial lidar com esse problema sem depender de bibliotecas externas (que estamos tentando evitar).
Se você tiver esse problema, consulte a página de manual do flawfinder para uma coleção
de várias soluções.
Uma das mais simples é simplesmente converter o código-fonte e a configuração do
sistema para UTF-8.
Você pode converter o código-fonte para UTF-8 usando ferramentas como a
ferramenta de sistema iconv ou o programa Python
cvt2utf;
você pode instalar o cvt2utf usando pip install cvt2utf.
Mais tecnicamente, o flawfinder usa varredura léxica para encontrar tokens (como nomes de funções) que sugerem prováveis vulnerabilidades, estima seu nível de risco (por exemplo, pelo texto das chamadas de função) e relata os resultados. O Flawfinder não usa ou tem acesso à maioria das informações sobre fluxo de controle, fluxo de dados, tipos de dados, namespaces e escopos. Assim, o flawfinder necessariamente produzirá muitos falsos positivos para vulnerabilidades e deixará de relatar muitas vulnerabilidades. Por outro lado, o flawfinder pode encontrar vulnerabilidades em programas que não podem ser compilados ou que não podem ser vinculados. O Flawfinder também não se confunde tanto com a maioria das definições de macro e outras peculiaridades com as quais ferramentas mais sofisticadas têm dificuldade.
Há uma ação do GitHub disponível para quem usa o GitHub.
Consulte action.yml
Crie um arquivo .yml em .github/workflows com o seguinte conteúdo:
- name: flawfinder_scan
uses: david-a-wheeler/[email protected]
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'
Você pode adicionar muitas outras adições aos argumentos.
Por exemplo, --error-level=4 fará com que um erro seja retornado se
o flawfinder encontrar uma vulnerabilidade de nível 4 ou superior.
Observe o número da versão após o símbolo @; você pode selecionar uma
versão diferente.
Você pode encontrar o nome da ação e a string de versão no Marketplace clicando no botão "Use latest/xxx version".
O Flawfinder integra-se ao plugin cxx do SonarQube. Adicione as regras do Flawfinder no SonarQube em "Administration > CXX External Analyers > Other Rule Definitions" executando o Flawfinder uma vez usando as seguintes opções.
flawfinder --listrules --sonar [...]
Em seguida, no seu CI/CD, execute o Flawfinder assim para gerar saída que o SonarQube possa entender.
flawfinder -CDQ --sonar [...]
Você deve redirecionar a saída para um arquivo que possa então carregar no
SonarQube via a opção sonar.cxx.other.reportPaths.
Adoramos contribuições! Para mais informações sobre como contribuir, consulte o arquivo CONTRIBUTING.md.
O Flawfinder é lançado sob a licença GNU GPL versão 2 ou posterior (GPL-2.0+). Consulte o arquivo COPYING para informações sobre a licença.