ホワイトボックス診断(定期)
定期診断とは
Takumiは、Slackチャンネルに連携されたリポジトリを定期的に診断できます。
Active Takumi設定で定期診断を有効化すると、指定した期間内のコミット差分をレビューし、その結果をSlackチャンネルへ通知します。

オススメの利用方法
定期診断を活用すれば、機能追加や修正が頻繁に行われるチームでも、最新のセキュリティリスクを定期的に可視化できます。
特に以下のタイミングでの実行をおすすめします。
- 週末に診断を実行し、月曜朝のチームミーティングで最新の課題を共有する
- 定例ミーティングの前日に診断を設定し、開発サイクルごとに振り返りを行う
スケジュールタスクとの違い
定期診断と似たような機能にスケジュールタスクという機能がございます。
- スケジュールタスク: 任意のタイミングで、自由にTakumiへタスクを依頼できます。
- 定期診断: 指定した期間内のコミット差分を対象に、定期的なレビューを行うことに特化しています。差分を対象に診断するため、アプリケーション全体を診断するよりもクレジットの消 費を抑えられる傾向があります。
スケジュールタスクは柔軟性が高い一方で、依頼内容によっては診断精度にばらつきが出る可能性があります。定期診断では当社側でプロンプトを管理し、このワークロードに最適化したワークフローを提供することで、診断精度の安定化と効率化を実現しています。
もし、期間内のコミット差分ではなく、定期的にアプリケーション全体を診断したい場合はスケジュールタスクをご利用ください。
既に設定されたスケジュールタスクを定期診断に変更する場合、定期診断を設定し、スケジュールタスクを削除する必要があります。スケジュールタスクを削除する際、Slack上で設定されていた場合はSlackから削除する必要があり、Shisho Cloud byGMO上で設定されていた場合はShisho Cloud byGMOから削除する必要があります。
想定しているレビュー時間
Takumiが診断を開始してから、診断が完了するまで4時間から8時間ほどかかる場合がございま す。
定期診断の設定方法
-
TakumiをSlackに招待し、必要なスコープを設定してください。
詳しくは TakumiをSlackに招待する を参照してください。 -
「設定 > Takumi」のActive Takumi設定から定期診断を有効化します。
レポートの頻度は「毎週」または「毎月」から選択可能です。
Takumiは、指定した期間内のコミット差分に対してセキュリティレビューを実施します。
定期診断の利用例
定期診断を有効化すると、Slack上で次のような形式で結果を受け取ることができます。
Slack通知の例
診断結果のレポートをMarkdown形式で出力

リスクの高いFindingsをスレッドで説明

Markdown出力例
# 検出事項の詳細
## 1. FTP PASV レスポンスインジェクションと悪意のあるパッシブモード応答によるSSRF (深刻度: 緊急)
### 対象の機能
FTPパッシブモード処理機能
### 該当箇所
- src/network/ftp.cpp
- src/network/ftp.h
ftpsocket.cppの182行目: host = regex.GetMatch(m_Response, 2); に続く183-183行目でポートを抽出、その後125行目: socket->SetupConn(host, port) で攻撃者が制御する宛先に接続
### 説明
FTPコントロールソケットのProcessResponse関数は、正規表現を使用してPASV応答を解析しますが、検証が不十分です。悪意のあるFTPサーバーは、任意のIPアドレスとポートを含む細工されたPASV応答を返すことができ、クライアントが内部ネットワークリソースに接続するSSRF攻撃を引き起こす可能性があります。正規表現パターンは、IPオクテットに対して0-999の値(有効な0-255の範囲を超える)を許可し、ポート範囲を検証しないため、攻撃者がlocalhost、内部IP、または制限されたサービスを含む任意のホストとポートにデータ接続をリダイレクトできます。
### リスク
この脆弱性の主要なリスクは、攻撃者が内部ネットワークサービスやローカルホスト上のサービスに対して不正なアクセスを実行できることです。これにより、内部システムからの機密情報の窃取、内部サービスへの不正アクセス、またはファイアウォールや他のセキュリティ制御の迂回が可能になります。特に、組織の内部ネットワークにあるデータベース、管理インターフェース、その他の機密システムが危険にさらされる可能性があります。
### 対策
この脆弱性を修正するために最も重要なのは、PASV応答の解析における入力検証の強化です。具体的には、IPアドレスの各オクテットが0-255の有効な範囲内であることを確認し、ポート番号が1-65535の有効な範囲内であることを検証する必要があります。さらに、接続先IPアドレスに対する包括的なホワイトリスト検証を実装し、プライベートIPアドレス、ローカルホスト、および内部ネットワークへの接続を明示的にブロックする必要があります。また、信頼できるFTPサーバーのみに接続するよう設定を制限することも推奨されます。