


CWE_CHECKER는 NULL POINTER DEREERENCES 및 버퍼 오버플로와 같은 일반적인 버그 클래스를 감지하는 수표 제품군입니다. 이 버그 클래스는 공식적으로 일반적인 약점 열거 (CWES)라고합니다. 검사는 간단한 휴리스틱에서 추상 해석 기반 데이터 흐름 분석에 이르기까지 다양한 anaylsis 기술을 기반으로합니다. 주요 목표는 분석가가 잠재적으로 취약한 코드 경로를 신속하게 찾도록 돕는 것입니다.
주요 초점은 Linux 및 UNIX 운영 체제에서 일반적으로 발견되는 ELF Binaries입니다. CWE_CHECKER는 GHIDRA를 사용하여 바이너리를 하나의 일반적인 중간 표현으로 분해 하고이 IR에 대한 자체 분석을 구현합니다. 따라서 GHIDRA가 분해 할 수있는 대부분의 CPU 아키텍처에서 분석을 실행할 수있어 CWE_CHECKER가 펌웨어 분석을위한 귀중한 도구가됩니다.
다음 주장은 CWE_CHECKER를 시도해 보도록 설득해야합니다.

가장 간단한 방법은 Github 컨테이너 레지스트리에서 최신 Docker 이미지를 가져 오는 것입니다.
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 .
이렇게하면 ARM 기반 PC (예 : 새로운 Apple Mac) 용 Native Docker 이미지를 구축 할 수도 있습니다. 사전 제작 된 도커 이미지는 현재 x86 기반에 불과합니다.
CWE_CHECKER를 로컬로 구축하고 설치하려면 다음 종속성을 설치해야합니다.
CWE_CHECKER를 컴파일하고 설치하려면 make all GHIDRA_PATH=/path/to/ghidra_folder 실행하십시오. GHIDRA_PATH 인수를 생략하면 설치 프로그램은 GHIDRA의 로컬 설치를 위해 파일 시스템을 검색합니다.
CWE_CHECKER는 이진을 입력으로 취하고 이진에 대한 정적 분석을 기반으로 여러 점검을 실행 한 다음 분석 중에 발견 된 CWE 경고 목록을 출력합니다.
공식 Docker 이미지를 사용하는 경우 그냥 실행하십시오
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputCWE_CHECKER를 로컬로 설치 한 경우 실행하십시오
cwe_checker BINARY닉스 플레이크를 사용하는 경우 실행하십시오
nix run github:fkie-cad/cwe_checker -- BINARY src/config.json 에있는 구성 파일을 통해 대부분의 검사의 동작을 조정할 수 있습니다. 수정하면 명령 줄 플래그를 추가하여 --config=src/config.json 추가하여 cwe_checker에 수정 된 파일을 사용하도록 지시하십시오. 사용 가능한 다른 명령 줄 플래그에 대한 자세한 내용은 --help 플래그를 CWE_CHECKER 로 전달할 수 있습니다.
LINUX로드 가능한 커널 모듈 (LKM)의 분석에 대한 실험적 지원이 있습니다. CWE_CHECKER는 LKM을 통과하는지 인식하고 사용자 공간 프로그램에 사용할 수있는 CWE 수표의 하위 집합을 실행합니다. 별도의 구성 파일을 통해 분석이 구성 가능합니다.
안정적인 버전을 사용하는 경우 더 자세한 정보는 온라인 문서를 살펴볼 수도 있습니다.
CWE_CHECKER는 베어 메탈 바이너리 분석에 대한 실험적 지원을 제공합니다. 이를 위해서는 --bare-metal-config 명령 줄 옵션을 통해 베어 메탈 구성 파일을 제공해야합니다. 이러한 구성 파일의 예는 bare_metal/stm32f407vg.json (STM32F407VG MCU에 대해 생성 및 테스트)에서 찾을 수 있습니다.
자세한 내용은 온라인 문서를 살펴보십시오.
테스트 스위트의 테스트 바이너리는 make compile_test_files (Docker를 설치해야합니다!)와 함께 구축 할 수 있습니다. 그런 다음 테스트 스위트를 make test 로 실행할 수 있습니다.
소스 코드 문서는 make documentation 사용하여 구축 할 수 있습니다. 안정적인 버전의 경우 문서는 여기에서 찾을 수 있습니다.
지금까지 다음 분석이 구현되었습니다.
오 탐지와 잘못된 부정은 지름길과 정적 분석의 특성과 과다 용사로 인해 예상됩니다. 각 수표의 내부 작업에 대한 정보와 확인 특정 문서 페이지에서 오 탐지 및 잘못된 부정에 대한 알려진 이유를 찾을 수 있습니다.
CWE_CHECKER는 GHIDRA 용 스크립트를 제공하며 CWE_CHECKER의 출력을 파싱하고 수동 분석을보다 쉽게 해체 할 수 있도록 분리기에서 발견 된 CWE에 주석을달라고합니다. 스크립트는 ghidra_plugin/cwe_checker_ghidra_plugin.py 에 있습니다. 사용 지침은 파일에 포함되어 있습니다.

CWE_CHECKER는 실제로 플러그인으로 통합되었습니다. CWE_CHECKER를 자신의 분석 툴체인에 통합하려면 --json 명령 줄 플래그 ( --quiet 또는 --out=... 명령 줄 옵션과 함께)를 사용하여 쉽게 Parsable JSON 출력 형식으로 CWE 경고를 생성 할 수 있습니다.
cargo doc --open --document-private-items --no-deps 사용하여 문서를 구축하면 CWE_CHECKER의 내부 구조에 대한 자세한 정보가 제공됩니다. 그러나 최상의 문서는 여전히 소스 코드 자체입니다. 궁금한 점이 있으면 토론 페이지에서 물어보십시오! 우리는 확장 성과 문서화를 향상시키기 위해 끊임없이 노력하고 있으며 귀하의 질문은 우리가이를 달성하는 데 도움이 될 것입니다!
내부의 빠른/초기 개요를 얻으려면 Doc 폴더의 CWE_CHECKER 의 컨퍼런스 프레젠테이션 슬라이드를 볼 수도 있습니다. 우리는 지금까지 다음 회의에서 CWE_CHECKER를 발표했습니다.
기부금은 항상 환영합니다. 그냥 포기하고 풀 요청을 엽니 다!
이 프로젝트는 독일 연방 정보 보안 사무소 (BSI)에서 부분적으로 자금을 조달합니다.
질문에 대답하고 솔루션에 대해 논의한 것에 대해 BAP 커뮤니티 (특히 공식 Gitter)에게 특별한 감사를드립니다.
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/>.