
Webベースのソースコード脆弱性スキャナー

Raptor は、Webベース(Webサービス+UI)のGitHub中心のソース脆弱性スキャナーです。つまり、GitHubのリポジトリURLを指定するだけでリポジトリをスキャンします。Webhookを設定すれば、コミットやプルリクエストのマージのたびに自動スキャンを実行できます。スキャンは非同期で行われ、結果はスキャンを開始したユーザーのみが確認できます。
Raptor の特徴の一部:
このツールは、コミュニティやスタートアップ企業がセキュアコーディングに注力できるようにする試みです。 このツールは商用の代替品と同等の機能や品質を備えているとは限らず、保証はありません。ご注意ください。 このツールは、セキュリティコードレビュー担当者やセキュアコーディングの経験を持つ開発者が、コード監査やピアレビュー中に脆弱性のエントリポイントを見つけるために使用することを想定しています。 ツールの出力を盲目的に信頼しないでください。 Raptor を CI/CD パイプラインに組み込むことで最適に活用できます。
0.1 ベータ
統合プラグイン:
注: 以下のツール・モジュール・ライブラリのほとんどは、フレームワークにうまく統合できるように大幅に修正されています。
利用可能なルールパック:
インストール動画: YouTube インストール
$ wget https://github.com/dpnishant/raptor/archive/master.zip -O raptor.zip
$ unzip raptor.zip
$ cd raptor-master
$ sudo sh install.sh
インストール動画: YouTube 使用方法
cd raptor-master
sudo sh start.sh # バックエンドWebサービスを起動
ブラウザで Raptor ホーム (http://localhost/raptor/) にアクセスします。
接続先のGitHubサーバーに登録されているユーザー名と任意のパスワードでログインします(ただし、スキャン履歴を表示するにはユーザー名を覚えておいてください)。
例:
https://github.com に foobar として登録している場合、https://github.com 上のリポジトリをスキャンする際に同じユーザー名を使用します。一方、個人/企業のGitHub(例: https://github.corp.company.com)に foobar_corp として登録している場合は、https://github.corp.company.com 上のリポジトリをスキャンする際にそのユーザー名を使用します。
ただし、現時点ではパスワードは何でも構いません。開発バージョンではデータベースを実装していないためです。
バンドルされている軽量なクライアントサイドのルールエディターを使用して、特定の要件に合わせた新しいカスタムルールを追加できます。ルールパックファイルは単純なJSON構造であるため、任意のプレーンテキストエディターでも編集可能です。ブラウザで backend/rules にあるルールファイルを開いてください。編集が完了したら、新しい/修正したルールファイルを同じディレクトリ backend/rules に保存します。その後、初期化スクリプト で軽微な編集を行う必要があります。新しいルールパックのファイル名(拡張子 .rulepack を除く)をこの配列に追加し、バックエンドサーバーを再起動してください。これで完了です!👍
ここからアクセスできます: ルールエディター (http://localhost/raptor/editrules.php)
スキャンから除外するファイル名またはディレクトリ名のパターンを追加します。これは、jquery.min.js などの既知のファイルや、/test/ ディレクトリ全体を無視するのに便利です。以下のサンプルコンテンツでは、jquery は jquery を意味し、大文字と小文字を区別するため注意してください。plugins セクションでは、プラグインの name は、rules/ ディレクトリにあるルールパックファイルの拡張子 .rulepack を除いた名前です。issue フィールドは、ルールパックファイルの各ルールに記載されている Issue の ID です: 例 #1、例 #2。match_type フィールドの値は、regex、start、end のいずれかです。match_type が start または end の場合、 フィールドは一致させる正確な文字列です。 が の場合、 には生の正規表現パターンを含めますが、JSON 構文のエスケープ問題を避けるために Base64 エンコードする必要があります。 は正規表現ベースのマッチング、 はスニペットの先頭でマッチ、 はスニペットの末尾でマッチします。
仕組みとしては、スキャナーが Issue のスキャンを完了した後、見つかったすべての Issue を反復処理し、ignore_list.rulepack ファイルに記載された各プラグインのパターン(マッチタイプに基づく)に一致するものを削除します。
(以下はサンプルコンテンツ)
{
"files": [
"/.",
"bootstrap",
"jquery",
"uglify",
"knockout",
"angular",
"backbone",
"ember",
"yui",
"mocha",
"express",
"yql",
"dataTables"
],
"directories": [
"/node_modules/",
"/test/"
],
"plugins": [
{
"name": "common", <----- プラグインの名前
"issue": "HARD_CRED1", <----- Issue の ID
"patterns": [
{
"match_type": "start", <----- マッチタイプは "regex"、"start"、"end" のいずれか
"value": "foreach" <----- 一致させる実際の文字列。match_type が "regex" の場合は、このパターンを Base64 エンコードします。
},
{
"match_type": "start",
"value": "for"
},
{
"match_type": "start",
"value": "elseif"
}
]
}
]
}
まったく新しいルールパックを作成してスキャナーに追加することも、独自のスキャナープラグインを作成してフレームワークに追加することもできます。サンプルルールパックファイルは非常にシンプルな JSON 構造です。
{
"plugin_type": "plugin_name", <-- 名前を付けます(任意の文字列)
"file_types": [
".java", <-- スキャナーがスキャン中に拾うファイル拡張子を複数追加します
".js"
],
"rules": [
{
"id": "HARD_CRED1", <-- 一意な IssueID。自由に設定してください。
"severity": "High", <-- High、Medium、Low のいずれか。UI のグラフに反映されます。
"title": "Title of the Issue", <-- Issue のタイトル
"description": "This text here shall be reflected in the UI as description of the issue.", <-- Issue の説明。省略可能。
"remediation": "The text here shall be reflected in the UI as the steps to remediate the issue", <-- Issue の修正手順。省略可能。
"link": "Any URL that has more resources about the issue.", <-- Issue に関する詳細情報の URL。省略可能。
"example_insecure": "Put the insecure version of the code snippet for learning purpose.", <-- 省略可能
"example_secure": "Put the secure version of the code snippet for learning purpose.", <-- 省略可能
"platform_version": "all", <-- このままにしてください
"enabled": "true", <-- スキャン中にルールを有効/無効にします。"true" または "false"。
"logic": "Explain the logic behind this rule for future updation or customization", <-- 省略可能
"signature": "base64encode(regexp)" <-- パターンの正規表現を書き、Base64 エンコードしてここに配置します。
}
]
}
単純な RegExp 検索よりも高度な制御やインテリジェンスをスキャナーに追加したい場合は、このような簡単なスキャナープラグインを作成し、ここでスクリプトを統合し、ここにスクリプト名を追加します。これで完了です。基本的な Python スクリプトスキルがあれば、非常に簡単です。
GitHub の適切なサーバーエンドポイントをこことここで指定することで、組織のプライベートインスタンスとパブリックインスタンスの両方を Raptor でスキャンできます。











貢献したいですか?素晴らしい! アイデアがあれば私に連絡するか、お気軽にフォークして改良してください。😊
GNU GPL v2.0
フリーソフトウェア、最高!
valuematch_typeregexvalueregexstartend