こんにちは、セキュリティコンサルグループのミドリです。 私たちセキュリティエンジニアは Web サイトの脆弱性診断や、ペネトレーションテ スト(侵入テスト)などのセキュリティ検査を実施しています。 本記事では、ペネトレーションテスト向けのコラボレーションツール、PwnDocのご紹介の第2回として、前回 紹介しきれなかった機能について解説します。
※ 本記事では、2022年1月31日時点のPwnDocアプリケーションとDocumentationをベースにしています。
技術要件
DockerDocker ComposeGitPwnDoc
はじめに
今回の記事では、以下の機能について解説します。 PwnDocの利用にあたっては、全ての機能を利用する必要はないので、 自身が必要な項目について参照してください。
ツール(Nmap, Nessus)によるポートスキャン結果のインポートカスタムデータの登録レビュー(意図しない更新を防ぐ)機能オリジナルテンプレートの作成
※前回の記事における”Audit(テストプロジェクト)の登録” の手順まで完了した状態で解説します。
ツール(Nmap, Nessus)によるポートスキャン結果のインポート
PwnDocでは、NmapやNessusといったスキャンツールが出力したポートスキャン結果を、 Auditにインポートすることが出来ます。
読み込み用データの準備
今回は、Nmap のスキャン結果をインポートします。 やられサーバーやNmapの提供しているスキャンテスト用のホスト(scanme.nmap.org)に対して、-oX
オプションを指定してポートスキャンを実施し、結果のXMLファイルを出力しておきます。
結果のインポート
1.スキャン結果をインポートしたいAuditのダッシュボードに遷移します。

2.Scope (One per line) に診断対象のホスト名を入力し、Saveボタンで保存します。

3.左側サイドバーからNetwork Scanを選択します。

4.画面右上のImport から Nmap を選択します。

5.ファイル選択のダイアログが表示されるので、準備しておいたXMLファイルを選択します。

6.割り当てたいホストの項目右の + アイコンをクリックし、対応するデータを選択します。

7.再度 + アイコンをクリックすると、データのインポートが完了します。

カスタムデータの登録
PwnDocでは、テストや脆弱性の情報に限らず、 関連する以下のような情報も統合して管理することが出来ます。
Collaborator:他の調査員(ユーザー)Companies:クライアント企業の情報Clients:クライアント担当者の情報Vulnerability Type:脆弱性のタイプVulnerability Category:脆弱性のカテゴリCustom Field:情報の記入形式Custom Section:Auditで利用可能なセクション
Collaboratorの登録
Collaborator(ユーザー)を登録することで、チームでのテスト作業を可能にします。
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからCollaboratorsを選択します。

2.Add Collaboratorボタンをクリックして展開されるダイアログにて、以下の項目をそれぞれ設定し、CREATEをクリックします。
Username:ユーザー名Firstname:名前Lastname:名字Email:メールアドレスPhone:電話番号Role:与える権限、デフォルトでは以下の3種類が実装されている user:参加しているAuditの閲覧・更新、脆弱性は閲覧のみreport: userの持つ権限に加え、全てのプロジェクト情報の閲覧・更新admin:全ての情報の閲覧・更新Password:初期パスワード

Auditへのユーザーの割当て
userロールは参加しているAuditのみ閲覧・更新が可能なため、adminロールでAuditに当該ユーザーを割り当てる必要があります。
1.Audits画面から、ユーザーを割り当てたいAuditのGeneral Information画面に遷移します。

2.Collaborators項目の右にある下向き矢印のアイコンから、Auditに割り当てたいユーザーを選択し、Saveして完了です。

CompaniesとClientsの登録
CompaniesとClientsを登録することで、過去のAuditの追跡や連絡先などの情報を保存できます。
Companyの登録
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからCompaniesを選択します。

2.Add Companyボタンをクリックして展開されるダイアログにて、以下の項目をそれぞれ設定し、CREATEをクリックします。
Name:クライアント企業名Logo:ロゴの画像ファイル(レポート生成時などに利用)

Clientの登録
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからClientsを選択します。

2.Add Clientボタンをクリックして展開されるダイアログにて、以下の項目をそれぞれ設定し、CREATEをクリックします。
Company:クライアント企業名Firstname:名前Lastname:名字Email:メールアドレスFunction:部署Phone:固定電話番号Cell:携帯電話番号

脆弱性のTypeとCategory登録
脆弱性のタイプやカテゴリを登録することで、絞り込みや整理を容易にします。
Vulnerability Typesの登録
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからCustom Dataを選択します。

2.Vulnerability Typesタブをクリックすると、脆弱性タイプの登録画面に遷移するので、以下の項目をそれぞれ設定した後、+ アイコンをクリックして登録します。
Language:言語Name:脆弱性のタイプ名(サーバー、Webアプリケーション、モバイルアプリケーション など)

Vulnerability Categoriesの登録
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからCustom Dataを選択します。

2.Vulnerability Categoriesタブをクリックすると、脆弱性カテゴリの登録画面に遷移するので、以下の項目をそれぞれ設定した後、Create ボタンをクリックして登録します。
Name:カテゴリ名(ツールスキャン、手動テスト など)Default Sorting Options:デフォルト時、どの値を参照してソートするかの設定

Custom FieldsとSectionsの設定
カスタムフィールドとセクションを利用することで、登録する情報をカスタマイズすることができます。
Custom Fieldsの設定
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからCustom Dataを選択します。

2.Custom Fieldsタブをクリックすると、脆弱性カテゴリの登録画面に遷移するので、以下の項目をそれぞれ設定した後、Add ボタンをクリックして登録します。
Select View:フィールドをどこに追加するかSelect Component:入力タイプの設定Label:フィールドの名称Description:フィールドの説明Size:フィールドのサイズOffset:フィールドの表示位置の調整Required:当該フィールドを必須項目にするかの選択

Custom Sectionsの設定
1.ヘッダー内のDataをクリックしてHandle Custom Data画面に遷移後、サイドバーからCustom Dataを選択します。

2.Custom Sectionsタブをクリックすると、脆弱性カテゴリの登録画面に遷移するので、以下の項目をそれぞれ設定した後、+ アイコンをクリックして登録します。
Name:セクション名Field(For Template):レポートテンプレートで利用する識別子Icon:セクションのアイコン(Google Fonts Icons, mdi, font awesome が利用可能)

1.Audit TypesタブをクリックしてAuditの追加画面に遷移し、Add Sectionsの項目から、追加したいカスタムセクションを追加し、Createボタンをクリックすると、Auditに作成したカスタムセクションを追加できます。

レビュー機能
レビュー機能を利用することで、Auditの情報や、脆弱性情報の更新時に、 情報をレビュワーが確認する、というワークフローを確立することが出来ます。
Auditのレビュー
レビュー機能の有効化
- ヘッダー内のSettingsをクリックして設定画面に遷移後、Reviewsセクション右のスイッチからレビュー機能を有効にし、Save settingsボタンをクリックして設定を保存します。
Audit Update After Approval:Auditが更新された際、以前までの更新を保存するかの設定Mandatory Review:必要なレビュー数の設定

レビュワーの割当て
- レビュワーを割り当てたいAuditのGeneral Informationページに遷移し、Reviewers項目からレビュワーを割り当て、Saveボタンで保存します。 ※ この時、レビュー権限を持っていたとしても、Auditを作成した もしくは Collaboratorに含まれている ユーザーはレビュワーとして選択出来ないので注意してください。

レビューリクエストの送信
- テストが完了したAuditのGeneral Informationページに遷移し、Submit Reviewボタンをクリックすることで、Auditのレビューリクエストを設定できます。

レビューの処理
- レビュワーのアカウントを利用して、レビューリクエストが設定されているAuditのGeneral Informationページに遷移し、内容を確認後、処理に併せてCancel Review、Approveのどちらかのボタンをクリックします。

脆弱性テンプレートの更新
1.脆弱性テンプレートの更新リクエスト作成権限を持つアカウントにて、Finding(検出された脆弱性)詳細画面にて、脆弱性テンプレートへの更新内容を記載した後、Propose Creation / Update in Vulnerability Databaseボタンをクリックします。

2.脆弱性テンプレートの更新権限を持つアカウントにて、ヘッダ内Vulnerabilitiesタブをクリックし、脆弱性一覧ページに遷移すると、更新リクエストが存在する脆弱性テンプレートがハイライトされています。

3.EditボタンをクリックするとUpdate Vulnerabilityダイアログが表示されるので、差分を確認します。

4.内容に問題がなければ、ダイアログ下部のUPDATEボタンをクリックして更新完了です。

Finding(検出された脆弱性)のレビュー
1.Finding(検出された脆弱性)にはそれぞれ、Completedボタンがあり、これを利用することで記載されている内容について、確認済みかどうかの目安とすることが出来ます。

オリジナルテンプレートの作成
PwnDocでは、nodejsライブラリの
を利用してWord形式のレポートを生成しています。
例えば、デフォルトの
内に
{#executive_summary.text}
という項目が確認できますが、
PwnDoc内のAuditにはデフォルトでそのような項目はありません。
そこで、この項目(
{#executive_summary.text}
)の追加方法を辿りながら、テンプレートの作成方法について確認したいと思います。

カスタムセクション(executive_summary)の追加
1.カスタムセクションの追加から、Fieldにexecutive_summary
と設定して、+ ボタンをクリックして登録します。

カスタムフィールド(text)の追加
- カスタムフィールドの追加から、各項目を以下のように設定し、Addボタンをクリックして登録します。
Select View:Audit SectionSelect Section:Executive summarySelect Component:EditorLabel:text

Auditへの反映
1.Audit Typesの設定から、Add Sectionsで先程作成したExecutive summary
を設定してCreateボタンをクリックします。

2.Audit画面からNew Auditを選択し、新たに作成したAudit Typeを指定してCREATEボタンをクリックします。

3.当該AuditのセクションにExecutive summaryが追加されていることを確認し、任意の内容を入力してSaveボタンをクリックします。

レポートの生成と確認
- レポート生成ボタンをクリックしてレポートを生成し、Executive summaryに入力した内容が反映されていることを確認します。

おわりに
今回の記事では、PwnDocを利用するうえでは必須ではありませんが、応用的な機能をいくつかご紹介しました。 どちらかというとチームで作業をする際に有用な機能がメインでしたが、 テンプレートのカスタマイズは、自身の足跡をアウトプットする方法としての応用も可能ですので、是非使用してみてはいかがでしょうか。