BAppストアの受入基準

BApp Storeに拡張を投稿すると、コミュニティと共有できます。投稿されたBAppについて私たちは、セキュリティや品質などをレビューし、BApp Storeに掲載するかどうか決定します。

拡張を投稿する前に、次の受入基準を満たしているか確認してください。

  1. 独自の機能を持っていること。

    BApp Storeにある既存の拡張と機能が重複していないか確認してください。

    まったく新しいアイデアの拡張でなければ、あなたの目的に合うように既存のBAppをカスタマイズした方がよいかもしれません。BAppストアにあるすべての拡張のソースコードは、GitHubリポジトリにあります。

  2. 明確でわかりやすい名前が付いていること。

    拡張が何をするものかを明確に説明されている名前であるか確認してください。

    また、リストに表示される1行の要約(Webのみ)や、より詳細な説明文も記載できます。

  3. セキュアに動作すること。

    信頼できないサイトをユーザーがテストする可能性があり、拡張のせいでユーザが攻撃にさらされることがないようにしなければなりません。HTTPメッセージの内容は、信頼できないものとして扱ってください。想定される使用方法で、拡張が安全に動作する必要があります。ユーザがGUIに入力したデータは一般的に信頼できます。しかし信頼できないソースからオートフィルで入力されることもあるため、ユーザが内容をチェックしていることを期待してはいけません。

  4. すべての依存関係を含んでいること。

    BAppストアの大きなメリットは、ワンクリックでインストールできることです。拡張がすべての依存関係を含んでいれば、ユーザはより簡単に使い始められます。また、ベースとなるツールが更新されたにも拘らずBAppが更新されないというバージョンの不一致を避けられます。

  5. 応答性を保つためスレッドを使用していること。

    応答性を保つために、遅い処理はバックグラウンドスレッドで実行してください:

    バックグラウンドスレッドの例外をBurpがキャッチして報告することはありません。バックグラウンドの例外を報告するには、スレッド処理全体をtry/catchブロックで囲み、拡張のエラーストリームにスタックトレースを書き込んでください。

  6. 綺麗にアンロードすること。

    拡張がアンロードされるとき、すべてのリソースを確実に解放してください。拡張は、Extension.registerUnloadingHandler()でアンロードハンドラを登録する必要があります。アンロードされるリソースの最も一般的な例は、バックグラウンドスレッドです; バックグラウンドスレッドは、ExtensionUnloadingHandler.extensionUnloaded()で終了させることが重要です。

  7. Burpのネットワークを使用していること。

    HTTPリクエストを行う場合、対象宛てでもそれ以外宛てでも、java.net.URLのようなライブラリではなく、BurpのHttp.issueHttpRequest()を使う方が望ましいです。これを使えばBurpのコアを通してリクエストを送信するので、上位プロキシの設定やセッションハンドリングのルールなどが適用されます。多くのユーザは、プロキシ経由でしかインターネットにアクセスできない企業ネットワークにいます。加えて、ScanCheck.passiveAudit()では対象宛てに対して一切の通信を行わないでください。

  8. オフライン作業に対応していること。

    Burpのユーザの中には、インターネットに接続できない高セキュリティのネットワークで作業する必要がある人がいます。これらのユーザをサポートするために、脆弱性の定義やその他のデータを受け取るためにオンラインサービスと通信する拡張は、最新定義のコピーを含んでいる必要があります。

  9. 大規模なプロジェクトに対応できること。

    ユーザの中には、巨大なプロジェクトを扱う人がいます。これらのユーザをサポートするために、HttpHandler.handleHttpRequest()ScanCheck.activeAudit()などの関数に渡されたオブジェクトを長期間参照し続けないようにしてください。HTTPメッセージへの参照を長期間保持する必要がある場合は、Persistence.temporaryFileContext()を使用してください。また、SiteMap.requestResponses()Proxy.history()は、巨大な結果を返すことがあるので注意が必要です。

  10. GUI要素に親要素を使用すること。

    拡張機能が作成するポップアップウィンドウやメッセージなどのGUI要素は、メインのBurp Frameの子要素にしてください。これは、ユーザが複数のモニタを持っている場合に特に重要で、ポップアップを正しいモニタに表示できます。

    Burp Frameを取得するには、SwingUtils.suiteFrame()を使用します。

  11. Montoya APIのアーティファクトを使用すること。

    GradleやMavenなどのビルドツールを使って、montoya-apiアーティファクトを参照する必要があります。新しくプロジェクトを始める場合は、Gradleの使用を推奨します。詳細は、Burp拡張の開発を参照してください。