メインコンテンツまでスキップ

定期診断

info

本機能を利用するには Slack 連携 が必要です。 Slack を介して動作する診断機能と比べ、Web コンソールや Takumi API から利用できる診断機能の方が、相対的に管理しやすい傾向にあります。定期的な診断が必要な場合は、後者のご利用を推奨します。

定期診断とは

Takumi は、Slack チャンネルに連携されたリポジトリを定期的に診断できます。 Active Takumi 設定で定期診断を有効化すると、指定した期間内のコミット差分をレビューし、その結果を Slack チャンネルへ通知します。 Takumi が Slack で診断開始のお知らせをしている様子

オススメの利用方法

定期診断を活用すれば、機能追加や修正が頻繁に行われるチームでも、最新のセキュリティリスクを定期的に可視化できます。

特に以下のタイミングでの実行をおすすめします。

  • 週末に診断を実行し、月曜朝のチームミーティングで最新の課題を共有する
  • 定例ミーティングの前日に診断を設定し、開発サイクルごとに振り返りを行う

スケジュールタスクとの違い

定期診断と似たような機能にスケジュールタスクという機能がございます。

  • スケジュールタスク:任意のタイミングで、自由に Takumi へタスクを依頼できる
  • 定期診断:指定した期間内のコミット差分を対象に、定期的なレビューを行うことに特化している。差分を対象に診断するため、アプリケーション全体を診断するよりもクレジットの消費を抑えられる傾向にある

スケジュールタスクは柔軟性が高い一方で、依頼内容によっては診断精度にばらつきが出る可能性があります。定期診断では当社側でプロンプトを管理し、このワークロードに最適化したワークフローを提供することで、診断精度の安定化と効率化を実現しています。

もし、期間内のコミット差分ではなく、定期的にアプリケーション全体を診断したい場合はスケジュールタスクをご利用ください。

警告

既に設定されたスケジュールタスクを定期診断に変更する場合、定期診断を設定し、スケジュールタスクを削除する必要があります。スケジュールタスクを削除する際、Slack 上で設定されていた場合は Slack から削除する必要があり、Shisho Cloud byGMO 上で設定されていた場合は Shisho Cloud byGMO から削除する必要があります。

想定しているレビュー時間

Takumi が診断を開始してから、診断が完了するまで 4 時間から 8 時間ほどかかる場合がございます。

定期診断の設定方法

  1. Takumi を Slack に招待し、必要なスコープを設定してください。 詳しくは Takumi を Slack に招待する を参照してください。

  2. 「設定 > Takumi」の Active Takumi 設定から定期診断を有効化します。

レポートの頻度は「毎週」または「毎月」から選択可能です。 Takumi は、指定した期間内のコミット差分に対してセキュリティレビューを実施します。

定期診断の利用例

定期診断を有効化すると、Slack 上で次のような形式で結果を受け取ることができます。

Slack 通知の例

診断結果のレポートを Markdown 形式で出力

Takumi が Slack で診断結果のレポートを Markdown 形式で出力している様子

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

Takumi が Slack でリスクの高い 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サーバーのみに接続するよう設定を制限することも推奨されます。