Takumi を効果的に活用するには
Takumi を効果的に活用するにあたって最も重要なポイントは探索させる領域を狭くすることです。しかし、セキュリティの専門家であっても最初からスコープを限定した依頼をするのは困難です。そこで、本ドキュメントではより効果的な Takumi の活用方法のポイントを紹介していきます。
良い依頼の例
まずは、効果的ではない依頼をみてみましょう。
脆弱性がないか調査してください。
これだけでもある程度の診断は可能ですが、特に注意深く診断してほしい機能に着目してもらえなかったり、大きなリスクには繋がりづらい軽微な事項に関する報告が増えたりしてしまいます。
対象の機能を指定し、この依頼の調査範囲を狭くしてみましょう。
商品の購入履歴を閲覧する機能において脆弱性が存在しないか調査してください。特に、他人の購入履歴が見える脆弱性があると、重大な情報漏洩リスクにつながってしまいます。関連する機能の実装は path/to/directory
にあります。
対象の機能や着目してほしいリスクが明示されている上、ファイルパスも含まれているため Takumi の調査する領域が大幅に狭くなり、精度が上がります。
認証機能に関する脆弱性を調査してほしいです。このような脆弱性があると、アプリケーションにおいてアカウントテイクオーバー等の重大なセキュリティインシデントに波及する恐れがあるためです。特に、アカウント登録機能やログイン機能、パスワードリセット機能について重点的に調査してください。
脆弱性の種類を絞ることにより、Takumi は特定の脆弱性をより深く調査できるようになるため、診断の精度が向上します。また、脆弱性が存在した場合に顕在化が懸念されるリスクに関する説明をプロンプトにて与えることで、Takumi は診断の目的をより理解した上で調査するようになります。
良い依頼の書き方
ここまでは良い依頼内容とはどのようなものかを紹介してきました。ここからは、上記のような良い依頼を作成するための方法を紹介します。
抽象から具体へ
上記では「脆弱性がないか調査してください」という抽象的な依頼をどう書き換えたら良くなるかについて紹介しましたが、最初から具体的な依頼をするのは難しいものです。
ポイントは、まずアプリケーションの各機能が実装されているコードを俯瞰的に洗い出すための依頼をして、その結果を元により具体的な依頼をすることです。
抽象的な依頼の結果に基づいて具体的な依頼を作成する例を見てみましょう。
アプリケーションのセキュリティ診断を実施したいと考えています。そこで、まずはアプリケーションが実装している機能を洗い出すとともに、各機能についてどのような点に注意すれば堅牢にできるか教えて下さい。
この以来の調査結果において、ユーザーデータを扱うファイルアップロード機能の詳細が記載されているとしましょう。ユーザーデータには機密情報が含まれやすいため、この機能に注目した方がいいかもしれません。このように、診断を実施したい機能や、特定の機能において着目してほしいリスク上の観点を明らかにしておくことで、より具体的なタスクを依頼しやすくなります。
アプリケーションのユーザーデータのファイルアップロード機能はユーザーデータを扱うため、念入りに調査してほしいです。特に名前や住所など個人情報が漏洩する可能性がないか確認してください。
他にも、ファイルアップロード機能に関する脆弱性についてもっと詳しく知るために、より詳細な説明を依頼するのも良いでしょう。
ファイルアップロード機能にまつわる脆弱性は頻繁に発生するみたいですね。それらの脆弱性について詳しく教えてください。このアプリケーションの場合はどのようなリスクが想定できるかについてもしっかりと説明してください。
ここまでの例では、抽象的な依頼の結果に基づいて、依頼内容をより具体的にしていくことについて触れました。この手法は、特定の脆弱性やリスクについて深堀りする際にも効果的です。
例えば、最初の依頼で機能と実装が存在する箇所を指定したとしましょう。
レビューを投稿する機能において脆弱性が存在しないか調査してください。実装は path/to/file
にあります。
この結果に複数の脆弱性が報告されていたとしましょう。ここで、以下のような依頼をすると、特定の脆弱性についてより深く調査してもらうことができます。
レビューを投稿する機能において XSS の脆弱性があるようです。この脆弱性によってどんなリスクが想定できるか教えてください。実装は path/to/file
にあります。
このように繰り返し依頼することによって、Takumi の診断の精度をさらに高めることができます。
目的を明確に
セキュリティ診断を行う目的を明確にすれば、依頼内容を具体的に書きやすくなります。
例えば、新しい機能をリリースする際に診断を実施するとしましょう。その際は、当該リリースに関する変更に着目してもらうために「今回のリリースは認証機能に新たなロジックを追加するものなので、認証関連の問題がないか確認したい」や「今回はデータベース関連のリリースなので、データベースに関係する脆弱性がないか確認したい」といったような依頼をするとよいでしょう。
目的が明確だと依頼の詳細も書きやすくなります。
__url__ のプルリクエストは認証機能に新たなロジックを追加するものです。このプルリクエストで反映された変更部分に、認証に関する脆弱性が新たに発生していないか調査してください。
__url__ のプルリクエストではデータベースへのクエリをいくつかアップデートしています。このプルリクエストで更新された箇所に関して、データベース関連の脆弱性がないか調査してください。
スケジュール設定
Takumi はスケジュールの設定に基づいてタスクを実行することができます。ここでは毎日0時に前日分のソースコードの差分を元にセキュリティ診断する依頼を紹介します。
Cron設定:0 0 * * *
依頼内容:
過去24時間以内に行われたコミットに対してセキュリティレビューを実施してください。
- レビュー前に、予めデフォルトブランチ(main)がチェックアウトされていることを確認してください。また、チェックアウトしたブランチが最新の状態であることを確認してください。ブランチを最新化できない場合は、その理由をレポートに記載し次のステップに進んでください。
- 対象となるコミットの範囲で、新たに作り込まれた脆弱性や仕様上の懸念を特定し、報告してください。脆弱性が修正されたことは報告しなくて構いません。
他の使い方
ここでは Takumi の様々な使い方を紹介していきます。
アプリケーションに脆弱性が発見されたのでリスクや深刻度を知りたい:
コメント投稿機能において、正しく CSRF トークンを扱ってなかったみたいです。リスクと深刻度を調査してください。実装は path/to/file
にあります。
アプリケーションのある機能に脆弱性が発見されたので他の機能にも同様の脆弱性がないか確認したい:
レビュー投稿機能に SQL injection があったようです。他の機能にも SQL injection が存在しないか確認してください。
検討中の技術について質問する:
GraphQL の導入を検討しています。GraphQL を通して機密データを送る際、注意が必要なポイントはなにがありますか?
依存しているライブラリやその使い方について問題がないか調査してもらう:
このアプリケーションは JWT を検証する処理があります。JWT の処理は xxxxx のライブラリを使ってます。実装は path/to/file
にあります。この処理について、脆弱性が存在しないか調査してください。
脆弱性の再現手順を調査してもらう:
認証機能においてアカウントテイクオーバー脆弱性が発見されました。この脆弱性は、〇〇 というデータを送信すると発生するようです。この脆弱性を再現するためのより詳しい手順を教えて下さい。