


CWE_CHECKER - это набор чеков для обнаружения общих классов ошибок, таких как NULL Pointer Dereferences и переполнение буфера. Эти классы ошибок формально известны как общие перечисления слабости (CWE). Проверки основаны на различных методах Anaylsis, начиная от простой эвристики до абстрактного анализа потоков данных на основе интерпретации. Его главная цель - помочь аналитикам быстро найти потенциально уязвимые пути кода.
Его основное внимание - бинарные файлы эльфов, которые обычно встречаются в операционных системах Linux и Unix. CWE_CHECKER использует Ghidra для разборки двоичных файлов в одно общее промежуточное представление и реализует свой собственный анализ на этом IR. Следовательно, анализы могут проводиться на большинстве архитектур ЦП, которые Ghidra может разобрать, что делает CWE_CHECKER ценным инструментом для анализа прошивки.
Следующие аргументы должны убедить вас попробовать cwe_checker :

Самый простой способ - вытащить последнее изображение Docker из реестра контейнеров GitHub:
docker pull ghcr.io/fkie-cad/cwe_checker:latest дает изображение на основе текущей главной ветви.docker pull ghcr.io/fkie-cad/cwe_checker:stable дает изображение, основанное на последней стабильной версии релиза.docker pull ghcr.io/fkie-cad/cwe_checker:v0.9 дает изображение на основе версии стабильной релиза V0.9. Тем не менее, рекомендуется переключиться на новые стабильные выпуски, как только они будут опубликованы, поскольку улучшения между стабильными версиями могут быть довольно значимыми.Если вы хотите создать изображение Docker самостоятельно, просто бегите
docker build -t cwe_checker .
Таким образом, вы также можете создавать нативные изображения Docker для ПК на основе рук (например, новые Apple Mac). Предварительные изображения Docker в настоящее время основаны на X86.
Следующие зависимости должны быть установлены для создания и установки CWE_CHECKER локально:
Запустите make all GHIDRA_PATH=/path/to/ghidra_folder (с правильным путем к локальной установке Ghidra) для компиляции и установки CWE_CHECKER. Если вы опустите аргумент GHIDRA_PATH , установщик будет искать вашу файловую систему для локальной установки Ghidra.
CWE_CHECKER принимает двоичный файл в качестве ввода, запускает несколько проверок на основе статического анализа бинарника, а затем выводит список предупреждений CWE, которые были обнаружены во время анализа.
Если вы используете официальное изображение Docker, просто запустите
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputЕсли вы установили cwe_checker локально, запустите
cwe_checker BINARYЕсли вы используете хлопья Nix, запустите
nix run github:fkie-cad/cwe_checker -- BINARY Вы можете настроить поведение большинства проверок через файл конфигурации, расположенный по адресу src/config.json . Если вы измените его, добавьте флаг командной строки --config=src/config.json чтобы сообщить CWE_CHECKER использовать модифицированный файл. Для получения информации о других доступных флагах командной строки вы можете передать флаг --help CWE_CHECKER .
Существует экспериментальная поддержка для анализа нагрузочных модулей ядра Linux (LKMS). CWE_CHECKER распознает, если вы передадите LKM и выполните подмножество чеков CWE, доступных для программ пользовательского пространства. Анализы настраиваются через отдельный файл конфигурации.
Если вы используете стабильную версию, вы также можете посмотреть на онлайн -документацию для получения дополнительной информации.
CWE_CHECKER предлагает экспериментальную поддержку для анализа двоичных файлов с голой металлом. Для этого необходимо предоставить файл конфигурации с голой металлом через командную строку --bare-metal-config . Пример для такого файла конфигурации можно найти по адресу bare_metal/stm32f407vg.json (который был создан и протестирован для MCU STM32F407VG).
Для получения дополнительной информации взгляните на онлайн -документацию.
Тестовые двоичные файлы для нашего тестового набора могут быть построены с помощью make compile_test_files (необходимо установить Docker!). Затем можно запустить тестовый набор с помощью make test .
Документация исходного кода может быть создана с помощью make documentation . Для стабильной версии документацию можно найти здесь.
До сих пор внедрены следующие анализы:
Обратите внимание, что как ложные позитивы, так и ложные негативы следует ожидать из-за ярлыков и характера статического анализа, а также чрезмерного оценочного. Вы можете найти информацию о внутренней работе каждой проверки, а также известных причин ложных срабатываний и ложных отрицательных на страницах документации для проверки.
CWE_CHECKER поставляется со сценарием для Ghidra, который анализирует вывод CWE_CHECKER и аннотирует найденные CWE в Disassassembler для более легкого ручного анализа. Сценарий расположен по адресу ghidra_plugin/cwe_checker_ghidra_plugin.py , в файле содержатся инструкции по использованию.

CWE_CHECKER также интегрирован как плагин на самом деле. Если вы хотите интегрировать CWE_CHECKER в свой собственный инструмент для анализа, вы можете использовать флаг командной строки --json сочетании с параметрами командной строки --quiet или --out=...
Создание документации с использованием cargo doc --open --document-private-items --no-deps предоставит вам больше информации о внутренней структуре CWE_CHECKER. Тем не менее, лучшая документация по -прежнему остается сам исходный код. Если у вас есть вопросы, обязательно задайте их на нашей странице обсуждения! Мы постоянно стремимся улучшить расширяемость и документацию, и ваши вопросы помогут нам достичь этого!
Чтобы получить быстрый/начальный обзор его внутренних органов, вы также можете посмотреть на слайды конференций на CWE_CHECKER в папке DOC . Пока мы представили CWE_CHECKER на следующих конференциях:
Вклад всегда приветствуются. Просто разветвляй его и откройте запрос на притяжение!
Этот проект частично финансируется Германским федеральным офисом за информационную безопасность (BSI).
Особая благодарность сообществу BAP (особенно официальному джакеру) за ответы на вопросы и обсуждение решений.
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/>.