
あなたとあなたのプロジェクトには、より現代的で優れた選択肢が多数あります。もしプロジェクトのメンテナンスを引き継ぎたい場合は、お気軽にご連絡ください。連絡手段は私の個人ホームページに記載されています。
.
.
.
.
.
.
Hawkeye scanner-cli は、プロジェクトのセキュリティ、脆弱性、および一般的なリスクを強調するツールです。pre-commit フックやパイプラインに統合することを目的としています。
Hawkeye scanner-cli は、ディレクトリ構造がツールチェーンのファイルをトップレベルに置くことを前提としています。大まかには、以下のようになります。
package.json がありますGemfile がありますrequirements.txt がありますcomposer.lock がありますbuild (gradle) または target (maven) フォルダがあり、.java および .jar ファイルを含みますbuild (gradle) または target (maven) フォルダがあり、.kt および .jar ファイルを含みますtarget (sbt と sbt-native-packager または sbt-assembly プラグイン) フォルダがあり、.scala および .jar ファイルを含みます。動作デモはこのリポジトリを確認してください。Cargo.toml がありますこれは網羅的ではありません。ツールによっては、さらなるファイルの存在が必要になる場合があります。モジュールがプロジェクトを処理できるかどうかをどのように判断するかについては、仕組みのセクションとモジュールフォルダを確認してください。
Docker イメージがスキャナーを最も簡単に利用する方法です。プロジェクトルート (例: $PWD) を /target にマウントする必要があることに注意してください。
docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest
JSON を出力するためにスキャナーを使用する場合 (-j および --json CLI フラグ、または .hawkeyerc の json 設定)、docker run -u $(id -u):$(id -g) で正しい UID と GID を使用するようにしてください。そうしないと、Jenkins で実行する場合などに削除できないファイルが残る可能性があります。
Docker ビルドは、CI パイプラインでスキャナーを実行するのにも推奨される方法です。これは GoCD で Hawkeye をプロジェクトの1つに対して実行する例です。
<pipeline name="security-scan">
<stage name="Hawkeye" cleanWorkingDir="true">
<jobs>
<job name="scan">
<tasks>
<exec command="docker">
<arg>pull</arg>
<arg>hawkeyesec/scanner-cli</arg>
<runif status="passed" />
</exec>
<exec command="bash">
<arg>-c</arg>
<arg>docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest</arg>
<runif status="passed" />
</exec>
</tasks>
</job>
</jobs>
</stage>
</pipeline>
Node.js プロジェクトで hawkeye をインストールして実行するには、次のコマンドを使用します。
npm install --save-dev @hawkeyesec/scanner-cli
npx hawkeye scan
この方法は、他のツールチェーン (例: python、ruby) が必要ない Node.js プロジェクトで推奨されます。
この方法では、git pre-commit フック (例: pre-commit パッケージを使用) でスキャナーを呼び出し、問題が見つかった場合にコミットを失敗させることも推奨されます。
プロジェクトルートの .hawkeyerc ファイルと .hawkeyeignore ファイルを使用してスキャナーを設定できます。
.hawkeyerc ファイルは JSON ファイルで、以下を設定できます。
{
"all": true|false,
"staged": true|false,
"modules": ["files-ccnumber", "java-owasp", "java-find-secbugs"],
"sumo": "http://your.sumologic.foobar/collector",
"http": "http://your.logger.foobar/collector",
"json": "log/results.json",
"failOn": "low"|"medium"|"high"|"critical",
"showCode": true|false
}
.hawkeyeignore ファイルは、スキャンから除外するパスとモジュールエラーコードに一致する正規表現の集まりであり、--exclude フラグを使用するのと同じです。# で始まる行はコメントと見なされます。
正規表現で予約されている特殊文字 (-[]{}()*+?.,^$|#\s) は、リテラルとして使用する場合はエスケープする必要があることに注意してください!
また、モジュールエラーコードは通常表示されません。これはユーザーにとって直接的な関連性がないためです。特定の誤検出を除外したい場合は、--show-code フラグまたは .hawkeyerc の showCode プロパティを使用してモジュールエラーコードを表示できます。
^test/
# これはコメントです
^README.md
hawkeye modules を使用して、利用可能なモジュールとそのステータスを一覧表示します。
> npx hawkeye modules
[info] Version: v1.4.0
[info] Module Status
[info] Enabled: files-ccnumber
[info] クレジットカード番号を含む可能性のある不審なファイル内容をスキャンします
[info] Enabled: files-contents
[info] シークレットを含む可能性のある不審なファイル内容をスキャンします
[info] Disabled: files-entropy
[info] パスワードを含む可能性のある高エントロピーの文字列をファイルからスキャンします
[info] Enabled: files-secrets
[info] シークレットを含む可能性のある不審なファイル名をスキャンします
[info] Enabled: java-find-secbugs
[info] findsecbugs を使用して Java コードの一般的なセキュリティ問題を検出します
[info] Enabled: java-owasp
[info] OWASP 依存関係チェッカーを使用して、既知の脆弱性がある gradle/maven 依存関係を Java プロジェクトでスキャンします
[info] Enabled: node-npmaudit
[info] 既知の脆弱性がある依存関係について node プロジェクトをチェックします
[info] Enabled: node-npmoutdated
[info] 古い npm モジュールについて node プロジェクトをチェックします
[info] Enabled: node-yarnaudit
[info] 既知の脆弱性がある依存関係について yarn プロジェクトをチェックします
[info] Enabled: node-yarnoutdated
[info] 古い yarn モジュールについて node プロジェクトをチェックします
[info] Enabled: php-security-checker
[info] security-checker を使用して、composer.lock に既知の脆弱性がある依存関係が含まれているかチェックします
[info] Enabled: python-bandit
[info] bandit を使用して Python コードの一般的なセキュリティ問題をスキャンします。
[info] Enabled: python-piprot
[info] 古いパッケージについて Python の依存関係をスキャンします
[info] Enabled: python-safety
[info] safety ツールを使用して、既知のセキュリティ脆弱性について Python の依存関係をチェックします。
[info] Enabled: ruby-brakeman
[info] Brakeman を使用して Rails コードを静的に分析し、セキュリティ問題を検出します。
[info] Enabled: ruby-bundler-scan
[info] bundler を使用して、既知の脆弱性がある Ruby gem をスキャンします
hawkeye scan を使用してスキャンを開始します。
> npx hawkeye scan --help
[info] Version: v1.3.0
Usage: hawkeye-scan [options]
Options:
-a, --all git リポジトリが見つかったかどうかに関係なく、すべてのファイルをスキャンします。デフォルトでは git リポジトリで追跡されたファイルのみスキャンします。
-t, --target [/path/to/project] スキャンする場所。デフォルトは $PWD です。
-f, --fail-on [low|medium|high|critical] hawkeye がゼロ以外のステータスコードを返すレベルを設定します。デフォルトは low です。
-m, --module [module name] 特定のモジュールを実行します。デフォルトは適用可能なすべてのモジュールです。
-e, --exclude [pattern] 除外パターンを1つ以上指定します (例: test/*)。複数回指定できます。
-j, --json [/path/to/file.json] 結果をファイルに書き込みます。
-s, --sumo [https://sumologic-http-connector] 結果を SumoLogic に書き込みます。
-H, --http [https://your-site.com/api/results] 結果を指定された URL に書き込みます。
--show-code モジュールがレポートに使用するコードを表示します。特定の誤検出を無視するのに便利です。
-g, --staged git でステージングされたファイルのみをスキャンします。
-h, --help 使用法情報を出力します
scanner-cli は以下の終了コードで応答します。
コンソールロガーの出力をリダイレクトしたい場合、推奨される方法は stdout に接続することです。この例では、JSON と stdout の両方の結果を利用しています。
docker run --rm -v $PWD:/target hawkeyesec/scanner-cli:latest -j hawkeye-results.json -f critical 2>&1 | tee hawkeye-results.txt
デフォルトでは、スキャナーは結果を表形式でコンソールに出力します。
結果は、選択した SumoLogic コレクターに送信できます。この例では、単一の HTTP ソースを持つコレクターを使用しています。
hawkeye scan --sumo https://collectors.us2.sumologic.com/receiver/v1/http/your-http-collector-url
SumoLogic で、_collector="hawkeye" | json auto を検索します:

SumoLogic の例と同様に、スキャナーは POST メッセージを受け入れる任意の HTTP エンドポイントに結果を送信できます。
hawkeye scan --http http://your.logging.foobar/endpoint
結果は User-Agent: hawkeye で送信されます。コンソール出力と同様に、各検出結果に対して以下の JSON が POST されます。
{
"module": "files-contents",
"level": "critical",
"offender": "testfile3.yml",
"description": "Private key in file",
"mitigation": "Check line number: 3"
}
Hawkeye は、モジュールとライターを追加することで拡張可能になるように設計されています。
モジュールは基本的に、独自のロジックを実装するか、サードパーティのツールをラップして出力を標準化する小さなコード片です。必要な条件が満たされた場合にのみ実行されます。たとえば、npm outdated モジュールは、スキャン対象で package.json が検出された場合にのみ実行されます。その結果、スキャンするプロジェクトの種類を Hawkeye に伝える必要はありません。
-m files-entropy スイッチを使用してください。Cargo.lock に既知の脆弱性がある依存関係が含まれているかチェックしますモジュールのアイデアがある場合は、Issue セクションで機能リクエストをオープンしてください。時間があれば、プルリクエストを送信することを検討してください。モジュールの動作を確認するには、modules フォルダに移動して、動作の仕組みを確認してください。