3.5K Views
December 28, 24
スライド概要
2024年12月28日(土)開催
イベント名:【ハードニング】京都産業大学情報理工学部ランチタイムトーク x OWASP Kansai
登壇タイトル:生成 AI を活用した Slack App ではじめるスケーラブルなセキュリティインシデント対応訓練
https://owasp-kansai.doorkeeper.jp/events/179740
メディア企業でプロダクトセキュリティをやっています。 CISSP/GCIH/GCFR/SANS FOR610, FOR572(Coin holders)/AWS CLF/GCP ACE,PCA,PSE /セキスペ
京都産業大学情報理工学部ランチタイムトーク x OWASP Kansai 生成 AI を活用した Slack App ではじめる スケーラブルなセキュリティインシデント対応訓練 日本経済新聞社 藤田 尚宏 2024/12/28
自己紹介 日本経済新聞社 CDIO室 セキュリティエンジニア 藤田 尚宏 ● 2022年4月入社 ● 元 オープン系エンジニア(SES, SIer, ベンダー) ● 元 警視庁サイバー犯罪特別捜査官 ● 所属:CDIO室 セキュリティチーム ● ● ● ● チーム運営 プロダクトセキュリティ施策の企画・推進 各プロダクトのセキュリティレビュー インシデント対応の強化、訓練 etc… ● 最近 ● ● ● ● Go, TypeScript, Terraform を書いている Google Cloud のセキュリティ強化 GitHub Advanced Security 導入 セキュリティ・キャンプ 全国大会 2024 プロデューサ 2 2
おことわり ● 発表内容は個人の見解に基づくものであり、所属組織を代表するも のではありません。 3
アジェンダ 1. 【デモ動画】生成 AI を活用した Slack App の紹介 2. 【前段】インシデントって何?リスクとの向き合いかた 3. 【施策】セキュリティインシデントに対応するための体制とドキュメント 4. 【実践】セキュリティインシデント対応訓練 5. 【解説】ツールの構成と実装 4
【デモ動画】生成 AI を活用した Slack App の紹介 5
平時からの備え Slack上で動作する生成 AI を 活用した訓練用チャットボット 通称「Phoenix Bot」 6
[動画] Phoenix Bot 1. 起動(mention) 2. 返事がくる 3. 質問に答える 4. 相談しつつ訓練 5. 振り返り 7
ツールの特徴 ● メンションを飛ばして本文を書くだけ ● リアルタイムに書いている風の挙動 ● 生成AIならではの不確実性により飽きがこない 8
【前段】インシデントって何?リスクとの向き合いかた 9
インシデント対応の経験はありますか? メモリ異常が 起こっています! エラーレートが 上昇しています! データが盗まれま した! インシデントは身近に起こります 10
リスクへの対応 リスクマネジメントの分野(JIS Q 31000:2019 リスクマネジメント-指針)の分類 ● 軽減 ○ 技術選択の幅を狭めないために、多層防御で"対策"を検討する。 ● 受容 ○ 脅威の影響が⼩さい場合、⼯数や期⽇の兼ね合いから⼀時的にリスクを"受容"する。 ● 移転 ○ 脅威の影響が⼤きく、頻度が低い場合、保険加⼊などの”転嫁”を検討する。 ● 回避 ○ セキュリティを理由に”やらない”を決めること。 大 ⬆ 小 被害 移転 回避 受容 軽減 スイスチーズモデル 頻度 低 ➔ 高 11
インシデントが起こることを前提とした体制 NIST CSF 2.0 (2024年2月公開) ● 2014年にNISTが発行したサイバーセキュリティフレームワーク ● 米国国立標準研究所(National Institute of Standards and Technology, NIST) NIST CSFは重要インフラのサイバーセキュリティを改善するためのフレーム ワーク。サイバー攻撃が起こることを前提 とし、防ぐだけでなく被害後の対応や 復旧などフェーズに分けて取るべき施策が網羅されている。 ● ● ● ● ● ● 統治 (GV) : 優先的に取り組むべき施策 等 識別 (ID) : 資産やリスクの特定 等 防御 (PR) : ID管理・トレーニング・データセキュリティ 等 検知 (DE) : モニタリング・イベント分析 等 対応 (RS) : インシデント管理・分析・対応 等 復旧 (RC) : インシデント復旧、復旧コミュニケーション 等 12
インシデントは起こってほしくないときに起こる (休日前や深夜、長期休暇中など) 13
【施策】 セキュリティインシデントに対応するための体制とドキュメント 14
セキュリティインシデント PagerDuty Incident Response Documentation を参考にセキュリティインシデントに備える— HACK The Nikkei 15
インシデント対応ドキュメントの例 16
全エンジニア、全文を読んで理解してくれるだろうか…? 17
【実践】セキュリティインシデント対応訓練 18
ドキュメントに沿った訓練の例 19
インシデント対応訓練と訓練記録 20
生成 AI を活用した セキュリティインシデント対応訓練アプリ ● 社内ルールやノウハウを踏まえた実効的な訓練を実施したい ● セキュリティチームの訓練にかかる運用負荷や属人性を減らしたい ● 訓練にエンジニアにとって身近なツールを使いたい ● チームごとに任意のタイミングで実施したい 生成 AI + Slack Appで解決 Bチーム Aチーム Cチーム 21
【解説】ツールの構成と実装 22
推論 システム基本構成 呼ぶ ● Slack App (bolt) 返事 ● Terraform 保存 ○ AWS Lambda ○ Amazon Bedrock (生成 AI) 機密 ○ Dynamo DB (セッション履歴用) ○ AWS Key Management Service (機密文字列の保管) ○ Node.js v20 (Langchain) 23
① 使用ライブラリ ● ● ● Langchain:LLMのモデルを簡単に扱える @slack/bolt : Slack Appを簡単に扱える aws-sdk:awsとの接続を簡単に扱える 24
② プログラム本体 (全体) DynamoDBChatMessageHistory DynamoDBのセットアップ ChatBedrockConverse LLMのモデルを選ぶ ストリームモードで開く ChatPromptTemplate システムプロンプトを読む ● 実装はたったの140行 ● ボットに必要な処理のみ実装 ● シナリオはプロンプトに記述 chatPrompt.pipe Bedrockと会話する 応答をいい感じに区切って Slackのスレッドを更新する (句読点、改行など) chatHistory.addMessage DBに履歴を保存 25
② プログラム本体 -1 ● テーブル名:任意 ● キー項目:任意 ● セッションID:SlackのスレッドID DynamoDBChatMessageHistory DynamoDBのセットアップ 26
② プログラム本体 -2 ● ahtropic.claude-3-sonnet 利用 ● streaming モード有効 DynamoDBChatMessageHistory DynamoDBのセットアップ ChatBedrockConverse LLMのモデルを選ぶ ストリームモードで開く 27
② プログラム本体 -3 ● システムプロンプトを読み出し ● チャットテンプレートにセット ● 後続の placeholderは後で利用 DynamoDBChatMessageHistory DynamoDBのセットアップ ChatBedrockConverse LLMのモデルを選ぶ ストリームモードで開く ChatPromptTemplate システムプロンプトを読む 28
②’ システムプロンプト 自然言語で OK ← 司令 ↓ フロー ← 禁止事項 ← シナリオ 以下は社内手続きを含むため非公開 … 29
② プログラム本体 -4 DynamoDBChatMessageHistory ● チャット履歴を取得 ChatBedrockConverse ● 入力された文字列を会話に追加 ● プロンプト呼び出し DynamoDBのセットアップ LLMのモデルを選ぶ ストリームモードで開く ChatPromptTemplate システムプロンプトを読む chatPrompt.pipe Bedrockと会話する 30
② プログラム本体 -5 ● 句読点、改行などで区切って更新 DynamoDBChatMessageHistory DynamoDBのセットアップ ChatBedrockConverse LLMのモデルを選ぶ ストリームモードで開く ChatPromptTemplate システムプロンプトを読む chatPrompt.pipe Bedrockと会話する 応答をいい感じに区切って Slackのスレッドを更新する (句読点、改行など) 31
② プログラム本体 -6 ● DynamoDBに履歴を保存 ○ ○ ユーザの入力値 BedRockの応答(全文結合) DynamoDBChatMessageHistory DynamoDBのセットアップ ChatBedrockConverse LLMのモデルを選ぶ ストリームモードで開く ChatPromptTemplate システムプロンプトを読む chatPrompt.pipe Bedrockと会話する 応答をいい感じに区切って Slackのスレッドを更新する (句読点、改行など) chatHistory.addMessage DBに履歴を保存 32
(Appendix) リポジトリ構成 一般的なTerraform 一般的なNode.js v20 構成
この先考えていること ① 複数パターンのインシデントシナリオ ② Bedrock Agent(AI Agent)を用いた動的な情報への回答取得 ③ リアルなセキュリティインシデント発生時のナビゲータとして活用 34
まとめ ● セキュリティインシデントはある日突然やってくる ● 組織として対応するために体制やツールを整備しておく ● 実際に訓練してチームとしての成熟を目指すことが大切 ● ツール化することで訓練をスケーラブルに展開できる ● 生成 AI との上手な付き合い方を覚えていこう 誰もがインシデントの当事者になり得ます! 35
参考情報 インシデントハンドリング研修でGPT-4を活用する - MIXI DEVELOPERS Amazon Bedrock 生成AIアプリ開発入門 [AWS深掘りガイド] | SBクリエイティブ 【開催報告】AWS re:Inforce 2024 および re:Cap イベント | Amazon Web Services ブログ AWS re:Inforce 2024 参加記 ~AWSのセキュリティカンファレンスはセキュリティ担当者だけのものじゃない~ (上記re:Capイベントにおける藤田の登壇資料)
ご静聴ありがとうございました。