
プロダクト開発本部でバックエンドエンジニアをしている渡辺です。
本記事では、kickflowで導入しているセキュリティ特化のAIエージェント「Takumi」を活用して、新規機能の開発中に初期設計をより堅牢なものへと見直したエピソードをご紹介します。
セキュリティ対策の課題
SaaSプロダクトを提供するkickflowにおいて、高いセキュリティ水準の維持は最重要事項の一つです。これまでも厳格なコードレビューや開発プロセスを通じて、十分な対策を行ってきました。
一方で、kickflowの開発チームは「開発サイクルの速さ」を非常に重視しており、日々高速に機能追加や改善を行っています。しかし、このスピード感を維持したまま、人間によるチェックだけですべてのセキュリティリスクを網羅し続けることには、構造的な限界があります。人間は疲弊しますし、どれだけ熟練したエンジニアでも見落としの可能性をゼロにはできません。
「開発スピードを落とさずに、人間には不可能な密度と頻度でチェックを行うにはどうすべきか」
この課題に対するkickflowの答えが、これまでの人手によるチェックに加えて、機械的な網羅性を持つAIの力を借りることでした。そのための新たなパートナーとして導入したのが、セキュリティ特化のAIエージェント「Takumi」です。
Takumiの概要と運用方法
Takumiは、Flatt Security社が提供するセキュリティ特化のAIエージェントサービスです。Slackから呼び出せるコマンドが用意されており、コードベースに対するセキュリティチェックを実行できます。
kickflowでは、以下のような運用を行っています。
- 定期的な自動セキュリティスキャンを設定
- 開発中のコードベースにおける差分を継続的にモニタリング
- 結果はMarkdown形式でSlackに届く
導入以来、バックグラウンドでの定期スキャンは継続しており、開発プロセスの中により深くTakumiを組み込むことで、セキュリティ品質向上を実現しました。
リリース前の早期検知
ある日、新規に開発を進めていた「OAuth認証を利用する機能」の設計・実装フェーズにおいて、Takumiから設計強化の提案が届きました。
Takumiのレポートには、以下のような特徴がありました。
- 重要度・緊急度別に脆弱性を分類(高リスク、中リスク、低リスクなど)
- 攻撃シナリオの具体的な記述
- 対策推奨事項まで含まれている
Takumiが提示したレポートをClaudeを使って整形し、チーム内で共有することで、スムーズに設計レビューを行うことができました。
指摘された脆弱性
今回議論の対象となったのは、OAuth認証の実装におけるstateパラメータの検証方針についてです。
OAuth認証とstateパラメータ
OAuth認証は、外部サービス等のリソースを利用する際によく使われる認証フローです。ユーザーが外部サービスでログイン・認可を行い、その結果をアプリケーションに返すという流れになります。
この認証フローにおいて、stateパラメータはCSRF(Cross-Site Request Forgery)攻撃を防ぐための重要な要素です。認可リクエスト時にランダムな値を生成し、コールバック時に同じ値が返ってくることを検証することで、悪意のある第三者による不正なリクエストを防ぎます。
検討した実装パターン
機能開発における初期の検討段階では、機能要件を満たすシンプルな実装として、クライアント側主体で検証を行うパターン(SPAなどでよく見られる方式)も選択肢として考えられました。
sequenceDiagram
participant User as ユーザー
participant Browser as ブラウザ
participant IdP as IdP (Google / GitHub等)
participant Server as kickflowサーバー
User->>Browser: 連携ボタンをクリック
Note over Browser: stateを生成(UUID)
Note over Browser: Client Storageに保存
Browser->>IdP: 認可リクエスト(state付き)
IdP->>User: ログイン・認可画面
User->>IdP: 認可を許可
IdP->>Browser: コールバック(code, state)
Note over Browser: Client Storageのstateと比較
Browser->>Server: 連携API(code)
Note over Server: stateの検証なし
Server->>IdP: アクセストークン取得
Server->>Browser: 連携完了
Takumiからの提案
一見すると動作には問題ないこの設計に対し、Takumiは「kickflowのアーキテクチャ特性を活かし、サーバーサイドでの検証を加えることで、より高いセキュリティレベルを確保できる」という提案を行ってくれました。
具体的には、クライアント側の検証に加え、サーバー側でも厳密な検証を行うことで、以下の一般的なOAuthに関連するリスクに対してより堅牢になります。
- CSRF攻撃への耐性強化: 悪意のある第三者が用意したリンクを踏ませ、意図しない連携を強制される可能性をより確実に防ぐ
- リプレイ攻撃の防止: 一度使われたstateを再利用した攻撃を防ぐ
- セッションハイジャック等のリスク低減: 正当なユーザー自身によるリクエストであることを厳密に検証する
これは、単に「脆弱性を直す」というよりは、「設計をより堅牢(Robust)にする」ための、多層防御(Defense in Depth)の観点からの提案でした。
検証と実装の決定
検証フェーズ
提示されたモデルやリスク分析をエンジニア自身が精査し、「実装コストが増加しても、顧客データの保護を最優先すべき」という判断のもと、サーバーサイド検証への移行を決定しました。
採用したアーキテクチャ
検証の結果、リリース前の段階で以下の設計を実装しました。
sequenceDiagram
participant User as ユーザー
participant Browser as ブラウザ
participant IdP as IdP (Google / GitHub等)
participant Server as kickflowサーバー
participant Cache as Session Store / Cache
User->>Browser: 連携ボタンをクリック
Browser->>Server: state生成API
Note over Server: stateを生成(検証可能な署名付きトークン)
Server->>Cache: state保存(ユーザーセッションと紐付け)
Server->>Browser: state返却
Browser->>IdP: 認可リクエスト(state付き)
IdP->>User: ログイン・認可画面
User->>IdP: 認可を許可
IdP->>Browser: コールバック(code, state)
Browser->>Server: 連携API(code, state)
Server->>Cache: state検証
Note over Cache: ワンタイム検証<br/>セッション一致確認<br/>検証後に削除
Cache->>Server: 検証OK
Server->>IdP: アクセストークン取得
Server->>Browser: 連携完了
主な設計のポイントは以下の通りです。
- サーバー側でstateを生成・管理: 信頼できるサーバー側で検証ロジックを完結
- ワンタイムトークン化: 使用後の即時無効化によるリプレイ攻撃防止
- セッションの一致検証: 正当なユーザー自身によるリクエストであることを厳密に検証
これらの対策を組み合わせることで、攻撃者がクライアント側の挙動を意図的に操作したとしても、サーバー側で確実に不正を検知・遮断できる「堅牢な認証基盤」を構築することができました。
AIエージェント活用のリアルな所感
今回のエピソードを通じて感じた、AIエージェント活用のメリットと注意点をまとめます。
良かった点
- シフトレフトの実現: 脆弱性が入り込む余地を設計段階で排除できたため、手戻りを最小限に抑え、安全な状態でリリースできました。
- 網羅的なチェック: 人間が見落としがちな観点も含めて、体系的にセキュリティチェックを実施してくれる点は強力です。
- レポートの品質: 整形すればそのままチーム内で共有できる品質のレポートが得られ、ナレッジの蓄積にもつながります。
注意点
- 人間のチェックは必須: AIの指摘をそのまま鵜呑みにせず、エンジニアが妥当性を検証する必要があります。
- 優先度・対応範囲の判断: 複数の指摘がある場合、プロジェクトの状況に合わせてどれから対応するかは人間が判断する必要があります。
まとめ
今回のエピソードを通じて、AIエージェントがセキュリティ対策の強力なパートナーになりうることを実感しました。
「発見→検証→改修」のサイクルを開発プロセスに組み込むことで、リリース前に脆弱性を潰す「シフトレフト」を実践できる体制が整いました。
今後もAIエージェントという強力なパートナーと、エンジニアの意志ある判断を組み合わせることで、より堅牢で、よりスピーディな開発を継続していきます。
We are hiring!
kickflow(キックフロー)は、運用・メンテナンスの課題を解決する「圧倒的に使いやすい」クラウドワークフローです。
kickflowでは、今回ご紹介したようなAIエージェントの活用など、新しい開発体験の追求に興味があるエンジニアを募集しています。私たちと一緒に「AI時代の開発」を実践していきませんか?ぜひ採用サイトをご覧ください。