faultfinder - 클라우드 온라인

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 명령 faultfinder입니다.

프로그램:

이름


faultfinder - 소스 코드에서 잠재적인 보안 결함("히트")을 사전적으로 찾습니다.

개요


결함 탐지기 [--도움|-h] [--번역] [--목록 규칙]
[--allowlink] [--followdotdir] [--nolink]
[--패치=파일 이름|-P 파일 이름]
[--입력|-I] [ --최소레벨=X | -m X ] [--거짓 양성|-F]
[--무시하지 않음|-n]
[--정규식=무늬 | -e 무늬]
[--문맥|-c] [--열|-C] [--데이터만|-D] [--html|-H] [--즉각적인|-i]
[--하나의 선|-S] [--생략시간] [--조용한|-Q]
[--로드히트리스트=F] [--저장 적중 목록=F] [--차이점 목록=F]
[--] [ 암호 파일 or 뿌리 예배 규칙서 ]+

기술


Flawfinder는 잠재적인 보안 결함을 찾는 C/C++ 소스 코드를 검색합니다. 에게
faultfinder를 실행하고, faultfinder에 디렉터리 또는 파일 목록을 제공하기만 하면 됩니다. 각 디렉토리에 대해
주어진 디렉토리에서 C/C++ 파일 이름 확장자를 가진 모든 파일(및
하위 디렉토리, 재귀적으로) 검사합니다. 따라서 대부분의 프로젝트에서
faultfinder 소스 코드의 최상위 디렉토리 이름(현재 디렉토리에 ``.'' 사용)
디렉토리), faultfinder는 프로젝트의 모든 C/C++ 소스 코드를 검사합니다. 만약 너라면
갖고 싶은 것만 변경 검토한 후 해당 변경 사항의 통합 diff를 저장합니다(GNU에서 생성).
"diff -u" 또는 "svn diff" 또는 "git diff")를 패치 파일에 추가하고 --patch(-P) 옵션을 사용합니다.

Flawfinder는 위험별로 정렬된 "히트"(잠재적인 보안 결함) 목록을 생성합니다. 그만큼
가장 위험한 히트가 먼저 표시됩니다. 위험 수준은 대괄호 안에 표시되며 다양합니다.
0(매우 적은 위험)에서 5(매우 큰 위험)까지입니다. 이 위험 수준은
그러나 함수의 매개변수 값에 따라 달라집니다. 예를 들어 상수
문자열은 종종 많은 상황에서 완전 변수 문자열보다 덜 위험합니다.
상황에 따라 히트의 위험 수준이 낮아집니다. Flawfinder는 gettext(일반적인
국제화 프로그램용 라이브러리)를 통해 전달되는 상수 문자열을 처리합니다.
상수 문자열인 것처럼 gettext; 이것은 잘못된 적중 횟수를 줄입니다.
국제화 프로그램. Flawfinder는 _T() 및
_TEXT(), 국제화된 프로그램을 처리하기 위한 일반적인 Microsoft 매크로. 결점 찾기
주석 및 문자열 내의 대부분의 텍스트를 올바르게 무시합니다. 일반적으로 faultfinder는 모든 것을 보여줍니다.
위험 수준이 1 이상인 적중이지만 --minlevel 옵션을 사용하여
원하는 경우 더 높은 위험 수준으로 적중합니다. 적중 설명에는 관련 공통 항목도 표시됩니다.
아래에서 설명하는 것처럼 괄호 안에 약점 열거(CWE) 식별자가 있습니다. 결점 찾기
공식적으로 CWE와 호환됩니다.

모든 적중이 실제로 보안 취약점인 것은 아니며 모든 보안 취약점이 아닙니다.
반드시 발견됩니다. 그럼에도 불구하고, faultfinder는 찾고 제거하는 데 도움이 될 수 있습니다.
보안 취약점. Flawfinder를 사용하는 일반적인 방법은 먼저 Flawfinder를 다음에 적용하는 것입니다.
소스 코드 집합을 분석하고 가장 위험도가 높은 항목을 검사합니다. 그런 다음 --inputs를 사용하여 검사합니다.
입력 위치를 확인하고 합법적이고 안전한 입력 값만 입력되었는지 확인합니다.
신뢰할 수 없는 사용자로부터 허용됩니다.

프로그램을 감사하면 실제로는 괜찮지만 소스 코드 행을 표시할 수 있습니다.
Faultfinder가 이에 대한 불평을 멈출 수 있도록 가짜 경고를 발생시킵니다. 표시하려면
이러한 경고가 표시되지 않도록 줄에 특수 형식의 주석을 넣거나
같은 줄(소스 코드 뒤) 또는 이전 줄에서 단독으로. 코멘트
다음 두 가지 형식 중 하나여야 합니다.

· // Flawfinder: 무시

· /* Flawfinder: 무시 */

호환성을 위해 "Flawfinder:"를 "ITS4:" 또는 "RATS:"로 바꿀 수 있습니다.
특별한 형식의 주석. 그러한 줄이 잘못되었을 가능성이 있으므로 다음을 사용할 수 있습니다.
--neverignore 옵션은 faultfinder가 무슨 일이 있어도 어떤 줄도 무시하지 않도록 합니다.
주석 지시문은 말합니다 (더 혼란스럽게도 --neverignore는 무시를 무시합니다).

Flawfinder는 ``규칙 집합''이라는 내부 데이터베이스를 사용합니다. 규칙 세트는 다음을 식별합니다.
보안 결함의 일반적인 원인인 기능. 표준 규칙 세트에는 다음이 포함됩니다.
영향을 줄 수 있는 일반적인 문제를 포함하여 다양한 잠재적 문제의 수
C/C++ 프로그램뿐만 아니라 여러 특정 유닉스 계열 및 Windows 기능은 다음과 같습니다.
특히 문제. --listrules 옵션은 현재 규칙 목록을 보고하고
기본 위험 수준. 위에서 언급한 바와 같이 주어진 시스템에서 발견된 모든 잠재적인 보안 결함은
소스 코드 파일(규칙 집합의 항목과 일치)을 ``적중''이라고 하며
프로그램의 특정 실행 중에 발견된 조회수를 ``적중 목록''이라고 합니다.
저장 가능(--savehitlist 사용), 다시 표시하기 위해 다시 로드(--loadhitlist 사용)
다른 실행과 다른 적중만 표시할 수 있습니다(--diffhitlist 사용).

Flawfinder는 몇 가지 기본적인 장단점을 제공하는 간단한 도구입니다. 결함 찾기 작업
간단한 어휘 토큰화(주석을 건너뛰고 문자열을 올바르게 토큰화)함으로써,
데이터베이스와 일치하는 토큰 찾기(특히 함수 호출 찾기)
따라서 Flawfinder는 간단한 어휘 토큰화를 사용하는 RATS 및 ITS4와 유사합니다.
그런 다음 Flawfinder는 함수 매개변수의 텍스트를 검사하여 위험을 추정합니다. 같지 않은
splint, gcc의 경고 플래그, clang, faultfinder와 같은 도구는 지원 사용하거나 가지고
검색 시 제어 흐름, 데이터 흐름 또는 데이터 유형에 대한 정보에 액세스
잠재적인 취약성 또는 위험 수준 추정. 따라서 faultfinder는
취약점에 대해 필연적으로 많은 오 탐지를 생성하고 많은 보고에 실패합니다.
취약점. 반면에 faultfinder는 다음과 같은 프로그램에서 취약점을 찾을 수 있습니다.
만들 수 없거나 연결할 수 없습니다. 그것은 종종 심지어 할 수 없는 프로그램과 함께 작동할 수 있습니다.
컴파일됩니다(적어도 검토자의 도구에 의해). Flawfinder는 또한
보다 정교한 도구가 문제를 일으키는 매크로 정의 및 기타 이상한 점.
Flawfinder는 정적 분석 도구에 대한 간단한 소개로도 유용할 수 있습니다.
일반, 사용하기 쉽고 이해하기 쉽기 때문입니다.

명령줄에 주어진 모든 파일 이름을 검사합니다(일반적인 이름이 없더라도).
C/C++ 파일 이름 확장자); 따라서 faultfinder가 특정 파일을 검사하도록 강제할 수 있습니다.
욕구. 디렉토리를 재귀적으로 검색하는 동안 faultfinder는 열고 검사만 합니다.
C/C++ 파일 이름 확장자가 있는 일반 파일. Flawfinder는 파일이
확장자가 ".c", ".h", ".ec", ".ecp", ".pgc", ".C", ".cpp",
".CPP", ".cxx", ".cc", ".CC", ".pcc", ".hpp" 또는 ".H". 파일명 "-"는 다음을 의미합니다.
표준 입력. 보안 문제를 방지하기 위해 특수 파일(예: 장치 특수 파일)
및 명명된 파이프)는 항상 건너뛰고 기본적으로 심볼릭 링크는 건너뜁니다(
--allowlink 옵션은 심볼릭 링크를 따릅니다).

적중 목록 다음에는 결과에 대한 간략한 요약이 있습니다(이를 제거하려면 -D를 사용하십시오.
정보). 적중 횟수, 분석된 라인(wc -l에 의해 보고됨) 및
분석된 SLOC(물리적 소스 코드 라인) 물리적 SLOC는 비어 있지 않고
코멘트 라인. 그런 다음 각 레벨의 적중 횟수를 표시합니다. 있을 것이라는 점에 유의하십시오.
minlevel(기본적으로 1)보다 낮은 레벨에서는 적중하지 마십시오. 따라서 "[0] 0 [1] 9"
즉, 레벨 0에서는 보고된 적중 횟수가 0건이고 수준 1에서는 적중 횟수가 9건이었습니다.
보고했다. 다음으로 주어진 수준 이상의 적중 횟수를 표시합니다(따라서 수준 3+
는 레벨 3, 4, 5의 히트 수 합계를 가짐). 따라서 "[0+] 37" 항목은
레벨 0 이상에서 37개의 적중이 있음을 보여줍니다(0+ 항목은 항상 동일합니다.
위의 "히트" 숫자로). 다음에 KSLOC당 조회수가 표시됩니다. 이것은 각 "레벨 또는
더 높은" 값에 1000을 곱하고 물리적 SLOC로 나눕니다. symlink가
건너뛰면 개수가 보고됩니다. 적중이 억제된 경우("무시"
위에서 설명한 대로 소스 코드 주석의 지시어), 억제된 숫자가 보고됩니다.
보고서에 포함될 최소 위험 수준이 표시됩니다. 기본적으로 이것은 1입니다
(이를 변경하려면 --minlevel을 사용하십시오). 요약은 중요한 알림으로 끝납니다.
반드시 보안 취약점이며 다른 보안 취약점이 있을 수 있습니다.
도구에 의해 보고되지 않습니다.

Flawfinder는 GNU GPL 라이선스 버전 2 이상(GPLv2+)으로 출시됩니다.

Flawfinder는 완전히 오픈 소스가 아닌 다른 프로그램인 ITS4와 유사하게 작동합니다.
소프트웨어(오픈 소스 정의에 정의됨) 또는 자유 소프트웨어(오픈 소스 정의에 정의됨)
자유 소프트웨어 재단). Flawfinder의 작성자는 ITS4의 소스 코드를 본 적이 없습니다.

간결한 이용 가이드


다음은 faultfinder를 사용하는 방법에 대한 간단한 예입니다. C/C++가 있다고 상상해보십시오.
xyzzy라는 프로그램의 소스 코드(작성했거나 작성하지 않았을 수 있음)
보안 취약점을 찾고 있습니다(그래서 고객보다 먼저 문제를 해결할 수 있습니다)
취약점)에 노출됩니다. 이 튜토리얼에서는 Unix-
Linux, OpenBSD 또는 MacOS X와 ​​같은 시스템과 같습니다.

소스 코드가 xyzzy라는 하위 디렉토리에 있는 경우
텍스트 창과 faultfinder의 기본 설정을 사용하여 프로그램을 분석하고
잠재적인 보안 취약점의 우선 순위 목록(``less''는
결과는 화면에 남아 있음):
결함 탐지기 xyzzy | 더 적은

이 시점에서 많은 수의 항목이 표시됩니다. 각 항목에는 파일 이름이 있습니다.
콜론, 행 번호, 괄호 안의 위험 수준(여기서 5가 가장 위험함), 범주,
함수의 이름, 그리고 faultfinder가 라인이
취약점. Flawfinder는 일반적으로 위험 수준별로 정렬하여 가장 위험한 항목을 먼저 표시합니다.
시간이 제한되어 있다면 가장 위험한 항목부터 작업을 시작하고
시간이 다 될 때까지 계속하십시오. 표시만 있는 위험으로 제한하려면
특정 위험 수준 이상인 경우 --minlevel 옵션을 사용하십시오. 당신이 얻는 경우
변수 이름이 위험해 보이기 때문에 엄청난 수의 오탐지
함수 이름에 대한 보고서를 제거하려면 -F 옵션을 사용하십시오. 당신이 이해하지 못하는 경우
오류 메시지는 다음과 같은 문서를 참조하십시오. 쓰기 보안 프로그램 for Linux
유닉스 하우투http://www.dwheeler.com/secure-programs⟩ 에 http://www.dwheeler.com/secure-
보안 프로그램 작성에 대한 자세한 정보를 제공하는 프로그램.

문제를 식별하고 이해하면 문제를 해결할 수 있습니다. 때때로 당신은 할 수 있습니다
줄 번호가 변경되기 때문에 둘 다 분석을 다시 수행하고 싶습니다. 확인하십시오
새 코드는 아직 다른 취약점을 도입하지 않습니다.

어떤 라인이 실제로 문제가 아니라고 판단하고 확실하다면 다음을 수행할 수 있습니다.
다음과 같은 주석을 문제가 되는 줄 바로 앞이나 위에 삽입하십시오.
/* 결함 찾기: 무시 */
출력에 표시되지 않도록 합니다.

작업을 마치면 돌아가서 프로그램의 입력을 검색해야 합니다.
프로그램이 신뢰할 수 없는 입력을 강력하게 필터링하는지 확인하십시오. 결함 찾기 캔
다음과 같이 --inputs 옵션을 사용하여 많은 프로그램 입력을 식별합니다.
faultfinder --입력 xyzzy

Flawfinder는 텍스트 편집기 및 통합 개발 환경과 잘 통합될 수 있습니다.
자세한 내용은 예제를 참조하십시오.

Flawfinder에는 HTML 버전의
출력(예쁜 디스플레이에 유용함). 다음 섹션에서는 이러한 옵션에 대해 자세히 설명합니다.
세부 묘사.

옵션


Flawfinder에는 여러 옵션이 있으며 자체적으로 제어하는 ​​옵션으로 그룹화할 수 있습니다.
문서화, 입력 데이터 선택, 표시할 히트 선택, 출력 형식 선택,
및 히트리스트 관리를 수행합니다. Flawfinder는 다음에서 정의된 표준 구문을 지원합니다.
POSIX(7년 2013판) 섹션 ``유틸리티 규칙''. 또한 GNU를 지원합니다.
긴 옵션(양식의 이중 대시 옵션 --선택권)에 정의된 바와 같이 GNU C 도서관
참조 Manual ``프로그램 인수 구문 규약'' 및 GNU 코딩 표준 시편
``명령줄 인터페이스 표준''. 긴 옵션 인수는 다음과 같이 제공될 수 있습니다.
``--이름=값'' 또는 ``-이름 값''. 일부 옵션은 more를 통해서만 액세스할 수 있습니다.
읽기 쉬운 GNU 긴 옵션 규칙; 일반 옵션은 이전 버전에서도 지원됩니다.
단일 문자 옵션 규칙.

문서
--도움

-h 사용(도움말) 정보를 표시합니다.

--번역 버전 번호만 표시하고 종료합니다.

--목록 규칙 추가 검사를 유발하는 용어(토큰), 기본 위험을 나열합니다.
레벨 및 기본 경고(CWE 식별자 포함)
해당), 모두 탭으로 구분됩니다. 이 용어는 주로 잠재적으로-
위험한 기능. 보고된 위험 수준과 일부 경고는
특정 코드는 용어가 어떻게 되는지에 따라 기본값과 다를 수 있습니다.
사용된. 일반적인 헤더를 원하지 않으면 -D와 결합하십시오. 결점 찾기
버전 1.29는 구분 기호를 공백에서 탭으로 변경하고 기본값을 추가했습니다.
경고 필드.

선택 입력 Data
--allowlink 심볼릭 링크의 사용을 허용합니다. 일반적으로 심볼릭 링크는 건너뜁니다. 하지 않다
다른 사람이 코드를 분석하는 경우 이 옵션을 사용하십시오. 공격자는 많은 것을 할 수 있습니다
이 옵션을 사용하면 분석에 문제가 발생할 수 있습니다. 을 위한
예를 들어 공격자는 다음과 같은 파일에 심볼릭 링크를 삽입할 수 있습니다. / etc / passwd
(파일에 대한 정보 유출) 또는 순환 루프를 생성하여
faultfinder가 ``영원히'' 실행되도록 합니다. 이것을 활성화하는 또 다른 문제
옵션은 동일한 파일이 기호를 사용하여 여러 번 참조되는 경우입니다.
링크, 그것은 여러 번 분석됩니다(따라서 여러 번 보고됨).
faultfinder에는 이미 심볼릭 링크에 대한 일부 보호 기능이 포함되어 있습니다.
장치 파일 유형(예: /dev/zero 또는
C:\mystuff\com1). faultfinder 버전 1.01 및 이전 버전의 경우 이것은
기본값.

--followdotdir
이름이 "."로 시작하는 디렉토리를 입력합니다. 일반적으로 이러한 디렉토리는
일반적으로 버전 제어 개인 데이터(예:
.git/ 또는 .svn/), 구성 등.

--nolink 무시됨. 역사적으로 이것은 다음 기호 링크를 비활성화했습니다. 이 행동
이제 기본값입니다.

--패치=패치 파일

-P 패치 파일
선택한 파일 또는 디렉토리를 검사하되 다음 행의 히트만 보고합니다.
주어진 패치 파일에 의해 추가되거나 수정됩니다. 패치 파일은
인식된 통합 diff 형식(예: GNU "diff -u old new"의 출력,
"svn diff" 또는 "git diff [커밋]"). Flawfinder는 패치가
파일에 이미 적용되었습니다. 패치 파일에는 다음에 대한 변경 사항도 포함될 수 있습니다.
관련 없는 파일(단순히 무시됨). 에 주어진 줄 번호
패치 파일은 어떤 라인이 변경되었는지 확인하는 데 사용됩니다.
패치 파일이 생성된 이후 파일을 수정하고 패치 파일을 재생성합니다.
첫 번째. 패치 파일에 제공된 새 파일의 파일 이름이
대문자/소문자, 경로 접두어 및 디렉터리를 포함하여 정확히 일치해야 합니다.
구분 기호(\ 대 /). 통합 diff 형식만 허용됩니다(GNU diff, svn
diff 및 git diff 출력은 괜찮습니다); 다른 형식이 있으면 다시
먼저 재생성하십시오. 결과적으로 변경된 라인에서 발생하는 히트만, 또는
바로 위와 아래에 보고됩니다. 이 옵션은 다음을 의미합니다.
--무시하지 마십시오.

선택 조회수 디스플레이
--입력

-I 프로그램 외부에서 데이터를 가져오는 함수만 표시합니다. 이것은 또한 설정
최소 레벨을 0으로.

--최소레벨=X

-m X 적중 목록에 포함하려면 최소 위험 수준을 X로 설정합니다. 이것은 0(``아니오
위험'')에서 5("최대 위험"); 기본값은 1입니다.

--거짓 양성

-F 가양성일 가능성이 있는 히트를 포함하지 마십시오. 현재 이것은 의미합니다.
함수 이름 뒤에 "("가 없으면 무시됩니다.
문자 배열 선언은 언급되지 않습니다. 따라서 변수를 사용하는 경우
모든 곳에서 "액세스"라는 이름을 지정하면 이 일반에 대한 참조가 제거됩니다.
변하기 쉬운. 이것은 기본값이 아닙니다.
중요한 안타 누락; 특히 #define 절과 호출의 함수 이름
함수 포인터를 통해 누락됩니다.

--무시하지 않음

-n 보안 문제에 ``ignore'' 지시문이 있더라도 보안 문제를 절대 무시하지 마십시오.
댓글.

--정규식=무늬

-e 무늬
정규식 패턴 PATTERN과 일치하는 텍스트가 포함된 조회수만 보고합니다.
예를 들어 "CWE-120" 텍스트가 포함된 적중만 보고하려면 ``--regex
CWE-120''. 이러한 옵션 플래그 이름은 grep과 동일합니다.

선택 산출 형성
--열

-C 각 조회의 열 번호(파일 이름 및 줄 번호 포함)를 표시합니다.
콜론과 열 번호를 추가하여 줄 번호 뒤에 표시됩니다.
행(행의 첫 번째 문자는 열 번호 1임). 이것은 유용하다
특정 열로 이동할 수 있는 편집자 또는 다른 열과 통합
도구(예: 가양성을 추가로 필터링하는 도구).

--문맥

-c 컨텍스트, 즉 "적중"/잠재적 결함이 있는 행을 표시합니다. 기본적으로
줄은 경고 직후에 표시됩니다.

--데이터만

-D 머리글과 바닥글을 표시하지 마십시오. 이것을 --quiet와 함께 사용하면
데이터 자체.

--html

-H 간단한 텍스트 대신 HTML로 출력 형식을 지정합니다.

--즉각적인

-i 조회수를 즉시 표시합니다(끝날 때까지 기다리지 마세요).

--하나의 선

-S 각 히트에 대해 한 줄의 텍스트 출력으로 표시됩니다. 상호 작용에 유용
컴파일 도구로.

--생략시간 타이밍 정보를 생략합니다. 이것은 faultfinder의 회귀 테스트에 유용합니다.
분석 시간에 따라 결과가 달라지지 않도록
걸립니다.

--조용한

-Q 상태 정보(예: 검사 중인 파일)를 표시하지 마십시오.
분석이 진행됩니다.

히트리스트
--저장 적중 목록=F
모든 결과 히트("hitlist")를 F에 저장합니다.

--로드히트리스트=F
소스 프로그램을 분석하는 대신 F에서 히트리스트를 로드합니다. 경고: Do 지원
신뢰할 수 없는 출처에서 적중 목록을 로드합니다(보안상의 이유로).

--차이점 목록=F
F에 없는 적중(로드 또는 분석)만 표시합니다. F는 생성된 것으로 추정됩니다.
이전에는 --savehitlist를 사용했습니다. 경고: Do 지원 신뢰할 수 없는 히트리스트와 비교
소스(보안상의 이유로). --loadhitlist 옵션이 제공되지 않으면
이렇게 하면 분석되지 않은 소스 코드 파일의 히트가 표시됩니다.
이전에 F에 저장되었습니다. --loadhilist와 함께 사용하면 다음이 표시됩니다.
F가 아닌 로드된 히트리스트의 조회수. 차이 알고리즘은 다음과 같습니다.
보수적인; 조회수는 동일한 경우에만 '동일한' 것으로 간주됩니다.
파일 이름, 줄 번호, 열 위치, 함수 이름 및 위험 수준.

사용 예


다음은 faultfinder를 호출하는 방법에 대한 다양한 예입니다. 첫 번째 예는 다양한
간단한 명령줄 옵션. Flawfinder는 텍스트 편집기와 잘 작동하도록 설계되었으며
통합 개발 환경이므로 다음 섹션에서는 결함 탐지기를 통합하는 방법을 보여줍니다.
vim과 emacs에.

단순, 간단, 편리 명령 줄 옵션
결함 탐지기 /usr/src/linux-3.16
/usr/src/linux-3.16 디렉토리에 있는 모든 C/C++ 파일과
하위 디렉토리(재귀적으로), 발견된 모든 히트에 대해 보고합니다. 기본적으로
faultfinder는 이름이 다음으로 시작하는 심볼릭 링크 및 디렉토리를 건너뜁니다.
기간.

결함 탐지기 --최소레벨=4 .
현재 디렉터리 및 해당 하위 디렉터리에 있는 모든 C/C++ 파일을 검사합니다.
(재귀적으로); 취약점 레벨 4 이상만 보고합니다(가장 높은 두 개
위험 수준).

결함 탐지기 --입력 마이디르
mydir 및 해당 하위 디렉터리(재귀적으로)의 모든 C/C++ 파일을 검사하고
입력을 받는 보고서 기능
적절하게 입력).

결함 탐지기 --무시하지 않음 마이디르
mydir 디렉토리와 하위 디렉토리에 있는 모든 C/C++ 파일을 검사합니다.
코드 주석에서 무시하도록 표시된 적중도 포함합니다.

결함 탐지기 -QD 마이디르
mydir을 검사하고 실제 결과만 보고합니다(헤더 제거 및
출력 바닥글). 이 형식은 출력이 파이프로 연결되는 경우에 유용합니다.
추가 분석을 위한 기타 도구. -C(--열) 및 -S(--한 줄)
옵션은 데이터를 다른 도구로 파이핑하는 경우에도 유용할 수 있습니다.

결함 탐지기 -QDSC 마이디르
실제 결과만 보고하는 mydir을 검사합니다(머리글 또는 바닥글 없음). 각
적중은 한 줄에 보고되고 열 번호가 보고됩니다. 이것은
faultfinder 출력을 다른 도구에 공급하는 경우 유용한 명령입니다.

결함 탐지기 --조용한 --html --문맥 마이디르 > 결과.html
mydir 디렉토리와 하위 디렉토리에 있는 모든 C/C++ 파일을 검사하고
결과의 HTML 형식 버전을 생성합니다. 소스 코드 관리
시스템(예: SourceForge 및 Savannah)에서 이와 같은 명령을 사용할 수 있습니다.

결함 탐지기 --조용한 --저장 적중 목록 저장.히트 *.[채널]
현재 디렉터리에 있는 모든 .c 및 .h 파일을 검사합니다. 에 대해 보고하지 마십시오.
처리 상태를 확인하고 결과 적중 목록(모든 적중 집합)을 다음 위치에 저장합니다.
파일이 저장되었습니다.히트.

결함 탐지기 --diffhitlist 저장.히트 *.[채널]
현재 디렉터리에 있는 모든 .c 및 .h 파일을 검사하고
saved.hits 파일에 이미 없습니다. 이는 다음 항목만 표시하는 데 사용할 수 있습니다.
수정된 프로그램의 ``새로운'' 취약성(saved.hits가 다음에서 생성된 경우)
분석 중인 프로그램의 이전 버전.

결함 탐지기 --반점 최근 패치 .
현재 디렉터리를 재귀적으로 검사하지만
이미 적용된 패치 파일 이름이 변경되거나 추가됨 최근 패치.

결함 탐지기 --정규식 "CWE-120|CWE-126" src /
디렉토리 조사 SRC 재귀적이지만 CWE-120 또는
CWE-126이 적용됩니다.

호출 정력
텍스트 편집기 vim에는 faultfinder와 잘 작동하는 "quickfix" 메커니즘이 포함되어 있으므로
경고 메시지를 쉽게 보고 관련 소스 코드로 이동할 수 있습니다.

먼저, 적중 목록을 생성하기 위해 faultfinder를 호출해야 하며 두 가지 방법이 있습니다.
이 작업을 수행. 첫 번째 방법은 먼저 faultfinder를 시작한 다음 (출력을 사용하여) 호출하는 것입니다.
정력. 두 번째 방법은 vim을 시작(또는 계속 실행)한 다음 faultfinder를 호출하는 것입니다.
(일반적으로 내부 vim에서).

첫 번째 방법으로, faultfinder를 실행하고 출력을 일부 FLAWFILE(예: "flawfile")에 저장합니다.
그런 다음 "vim -q faultfile"과 같이 -q 옵션을 사용하여 vim을 호출합니다. 두 번째 방법
(vim을 시작한 후 faultfinder를 시작하는 것)은 다양한 방법으로 수행할 수 있습니다. 하나는 호출하는 것입니다
셸 명령 ":!flawfinder-command > FLAWFILE"을 사용하여 faultfinder를 실행한 다음
":cf FLAWFILE" 명령. 또 다른 방법은 faultfinder 명령을
makefile(예를 들어 "flaw"와 같은 의사 명령)을 실행한 다음 ":make fault"를 실행합니다.

이 모든 경우에 당신은 faultfinder를 실행하기 위한 명령이 필요합니다. 그럴듯한 명령,
각 히트를 자체 줄(-S)에 배치하고 혼동을 줄 수 있는 머리글과 바닥글을 제거합니다.
그것은:

결함 탐지기 -SQD .

이제 다양한 편집 명령을 사용하여 결과를 볼 수 있습니다. ":cn" 명령이 표시됩니다.
다음 히트; ":cN"은 이전 히트를 표시하고 ":cr"은 첫 번째 히트로 되감습니다.
":copen"은 "quickfix"라고 하는 현재 적중 목록을 표시하는 창을 엽니다.
window"; ":cclose"는 빠른 수정 창을 닫습니다. 사용된 창의 버퍼가
변경되고 오류가 다른 파일에 있는 경우 오류로 점프할 수 없습니다. 당신은해야
창에 점프를 시도하기 전에 포기할 수 있는 버퍼가 포함되어 있는지 확인하십시오.
새 파일, 예를 들어 파일을 저장합니다. 이렇게 하면 우발적인 데이터 손실을 방지할 수 있습니다.

호출 이맥스
텍스트 편집기/운영 체제 emacs에는 "grep 모드" 및 "컴파일 모드"가 포함됩니다.
결함 찾기와 잘 작동하는 메커니즘으로 경고 메시지를 쉽게 볼 수 있고 점프
관련 소스 코드에 추가하고 발견한 문제를 수정합니다.

먼저, faultfinder를 호출하여 경고 메시지 목록을 생성해야 합니다. 당신이 사용할 수있는
이 목록을 생성하려면 "grep 모드" 또는 "컴파일 모드"를 사용하십시오. 종종 "grep 모드"가 더 편리합니다.
컴파일 모드를 그대로 유지하므로 변경한 후에 쉽게 다시 컴파일할 수 있습니다.
무엇. 그러나 적중의 정확한 열 위치로 이동하려면 컴파일하십시오.
모드는 emacs가 faultfinder의 열 출력을 사용하여 다음을 수행할 수 있기 때문에 더 편리할 수 있습니다.
특별한 설정 없이 올바른 위치로 바로 이동합니다.

grep 모드를 사용하려면 "Mx grep" 명령을 입력한 다음 필요한 faultfinder를 입력하십시오.
명령. 컴파일 모드를 사용하려면 "Mx compile" 명령을 입력하고 필요한
결함 찾기 명령. 이것은 메타 키 명령이므로 메타 키를 사용해야 합니다.
키보드(일반적으로 ESC 키임). 모든 emacs 명령과 마찬가지로 다음을 수행해야 합니다.
"grep" 또는 "compile"을 입력한 후 RETURN을 누르십시오. 따라서 많은 시스템에서 grep 모드는
ESC xgrep RETURN을 입력하면 호출됩니다.

그런 다음 필요한 경우 이전에 있던 항목을 제거하여 명령을 입력해야 합니다. ㅏ
그럴듯한 명령은 다음과 같습니다.

결함 탐지기 -SQDC .

이 명령은 모든 적중 보고서를 한 줄로 만들어 도구에서 훨씬 쉽게
핸들. quiet 및 dataonly 옵션은 시스템에 필요하지 않은 다른 상태 정보를 제거합니다.
emacs 내부에서 사용하십시오. 후행 마침표는 현재 디렉토리와 모든
자손은 C/C++ 코드를 검색하고 결함을 분석합니다.

faultfinder를 호출하면 emacs를 사용하여 결과를 이동할 수 있습니다. 그만큼
Cx ` 명령(Control-x 백틱)은 다음 경고를 위해 소스 코드 위치를 방문합니다.
메시지. Cu Cx ` (control-u control-x 백틱) 처음부터 다시 시작합니다. 당신은 할 수 있습니다
에서 적중 메시지로 이동하여 특정 오류 메시지의 소스를 방문하십시오.
*compilation* 버퍼 또는 *grep* 버퍼를 실행하고 리턴 키를 입력합니다. (기술 노트:
이것은 컴파일-고토-오류를 호출합니다.) 마우스-2를 클릭할 수도 있습니다.
오류 메시지의 버튼을 누릅니다(먼저 *컴파일* 버퍼로 전환할 필요 없음).

grep 모드를 사용하여 적중의 특정 열로 이동하려면 다음을 수행해야 합니다.
이를 위해 특별히 emacs를 구성하십시오. 이렇게 하려면 emacs 변수 "grep-regexp-
alist". 이 변수는 "grep" 명령의 출력을 구문 분석하는 방법을 Emacs에 알려줍니다.
다양한 형식의 컴파일 오류를 나열하는 변수 "compilation-error-regexp-alist"
메시지.

호출 통합 개발 환경 (십오 일)
(기타) IDE의 경우 IDE의 플러그인 세트를 참조하십시오.

공통 약점 열거 (CWE)


CWE(Common Weakness Enumeration)는 "공통 소프트웨어의 공식 목록 또는 사전입니다.
소프트웨어의 아키텍처, 디자인, 코드 또는 구현에서 발생할 수 있는 약점
악용 가능한 보안 취약점으로 이어질 수 있습니다... 공통 언어로 사용되도록 생성됨
소프트웨어 보안 취약점을 설명하기 위해'' (http://cwe.mitre.org/about/faq.html). 용
CWE에 대한 자세한 내용은 다음을 참조하십시오. http://cwe.mitre.org.

Flawfinder는 CWE를 지원하며 공식적으로 CWE와 호환됩니다. 일반적으로 히트 설명
관련 CWE(Common Weakness Enumeration) 식별자를 괄호 안에 포함합니다.
관련 CWE로 알려져 있습니다. 예를 들어 많은 버퍼 관련 조회수가 언급합니다.
CWE-120, ``입력 크기를 확인하지 않고 버퍼 복사''에 대한 CWE 식별자(일명
``클래식 버퍼 오버플로우''). 경우에 따라 둘 이상의 CWE 식별자가 나열될 수 있습니다.
HTML 보고서에는 MITRE에서 호스팅되는 CWE 정의에 대한 하이퍼텍스트 링크도 포함되어 있습니다. ~ 안에
이러한 방식으로 Flawfinder는 CWE-Output 요구 사항을 충족하도록 설계되었습니다.

Flawfinder에서 보고한 많은 CWE는 25년 CWE/SANS 상위 2011개 목록에 포함되어 있습니다.
(http://cwe.mitre.org/top25/). 많은 사람들이 이 목록에서 CWE를 검색하고 싶어할 것입니다.
CWE-120(클래식 버퍼 오버플로)과 같은 결함 탐지기가 더 많은 CWE에 매핑될 때
상위 25개 항목보다 일반적이면 더 일반적인:더 구체적인 것으로 나열됩니다(예:
CWE-119:CWE-120), 여기서 more-general은 실제 매핑입니다. faultfinder가 더 많은
상위 25개 항목의 특정 사례인 특정 CWE 항목은 다음 형식으로 나열됩니다.
top-25/more-specific(예: CWE-362/CWE-367), 여기서 실제 매핑은 더 구체적입니다.
CWE 항목. 동일한 항목이 여러 CWE에 매핑되는 경우 CWE는 쉼표로 구분됩니다.
(CWE-20, 부적절한 입력 유효성 검사에서 종종 발생합니다). 이렇게 하면 검색이 간단해집니다.
특정 CWE.

매핑에는 CWE 버전 2.7(23년 2014월 XNUMX일 릴리스)이 사용되었습니다. 현재 CWE
매핑은 도구가 결정할 수 있는 가장 구체적인 CWE를 선택합니다. 이론적으로 대부분의 CWE
보안 요소(도구가 검색하는 서명/패턴)는 이론적으로
CWE-676(잠재적으로 위험한 기능 사용)에 매핑되지만 그러한 매핑은
유용한. 따라서 찾을 수 있는 경우 보다 구체적인 매핑이 선호되었습니다. 결점 찾기
어휘 분석 도구입니다. 결과적으로 보다 구체적으로 지정하는 것은 비실용적입니다.
현재 구현된 매핑 이것은 또한 많이 필요할 것 같지 않다는 것을 의미합니다.
지도 통화 업데이트; 단순히 세분화할 정보가 충분하지 않습니다.
CWE 변경이 일반적으로 영향을 미치는 상세한 CWE 수준. CWE 식별자 목록
"make show-cwes"를 사용하여 자동으로 생성되었으므로 이 목록이
맞다. CWE 매핑 문제를 발견하면 버그로 보고해 주십시오.

Flawfinder는 이러한 CWE 중 하나를 다루는 경우에도 취약점을 찾지 못할 수 있습니다.
약점. 즉, Flawfinder는 커버하는 CWE에 나열된 취약점을 찾습니다.
대부분의 경우 이러한 취약점이 없는 라인은 보고하지 않습니다. 따라서,
CWE와 호환되도록 의도된 모든 도구에 필요하며, 결함 탐지기는 거짓 비율이 있습니다.
100% 미만의 양성 및 100% 미만의 위음성 비율. 결함 찾기 거의
CWE 보안 요소와 일치하는 항목을 찾을 때마다 항상 보고합니다(서명/패턴은
특정 모호한 구조로 인해 실패할 수 있지만(BUGS 참조)
아래).

Flawfinder는 다음 CWE에 대해 보고할 수 있습니다(이는 Flawfinder가 다루는 CWE입니다.
``*''는 CWE/SANS 상위 25개 목록에 있는 항목을 표시합니다.

· CWE-20: 부적절한 입력 검증

· CWE-22: 제한된 디렉토리에 대한 경로 이름의 부적절한 제한("Path Traversal")

· CWE-78: OS 명령(``OS 명령
주입'')*

· CWE-119: 메모리 버퍼 경계 내에서 작업의 부적절한 제한(a
CWE-120*의 상위이므로 CWE-119:CWE-120으로 표시됨)

· CWE-120: 입력 크기 확인 없이 버퍼 복사(``Classic Buffer Overflow'')*

· CWE-126: 버퍼 오버 읽기

· CWE-134: 제어되지 않는 형식 문자열*

· CWE-190: 정수 오버플로 또는 랩어라운드*

· CWE-250: 불필요한 권한으로 실행

· CWE-327: 깨지거나 위험한 암호화 알고리즘 사용*

· CWE-362: 부적절한 동기화로 공유 리소스를 사용한 동시 실행
(``경쟁 조건'')

· CWE-377: 안전하지 않은 임시 파일

· CWE-676: 잠재적으로 위험한 기능 사용*

· CWE-732: 중요한 리소스에 대한 잘못된 권한 할당*

· CWE-785: 최대 크기 버퍼 없이 경로 조작 기능 사용(자식
CWE-120*이므로 CWE-120/CWE-785로 표시됨)

· CWE-807: 보안 결정에서 신뢰할 수 없는 입력에 의존*

· CWE-829: 신뢰할 수 없는 제어 영역의 기능 포함*

``--regex'' (-e) 옵션을 사용하여 보고할 CWE의 특정 하위 집합을 선택할 수 있습니다.
이 옵션은 정규식을 허용하므로 ``--regex와 같이 여러 CWE를 선택할 수 있습니다.
"CWE-120|CWE-126"''. 명령줄에서 ``|''로 여러 CWE를 선택하면
일반적으로 매개변수를 인용할 필요가 있습니다(인용되지 않은 ``|''는 파이프 기호이기 때문입니다).
Flawfinder는 CWE 검색 가능 요구 사항을 충족하도록 설계되었습니다.

목표가 파일에 나열된 CWE의 하위 집합을 보고하는 것이라면 달성할 수 있습니다.
``--regex'' 일명 ``-e'' 옵션을 사용하는 유닉스 계열 시스템에서. 파일은 다음 위치에 있어야 합니다.
정규식 형식. 예를 들어 ``flawfinder -e $(cat file1)''은 보고만 합니다.
``file1''의 패턴과 일치하는 히트 수. file1에 ``CWE-120|CWE-126''이 포함되어 있으면
해당 CWE와 일치하는 조회수만 보고합니다.

모든 CWE 보안 요소 목록(flawfinder가 찾는 서명/패턴)
``--listrules'' 옵션을 사용하여 찾을 수 있습니다. 각 줄에는 서명 토큰이 나열됩니다.
적중으로 이어질 수 있는 (일반적으로 함수 이름), 기본 위험 수준 및
기본 경고(기본 CWE 식별자 포함). 대부분의 목적을 위해 이것은
어떤 CWE 보안 요소가 어떤 CWE에 매핑되는지 확인하려는 경우에도 충분합니다.
뒤집다. 예를 들어 매핑되는 대부분의 서명(함수 이름)을 보려면
CWE-327, 기본 위험 수준 또는 자세한 경고 텍스트를 보지 않고 ``flawfinder 실행
--listrules | grep CWE-327 | 컷 -f1''. CWE 매핑 없이도 토큰을 볼 수 있습니다.
``flawfinder -D --listrules | grep -v CWE-''. 그러나, 동안
--listrules는 모든 CWE 보안 요소를 나열하며 CWE의 기본 매핑만 나열합니다.
CWE 식별자에 대한 보안 요소. 그것은 faultfinder가 제공하는 개선 사항을 포함하지 않습니다.
적용됩니다(예: 함수 매개변수 검사).

CWE 보안 요소와 CWE 간의 상세하고 정확한 매핑을 원하는 경우
식별자, 결함 탐지기 소스 코드(배포판에 포함)가 가장 좋은 곳입니다.
그 정보를 위해. 이 자세한 정보는 주로 소수의 사람들에게 중요합니다.
Flawfinder의 CWE 매핑을 개선하거나 일반적으로 CWE를 개선하려는 사람들.
소스 코드는 각 CWE에 대한 보안 요소 간의 매핑을 문서화합니다.
식별자이며 단일 Python 파일입니다. ``c_rules'' 데이터 세트는 대부분의 규칙을 정의합니다.
추가 개선을 할 수 있는 기능을 참조하여. 당신은 검색 할 수 있습니다
기본적으로 생성하는 CWE를 확인하기 위한 함수 이름 데이터 세트 첫 번째 매개변수가
``정상''이 아닌 경우 다른 것을 선택할 수 있는 정제 Python 메서드의 이름입니다.
CWE(추가 정보에 따라 다름). 반대로 ``CWE-번호''를 검색할 수 있습니다.
해당 CWE 식별자를 참조하는 보안 요소(시그니처 또는 패턴)를 찾습니다.
대부분의 사람들에게 이것은 그들이 필요로 하는 것보다 훨씬 더 많은 것입니다. 대부분의 사람들은 자신의
문제를 빠르게 찾을 수 있는 소스 코드.

보안


이 도구의 요점은 취약점을 찾아 수정할 수 있도록 돕는 것입니다.
그러나 개발자와 검토자는 이를 사용하기 위해 보안 소프트웨어를 개발하는 방법을 알아야 합니다.
도구, 그렇지 않으면 a 바보 a 수단 is 여전히 a 바보. 내 책
http://www.dwheeler.com/secure-programs 도움이 될 수 있습니다.

이 도구는 기껏해야 더 큰 소프트웨어 개발 프로세스의 작은 부분이어야 합니다.
취약점의 영향을 제거하거나 줄이기 위해 설계되었습니다. 개발자 및 검토자
보안 소프트웨어를 개발하는 방법을 알아야 하며 이 지식을 적용하여
우선 취약점의 위험.

다른 취약점 찾기 도구는 다른 취약점을 찾는 경향이 있습니다. 따라서 당신은
인적 검토와 다양한 도구를 사용하는 것이 가장 좋습니다. 이 도구는 일부를 찾는 데 도움이 될 수 있습니다.
취약점이 있지만 전부는 아닙니다.

항상 분석해야 합니다. 복사 디렉토리가 아니라 분석 중인 소스 프로그램의
faultfinder가 분석을 수행하는 동안 개발자가 수정할 수 있습니다. 이것은
특히 분석 중인 프로그램의 개발자를 반드시 신뢰하지 않는 경우 true입니다.
파일을 분석하는 동안 공격자가 파일을 제어할 수 있는 경우 공격자는
보안 문제의 노출을 방지하기 위해 파일을 이동하거나 내용을 변경합니다.
(또는 문제가 없는 곳에 문제가 있다는 인상을 줍니다). 걱정된다면
악의적인 프로그래머는 어쨌든 이 작업을 수행해야 합니다.
결국 실행되는 코드가 분석한 코드인지 확인하십시오. 또한 다음을 사용하지 마십시오.
이러한 경우 --allowlink 옵션; 공격자는 파일에 대한 악의적인 심볼릭 링크를 만들 수 있습니다.
소스 코드 영역 외부(예: / etc / passwd).

소스 코드 관리 시스템(예: SourceForge 및 Savannah)은 확실히 여기에 속합니다.
범주; 이러한 시스템 중 하나를 유지 관리하는 경우 먼저 파일을 복사하거나 추출하십시오.
faultfinder를 실행하기 전에 별도의 디렉토리(공격자가 제어할 수 없음) 또는
다른 코드 분석 도구.

faultfinder는 일반 파일, 디렉토리 및 (요청된 경우) 기호만 엽니다.
연결; 심볼릭 링크가 만들어지더라도 다른 종류의 파일은 절대 열지 않습니다.
이는 비정상적인 파일 유형을 소스 코드에 삽입하는 공격자에 대응합니다. 그러나, 이
분석 중인 파일 시스템이 분석 중에 공격자에 의해 수정될 수 없는 경우에만 작동합니다.
위에서 권장한 대로 분석합니다. 이 보호 기능은 Cygwin 플랫폼에서도 작동하지 않습니다.
운수 나쁘게.

Cygwin 시스템(Windows 위의 Unix 에뮬레이션)에는 결함 찾기가 있는 경우 추가 문제가 있습니다.
분석가가 신뢰할 수 없는 프로그램을 분석하는 데 사용됩니다. 문제는 디자인 때문입니다.
Windows의 결함(MS-DOS에서 상속됨). Windows 및 MS-DOS에서 특정 파일 이름
(예: ``com1'')은 운영 체제에서 다음 이름으로 자동 처리됩니다.
전체 경로 이름이 제공되는 경우에도 마찬가지입니다. 예, Windows 및 MS-DOS
정말 이렇게 잘못 설계되었습니다. Flawfinder는 파일 시스템이 무엇인지 확인하여 이를 처리합니다.
개체는 디렉토리와 일반 파일(및 활성화된 경우 심볼릭 링크)만 엽니다.
불행히도 이것은 Cygwin에서 작동하지 않습니다. 일부 Cygwin의 적어도 일부 버전에서
파일이 장치 유형인지 확인하려고만 하면
매달리는 프로그램. 해결 방법은 해석되는 모든 파일 이름을 삭제하거나 이름을 바꾸는 것입니다.
분석을 수행하기 전에 장치 이름으로. 이러한 소위 "예약된 이름"은
CON, PRN, AUX, CLOCK$, NUL, COM1-COM9 및 LPT1-LPT9, 선택적으로 확장자가 뒤따름
(예: ``com1.txt''), 모든 디렉토리 및 모든 경우(Windows는 대소문자를 구분하지 않음).

Do 지원 신뢰할 수 없는 소스의 히트리스트를 로드하거나 비교합니다. 그것들은 다음을 사용하여 구현됩니다.
Python pickle 모듈과 pickle 모듈은 오류로부터 보호하기 위한 것이 아닙니다.
또는 악의적으로 구성된 데이터. 저장된 적중 목록은 나중에 동일한 사용자가 사용하기 위한 것입니다.
히트리스트를 만든 사용자 그런 맥락에서 이 제한은 문제가 되지 않습니다.

onworks.net 서비스를 사용하여 온라인으로 faultfinder 사용



최신 Linux 및 Windows 온라인 프로그램