英語フランス語スペイン語

Ad


OnWorksファビコン

欠陥ファインダー - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して、OnWorks の無料ホスティング プロバイダーで欠陥ファインダーを実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド フローファインダーです。

プログラム:

NAME


欠陥ファインダー - ソース コード内の潜在的なセキュリティ上の欠陥 (「ヒット」) を語彙的に見つけます。

SYNOPSIS


欠陥発見者 [ - 助けて|-h] [- バージョン] [--listrules]
[--allowlink] [--followdotdir] [--nolink]
[--パッチ=ファイル名|-P ファイル名]
[--入力|-I] [ --minlevel=X | -m X ] [--偽陽性|-F]
[--決して無視しないでください|-n]
[--regex =パターン | -e パターン]
[- 環境|-c] [-列|-C] [--dataonly|-D] [--html|-H] [- すぐに|-i]
[- 単線|-S] [--省略時間] [- 静かな|-Q]
[--loadhitlist=F] [--savehitlist=F] [--diffhitlist=F]
[--] [ source コード file or source ルート ディレクトリにジョブを開始します。 ]+

DESCRIPTION


Flawfinder は、C/C++ ソース コードを検索して、潜在的なセキュリティ上の欠陥を探します。 に
欠陥ファインダーを実行するには、単に欠陥ファインダーにディレクトリまたはファイルのリストを与えます。 ディレクトリごとに
指定すると、そのディレクトリ内にある C/C++ ファイル名拡張子を持つすべてのファイル (およびそのディレクトリ
サブディレクトリ、再帰的に) が検査されます。 したがって、ほとんどのプロジェクトでは、単純に次のように指定します。
欠陥ファインダー ソースコードの最上位ディレクトリの名前 (現在のディレクトリには「.」を使用します)
ディレクトリ)、fwfinder はプロジェクトのすべての C/C++ ソース コードを検査します。 もし、あんたが
ただ持ちたいだけ 変更 レビューして、それらの変更の統合された diff (GNU によって作成された) を保存します。
"diff -u" または "svn diff" または "git diff") をパッチ ファイル内で指定し、--patch (-P) オプションを使用します。

Flawfinder は、リスクごとに分類された「ヒット」(潜在的なセキュリティ上の欠陥)のリストを生成します。 の
最も危険なヒットが最初に表示されます。 リスクレベルは角括弧内に示されており、変動します。
0 (リスクが非常に小さい) から 5 (リスクが大きい) まで。 このリスクレベルは、
ただし、関数のパラメータの値に依存します。 たとえば、定数
文字列は多くの場合、完全に可変の文字列よりもリスクが低いことがよくあります。
コンテキストでは、ヒットのリスク レベルは低くなります。 Flawfinder は gettext (一般的な
国際化プログラム用のライブラリ)を使用し、渡された定数文字列を処理します。
gettext は定数文字列であるかのように実行されます。 これにより、誤ヒットの数が減少します。
国際化されたプログラム。 Flawfinder は _T() と同じようなことを行います。
_TEXT()、国際化されたプログラムを処理するための一般的な Microsoft マクロ。 欠陥発見者
コメントと文字列内のほとんどのテキストを正しく無視します。 通常、欠陥ファインダーはすべてを表示します
リスク レベルが 1 以上のヒットですが、--minlevel オプションを使用してのみを表示できます
必要に応じて、より高いリスクレベルでヒットすることもできます。 ヒットの説明には、関連する共通事項も記載されています
以下で説明するように、括弧内の弱点列挙 (CWE) 識別子。 欠陥発見者
正式に CWE と互換性があります。

すべてのヒットが実際にセキュリティの脆弱性であるわけではなく、すべてのセキュリティの脆弱性であるわけではありません。
必ず見つかります。 それでも、欠陥発見器は発見と除去に役立ちます。
セキュリティの脆弱性。 欠陥ファインダーを使用する一般的な方法は、最初に欠陥ファインダーを適用することです。
一連のソース コードを調べて、最もリスクの高い項目を調べます。 次に、 --inputs を使用して調べます
入力場所を確認し、正当で安全な入力値のみが入力されていることを確認します。
信頼できないユーザーからは受け入れられます。

プログラムを監査したら、実際には問題はないが、ソース コード行にマークを付けることができます。
偽の警告を表示して、欠陥発見者が警告を表示しなくなるようにします。 マークを付けるには
これらの警告が抑制されるように、行に特別な形式のコメントを追加します。
同じ行 (ソース コードの後)、または前の行の単独の行。 コメント
次の XNUMX つの形式のいずれかである必要があります。

· // 欠陥発見者: 無視

· /* 欠陥発見者: 無視 */

互換性のために、これらの「Flawfinder:」を「ITS4:」または「RATS:」に置き換えることができます。
特別な形式のコメント。 そのような行は間違っている可能性があるため、次のように使用できます。
--neverignore オプション。これにより、fwfinder はいかなる行も無視しなくなります。
コメント ディレクティブには次のように書かれています (さらに紛らわしいことに、--neverignore は無視を無視します)。

Flawfinder は「ルールセット」と呼ばれる内部データベースを使用します。 ルールセットは識別します
セキュリティ上の欠陥の一般的な原因となる機能。 標準ルールセットには大規模なルールセットが含まれています。
さまざまな潜在的な問題 (あらゆるものに影響を与える可能性のある一般的な問題を含む)
C/C++ プログラム、および多くの特定の Unix ライクおよび Windows 関数。
特に問題がある。 --listrules オプションは、現在のルールのリストをレポートします。
デフォルトのリスクレベル。 上で述べたように、特定の場所で見つかった潜在的なセキュリティ上の欠陥はすべて、
ソース コード ファイル (ルールセット内のエントリと一致する) は「ヒット」と呼ばれ、一連のソース コード ファイルは「ヒット」と呼ばれます。
プログラムの特定の実行中に見つかったヒットは、「ヒットリスト」と呼ばれます。
保存 (--savehitlist を使用)、再表示のために再ロード (--loadhitlist を使用) することができます。
別の実行とは異なるヒットのみを表示できます (--diffhitlist を使用)。

Flawfinder はシンプルなツールですが、根本的な長所と短所がいくつかあります。 欠陥発見器の作品
単純な字句トークン化を行うことにより (コメントをスキップし、文字列を正しくトークン化する)、
データベースと一致するトークンを探します (特に関数呼び出しを見つけるため)。
したがって、Flawfinder は、同様に単純な語彙トークン化を使用する RATS および ITS4 に似ています。
次に、Flawfinder は関数パラメータのテキストを調べてリスクを推定します。 ようではない
Splint、GCC の警告フラグ、Clang などのツール、Flowfinder は、 使うか持っているか
検索時の制御フロー、データ フロー、またはデータ型に関する情報へのアクセス
潜在的な脆弱性やリスクのレベルの推定。 したがって、欠陥発見者は、
必然的に脆弱性に対して多くの誤検知が発生し、多くの報告が失敗します。
脆弱性。 一方、fwfinder はプログラムの脆弱性を見つけることができます。
構築できないか、リンクできません。 多くの場合、実行できないプログラムでも動作します。
(少なくともレビューアーのツールによって) コンパイルされています。 Flawfinder もそれほど混乱しません。
マクロ定義やその他の奇妙な点は、より高度なツールでは問題が生じます。
Flawfinder は、静的解析ツールの簡単な入門としても役立ちます。
使い始めるのが簡単で理解しやすいため、一般的です。

コマンドラインで指定されたファイル名はすべて検査されます (通常のファイル名がない場合でも)。
C/C++ ファイル名拡張子); したがって、欠陥ファインダーに特定のファイルを強制的に検査させることができます。
欲望。 ディレクトリを再帰的に検索している間、fwfinder は開いて検査するだけです
C/C++ ファイル名拡張子を持つ通常のファイル。 Flawfinder は、ファイルが
C/C++ ファイルの拡張子が「.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 で除算します。
スキップされた場合、それらの数が報告されます。 ヒットが抑制された場合 (「無視」を使用)
前述のソース コード コメント内のディレクティブ)、抑制された数が報告されます。
レポートに含める最小リスク レベルが表示されます。 デフォルトではこれは 1 です
(これを変更するには --minlevel を使用します)。 要約は重要な注意事項で終わります: すべてのヒットがヒットするわけではありません
それは必然的にセキュリティ上の脆弱性であり、他のセキュリティ上の脆弱性が存在する可能性があります
ツールでは報告されません。

Flawfinder は、GNU GPL ライセンス バージョン 2 以降 (GPLv2+) に基づいてリリースされます。

Flawfinder は、完全にオープンソースではない別のプログラム ITS4 と同様に動作します。
ソフトウェア (オープンソースの定義で定義) またはフリー ソフトウェア (オープンソースの定義で定義)
フリーソフトウェア財団)。 Flawfinder の作者は ITS4 のソース コードを見たことがありません。

BRIEF チュートリアル


以下に、fwfinder の使用方法の簡単な例を示します。 C/C++ があると想像してください。
xyzzy という名前のプログラムのソース コード (あなたが書いたかどうかはわかりません)、および
セキュリティの脆弱性を探している (顧客より先に脆弱性を修正できるようにするため)
脆弱性に遭遇します)。 このチュートリアルでは、Unix を使用していると仮定します。
Linux、OpenBSD、MacOS X などのシステムと同様です。

ソース コードが xyzzy という名前のサブディレクトリにある場合は、おそらく、
テキスト ウィンドウを使用し、欠陥ファインダーのデフォルト設定を使用してプログラムを分析し、レポートを作成します。
潜在的なセキュリティ脆弱性の優先順位付きリスト (「少ない」は単に、
結果は画面上に残ります):
欠陥探知機xyzzy | 以下

この時点で、多数のエントリが表示されます。 各エントリにはファイル名があり、
コロン、行番号、括弧内のリスク レベル (5 が最もリスクが高い)、カテゴリ、
関数の名前、および欠陥ファインダーがその線を
脆弱性。 Flawfinder は通常、リスク レベルによって並べ替え、最もリスクの高い項目を最初に表示します。
時間が限られている場合は、最もリスクの高い項目から作業を開始するのが最善です。
時間がなくなるまで続けてください。 表示をリスクのみに限定したい場合
特定のリスク レベル以上の場合は、--minlevel オプションを使用します。 を取得している場合は、
変数名が危険に見えるため、異常な数の誤検知が発生する
関数名についてのレポートを削除するには、-F オプションを使用します。 理解できない場合
エラー メッセージについては、次のドキュメントを参照してください。 書き込み セキュアー プログラム for Linux &
Unixの 方法http://www.dwheeler.com/secure-programs⟩ で http://www.dwheeler.com/secure-
安全なプログラムの作成に関する詳細情報を提供するプログラム。

問題を特定して理解したら、修正できます。 場合によっては、
行番号が変更されるため、分析をやり直したい & 確かめる
新しいコードはまだ別の脆弱性を導入していないことを確認します。

ある行が実際には問題ではないと判断し、それを確信している場合は、次のことができます。
問題のある行の直前または上に次のようなコメントを挿入します。
/* 欠陥発見者: 無視 */
出力に表示されないようにします。

それが完了したら、戻ってプログラムの入力を検索して、
プログラムが信頼できない入力を強力にフィルタリングしていることを確認してください。 欠陥発見器の缶
次のように --inputs オプションを使用して、多くのプログラム入力を識別します。
欠陥ファインダー --xyzzy を入力します。

Flawfinder は、テキスト エディタや統合開発環境とうまく統合できます。
詳細については、例を参照してください。

Flawfinder には、HTML バージョンを作成するオプションなど、他にも多くのオプションが含まれています。
出力 (よりきれいな表示に役立ちます)。 次のセクションでは、これらのオプションについて詳しく説明します
詳細。

OPTIONS


Flawfinder には多数のオプションがあり、独自のオプションを制御するオプションにグループ化できます。
ドキュメント、入力データの選択、表示するヒットの選択、出力形式の選択、
ヒットリスト管理を実行します。 Flawfinder は、
POSIX (第 7 号、2013 年版) セクション「ユーティリティ規約」。 GNUもサポートしています
長いオプション (形式 -- の二重ダッシュ オプション)オプション) で定義されているように GNU C 図書館
参照 マニュアル 「プログラムの引数の構文規則」と GNU コーディング 規格
「コマンドラインインターフェースの標準」。 長いオプション引数は次のように指定できます。
「--name=値」または「-name 値」。 一部のオプションは、more を使用してのみアクセスできます。
読みやすい GNU の長いオプション規則。 共通オプションは古いバージョンでもサポートされています
単一文字のオプション規則。

ドキュメンテーション
- 助けて

-h 使用方法 (ヘルプ) 情報を表示します。

- バージョン バージョン番号(のみ)を表示して終了します。

--listrules さらなる調査のきっかけとなる用語(トークン)とそのデフォルトリスクを列挙します
レベル、およびデフォルトの警告 (CWE 識別子を含む)
該当する)、すべてタブで区切られています。 この用語は主に、潜在的に-
危険な機能。 報告されているリスク レベルと警告は、一部のものに注意してください。
用語の使い方に応じて、特定のコードがデフォルトとは異なる場合があります。
使用済み。 通常のヘッダーが不要な場合は、-D と組み合わせます。 欠陥発見者
バージョン 1.29 では、区切り文字がスペースからタブに変更され、デフォルトの文字列が追加されました。
警告フィールド。

選択 入力 且つ
--allowlink シンボリック リンクの使用を許可します。 通常、シンボリック リンクはスキップされます。 やめてください
他の人によるコードを分析する場合は、このオプションを使用します。 攻撃者は多くのことを行うことができます
このオプションを有効にすると、分析で問題が発生する可能性があります。 ために
たとえば、攻撃者は次のようなファイルへのシンボリック リンクを挿入する可能性があります。 /etc/passwd
(ファイルに関する情報が漏洩する)または循環ループを作成します。
欠陥ファインダーを「永久に」実行させます。 これを有効にする場合の別の問題
オプションは、同じファイルがシンボリックを使用して複数回参照される場合です。
リンクがある場合、複数回分析されます (したがって、複数回レポートされます)。
欠陥発見ツールにはすでにシンボリック リンクに対する保護が含まれていることに注意してください。
デバイス ファイル タイプ (例: /dev/zero または
C:\mystuff\com1)。 欠陥ファインダーのバージョン 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 プログラムの外部からデータを取得する関数のみを表示します。 これも設定します
minlevel を 0 にします。

--minlevel=X

-m X ヒットリストに含めるには、最小リスク レベルを X に設定します。 これは 0 から可能です (「いいえ」
リスク」) から 5 (「最大リスク」)。 デフォルトは 1 です。

--偽陽性

-F 誤検知の可能性があるヒットは含めないでください。 現在、これが意味するのは、
関数名は「(」が続かない場合には無視されること、そして
文字配列の宣言は記載されていません。 したがって、変数を使用した場合
どこでも「access」という名前が付けられているため、これにより、この通常のアクセスへの参照が削除されます。
変数。 これはデフォルトではありません。これにより、次のような可能性が高まります。
重要なヒット曲を見逃している。 特に、#define 句と呼び出し内の関数名
through 関数ポインタは失われます。

--決して無視しないでください

-n たとえセキュリティ問題に「無視」ディレクティブがあるとしても、決して無視しないでください。
コメント。

--regexp =パターン

-e パターン
正規表現パターン PATTERN に一致するテキストを含むヒットのみを報告します。
たとえば、「CWE-120」というテキストを含むヒットのみをレポートするには、「--regex」を使用します。
CWE-120」。 これらのオプション フラグ名は grep と同じです。

選択 出力 フォーマット
-列

-C 各ヒットの列番号 (ファイル名と行番号も) を表示します。
これは、行番号の後にコロンと列番号を追加することで表示されます。
行 (行の最初の文字は列番号 1)。 これは便利です
特定の列にジャンプできるエディター、または他のエディターとの統合用
ツール (誤検知をさらに除外するツールなど)。

- 環境

-c コンテキスト、つまり「ヒット」/潜在的な欠陥のある行を表示します。 デフォルトでは、
警告の直後に行が表示されます。

--dataonly

-D ヘッダーとフッターを表示しません。 これを --quiet と組み合わせて使用​​すると、単に表示されます。
データそのもの。

--html

-H 出力を単純なテキストではなく HTML としてフォーマットします。

- すぐに

-i ヒットしたものをすぐに表示します (最後まで待つ必要はありません)。

- 単線

-S ヒットごとに XNUMX 行のテキスト出力として表示します。 対話に役立ちます
コンパイルツールを使って。

--省略時間 タイミング情報を省略します。 これは、fwfinder の回帰テストに役立ちます。
分析の長さに応じて出力が変化しないようにするため、
かかります。

- 静かな

-Q ステータス情報 (つまり、どのファイルが検査されているか) を表示しません。
分析が進んでいます。

ヒットリスト マネジメント
--savehitlist=F
結果として得られるすべてのヒット (「ヒットリスト」) を F に保存します。

--loadhitlist=F
ソース プログラムを分析する代わりに、F からヒットリストをロードします。 警告: 実行してください
信頼できないソースからヒットリストをロードします (セキュリティ上の理由から)。

--diffhitlist=F
F にないヒット (ロードまたは分析された) のみを表示します。F はおそらく作成されました
以前は --savehitlist を使用していました。 警告: 実行してください 信頼できないヒットリストとの差分
(セキュリティ上の理由から) --loadhitlist オプションが指定されていない場合は、
これにより、分析されたソース コード ファイル内のヒットしなかったものが表示されます。
以前は F に保存されていました。 --loadhitlist と一緒に使用すると、
ロードされたヒットリスト内のヒットは F にはありません。違いのアルゴリズムは次のとおりです。
保守的; ヒットは、同じものがある場合にのみ「同じ」とみなされます。
ファイル名、行番号、列位置、関数名、リスクレベル。


ここでは、fwfinder を呼び出す方法のさまざまな例を示します。 最初の例ではさまざまなことが示されています
シンプルなコマンドラインオプション。 Flawfinder は、テキスト エディタや
統合開発環境のため、次のセクションでは、fwfinder を統合する方法を示します。
vimとemacsに。

簡単な拡張で コマンドライン オプション
欠陥発見者 /usr/src/linux-3.16
/usr/src/linux-3.16 ディレクトリ内のすべての C/C++ ファイルとそのすべてを調べます。
サブディレクトリを (再帰的に) 検索し、見つかったすべてのヒットについてレポートします。 デフォルトでは
欠陥ファインダーは、名前が次で始まるシンボリック リンクとディレクトリをスキップします。
期間。

欠陥発見者 --minlevel=4 .
現在のディレクトリとそのサブディレクトリ内のすべての C/C++ ファイルを調べます。
(再帰的に); レベル 4 以上 (上位 XNUMX つの脆弱性) のみを報告します。
リスクレベル)。

欠陥発見者 --入力 ミディル
mydir とそのサブディレクトリ内のすべての C/C++ ファイルを (再帰的に) 検査します。
入力を受け取るレポート関数 (関数が確実にフィルタリングできるようにするため)
適切に入力してください)。

欠陥発見者 --決して無視しないでください ミディル
mydir ディレクトリとそのサブディレクトリ内のすべての C/C++ ファイルを調べます。
コードのコメントで無視するようにマークされたヒットも含まれます。

欠陥発見者 -QD ミディル
mydir を調べて、実際の結果のみを報告します (ヘッダーと
出力のフッター)。 この形式は、出力がパイプされる場合に便利です。
さらに分析するための他のツール。 -C (--columns) および -S (--singleline)
オプションは、データを他のツールにパイプする場合にも役立ちます。

欠陥発見者 -QDSC ミディル
mydir を調べて、実際の結果のみを報告します (ヘッダーやフッターはありません)。 各
ヒットは XNUMX 行で報告され、列番号が報告されます。 これは、
欠陥ファインダーの出力を他のツールにフィードする場合に便利なコマンドです。

欠陥発見者 - 静かな --html - 環境 ミディル > 結果.html
ディレクトリ mydir とそのサブディレクトリ内のすべての C/C++ ファイルを調べます。
結果の HTML 形式のバージョンを生成します。 ソースコード管理
システム (SourceForge や Savannah など) はこのようなコマンドを使用する場合があります。

欠陥発見者 - 静かな --savehitlist 保存された.hits *。[ch]
現在のディレクトリ内のすべての .c および .h ファイルを調べます。 ~については報道しないでください
処理のステータスを確認し、結果のヒットリスト (すべてのヒットのセット) を次の場所に保存します。
ファイルが保存されました。hits。

欠陥発見者 --diffhitlist 保存された.hits *。[ch]
現在のディレクトリ内のすべての .c および .h ファイルを調べ、ヒットしたものがあれば表示します。
ファイルsaved.hitsにはまだ存在していませんでした。 これは、
変更されたプログラムの「新しい」脆弱性 (saved.hits が作成された場合)
分析されているプログラムの古いバージョン。

欠陥発見者 - パッチ 最近のパッチ .
現在のディレクトリを再帰的に調べますが、レポートされるのは、
という名前のすでに適用されているパッチファイルに変更または追加されました 最近のパッチ.

欠陥発見者 -正規表現 「CWE-120|CWE-126」 src /
ディレクトリを調べる SRC 再帰的ですが、CWE-120 または
CWE-126が適用されます。

呼び出す から 活力
テキストエディタ vim には、fwfinder とうまく連携する「クイックフィックス」メカニズムが含まれているため、
警告メッセージを簡単に表示して、関連するソース コードにジャンプできます。

まず、fwfinder を呼び出してヒットのリストを作成する必要があります。これには XNUMX つの方法があります。
これを行う。 XNUMX つ目の方法は、最初に欠陥ファインダーを起動し、次に (その出力を使用して) を呼び出すことです。
ヴィム。 XNUMX 番目の方法は、vim を起動 (または実行を継続) してから、fwfinder を呼び出すことです。
(通常は vim 内から)。

最初の方法では、fwfinder を実行し、その出力を FLAWFILE (「flawfile」など) に保存します。
次に、「vim -q欠陥ファイル」のように、-qオプションを使用してvimを呼び出します。 XNUMX番目の方法
(vim を起動した後に欠陥ファインダーを起動する) には、たくさんの方法があります。 XNUMXつは呼び出すことです
シェルコマンド「:!flawfinder-command > FLAWFILE」を使用して欠陥ファインダーを実行し、その後に次のように入力します。
コマンド「:cf FLAWFILE」。 もう XNUMX つの方法は、fwfinder コマンドを
makefile (たとえば、「flaw」のような疑似コマンド) を作成し、「:make folk」を実行します。

これらすべての場合において、fwfinder を実行するためのコマンドが必要です。 もっともらしいコマンドですが、
各ヒットを独自の行に配置し (-S)、混乱を招くヘッダーとフッターを削除します。
それは、次のとおりです。

欠陥発見者 -SQD .

さまざまな編集コマンドを使用して結果を表示できるようになりました。 コマンド「:cn」が表示されます。
次のヒット。 「:cN」は前のヒットを表示し、「:cr」は最初のヒットに戻ります。
「:copen」は、「クイックフィックス」と呼ばれる、現在のヒットのリストを表示するウィンドウを開きます。
window"; ":cclose" はクイックフィックス ウィンドウを閉じます。使用されているウィンドウのバッファーが
変更され、エラーが別のファイルにある場合、エラーへのジャンプは失敗します。 必ず
ウィンドウにジャンプする前に放棄できるバッファが含まれていることを確認してください。
新しいファイル、たとえばファイルを保存します。 これにより、偶発的なデータ損失が防止されます。

呼び出す から エマックス
テキストエディタ/オペレーティングシステムemacsには、「grepモード」と「コンパイルモード」が含まれています。
欠陥ファインダーとうまく連携するメカニズムにより、警告メッセージの表示やジャンプが簡単になります。
関連するソース コードを参照し、見つかった問題を修正します。

まず、fwfinder を呼び出して警告メッセージのリストを作成する必要があります。 使用できます
このリストを作成するには、「grep モード」または「コンパイル モード」を使用します。 多くの場合、「grep モード」の方が便利です。
コンパイル モードは変更されないため、変更後に簡単に再コンパイルできます。
何か。 ただし、ヒットの正確な列位置にジャンプしたい場合は、次のようにコンパイルします。
emacs は、floatfinder の列出力を使用して、
特別な設定を行わずに、適切な場所に直接ジャンプします。

grep モードを使用するには、コマンド「Mx grep」を入力し、必要な欠陥ファインダーを入力します。
指図。 コンパイル モードを使用するには、「Mx コンパイル」コマンドを入力し、必要なコマンドを入力します。
欠陥発見器コマンド。 これはメタキー コマンドであるため、メタ キーを使用する必要があります。
キーボード (通常は ESC キー)。 すべての emacs コマンドと同様に、次のことを行う必要があります。
「grep」または「compile」と入力した後、Return キーを押してください。 したがって、多くのシステムでは grep モードは次のようになります。
ESC xgrep RETURN と入力して呼び出します。

次にコマンドを入力し、必要に応じて以前に存在したものを削除する必要があります。 あ
もっともらしいコマンドは次のとおりです。

欠陥発見者 -SQDC .

このコマンドを使用すると、すべてのヒット レポートが XNUMX 行になるため、ツールでのレポートがはるかに簡単になります。
取り持つ。 Quiet および dataonly オプションは、必要のない他のステータス情報を削除します。
emacs内で使用します。 末尾のピリオドは、現在のディレクトリとすべてのディレクトリが
子孫で C/C++ コードが検索され、欠陥がないか分析されます。

欠陥ファインダーを呼び出したら、emacs を使用してその結果内を飛び回ることができます。 の
コマンド Cx ` (Control-x バッククォート) は、次の警告のソース コードの場所にアクセスします。
メッセージ。 Cu Cx ` (control-u control-x バッククォート) は最初から再開します。 あなたはできる
特定のエラー メッセージのソースにアクセスするには、
*コンパイル* バッファーまたは *grep* バッファーを選択し、リターン キーを入力します。 (テクニカルノート:
コンパイル バッファーの場合、compile-goto-error が呼び出されます。) また、マウス 2 をクリックすることもできます。
エラー メッセージのボタンをクリックします (最初に *コンパイル* バッファーに切り替える必要はありません)。

grep モードを使用してヒットの特定の列にジャンプしたい場合は、次のようにする必要があります。
これを行うために emacs を特別に設定します。 これを行うには、emacs 変数「grep-regexp-」を変更します。
この変数は、「grep」コマンドの出力を解析する方法を Emacs に指示します。
さまざまな形式のコンパイル エラーをリストする変数「compilation-error-regexp-alist」
メッセージ。

呼び出す から Integrated 開発 環境 (IDE)
(その他の) IDE については、IDE のプラグイン セットを参照してください。

COMMON 弱さ 列挙 (CWE)


Common Weakness Enumeration (CWE) は、「一般的なソフトウェアの正式なリストまたは辞書」です。
ソフトウェアのアーキテクチャ、設計、コード、または実装で発生する可能性のある弱点。
悪用可能なセキュリティ脆弱性を引き起こす可能性があります...共通言語として機能するために作成されました
ソフトウェアのセキュリティの弱点を説明するためのものです」(http://cwe.mitre.org/about/faq.html)。 ために
CWE の詳細については、「」を参照してください。 http://cwe.mitre.org.

Flawfinder は CWE をサポートしており、正式に CWE と互換性があります。 通常、ヒットの説明
関連する Common Weakness Enumeration (CWE) 識別子を括弧内に含めます。
関連する CWE であることが知られています。 たとえば、バッファ関連のヒットの多くは次のように述べています。
CWE-120、「入力のサイズをチェックしないバッファ コピー」の CWE 識別子 (別名)
「クラシックバッファオーバーフロー」)。 場合によっては、複数の CWE 識別子がリストされることがあります。
HTML レポートには、MITRE でホストされている CWE 定義へのハイパーテキスト リンクも含まれています。 の
このようにして、fwfinder は CWE-Output 要件を満たすように設計されています。

欠陥発見者によって報告された CWE の多くは、25 年の CWE/SANS トップ 2011 リストに含まれています。
(http://cwe.mitre.org/top25/)。 多くの人はこのリストで CWE を検索したいと思うでしょう。
CWE-120 (クラシック バッファ オーバーフロー) など、欠陥ファインダーが CWE にマッピングされている場合、
上位 25 項目よりも一般的であるため、より一般的:より具体的なものとしてリストされます (例:
CWE-119:CWE-120)、より一般的なものは実際のマッピングです。 欠陥発見者がさらに多くのことをマップする場合
上位 25 項目の特定のケースである特定の CWE 項目。次の形式でリストされます。
トップ 25/より具体的な (例: 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 の XNUMX つをカバーしている場合でも、Flawfinder が脆弱性を検出できない場合があります。
弱点。 とはいえ、fwfinder は対象とする CWE によってリストされている脆弱性を検出します。
そして多くの場合、それらの脆弱性がない行は報告されません。 したがって、次のように
CWE と互換性を持たせることを目的としたツールには必須ですが、fwfinder の割合は false です
陽性率は 100% 未満、偽陰性率は 100% 未満です。 ほぼ欠陥発見者
CWE セキュリティ要素 (署名/パターン) との一致が見つかると常に報告します。
データベースに定義されています)、ただし、特定のあいまいな構造により失敗する可能性があります(バグを参照)
下)。

Flawfinder は次の CWE についてレポートできます (これらは Flawfinder がカバーする CWE です。
「*」は CWE/SANS 上位 25 リストにあるものを示します):

· CWE-20: 不適切な入力検証

· CWE-22: 制限されたディレクトリへのパス名の不適切な制限 (「パス トラバーサル」)

· CWE-78: OS コマンドで使用される特殊要素の不適切な無効化 (「OS コマンド」)
注入'')*

· CWE-119: メモリ バッファの範囲内での操作の不適切な制限 (a
CWE-120* の親であるため、これは CWE-119:CWE-120 として表示されます)

· CWE-120: 入力のサイズをチェックしないバッファ コピー (「クラシック バッファ オーバーフロー」)*

· CWE-126: バッファオーバーリード

· CWE-134: 制御されていないフォーマット文字列*

· CWE-190: 整数オーバーフローまたはラップアラウンド*

· CWE-250: 不必要な権限による実行

· CWE-327: 壊れた、または危険な暗号アルゴリズムの使用*

· CWE-362: 不適切な同期による共有リソースを使用した同時実行
(「競合状態」)

· CWE-377: 安全でない一時ファイル

· CWE-676: 潜在的に危険な機能の使用*

· CWE-732: 重要なリソースに対する不正な権限の割り当て*

· CWE-785: 最大サイズのバッファを使用しないパス操作関数の使用 (CWE-XNUMX の子)
CWE-120* なので、CWE-120/CWE-785 として表示されます)

· CWE-807: セキュリティ上の決定における信頼できない入力への依存*

· CWE-829: 信頼できないコントロール スフィアからの機能の組み込み*

「--regex」(-e) オプションを使用すると、レポートする CWE の特定のサブセットを選択できます。
このオプションは正規表現を受け入れるため、複数の CWE を選択できます (例: ``--regex)
「CWE-120|CWE-126」」。 コマンドラインで「|」を使用して複数の CWE を選択すると、
通常はパラメータを引用符で囲む必要があります (引用符で囲まれていない「|」はパイプ記号であるため)。
Flawfinder は、CWE-Searchable 要件を満たすように設計されています。

ファイルにリストされている CWE のサブセットをレポートすることが目標であれば、それは達成できます。
Unix のようなシステムでは、「--regex」、別名「-e」オプションを使用します。 ファイルは次の場所にある必要があります
正規表現形式。 たとえば、「flawfinder -e $(cat file1)」と指定すると、次の情報のみがレポートされます。
「file1」のパターンに一致するものがヒットしました。 file1 に「CWE-120|CWE-126」が含まれていた場合、
それらの CWE に一致するヒットのみを報告します。

すべての CWE セキュリティ要素のリスト (欠陥発見者が探す署名/パターン)
「--listrules」オプションを使用して見つけることができます。 各行に署名トークンがリストされます。
(通常は関数名) ヒットにつながる可能性のあるもの、デフォルトのリスク レベル、および
デフォルトの警告 (デフォルトの CWE 識別子を含む)。 ほとんどの目的ではこれは
どの CWE セキュリティ要素がどの CWE にマップされているかを確認したい場合にも十分です。
逆行。 たとえば、マッピングされるシグネチャ (関数名) のほとんどを確認するには、
CWE-327 は、デフォルトのリスク レベルや詳細な警告テキストを表示せずに、「flawfinder」を実行します。
--リストルール | CWE-327 | グレップ-f1'' をカットします。 CWE マッピングなしでトークンを確認することもできます。
この方法では、「flawfinder -D --listrules | 」を実行します。 grep -v CWE-」。 ただし、一方で
--listrules はすべての CWE セキュリティ要素をリストします。CWE からのデフォルトのマッピングのみをリストします。
セキュリティ要素を CWE 識別子に変換します。 欠陥発見者が行う改良は含まれていません
適用されます(たとえば、関数パラメータを調べることによって)。

CWE セキュリティ要素と CWE の間の詳細かつ正確なマッピングが必要な場合
識別子については、欠陥発見器のソース コード (ディストリビューションに含まれています) が最適です。
その情報については。 この詳細情報は主に少数の人々に興味を持っています
欠陥ファインダーの CWE マッピングを改良したり、CWE 全体を改良しようとしている人々。
ソース コードには、セキュリティ要素とそれぞれの CWE 間のマッピングが文書化されています。
識別子で構成され、単一の Python ファイルです。 「c_rules」データセットはほとんどのルールを定義します。
さらなる改良を行う可能性のある関数を参照してください。 検索できます
関数名のデータセットを使用して、デフォルトでどのような CWE が生成されるかを確認します。 最初のパラメータが
「通常」ではない場合、それは、異なる選択を行う可能性がある洗練された Python メソッドの名前です。
CWE (追加情報に応じて)。 逆に「CWE番号」で検索することもできます。
そして、どのセキュリティ要素 (シグネチャまたはパターン) がその CWE 識別子を参照しているかを見つけます。
ほとんどの人にとって、これは必要以上のものです。 ほとんどの人はスキャンしたいだけです
ソースコードを使用して問題をすばやく見つけます。

SECURITY


このツールの主な目的は、脆弱性を見つけて修正できるようにすることです。
ただし、開発者とレビュー担当者は、これを使用するには安全なソフトウェアを開発する方法を知っている必要があります。
ツール、それ以外の場合は、 a ばか   a ツール is まだ a ばか。 私の本は、
http://www.dwheeler.com/secure-programs をご利用いただけます。

このツールは、せいぜい大規模なソフトウェア開発プロセスのほんの一部であるべきです。
脆弱性の影響を排除または軽減するように設計されています。 開発者とレビュー担当者
安全なソフトウェアを開発する方法を知る必要があり、この知識を適用してセキュリティを削減する必要があります。
そもそも脆弱性のリスク。

脆弱性発見ツールが異なれば、発見される脆弱性も異なる傾向があります。 したがって、あなたは
人間によるレビューやさまざまなツールを使用するのが最善です。 このツールは、いくつかの情報を見つけるのに役立ちます
脆弱性はありますが、すべてではありません。

常に分析する必要があります copy ディレクトリではなく、解析対象のソースプログラムの
欠陥ファインダーが分析を実行している間に、開発者がこれを変更できます。 これは
特に 分析対象のプログラムの開発者を必ずしも信頼しない場合は true。
ファイルの分析中に攻撃者がファイルを制御できる場合、攻撃者は、
セキュリティ上の問題の露出を防ぐために、ファイルを移動したり、その内容を変更したりする
(または、何も問題がないのに問題があるような印象を与えます)。 心配な場合は
悪意のあるプログラマーは、分析後に次のことを行う必要があるため、とにかくこれを実行する必要があります。
最終的に実行されるコードが分析したコードであることを確認します。 また、使用しないでください。
このような場合の --allowlink オプション。 攻撃者はファイルへの悪意のあるシンボリック リンクを作成する可能性があります
ソースコード領域の外(たとえば、 /etc/passwd).

ソース コード管理システム (SourceForge や Savannah など) は間違いなくこれに当てはまります。
カテゴリー; これらのシステムのいずれかを保守している場合は、まずファイルをコピーまたは抽出します。
欠陥ファインダーを実行する前に別のディレクトリ (攻撃者が制御できないもの) を作成するか、
他のコード分析ツール。

欠陥ファインダーは通常のファイル、ディレクトリ、および (要求された場合) シンボリック ファイルのみを開くことに注意してください。
リンク。 他の種類のファイルは、たとえシンボリック リンクが作成されていても開かれません。
これにより、異常な種類のファイルをソース コードに挿入する攻撃者に対抗できます。 ただし、これは
分析中のファイルシステムが攻撃中に変更できない場合にのみ機能します。
上記で推奨されているように、分析を行います。 この保護は Cygwin プラットフォームでも機能しません。
残念ながら。

Cygwin システム (Windows 上の Unix エミュレーション) には、欠陥ファインダーがある場合に追加の問題があります。
アナリストが信頼できないプログラムを分析するために使用されます。 問題の原因は設計にあります
Windows の欠陥 (MS-DOS から引き継いだもの)。 Windows および MS-DOS では、特定のファイル名
(例: 「com1」) は、オペレーティング システムによって自動的に次の名前として扱われます。
これは、完全なパス名が指定された場合にも当てはまります。 はい、Windows と MS-DOS
本当にこれほどひどい設計になっています。 Flawfinder は、ファイルシステムが何であるかをチェックすることでこれに対処します。
オブジェクトが存在し、ディレクトリと通常のファイル (および有効な場合はシンボリックリンク) のみを開きます。
残念ながら、これは Cygwin では機能しません。 Cygwin の少なくとも一部のバージョンでは、一部のバージョンでは
Windows のバージョンでは、ファイルがデバイス タイプであるかどうかを判断しようとするだけで、
ハングするプログラム。 回避策は、解釈されたファイル名を削除するか名前を変更することです。
分析を実行する前にデバイス名として使用します。 これらのいわゆる「予約名」は、
CON、PRN、AUX、CLOCK$、NUL、COM1 ~ COM9、および LPT1 ~ LPT9、オプションでその後に拡張子が続く
(例: 「com1.txt」)、任意のディレクトリ、および大文字と小文字のいずれでも可能です (Windows では大文字と小文字が区別されません)。

Do 信頼できないソースからヒットリストをロードまたは比較します。 これらは次を使用して実装されます。
Python pickle モジュール。pickle モジュールは、エラーに対して安全であることを目的としていません。
または悪意を持って構築されたデータ。 保存されたヒットリストは、後で同じユーザーが使用することを目的としています。
ヒットリストを作成したユーザー。 その文脈では、この制限は問題になりません。

onworks.net サービスを使用してオンラインで欠陥ファインダーを使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad