
Salesforce Product Security によるオープンソースのペネトレーションテスト管理および自動化プラットフォーム
Vulnreport は、ペネトレーションテストを管理し、セキュリティエンジニアの時間を奪う通常のオーバーヘッドなしに、適切にフォーマットされ、実用的な発見レポートを生成するためのプラットフォームです。このプラットフォームは、プロセスのあらゆる段階で自動化をサポートし、ペンテストプロセスで使用する他のシステムに合わせてカスタマイズできるように構築されています。
Vulnreport は、Salesforce Product Security チームによって、ペネトレーションテストのレポート作成、フォーマット、校正に費やす時間をなくす方法として構築されました。私たちの目標は、ペンテスターとセキュリティエンジニアが脆弱性の発見と修正に集中できる優れたセキュリティツールを構築することであり、今後もその考えは変わりません。
Vulnreport は、PostgreSQL データベースと Redis キャッシュレイヤーをバックエンドとする Ruby Web アプリケーション(Sinatra/Rack スタック)です。
Vulnreport は、ローカルの VM や nginx などの背後にあるサーバーにインストールするか、Heroku にデプロイすることができます。
ローカルにデプロイするには、依存関係がインストールされていることを確認する必要があります。
リポジトリをクローンし、.env ファイルを開いて必要に応じて更新します。その後、bundle install を実行します。環境に合わせて start.sh を変更する必要があるでしょう。リポジトリに含まれているものは、デバッグ/開発時のローカル使用を目的としています。
また、.env.example に基づいて .env ファイルを作成するか、.env で定義されているのと同じ ENV 変数を環境に設定する必要があります。
Heroku に自動デプロイできます。完了したら、以下の手順に従って Vulnreport にログインし、設定を完了してください。
Heroku にデプロイするには(Heroku アプリを作成し、toolbelt がインストールされていることを前提とします)
git clone [Vulnreport リポジトリURL]
heroku git:remote -a [Heroku アプリ名]
heroku addons:create heroku-postgresql:hobby-dev
heroku addons:create heroku-redis:hobby-dev
heroku addons:create rollbar:free
heroku addons:create sendgrid:starter
次に、.env ファイルを開き、キー/値を(必要に応じて値を更新して)アプリの Heroku 設定にコピーします。これは、toolbelt CLI コマンドでも実行できます。アドオンを実行した後のデフォルトの ENV 変数は問題ないはずですが、再確認してください。VR_SESSION_SECRET は必ず更新してください。これが本番インストールでない場合は、RACK_ENV を development に変更する必要があります。
heroku config:set VR_SESSION_SECRET=abc123456
heroku config:set RACK_ENV=production
git push heroku master
これで、Vulnreport をローカルで実行する場合と同様にインストール手順に従うことができます。
Vulnreport の初期設定を行うには、SEED.rb スクリプトを実行します。Heroku にデプロイする場合は、heroku run ./SEED.rb で実行します。
自動デプロイ('Deploy to Heroku')機能を使用した場合、この手順は自動的に処理されているはずです。
Running ./SEED.rb on ⬢ vulnreport-test... up, run.8035
Vulnreport 3.0.0.alpha seed script
WARNING: This script should be run ONCE immediately after deploying and then DELETED
Setting up Vulnreport now...
Setting up the PostgreSQL database...
Done
Seeding the database...
Done
User ID 1 created for you
ALL DONE! :)
Login to Vulnreport now and go through the rest of the settings!
ここで、SEED.rb ファイルを削除します。
デフォルトの管理者ユーザーが、ユーザー名 admin、パスワード admin で作成されています。これはすぐに変更するか、SSO を設定する必要があります。
この時点で、Vulnreport の URL(例:https://my-vr-test.herokuapp.com など)にアクセスし、作成されたユーザーでログインします。Vulnreport の設定とユーザー設定を通じて、Vulnreport のインスタンスを構成してください。
準備は完了です。新しくインストールした Vulnreport インスタンスの使用方法については、http://vulnreport.io/documentation の完全なドキュメントを参照してください。
Vulnreport は外部システムと連携して使用するように設計されています。外部システムとの統合/同期を可能にするインターフェースの実装方法の詳細については、http://vulnreport.io/documentation#interfaces のカスタムインターフェースドキュメントを参照してください。
コードのドキュメントを生成するには、Yard を実行するだけです。
yard doc
yard server
現在、Vulnreport は特定のテストに脆弱性をインポートするための XML 形式をサポートしています。これは、アクティブにペンテストを行う際に、Vulnreport をペンテストネットワークとは別のネットワークに配置したい場合に便利です。ただし、特定の Vulnreport インスタンスと Vulntypes の設定に合わせて設定する必要があります。
現在、他の種類の XML インポート(ZAP や Burp など)や、Vulnreport インスタンス間での任意の XML エクスポート/インポートをサポートする作業を進めています。これらの機能はまもなく公開される予定ですので、お楽しみに。
Vulnreport が現在サポートしている XML 形式は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Vuln>
<Type>[Vulntype ID]</Type>
<File>[File Vuln Data]</File>
<Code>
[Code Vuln Data]
</Code>
<File>clsSyncLog.cls</File>
<Code>
hello world
</Code>
...etc...
</Vuln>
<Vuln>
<Type>6</Type>
<File>clsSyncLog.cls</File>
<File>CommonFunction.cls</File>
<Code>
12 Public Class CommonFunction{
</Code>
</Vuln>
</Test>
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"">
<Vuln>
<Type>REQUIRED - EXACTLY 1 - INTEGER - ID of VulnType. 0 = Custom</Type>
<CustomTypeName>OPTIONAL - EXACTLY 1 - STRING if TYPE == 0</CustomTypeName>
<BurpData>OPTIONAL - UNLIMITED - STRING - Burp req/resp data encoded in our protocol</BurpData>
<URL>OPTIONAL - UNLIMITED - STRING - URL for finding</URL>
<FileName>OPTIONAL - UNLIMITED - STRING - Name/path of file for finding</FileName>
<Output>OPTIONAL - UNLIMITED - STRING - Output details</Output>
<Code>OPTIONAL - UNLIMITED - STRING - Code details</Code>
<Notes>OPTIONAL - UNLIMITED - STRING - Notes for vuln</Notes>
<Screenshot>
OPTIONAL - UNLIMITED - Screenshots of vuln
<Filename>REQUIRED - EXACTLY 1 - STRING - Filename with extension</Filename>
<ImageData>
REQUIRED - EXACTLY 1 - BASE64 - Screenshot data
</ImageData>
</Screenshot>
</Vuln>
....unlimited vulns....
<Vuln>
</Vuln>
</Test>