Upgrade to Pro — share decks privately, control downloads, hide ads and more …

セキュリティ研修【MIXI 26新卒技術研修】

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

セキュリティ研修【MIXI 26新卒技術研修】

本スライドは、MIXIの2026年度新卒向け技術研修で使用された資料です。
 
MIXI 2026新卒技術研修
『セキュリティ研修』
 
───────────────────────────────
※皆様へのお願い※ 資料・動画・リポジトリのご利用について
───────────────────────────────
公開している資料や動画は、是非、勉強会や社内の研修などにご自由にお使いいただければと思いますが、以下のような場でのご利用はご遠慮ください。
- 受講者から参加費や授業料など金銭を集めるような場での利用
(会場費や飲食費など勉強会の運営に必要な実費を集める場合は問題ありません)
- 出典を削除または改変しての利用

Avatar for MIXI ENGINEERS

MIXI ENGINEERS PRO

July 26, 2026

More Decks by MIXI ENGINEERS

Other Decks in Technology

Transcript

  1. タイムテーブル ※適宜休憩/昼休みを挟みつつ。 時間 内容 種別 10:40-11:00 情報セキュリティの基本を知ろう 座学 11:00-11:20 MIXIで取り組んでいる情報セキュリティ対策を知ろう

    座学 11:20-11:50 (開発の前提) 開発の前提部分をまずセキュアに 11:50-16:20 (サービスのサーバ側) メジャーな脆弱性を知ろう 座学 座学 + ハンズオン セキュアに開発するにはどうしたらいいか知ろう 7 16:20-16:50 (サービスのサーバ側) 外部ライブラリ等の脆弱性情報の見方を知ろう 座学 17:00-17:10 (サービスのクライアント側) クライアント側のセキュリティリスクを知ろう 座学 17:10-18:30 (管理画面や開発環境など) アクセス制御の考え方とやり方を知ろう 座学 + ハンズオン ©MIXI
  2. 可用性を上げるために • バックアップ/復旧手段を持っておこう • サービスが停止した際にすみやかに復旧できるよう、 サービスが稼働するためのデータ(ユーザデータ、コード etc..)はバックアップしておこう • いざというとき慌てないように復旧手段をドキュメント や頭の中に残しておこう

    (説明できるようになっていると Good) • プラス、自分のサービスやデータの性質を考慮しよう • 止まると人命に関わる /災害時に動かないと困るようなもの等は、 例えばロケーション分散等するこ とでそもそも止まらないように。 13 ©MIXI
  3. 情報セキュリティを守れず、事故が起きると...... 15 利用者は…… 自分たちは…… 実害的なダメージ 自分や自分の家族等の個人情報が漏洩する。 課金していたゲームの資産が無駄になる。 必要だったサービスが受けられない。 etc 実害的なダメージ

    賠償や訴訟に発展することがある。 業務自体が停止する。売上への悪影響。 信頼的なダメージ 「MIXI」というブランドへの信頼が低下する。 ユーザが今後ミクシィのサービスを利用したくなくなる。 コラボ等のビジネスチャンスを信頼失墜で失う。 ©MIXI
  4. 情報セキュリティに対する脅威には何があるか? 18 順位 個人 組織 1 インターネット上のサービスからの個人情報の窃取 ランサム攻撃による被害 2 インターネット上のサービスへの不正ログイン

    サプライチェーンや委託先を狙った攻撃 3 インターネットバンキングの不正利用 AIの利用をめぐるサイバーリスク 4 クレジットカード情報の不正利用 システムの脆弱性を悪用した攻撃 5 サポート詐欺(偽警告)による金銭被害 機密情報等を狙った標的型攻撃 6 スマホ決済の不正利用 地政学的リスクに起因するサイバー攻撃(情報戦を含む) 7 ネット上の誹謗・中傷・デマ 内部不正による情報漏えい等 8 フィッシングによる個人情報等の詐取 リモートワーク等の環境や仕組みを狙った攻撃 9 不正アプリによるスマートフォン利用者への被害 DDoS攻撃(分散型サービス妨害攻撃) 10 メールやSNS等を使った脅迫・詐欺の手口による金銭要求 ビジネスメール詐欺 引用元:https://www.ipa.go.jp/security/10threats/10threats2026.html, (2026/1/29). ©MIXI
  5. 情報セキュリティに対する脅威には何があるか? 19 順位 個人 組織 1 インターネット上のサービスからの個人情報の窃取 ランサム攻撃による被害 2 インターネット上のサービスへの不正ログイン

    サプライチェーンや委託先を狙った攻撃 3 インターネットバンキングの不正利用 AIの利用をめぐるサイバーリスク 4 クレジットカード情報の不正利用 システムの脆弱性を悪用した攻撃 5 サポート詐欺(偽警告)による金銭被害 機密情報等を狙った標的型攻撃 6 スマホ決済の不正利用 地政学的リスクに起因するサイバー攻撃(情報戦を含む) 7 ネット上の誹謗・中傷・デマ 内部不正による情報漏えい等 8 フィッシングによる個人情報等の詐取 リモートワーク等の環境や仕組みを狙った攻撃 9 不正アプリによるスマートフォン利用者への被害 DDoS攻撃(分散型サービス妨害攻撃) 10 メールやSNS等を使った脅迫・詐欺の手口による金銭要求 ビジネスメール詐欺 色々あって カオス 引用元:https://www.ipa.go.jp/security/10threats/10threats2026.html, (2026/1/29). ©MIXI
  6. 3つのアタックサーフェスについて アタックサーフェス 対策の主体 セキュリティ室の支援の例 事故対応 脆弱性診断(外注 / 内製) 自社サービス 事業部門

    アプリ インフラ 関連ツール 等 IaaS監視(AWS / Google Cloud) 新卒エンジニア研修 ゼロトラスト支援(導入 / 啓発) EDRの共同運用、PFW設定見直し 社内システム 端末 全社ツール 社内NW オフィス 設備 等 社内システム部門 IDPの共同運用 CSIRT パスワードマネージャの共同運用 ゼロトラスト支援(導入 / 啓発) 人間 アカウント 運用 脳内の情報 等 20 全職種向け研修 各人・各部 各種啓発や周知(全体朝会等) 業務委託監督の支援(教育資料等) ©MIXI
  7. 3つのアタックサーフェスについて アタックサーフェス 対策の主体 セキュリティ室の支援の例 事故対応 脆弱性診断(外注 / 内製) 自社サービス アプリ

    インフラ 関連ツール 等 事業部門 IaaS監視(AWS / Google Cloud) 弊社では攻撃の狙われどころを 新卒エンジニア研修 3パターンに分けて防御策を実施し ゼロトラスト支援(導入 / 啓発) ている EDRの共同運用、PFW設定見直し 社内システム 端末 全社ツール 社内NW オフィス 設備 等 社内システム部門 IDPの共同運用 CSIRT パスワードマネージャの共同運用 ゼロトラスト支援(導入 / 啓発) 人間 アカウント 運用 脳内の情報 等 21 全職種向け研修 各人・各部 各種啓発や周知(全体朝会等) 業務委託監督の支援(教育資料等) ©MIXI
  8. 3つのアタックサーフェスについて アタックサーフェス 対策の主体 セキュリティ室の支援の例 事故対応 脆弱性診断(外注 / 内製) 自社サービス 事業部門

    アプリ インフラ 関連ツール 等 IaaS監視(AWS / Google Cloud) 新卒エンジニア研修 ゼロトラスト支援(導入 / 啓発) セキュリティ室が行っている支援をご 紹介 社内システム 端末 全社ツール 社内NW オフィス 設備 等 社内システム部門 EDRの共同運用、PFW設定見直し IDPの共同運用 CSIRT パスワードマネージャの共同運用 ゼロトラスト支援(導入 / 啓発) 人間 アカウント 運用 脳内の情報 等 22 全職種向け研修 各人・各部 各種啓発や周知(全体朝会等) 業務委託監督の支援(教育資料等) ©MIXI
  9. 社内システムの情報セキュリティ対策の例 • • ゼロトラスト • システムに対するアクセス制御施策。 • 詳しく後述。 EDR •

    Endpoint Detection and Response • エンドポイントにおける脅威の監視/検出技術 • 会社支給PCにて不審な挙動 (マルウェアが疑われるファイルの実行等) がみられるとアラートが上がる • エンジニアが使うツールは割とアラート上がりやすい (使い方を間違えると事故に陥りやすいとも言える) 23 ©MIXI
  10. 脆弱性診断の紹介 • 脆弱性診断とは • アプリケーションに潜む脆弱性を探す検査。 • • 25 疑似的な攻撃を仕掛け、挙動を診て脆弱性を探る。 セキュリティ室で行っている脆弱性診断関連のサポート

    • 予算やスケジュール感に応じて診断内容(外注/内製)の提案と診断実施 • 診断の準備や実施にあたり必要になる手続き/環境準備等のサポート ©MIXI
  11. セキュリティ室で行っているIaaS監視 • 今のところAWS, Google Cloud, Azure, GitHubを対象にしています • 攻撃が来るとアラートが上がります! •

    • 27 • 不正なアウトバウンド通信が起こっている • マイニングが起こっている 設定面での不備があるとアラートが上がります! • 二要素認証を設定していないユーザがいる • バケットがインターネット公開になっている 「Wiz」という製品を使用して監視しています。 ©MIXI
  12. フィッシングで気をつけること 見分けの指針 • 差出人 • • • メールアドレスのドメインは問題なさそうか? • 正規のドメインか(本物っぽいが微妙に違うケースなど

    • メールアドレスを交換したことがあるか • フリーメールアドレスか • 送信元と署名が合っているか 内容・本文 • 個人情報や認証情報を要求していないか? • リンク先への誘導や、添付ファイルの開封を促していないか? リンク先URL • リンク先ドメインは問題なさそうか? • 表示URLとマウスをかざした際の実際の遷移先URLが異なっている • HTTPSでない場合はより一層警戒 • • 添付ファイル • 37 ※ 正規のHTTPサイトやフィッシングのHTTPSサイトもある Excel, Word等のマクロ、実行形式ファイル、ショートカットファイル、二重拡張子(doc, exe) ©MIXI
  13. フィッシングで気をつけること 見分けの指針 • 差出人 • • • メールアドレスのドメインは問題なさそうか? • 正規のドメインか(本物っぽいが微妙に違うケースなど

    • メールアドレスを交換したことがあるか • フリーメールアドレスか • 送信元と署名が合っているか 内容・本文 個人情報や認証情報を要求していないか? • リンク先への誘導や、添付ファイルの開封を促していないか? リンク先URL • リンク先ドメインは問題なさそうか? 表示URLとマウスをかざした際の実際の遷移先URLが異なっている • HTTPSでない場合はより一層警戒 ※ 正規のHTTPサイトやフィッシングのHTTPSサイトもある 添付ファイル • 38 例えばLet’s Encrypt等の取得が容易な証明書は、それ自体が悪い わけではないが、無料でお手軽なのでフィッシングで利用しやすいの も事実ではあるので注意。 • • • 逆にいうと自分たちの開発においてはフィッシ ングと見間違われないようにしたい。 • Excel, Word等のマクロ、実行形式ファイル、ショートカットファイル、二重拡張子(doc, exe) ©MIXI
  14. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 41 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  15. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 42 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など セキュリティ室の戦略指針をもとに サービスの守り方を 整理した感じです ©MIXI
  16. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 43 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  17. セキュアに開発する(インフラ) 下記関連の設定やらかしはあるあるだと思うので注意しておきましょう • NW関連の設定 • • 想定外のアクセスが許可されないようにする。FWのinbound公開範囲を適切に。 ストレージ等の公開設定 • S3、GCS、CloudRun、Lambdaなどなど

    • 公開想定のバケットでもリスティング機能は有効化しないようにする。 • • うっかり機密なファイルをアップしてしまった際にそのファイルのパスがバレるバレないは分水嶺になりうる IAMの運用 • 二要素認証を設定して不正アクセス対策。 • アクセスキーを正しく管理。無闇に作らず、権限を最小化し、使わなければ破棄。 ↑上記がセキュアになっているかは一定セキュリティ室で監視しています 46 ©MIXI
  18. セキュアに開発する(インフラ) ログは取って保存しておかないと無い(当たり前)ので、できるだけ取って保存しておこう • 取っておくべきログの例 (インシデント時の侵害痕跡調査に役立つ) • • 監査ログ(システムの操作イベントのログ) • Google

    Cloud→自動で一定cloud loggingに保存される設定になっている • AWS→セキュリティ室の監視設定時にCloudTrailログをS3に保存する設定を入れている • ユーザーログイン履歴などのアプリケーションログ • 送信元IPなどのアクセスログ 保存場所 • サーバ内だけでなくクラウド上(cloudwatch, cloudlogging, s3, gcs等)等インスタンス外にもリモートバックアッ プしておくとGood 48 ©MIXI
  19. セキュアに開発する(インフラ) マネージドサービスも選択肢に入れよう • 開発業務環境構築のために、クラウド上にサーバを建てたりすることがあります。 • その際、自前環境を守るためには例えばゼロトラスト構築やOS等の脆弱性管理などが必要になり、構築/運用コスト がかかりますが、マネージドサービスによってはこれらがサービス側で提供されているといったメリットがあるため、 選 択肢の一つとして持っておきましょう •

    例)機械学習関係の業務環境としてJupyterを使う • • 選択肢として下記があります • 自分でサーバを建てJupyterを導入(構築)する • AWSが提供しているSageMakerサービスを使う SageMakerサービスを使うとセキュリティ上で下記のようなメリットが有ります (※) • IAMで認証が行われるため、それ自体が不正アクセスされない限り第三者にアクセスされることが無くな る • パスワード管理が不要に • サーバのOSやミドルウェアの脆弱性管理が不要になる ※…署名付きURLというSageMakerならではの取り扱い注意な要素もある 49 ©MIXI
  20. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 52 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  21. セキュアに開発する(各自の作業) • 業務端末のFWは閉じておこう • アクセスキー等のクレデンシャルの取り扱いには注意! • GitHubにアップロードして漏洩など。パブリックに公開するとすぐに使われる可能性が あります。 • •

    secretlintなどを使う等することでミスを防ぐ仕組みを入れるとGood OS/ツール等のバージョンアップデートを忘れず • 再起動時に自動アップデートされるものなどもある。業務終了後のシャットダウンを習 慣化しよう。 53 ©MIXI
  22. セキュアに開発する(各自の作業) • 安全性が高いと言い切れないツールを安易に入れない • chrome拡張等。公式のストアであっても悪性のものが紛れていることがあります。 • 公式が配布しているツールやレビュー件数が多いメジャーなもの等でない場合、一歩踏 みとどまりましょう。 • 手元のPCでなくリモートサーバ側で仕事をする場合(RDP,

    SSH, CloudIDE等) • 会社貸与PCではEDRやADでの制御など、一定のセキュリティを確保しています。その 保護からは外れるということは認識して、しっかり自衛しましょう • • アクセス制御はしっかり。特にRDP。 • 不要なことをしない。不要なプログラムを入れない。 クラウドなら安心...ではないので注意! • • 54 責任共有モデルを思い出そう 有事の際に備え、できるだけログは残るように。 ©MIXI
  23. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 55 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  24. セキュアに開発する(データの取り扱い) ちなみに、、 次のうち個人情報に該当する可能性が高いものはどれでしょうか? - 氏名 ← 特定の個人を識別できる(同姓同名でも他の情報との組み合わせることで識別できる) - 指紋 ←

    身体の一部の特徴を電子処理のために変換した符号も個人情報 - 趣味 ← きわめて特殊な趣味でなければ個人情報では無い可能性が高い - メールアドレス ← [email protected][email protected]とでは識別可否が変わる 個人情報保護法において「個人情報」とは、生存する個人に関する情報で、氏名、生年月日、住所、顔写真などにより特定の個人を識別できる情報をいいます。 個人情報とは、「当該情報に含まれる氏名、生年月日その他の記述等(文書、図画若しくは電磁的記録(電磁的方式(電子的方式、磁気的方式その他人の知覚に よっては認識することができない方式をいう。次項第二号において同じ。)で作られる記録をいう。以下同じ。)に記載され、若しくは記録され、又は音声、動作その他 の方法を用いて表された一切の事項(個人識別符号を除く。)をいう。以下同じ。)により 特定の個人を識別することができるもの (他の情報と容易に照合すること ができ、それにより特定の個人を識別することができることとなるものを含む。)」 59 ©MIXI
  25. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 61 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  26. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 62 サーバ側 次はここ! • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  27. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • • クライアント側にあるモノは見られる /触れる/ 改造できる。だから完璧に守ることは困難と インフラ(AWS, GoogleCloud)の環境。NW設定等。いう前提がある。

    • 作業環境。PCやクレデンシャル等。 • データの取り扱い。個人情報等。 開発の前提 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 63 だから、大事なデータ /処理はサーバ側に寄 せる。そして、サーバ側を鬼のように守り抜く 必要がある。 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  28. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 64 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 まずは ここの話を してゆく! 公開しないもの = 管理画面や開発環境など ©MIXI
  29. サーバ側で作りこんでしまった脆弱性が悪用されたときの被害 • 個人情報漏洩 • サーバ停止 • 他人を攻撃するための踏み台として利用 • データの破壊、変更、挿入 •

    Webサイト改ざん • アカウント乗っ取りによる、なりすまし • 非公開情報へアクセス • 不正購入 多岐にわたる 65 ©MIXI
  30. 多岐に渡る脆弱性を知り、対策するには、、 「これだけ気をつけていればOK」は無い。 まずはメジャーどころを知っておこう。 メジャーな脆弱性を知るために今日の研修ではOWASP Top10(API/Web)を抑えておこう。 • OWASPとは • 「Open Worldwide

    Application Security Project」の略 • Webをはじめとするソフトウェアのセキュリティ環境の現状、またセキュアなソフトウェア開発を促進する技 術・プロセスに関する情報共有と普及啓発を目的としたプロフェッショナルの集まる、オープンソース・ソフ トウェアコミュニティです。 • • 66 引用元:https://owasp.org/www-chapter-japan, (2025/4/27) OWASP Top 10とは • OWASPがクリティカルだと考える10種類の脆弱性のこと。 • ことサーバサイド開発においては、API/Webアプリケーションの2種類、計20種類がある。 ©MIXI
  31. OWASP Top10の脆弱性たち API Web ◦ Broken Object Level Authorization ◦

    Broken Access Control ◦ Broken Authentication ◦ Security Misconfiguration ◦ Broken Object Property Level ◦ Software Supply Chain Failures ◦ Cryptographic Failures ◦ Injection ◦ Insecure Design ◦ Authentication Failures ◦ Software and Data Integrity Failures ◦ Security Logging and Alerting Failures ◦ Mishandling of Exceptional Conditions Authorization ◦ Unrestricted Resource Consumption ◦ Broken Function Level Authorization ◦ Unrestricted Access to Sensitive Business Flows ◦ ◦ 67 Server Side Request Forgery Security Misconfiguration ◦ Improper Inventory Management ◦ Unsafe Consumption of APIs ©MIXI
  32. 演習に使うWebアプリケーション • OWASP Juice Shop • https://github.com/juice-shop/juice-shop MIXIでの新卒研修時にはCloud Run +

    Cloud Load Balancing + IAP構成でしたが お好みの形でデプロイしてみてください 71 ©MIXI
  33. おさえておきたいBurpSuiteの機能 基本的なもの • • • 77 Proxy>Intercept - 通信のキャッチ •

    Intercept is on:通信をキャッチ • Intercept is off:通信をキャッチしない(通過) • Forward:キャッチした通信を送信 Proxy>HTTP history - 通信の履歴確認 • Request:要求 • Response:応答 Repeater - リクエストの再送 • 挙動の確認に使う • 使い方 • historyで再送したいリクエストに対しcontrol + クリック • Send to Repeater選択 • Repeater タブが光る! • Repeaterタブに移動 • 「Send」で再送 ©MIXI
  34. Juice Shopを触ってみよう(通常動作確認) 1. 商品検索 • 2. アカウント登録 • 3. 任意のメアド「[email protected]」などで会員登録

    ログイン • 4. キーワード「Apple」などで検索 作成済みアカウントでログイン 商品購入 • ログイン後>Basketに入れる>Checkout BurpのHistoryを確認しながらサイト巡回してみよう。 78 ©MIXI
  35. おさえておきたいBurpSuiteの機能 ちょっと発展的なもの • Intruder • 様々な試験値を試したいときに使う • 使い方 i. 試験したいリクエストを

    「Send to Intruder」。 ii. Intruder画面にて、試験したい箇所を 「§」で囲む。 iii. 下記の試験値サンプルをコピーし、 「Payloads」→「PayLoad Options」の 「Paste」をクリック。 80 • hoge • huga • piyo ©MIXI
  36. おさえておきたいBurpSuiteの機能 ちょっと発展的なもの • Intruder • 様々な試験値を試したいときに使う • 使い方 i. 試験したいリクエストを

    「Send to Intruder」。 ii. Intruder画面にて、試験したい箇所を 「§」で囲む。 iii. 下記の試験値サンプルをコピーし、 「Payloads」→「PayLoad Options」の 「Paste」をクリック。 iv. 81 • hoge • huga • piyo 「Start attack」をクリック。 ©MIXI
  37. おさえておきたいBurpSuiteの機能 ちょっと発展的なもの • Intruder • 様々な試験値を試したいときに使う • 使い方 i. 試験したいリクエストを

    「Send to Intruder」。 ii. Intruder画面にて、試験したい箇所を 「§」で囲む。 iii. 下記の試験値サンプルをコピーし、 「Payloads」→「PayLoad Options」の 「Paste」をクリック。 • hoge • huga • piyo iv. 「Start attack」をクリック。 v. 「§」の箇所に試験値が送信される。 その結果を一覧で確認できる。 82 ©MIXI
  38. OWASP Top10の脆弱性たち API Web ◦ Broken Object Level Authorization ◦

    Broken Access Control ◦ Broken Authentication ◦ Security Misconfiguration ◦ Broken Object Property Level ◦ Software Supply Chain Failures ◦ Cryptographic Failures ◦ Injection ◦ Insecure Design ◦ Authentication Failures ◦ Software and Data Integrity Failures ◦ Security Logging and Alerting Failures ◦ Mishandling of Exceptional Conditions Authorization ◦ Unrestricted Resource Consumption ◦ Broken Function Level Authorization ◦ Unrestricted Access to Sensitive Business Flows ◦ ◦ 83 演習をしながら脆弱性を体感してゆく! Server Side Request Forgery Security Misconfiguration ◦ Improper Inventory Management ◦ Unsafe Consumption of APIs ©MIXI
  39. 第一問 OWASP Top10でいうと下記あたり。 • (API) Broken Object Level Authorization •

    (API) Broken Function Level Authorization • (Web) Broken Access Control 総じて、「アクセス制御を適切に行いましょう」という点が肝。 88 ©MIXI
  40. コード的な話 <脆弱なコード例1(Ruby)> • 他ユーザの情報を見られちゃうコード(表示コンテンツの取得個所にて..) user_id = requestobj.param[:user_id] # リクエストのパラメータ値は改ざん可能! ユーザから送信された値を使って

    userprofile = User.where(user_id).profile プロフィール情報を取得し view(userprofile) • それを表示している! 攻撃者が他ユーザのuser_idを指定してリクエストを送信すると、 プログラムはそのuser_idと紐づいた情報を表示してしまう • 91 以下のようなことに気を付ける必要がある • リクエストパラメータにuser_idを含ませる必要はあるか? セッションIDで十分ではないか? • 含ませるならその妥当性は検証しなくて大丈夫か? ©MIXI
  41. コード的な話 <脆弱なコード例2(Ruby)> • 管理者ページにアクセスできちゃうコード(セッションの検査個所にて..) session = get_session(req.header[:cookie]) #「,admin: true」を入れていない! if

    session.nil? raise “セッションがありません!” end do_adminsomefunction • adminじゃなくてもif文に引っ掛からず処理が進行してしまう • ログイン直後の画面でだけ権限確認をするのではなく、 そこから辿れるリンク先の画面でも都度検証しましょう 92 ©MIXI
  42. クロスサイトスクリプティングによって想定される被害 • なりすまし • フィッシングサイトへの誘導 • など 勘所 • 96

    Webページが攻撃者によって任意に改ざんされるということ • 閲覧したユーザのCookie情報を攻撃者に送信するスクリプトを仕込む • 偽フォームを埋め込んで認証情報を攻撃者に送らせる ©MIXI
  43. 第二問 alert(`xss`)以外のスクリプトも動かしてみよう • お試し1 • • <iframe src=javascript:alert(document.cookie)> お試し2 •

    (ログイン中のcookie情報取得) (他サイトへ移動させる) <img src=1 onerror=window.location.href="https://mixi.co.jp"> この応用で、攻撃者は好きなJavaScriptを動作させることができる...! 102 ©MIXI
  44. クロスサイトスクリプティングの対策 • 「<」,「>」,「"」,「'」など、ブラウザにとって意味を持つ文字(特殊文字)はエスケープ(文字 列として解釈させる形式化)して出力する。 • 今回のケースもこれが対策になる。 • 保険的対策として入力値検証やCSPヘッダの設定も有効。 • XSSは複数の種類があり、種類に応じて対策も異なる場合があるので注意

    • • JavaScriptスキームを悪用するパターン • Dom構築時にスクリプトが仕込まれるパターン JavaScriptライブラリに問題がある場合は、使用しているライブラリを更新する。 動的にHTMLページを生成する際は、「レスポンスに攻撃者のスクリプトが埋め込める余地は無いか」と いうアンテナを張っておくこと! 103 ©MIXI
  45. コード的な話 <脆弱なコード例> • ユーザが入力した検索ワードをレスポンスに表示する keyword = requestobj.param[:keyword] # keywordにScriptなどが入力されると ..

    responsehtml = “<body>” + keyword + “の検索結果一覧” + ”</body>” ここに入力した Scriptがそのまま埋め込まれる! ※例であって、Juice Shopのコードがこの通りになっているというわけでないです! 104 ©MIXI
  46. コード的な話 <脆弱なコード例> • ユーザが入力した検索ワードをレスポンスに表示する keyword = requestobj.param[:keyword] # keywordにScriptなどが入力されると ..

    responsehtml = “<body>” + escape(keyword) + “の検索結果一覧” + ”</body>” エスケープ用の関数を経由させて出力させよう ※例であって、Juice Shopのコードがこの通りになっているというわけでないです! 105 ©MIXI
  47. 第三問 安く(不正に)購入してみよう さすがにマイナスの値段で決済が進むとは考え 答え • 数量にマイナスをつける • にくいけれど、 {"quantity":-2} 100円の商品Aを

    -9個と、 1000円の商品Bを1個とを併せて買えば、 100円でBを1個買えるのは現実的かも? おとく! Juice Shopのような現物を取引するサービスならば発送段階などで攻撃に気づけるかもしれないが、電子マネーの チャージやゲーム内通貨など、現物やり取りが行われないサービスの場合、気づくこともできない可能性があるの で注意! 例えばオーブでガチャをまわすとき、オーブ数量をマイナス指定するとオーブが増えたりする とか..... 110 ©MIXI
  48. 第三問 問題点 • 入力値の検証が適切に行われていない 対策 • 入力値検証では「仕様的におかしくないか?」もチェックする • Syntax的におかしくないか? は検証していても([0-9]+じゃないと弾かれる等)、「仕様や意味を考えた

    ときにおかしい値の検証」が漏れることもあるので注意。 • 例えば生年月日なら、仮に自然数の入力であったとしても、2200年生まれと主張するユーザがいたらおかし くないか? 111 といった観点でもチェックしよう。 ©MIXI
  49. 第三問 OWASP Top10では 112 • (Web)Insecure Design • 「設計上の欠陥」に起因する脆弱性全般を指す。 •

    安全な設計が行われていない • 暗号化すべき情報が暗号化されていない • ロジックの検証が不十分なため仕様外の操作が可能になっている ©MIXI
  50. 第四問 問題点 • role という追加パラメータの内容が解釈されて、ユーザ権限では本来実行できない会員作成が行わ れてしまった。 対策 • ユーザ権限によるリクエストの場合は、「"role":"customer"」部が変更され得ないようにする。 •

    Juice Shop側(作り手側)としては「"role":"customer"」は本来の処理では送られてこないパラメータなの で、対策観点から漏れやすい問題なのかもしれません。だからこそ注意をはらう必要があります。 117 ©MIXI
  51. 第四問 OWASP Top10では • (API) Broken Object Property Level Authorization

    • 入力値のフィルタリングを行わずにデータにバインディングしてしまう問題のこと。 • 今回の出題のように、「role」プロパティの値を指定する入力値を追加された際、それをフィルタリングせず に評価してしまい、結果、意図しない権限を付与してしまう 等 118 ©MIXI
  52. 総合演習 1. 管理者用ページを見つけよう 答え • https://[環境URL]/#/administration が管理者ページ • 開発者ツールで、main.js内を「administration」で検索すると見つかる。 •

    アクセスしても403エラーになると思います。権限が足りないのでそれでOK。 このページに不正アクセスできたら悪さできそうだな 124 ©MIXI
  53. 総合演習 1. 管理者用ページを見つけよう 答え • https://[環境URL]/#/administration が管理者ページ • 開発者ツールで、main.js内を「administration」で検索すると見つかる。 •

    アクセスしても403エラーになると思います。権限が足りないのでそれでOK。 このページに不正アクセスできたら悪さできそうだな 125 ©MIXI
  54. コード的な話 <脆弱なコード例(Ruby)> username = requestobj.params[:name] query = “INSERT INTO users

    (name, description) VALUES (username, \“hogehoge\")” SQL.query(query) 129 • この例では、ユーザの入力値をそのままSQLクエリに使用しています。 • 「"」などを挿入されることにより、想定しないSQLクエリが生成されます。 ©MIXI
  55. コード的な話 以下のSQL文を入力した場合 • 「joe", "somebody"); DROP TABLE users; --」 作られるSQL文は以下のようになります。

    INSERT INTO users (name, description) VALUES ("joe", "somebody"); DROP TABLE users; --", "hogehoge"); 上記のSQLインジェクションでusersテーブルが削除されてしまいます。。 130 ©MIXI
  56. SQLインジェクションの対策 プレースホルダという仕組みを使うことが対策となる。 INSERT INTO users (name, description) VALUES (username, "hogehoge");

    最初にSQL文の構造を決定しておく仕 組みが「プレースホルダ」 INSERT INTO users (name, description) VALUES (?, ?); ポイント • SQLを準備する段階で SQL文の構文が確定し、後から SQL構文が変化することがないため安全。 • 「 joe“, “somebody“); DROP TABLE users; -- 」という入力がされた場合、description箇所が当該文字列にな るだけになる。 131 ©MIXI
  57. 余談 おそらく実際に皆さんが書く処理はこんな感じ (Rubyの例) username = requestobj.param[:name] userprofile = User.where(username: username).profile

    view(userprofile) • あれ? SQL文いなくない? • フレームワークによってSQLはコーディングから隠蔽されていることが多いかもしれない • 正直、モダンなフレームワークを使っていれば勝手に対策されていることもあるので、SQLインジェクション が作りこまれるケースは少ないかもしれない • 逆に言えばコーディングしているだけでは危険性を知れないかも、とも言えるので、今のうちに原理をちゃん と抑えておきましょう 133 ©MIXI
  58. 総合演習 2. SQL Syntaxエラー(SQLITE_ERROR) を出してみよう ヒント2 • ログイン時のSQL文(想像) • •

    SELECT * FROM xxxx WHERE id = 'test@example' and password = 'password123'; 検索時のSQL文(想像) • SELECT * FROM xxxx WHERE name like = '%Apple%'; 不正アクセスのためにSQLインジェクションを狙う 136 ©MIXI
  59. 総合演習 2. SQL Syntaxエラー(SQLITE_ERROR) を出してみよう 答え • SQL文に利用される送信パラメータの末尾等にシングルクォーテーション「'」等を入れることで、 意図的にSQLシンタックスを壊す。 •

    https://[環境URL]/rest/user/login • • の「email」の値を改ざん SELECT * FROM xxxx WHERE id = 'test@example'' and password = 'password123'; https://[環境URL]/rest/product/search?q=Apple の「q」の値を改ざん • SELECT * FROM xxxx WHERE name like = '%Apple'%'; SQLインジェクションできる場所を見つけたぞ! 137 ©MIXI
  60. UNIONとは 2つ以上のSELECT文の結果を統合する仕組みのこと。 name kind nakigoe name kind nakigoe name nickname

    syumi pochi dog wanwan pochi dog wanwan yamada yamachaso tozan tama cat nyaaaaaan!!! tama cat nyaaaaaan!!! tanaka nakata nyaaaaaan!!! yamada yamachaso tozan tanaka nakata nyaaaaaan!!! UNION SELECT name,kind,nakigoe FROM animals UNION SELECT name,nickname,syumi FROM friends; 商品テーブルのselect結果は/searchのレスポンスに出力されてくることは分かっている。 では、その出力結果にUsersテーブルを結合(UNION)できればUsers情報を抜き出せる! ※UNIONでつなぐデータの表は、カラム数と型を統一しないとエラーになるので注意。 141 ©MIXI
  61. 総合演習 3. SQLインジェクションを悪用して、全ユーザの情報(Eメール、パスワードハッシュ)を抜き出そう 解説 まずはSQLエラーから収集できた情報を整理してみよう。 • 商品検索時のSQLエラーから収集できたProductsテーブルの情報 • SELECT *

    FROM Products WHERE ((name LIKE '%APPLE'%' OR description LIKE '%APPLE'%') AND deletedAt IS NULL) ORDER BY name • • テーブル名: Products • カラム名: name, description, deletedAt ログイン時のSQLエラーから収集できたUsersテーブルの情報 • SELECT * FROM Users WHERE email = '[email protected]'' AND password = '79ac8e0c5fbb7fffa893660a9f581303' • テーブル名: Users • カラム名: email, password ← 欲しいのはコレ! SQLインジェクションでいざ情報奪取! 143 ©MIXI
  62. 総合演習 3. SQLインジェクションを悪用して、全ユーザの情報(Eメール、パスワードハッシュ)を抜き出そう 解説 次に、ProductsテーブルとUsersテーブルの結合を試してみると。。 • SELECT * FROM Products

    WHERE ((name LIKE '%APPLE%')) UNION SELECT email,password FROM Users––%' OR description LIKE '%Apple'%') AND deletedAt IS NULL) ORDER BY name すると、下記のエラーになるはずです。 • SQLITE_ERROR: SELECTs to the left and right of UNION do not have the same number of result columns • UNION時には、連結するカラム数を同じにする必要があります。 SQLインジェクションでいざ情報奪取! 144 ©MIXI
  63. 総合演習 3. SQLインジェクションを悪用して、全ユーザの情報(Eメール、パスワードハッシュ)を抜き出そう 解説 name description deletedAt ? ? ?

    ? ? ? Apple Juice The all-time classic. null ? ? ? ? ? ? Apple Pomace hoge null ? ? ? ? ? ? UNIONするためにはカラム数を統一する必要がある。 でもProductsのカラム数は不明。 SELECT * FROM Products WHERE ~~~ email password 3 4 5 6 7 8 9 [email protected] 3c2a~~ 3 4 5 6 7 8 9 [email protected] 963e~~ 3 4 5 6 7 8 9 UNION カラム数を合わせるために、 ダミー値の3,4,5...を順番に足していく。 9まで足すとカラム数がそろい、UNIONが成功する。 SELECT email,password,3,4,5,6,7,8,9 FROM Users-- SQLインジェクションでいざ情報奪取! 145 ©MIXI
  64. 総合演習 3. SQLインジェクションを悪用して、全ユーザの情報(Eメール、パスワードハッシュ)を抜き出そう 解説 つまり、カラム数が合うまで下記のように試行を続けると、エラーが発生しなくなる時が訪れる。 それが答え。 1. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password%20FROM%20Users–– 2. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3%20FROM%20Users––

    3. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3,4%20FROM%20Users–– 4. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3,4,5%20FROM%20Users–– 5. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3,4,5,6%20FROM%20Users–– 6. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3,4,5,6,7%20FROM%20Users–– 7. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3,4,5,6,7,8%20FROM%20Users–– 8. /rest/product/search?q=apple%27))%20UNION%20SELECT%20email,password,3,4,5,6,7,8,9%20FROM%20Users–– SQLインジェクションでいざ情報奪取! 146 ©MIXI
  65. 総合演習 4. 「[email protected]」ユーザでログインしよう 答え • Emailの値を「[email protected]'--」にする • SELECT * FROM

    Users WHERE email = '[email protected]'--' AND password = 'c4ca4238a0b923820dcc509a6f75849b' AND deletedAt IS NULL 不正アクセスできた! 149 ©MIXI
  66. 総合演習 5. adminユーザでログインしよう 答え1 • 先ほど取得したユーザ情報の一覧から、adminユーザのEメールは「[email protected]」と分か る。これに対し、Eメールの値を「[email protected]'--」とし、SQLインジェクションによるパス ワード不要でのログインを行う。 • SELECT

    * FROM Users WHERE email = '[email protected]'--' AND password = 'XXXXXXXXXXXXXX' ログインできたら、冒頭で見つけた管理者ページ「https://[環境URL]/#/administration」にアクセスし てみよう。アクセスできるようになっているはず! 管理者機能にアクセスできた! 152 ©MIXI
  67. 総合演習 OWASP Top 10でいうところ • (Web)Injection • XSSのときに登場した問題。入力値からコードを注入できてしまう問題。 • SQLインジェクションができてしまった点がこれに該当。

    • (API) Broken Authentication • (Web) Authentication Failures • • 認証機能をセキュアに実装できていない という問題。 • SQLインジェクションや総当たりをすることで不正に認証を突破できてしまった点がこれに該当。 (API) Unrestricted Resource Consumption • リソースの要求サイズや数に制限が設けられていない という問題。 • 画像アップロード機能などで巨大ファイルをアップしたり何回も繰り返すことで負荷を掛けたりできちゃう。 • 今回でいうとログイン試行が無数に行える(途中でロックアウトされない)点がこれに該当。 • 154 リソース消費とは意味合いが違うが試行制限が無いことによる問題という点で該当するという解釈 ©MIXI
  68. 【余談】BurpSuiteってどんなツール? • BurpSuiteってなんでHTTPS通信を見られてるの? • • 実はBurpSuiteはMan in the middleなツール •

    • • BurpSuiteはクライアントともサーバともSSL/TLSをしている ブラウザからするとサーバと通信しているつもりがBurpと通信している • • https って暗号化されてるんだから、経路上から見られんくない? サーバからするとブラウザと通信しているつもりがBurpと通信している あれ、サーバ証明書は? • 当然、通常のブラウザでは(FireFoxとかで試すと)警告が出ます • ハンズオンではBurpの証明書が自動で信頼されている環境だっただけ フリーWiFi等の信頼できないNWって危ない!! 復号できます見れますっ SSLセッション ブラウザ 156 HTTPSパケット BurpSuite SSLセッション 通信先(Webサイトとか ©MIXI
  69. ハンズオンで紹介しきれなかったOWASP Top 10の脆弱性たち API Web ◦ Broken Object Level Authorization

    ◦ Broken Access Control ◦ Broken Authentication ◦ Security Misconfiguration ◦ Broken Object Property Level ◦ Software Supply Chain Failures ◦ Cryptographic Failures ◦ Injection ◦ Insecure Design ◦ Authentication Failures ◦ Software and Data Integrity Failures ◦ Security Logging and Alerting Failures ◦ Mishandling of Exceptional Conditions Authorization ◦ Unrestricted Resource Consumption ◦ Broken Function Level Authorization ◦ Unrestricted Access to Sensitive Business Flows ◦ ◦ 157 Server Side Request Forgery Security Misconfiguration ◦ Improper Inventory Management ◦ Unsafe Consumption of APIs ©MIXI
  70. (API/Web) Security Misconfiguration 対策 • これ! というものは無い(使っているものによって着眼点は変わるため)が下記は意識を持って おくと良いと思います。 • 開発やQA、本番環境それぞれで同じ設定になるようにする

    • • 必要ない機能/コンポーネントは除いておく • 160 検証時はセキュアだったが、本番環境の設定では脆弱だったというリスクを減らす コンポーネントの数だけ設定ミスで穴が開くリスクは増える ©MIXI
  71. (API) Improper Inventory Management 対策 • 公開するものは守る。守れていないものは公開しない。 • /v1, /v2で例えると、/v1を残存させるならv1は守る。/v1が脆弱なら公開を廃止する。

    • それをクリアに把握しておけるように、ドキュメント管理をしっかりしておきましょう。 • このAPIは残っていていいのか? • 等の判別のため。 ※ドキュメントこそ命という話ではなくて、何を公開して何を守るのかクリアに なっているのが肝。ドキュメント管理はそのための手段。 163 ©MIXI
  72. (Web) Security Logging and Alerting Failures ロギング/監視が不十分なため、 攻撃が行われた際に適切に対処することができない状況になっている問題。 • 164

    例 • ログが無いため、侵入者が何を行ったか分からない。影響範囲が特定できない。 • 監視が無いため、侵入者の存在に気づけない。 ©MIXI
  73. (Web) Security Logging and Alerting Failures 想定される被害ケース例 • AWSアカウントにて、ある日コインマイニングを行っているEC2インスタンスを発見した。 •

    原因を調べたところ、EC2を立てる権限を持ったユーザのアクセスキーが漏洩し、不正アクセスさ れたようだった。 • しかし、該当アクセスキーAPIログを残していなかったため、悪用被害範囲を特定することができな かった。 165 ©MIXI
  74. (Web) Security Logging and Alerting Failures 対策 • ログはできるだけ残しておく。 •

    攻撃が行われたら気づけるように監視をする。 • AWS/Google Cloudについてはセキュリティ室側の監視設定を施してあるアカウントであれば、一定の監視/ ログ取得は行われています。 • 攻撃が行われた場合はアラートが鳴る。 • 管理系のログ(ユーザXがhogeというAPIをいつに実行した程度)は取得している。 • 逆に言うと、エンドユーザのアクセスログ等は各自で取得しておくようにしましょう。 • 166 認証失敗や不正行為の疑いのログなど。 ©MIXI
  75. 非保持化 について 非保持とは • 『保存』『処理』『通過』をすべて行っていない状態のこと。 • 保存 • • 処理

    • • コールセンターにて顧客のクレカ情報をPC入力。etc,, 通過 • 169 DBに保存。スプレッドシートに保存。etc,, 顧客のPC→自社サーバ→決済代行会社サーバという流れでクレカ情報を送信。etc,, ©MIXI
  76. 非保持化 について 「非保持化? 保存さえしなきゃいいんでしょ?」 ↑ダメ!! たとえ保存していなくても、例えば以下は『通過』にあたるのでNG。 顧客のブラウザや スマホ 1111-2222-3333-4444 加盟店のサーバ

    (皆さんのwebサイト等) 決済代行会社 1111-2222-3333-4444 決済時は決済代行会社側のシステムに遷移させる等して、カード情報が自分たちのサーバを経由しないよ うにしましょう! 170 ©MIXI
  77. PCIDSS準拠 について PCIDSSとは • Payment Card Industry Data Security Standard

    • クレジットカード会員データを安全に取り扱う事を目的として策定された、クレジットカード業界 のセキュリティ基準のこと。 • 国際カードブランド5社(American Express、Discover、JCB、MasterCard、VISA)が共同で設立した PCI SSC(Payment Card Industry Security Standards Council)によって運用、管理されている。 「非保持化」をやらないなら、この基準を守れ! ということ。 詳細は割愛mm 171 ©MIXI
  78. クレジットカード情報の流出で想定される被害 • カード利用者への不利益 • • 攻撃者に使われる • 本人認証が弱いプリペイドカードにチャージ • 偽造カードを作成し利用

    攻撃者に売られる • • 172 ブラックマーケットで換金 事業者への不利益 • お客様へのお詫びコスト • 不正に行われた買い物の損害賠償 • カード決済の一時停止措置 • コールセンター対応コスト • 再発防止コスト • 信頼を失う! ©MIXI
  79. クレカとパスワードの話のまとめ • • クレジットカードの取扱い方 • 非保持化する • しないならPCIDSSに準拠(監査なども含む) パスワードの取扱い方 •

    盗まれたとしても解析困難な形で保存する • 具体的には「ソルト付きハッシュ」という形式がセキュアな保存形式 • ストレッチングと呼ばれる、ハッシュ化するとき何千、何万回とハッシュ化を繰り返すことでログインに時間がかかり、総当た り攻撃のために必要な時間を増やす手法も併せるとなおセキュア 174 ©MIXI
  80. (Web) Software Supply Chain Failures ソフトウェアサプライチェーンに関する問題全般 • 175 例 •

    信頼できるベンダーがマルウェアに感染してしまい、マルウェアを含んだパッチが配布される • 脆弱性が残っているバージョンのライブラリを使用している ©MIXI
  81. (Web) Software Supply Chain Failures 想定される被害ケース例 • • SolarWinds事件(2020年) •

    SolarWinds社が攻撃者の侵害を受け、Orionという製品のアップデートにマルウェアが仕込まれた • これにより、世界中の約18,000の組織にマルウェアが配布された JVNDB-2021-005429 • Log4jというJavaライブラリの脆弱性 • 上記脆弱性が存在するバージョンのLog4jを使用していたために、攻撃者からインターネット経由で任意コー ド実行が行われる可能性 176 ©MIXI
  82. (Web) Software Supply Chain Failures 対策 • 脆弱性情報をウォッチしておく • CVE(Common

    Vulnerability and Exposures)やNVD(National Vulnerability Database)など • 177 なお、脆弱性情報の見方については後ほどの章で別途説明します • 不要なコンポーネントは取り除いておく • SBOM(Software Bill of Materials:ソフトウェア部品表)を活用する ©MIXI
  83. SBOMとは ソフトウェアを構成するコンポーネントや依存関係などを一覧にまとめたもので、 適切に運用することでソフトウェアサプライチェーンのセキュリティ確保に有効とされている • アメリカでは2021年の大統領令で、SBOMの提供が政府調達の必須条件に含まれている • EUでも2024年に発効されたEUサイバーレジリエンス法でSBOMの作成や管理が求められている • • EU圏内でサービスを展開する場合、サイバーレジリエンス法の適用対象になるかもしれない

    日本国内でも、JC-STARと呼ばれるIoT製品向けのラベリング制度で、4段階あるうちの レベル3からSBOMの作成と運用が要件に盛り込まれている。 経産省 - ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導入に関する手引 ver2.0 https://www.meti.go.jp/policy/netsecurity/wg1/SBOMv2.pdf IPA - SBOM導入・運用の手引き https://www.ipa.go.jp/jinzai/ics/core_human_resource/final_project/2024/sbn8o10000001y6j-att/sbn8o10000001zcl.pdf 178 ©MIXI
  84. (Web) Software and Data Integrity Failures 悪意あるコードがコンポーネントに含まれている(含まれうる)問題。 • 外部ファイルを読み込む際、悪意あるものを指定されるかもしれない •

    読み込んでいるコードは改ざんされているかもしれない • シリアライズデータが改ざんされて攻撃コードを注入されるかもしれない 想定される被害ケース例 • あるWebアプリでは、生成したオブジェクトをシリアライズしてCookieに保存し、そのオブジェク トが必要な際、Cookie値をデシリアライズして使用する仕様だった • 攻撃者はCookie値を改ざんし、オブジェクトのデストラクタに攻撃コードを忍ばせたシリアライズ データをWebアプリに送信した • 179 すると、デストラクタ実行時、攻撃コードが実行された ©MIXI
  85. (Web) Software and Data Integrity Failures 対策 • 外部ファイルを読み込む際、悪意あるものを指定されるかもしれない •

    外部からのファイルを読み込む際、想定していない外部ファイルを読み込まれない設計にする。例えばクライ アントからURLを受け取り、そのURLのコードをそのまま読み込むといった構成を避ける。数値を受け取り、 その数値と紐づいたファイルを読み込む等。 • 読み込んでいるコードは改ざんされているかもしれない • • 読み込むコードの署名を検証する。 シリアライズデータが改ざんされて攻撃コードを注入されるかもしれない • そもそもシリアライズデータでオブジェクト等のコードを送受信する必要があるか見直す。 • データの暗号化や署名付与を行い改ざんをできなくする。 共通するのは「悪性コードを組み込ませられないようにする」 180 ©MIXI
  86. (API) Server-Side Request Forgery (SSRF) アプリケーションを踏み台にして、内部/外部サーバにリクエストすることができる脆弱性。 想定される被害ケース • ポートスキャン •

    ファイル内容の読取 • DoS 指定されたサーバに処理を中継し、 ポートスキャン/ファイル読出/DoS等を行う 脆弱なアプリ URLを指定するパラメータに 外部サーバのポートやファイ ルを指定してリクエスト 181 外部サーバ 外部サーバからすると、 攻撃してきているのは脆弱 なアプリのように見える (踏台にされる) ©MIXI
  87. (API) Server-Side Request Forgery (SSRF) 対策 • • ネットワーク層(対策というより被害軽減策) •

    SSRFが発生しうる機能をNW的に分離する • 想定している通信先以外への通信をFWでブロックする アプリケーション層 • そもそも、リクエスト先URLをクライアントから直接受け取る構成をやめる。 • 動的にリクエスト先を変えたい場合、固定値を受け取るようにする。例えば数値を受け取り、それに紐づいた URLにアクセスするなど。 • 182 入力値検証を行う。 • ホワイトリスト形式で検証する。 • ブラックリスト形式や正規表現で検証すると、バイパスできる可能性が出てくるため極力行わない。 ©MIXI
  88. (API) Unrestricted Access to Sensitive Business Flows 機密性の高いビジネスフローに攻撃者が何度も(自動化して)アクセスし、ビジネス的損害が出る脆弱性。 想定される被害ケース例 •

    製品の購入 • • コメント,投稿 • • 攻撃者によりスパム投稿を繰り返される 予約 • 183 攻撃者により需要の高い商品の在庫がすべて購入、転売される 攻撃者によって片っ端から予約をされ、正常なユーザがシステムを使用できなくなる ©MIXI
  89. (API) Unrestricted Access to Sensitive Business Flows 対策 • ビジネス面

    • • システム面 • 184 過度に使用するとビジネスに悪影響を及ぼす可能性のあるビジネス フローを特定。 自動化された処理を検出しブロックする • キャプチャ認証 • user-agentなど検証 • Tor出口や既知のブラックリストIPからのアクセスをブロック • ビジネスロジック的に明らかにおかしい挙動をブロック(カートに追加→購入まで1秒未満とか) ©MIXI
  90. (API) Unsafe Consumption of APIs 外部のAPI経由の入力値を過信して検証を疎かにした結果、そこ経由で攻撃される脆弱性 想定される被害ケース例 • 被害アプリにはプロフィール情報を、外部SNSのAPI経由で取得し処理するロジックがあるとする •

    そのロジックにおいては入力値を信頼しており、検証をいっさい行っていなかった • 攻撃者はSNSのプロフィールに対して事前に攻撃コードを忍ばせておく • • ユーザ名を「'; drop database db;–」とかで登録しておく 被害アプリが攻撃者のプロフィール情報を処理するとき、そのAPIから得た入力値を信頼してしまっ ているので攻撃コードが動作する 185 ©MIXI
  91. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 187 次は ここの話! サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など ©MIXI
  92. 脆弱性対応時、調査のポイント 外部ライブラリ等の脆弱性対応は、 • 脆弱性があったら • それを評価し • 必要に応じそのモジュールをアップデートする という流れになる。その際の評価ポイントは下記になる。 •

    どのソフトウェア? • どのバージョン? • どんな影響ある? • どれくらい深刻なの? • どう対策すればいい? こういった情報の概要がまとまった脆弱性情報メディアに「CVE」がある。 189 ©MIXI
  93. CVEとは? • Common Vulnerabilities and Exposuresの略。 • CVEとは、米MITRE(マイター)社が提供している、脆弱性を識別するための共通脆弱性識別子。 • 一般的にCVE番号、CVE

    IDと呼ばれている。 • 例:CVE-2020-8165 • ※命名規則は、「CVE-YYYY- NNNN…N 」のようになっている。「YYYY」は発見された年数、NNNN…N は一意の番号。 190 ©MIXI
  94. CVEの見方 • 例えば『CVE-2025-55182』なら、下記のようにCVEのサイトのname部分にIDを指定すれば確認で きます。 • • https://www.cve.org/CVERecord?id=CVE-2025-55182 見ると良い項目 • Description:脆弱性概要が記載されている。

    • CVSS:脆弱性の危険性を表すメトリクスが記載されている。 (記載されていない場合もある) • Product Status:ベンダー名や製品名、影響を受けるバージョンが 記載されている。 • References:参考URLが記載されている。 引用元:https://www.cve.org/CVERecord?id=CVE-2025-55182,(2026/4/30) 191 ©MIXI
  95. NVDの見方 CVE-2025-55182の例 • URL:https://nvd.nist.gov/vuln/detail/CVE-2025-55182 • 見ると良い項目 • Current Description •

    • Severity • • 関連する情報へのリンク。 Known Affected Software Configurations • 193 「CVSS 」の情報。脆弱性の深刻度。 References to Advisories, Solutions, and Tools • • 脆弱性の概要説明。 影響を受けるソフトウェアとバージョン。 引用元:https://nvd.nist.gov/vuln/detail/CVE-2025-55182, (2026/4/30) ©MIXI
  96. CVSSとは • Common Vulnerability Scoring System • 脆弱性の深刻度をスコア(数値)で表すシステム。 • •

    計算式に則り、脆弱性を0~10.0までの値で評価。 • 10.0が最も深刻。 〜V4まである。 • 194 NVDをチェックしていくとするとV3を目にすることが多いかも。 ©MIXI
  97. CVSS (V3) の見方 CVSSはVectorと呼ばれる下記の要素から算出されます。 • AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 例 • AV:N ー>

    攻撃元区分:ネットワーク • AC:L ー> 攻撃条件の複雑さ:低 • PR:N ー> 必要な特権レベル:不要 • UI:N ー> ユーザ関与レベル:不要 • S:U ー> スコープ: 変更なし • C:H ー> 機密性への影響:高 • I:H ー> 完全性への影響:高 • A:H ー> 可用性への影響:高 このScoreは9.8 (Critial)! 195 ©MIXI
  98. 脆弱性情報 (NVD/CVSS) の見方の勘所 脆弱性情報をどう読んだらいいか分からない場合、ひとまず以下の観点を確認すると良いと思います。 • 自分たちが対象製品、バージョンを使っていないか確認する。 • 攻撃元区分から攻撃者像を想定する。 • その攻撃者ができることを想定する。

    • 該当ソフトウェアを使っていたとしても、特定の条件でのみ悪用可となるケースもある。 実際のところその脆弱性を悪用できるのか? というところまで考えられるとサイコーです。 例 • 自分たちが対象製品、バージョンを使っていないか確認する。 • NVDのKnown Affected Software Configurations欄を確認したところ、自分たちのプロダクトで該当ソフト ウェアの該当バージョンを使っていたことが分かった。 • 攻撃元区分から攻撃者像を想定する。 • CVSSの脆弱性の攻撃元区分(AV)を確認したところ、「N」、 つまりインターネット経由で攻撃可能と分かった。 • その攻撃者ができることを想定する。 • 196 NVDのDescription欄を確認したところ、任意コード実行ができることが分かった。 ©MIXI
  99. 脆弱性情報 (NVD/CVSS) の見方の勘所 脆弱性情報をどう読んだらいいか分からない場合、ひとまず以下の観点を確認すると良いと思います。 • 自分たちが対象製品、バージョンを使っていないか確認する。 • 攻撃元区分から攻撃者像を想定する。 • その攻撃者ができることを想定する。

    • 該当ソフトウェアを使っていたとしても、特定の条件でのみ悪用可となるケースもある。 実際のところその脆弱性を悪用できるのか? というところまで考えられるとサイコーです。 例 • • 該当ソフトウェアを使っていたとしても、特定の 自分たちが対象製品、バージョンを使っていないか確認する。 条件でのみ悪用可となるケースもある。 • NVDのKnown Affected Software Configurations欄を確認したところ、自分たちのプロダクトで該当ソフト 実際のところその脆弱性を悪用できるのか? というところまで考えられるとGood! ウェアの該当バージョンを使っていたことが分かった。 攻撃元区分から攻撃者像を想定する。 • CVSSの脆弱性の攻撃元区分(AV)を確認したところ、「N」、 つまりインターネット経由で攻撃可能と分かった。 • その攻撃者ができることを想定する。 • 197 NVDのDescription欄を確認したところ、任意コード実行ができることが分かった。 ©MIXI
  100. 脆弱性情報 (NVD/CVSS) の見方の勘所 脆弱性情報をどう読んだらいいか分からない場合、ひとまず以下の観点を確認すると良いと思います。 • 自分たちが対象製品、バージョンを使っていないか確認する。 • 攻撃元区分から攻撃者像を想定する。 • その攻撃者ができることを想定する。

    • 該当ソフトウェアを使っていたとしても、特定の条件でのみ悪用可となるケースもある。 実際のところその脆弱性を悪用できるのか? というところまで考えられるとサイコーです。 例 • こういったことを確認すると、 「ヤバそう」かどうかのイメージが付きやすくなると思います! 自分たちが対象製品、バージョンを使っていないか確認する。 • NVDのKnown Affected Software Configurations欄を確認したところ、自分たちのプロダクトで該当ソフト ウェアの該当バージョンを使っていたことが分かった。 • 攻撃元区分から攻撃者像を想定する。 • CVSSの脆弱性の攻撃元区分(AV)を確認したところ、「N」、 つまりインターネット経由で攻撃可能と分かった。 • その攻撃者ができることを想定する。 • 198 NVDのDescription欄を確認したところ、任意コード実行ができることが分かった。 ©MIXI
  101. 脆弱性情報 (NVD/CVSS) の見方の勘所 脆弱性情報をどう読んだらいいか分からない場合、ひとまず以下の観点を確認すると良いと思います。 • 自分たちが対象製品、バージョンを使っていないか確認する。 • 攻撃元区分から攻撃者像を想定する。 • その攻撃者ができることを想定する。

    (補足) • 該当ソフトウェアを使っていたとしても、特定の条件でのみ悪用可となるケースもある。 実際のところその脆弱性を悪用できるのか? というところまで考えられるとサイコーです。 例 • NVDは危険度の高いCVEを優先的に分析する方針に 変わったため、情報が足りない場合は該当製品のベ 自分たちが対象製品、バージョンを使っていないか確認する。 ンダが発表している情報を見に行くのが良いかもで • NVDのKnown Affected Software Configurations欄を確認したところ、自分たちのプロダクトで該当ソフト す ウェアの該当バージョンを使っていたことが分かった。 • https://www.nist.gov/news-events/news/2026/04 攻撃元区分から攻撃者像を想定する。 /nist-updates-nvd-operations-address-record-cve-g • CVSSの脆弱性の攻撃元区分(AV)を確認したところ、「N」、 rowth つまりインターネット経由で攻撃可能と分かった。 • その攻撃者ができることを想定する。 • 199 NVDのDescription欄を確認したところ、任意コード実行ができることが分かった。 ©MIXI
  102. 日本の脆弱性情報収集サイト 情報のスピードを考慮するとベンダの公式ページ等を見にいくことが多いかもですが、 日本のサイトもあります。 • • 200 JVN • Japan Vulnerability

    Notes • 日本で使用されているソフトウェアなどの脆弱性関連情報とその対策情報を提供 • https://jvn.jp/ JVN iPedia • 国内外問わず日々公開される脆弱性対策情報のデータベース • https://jvndb.jvn.jp/ ©MIXI
  103. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 201 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など 次は ここの話! ©MIXI
  104. モバイルアプリにおける所謂セキュアコーディングをする Mobile Application Security Design Guideの紹介 https://github.com/OWASP/www-project-mobile-application-security-design-guide • モバイル開発におけるセキュリティ設計が下記観点ごとにまとめられている •

    Architecture, Design and Threat Modeling Requirements • Data Storage and Privacy Requirements • Cryptography Requirements • Authentication and Session Management Requirements • Network Communication Requirements • Platform Interaction Requirements • Code Quality and Build Setting Requirements コード例なども交えつつセキュアな設計/実装を包括的に説明してくれているので、モバイルのセキュリ ティを考えるうえで参考になる。文量多いので悩んだときの辞書として使うと良いと思います 203 ©MIXI
  105. 今日頭に入れておきたいモバイルセキュリティの注意点 あるあるなもの、影響がデカいもの、事例のあるものたち • データの保管や受け渡しに注意する。 • SDカードやログ等の、他アプリからアクセスできる領域に重要なデータを保存しない。 • カスタムURLスキームでは重要なデータを取り扱わない。 • •

    レシート検証はちゃんとしましょう。 • 204 同じカスタムURLスキームを宣言した偽装アプリにデータが渡ってしまうかもしれない。 レシート検証周りの参考 • [iOS]https://developer.apple.com/documentation/appstoreserverapi • [Android]https://developer.android.com/google/play/billing/security • コラボ情報など未公開情報を埋め込まない。解析による漏洩対策。 • ゲームの場合、上記に加えて「チート」 のリスクも認識/対応しておく。 ©MIXI
  106. 今日頭に入れておきたいモバイルセキュリティの注意点 あるあるなもの、影響がデカいもの、事例のあるものたち • データの保管や受け渡しに注意する。 • SDカードやログ等の、他アプリからアクセスできる領域に重要なデータを保存しない。 • カスタムURLスキームでは重要なデータを取り扱わない。 • •

    レシート検証はちゃんとしましょう。 • • 205 レシート検証周りの参考 • [iOS]https://developer.apple.com/documentation/appstoreserverapi • [Android]https://developer.android.com/google/play/billing/security コラボ情報など未公開情報を埋め込まない。解析による漏洩対策。 • • 同じカスタムURLスキームを宣言した偽装アプリにデータが渡ってしまうかもしれない。 実際に埋め込んでしまい未公開情報が漏洩してしまったケースも社内でもある ゲームの場合、上記に加えて「チート」 のリスクも認識/対応しておく。 ©MIXI
  107. アプリ内課金 注意事項 • 不正購入の検証方法 ①対レシート偽造 ⇒ クライアントから送られてきたレシートを正しく検証する ※iOSアプリではアプリのBundle IDとレシートのBundle IDが一致しているかも要確認

    ②対リプレイ攻撃 ⇒ トランザクションIDの一意性を確認し、リプレイ攻撃を防ぐ対策を講じる ※リプレイ攻撃とは悪意あるユーザが 過去の正規購入のデータ(購入トークンなど)を再送信 して、商品を不正に再度受け取る攻撃です 【①の対策例】 クライアントから送られてきたレシートを正しく検証する - 各プラットフォームの公開鍵で検証する - iOSアプリの場合はBundleIDの追加チェックも必要 - - サーバ上でデバイスのレシートを検証する https://developer.apple.com/documentation/appstorereceipts/validating_receipts_on_the_device PlatformのAPIを使った検証も可能 App Store Server API : https://developer.apple.com/documentation/appstoreserverapi Google Play Developer API: https://developer.android.com/google/play/billing/security?hl=ja#verify 【②の対策例】 トランザクション IDの一意性を確認する - 207 レシートに含まれる下記トランザクション識別子をDBに保存しておき、 使用履歴を管理し、使用済みのレシートを再度利用できないようにする App Store: transactionId Google Play: orderid ©MIXI
  108. 【再掲】今日頭に入れておきたいモバイルセキュリティの注意点 あるあるなもの、影響がデカいもの、事例のあるものたち • データの保管や受け渡しに注意する。 • SDカードやログ等の、他アプリからアクセスできる領域に重要なデータを保存しない。 • カスタムURLスキームでは重要なデータを取り扱わない。 • •

    レシート検証はちゃんとしましょう。 • • 208 レシート検証周りの参考 • [iOS]https://developer.apple.com/documentation/appstoreserverapi • [Android]https://developer.android.com/google/play/billing/security コラボ情報など未公開情報を埋め込まない。解析による漏洩対策。 • • 同じカスタムURLスキームを宣言した偽装アプリにデータが渡ってしまうかもしれない。 実際に埋め込んでしまい未公開情報が漏洩してしまったケースも社内でもある ゲームの場合、上記に加えて「チート」 のリスクも認識/対応しておく。 ©MIXI
  109. 私たち運営側にとってのチートのリスク • • ゲームプレイにおいて不公平が生じてしまう。フェアでない。 • スポーツでいえばドーピング。 • ユーザは冷める。そして運営に対するヘイトが溜まる。 ゲームの寿命の短縮。 •

    • • すぐクリアされるという直接的な側面と人離れによる間接的な側面。 課金数の低下、課金機会の損失。 • チートしている人→チートした方がコスパ良い • チートしていない人→馬鹿らしくなって課金しなくなる 関係会社への被害 • 例えばコラボ先の商品を買うとそのIPのキャラデータが手に入るキャンペーンがあったとして、不正にキャラ データを入手できるチートが行われた場合、コラボ先商品の売り上げが下がり、関係会社に対する被害につな がる。 • ブランドイメージの低下。 • ユーザ対応コストの増加。 • 210 通報対応/BAN対応/問い合わせ対応など。 ©MIXI
  110. チートの手法 チートの手法(弄る箇所)はすごくざっくりと下記4種類に大別できる • • メモリ改変 • メモリの値を書き換える。例えばHPや攻撃力や所持金に相当する箇所のメモリの値を大きくする。 • 対策 •

    そもそもサーバに持つべき値はサーバに持つ。所持金とか。 • 加えて、どの値がどのメモリか探り当てられないようにする。なんらか関数を経由した値で保存する等。 通信改変 • 通信の送信値を書き換える。JuiceShopで行った攻撃のゲーム版。 • 対策 • • • 不正に書き換えられた値を受理しないよう、サーバ側での検証を徹底する。 ローカルデータ改変 • SDカード等のローカル内ストレージの値を書き換える。セーブデータ改変など。 • 対策 • 改変されたくなければローカルに保存しない。サーバ側に保存する。 • やむを得ずローカルに保存する場合は暗号化をして改変の難度を上げる。 クライアントアプリ解析・改造(リバースエンジニアリング) • アプリ自体を改造する。クライアント側に持つデータ/ロジックであれば実質的になんでもできる。 • 対策(防ぐことはできないので、難易度を上げる) • コードの難読化 • アプリの改ざんチェック • 211 (改ざんチェックを無効化するように改変することも可能なため、根本的対策にはならないが難度を上げるという意味ではやった方がセキュア。) ©MIXI
  111. メモリ改変 プロセスメモリエディタと呼ばれるツールを使用して、メモリに格納される値(HP・攻撃・お金など) を改変する。 ゆうしゃ Lv13 プロセスメモリエディタ で「500」を検索, 改竄 500 ゆうしゃ

    Lv13 検索 1件 ヒット ---------------------------000D7DE8 500 HP 500 HP 9999 対策 - そもそもサーバに持つべき値はサーバに持つ。所持金とか。 - 加えて、どの値がどのメモリか探り当てられないようにする。なんらか関数を経由した値で保存す る等。 212 ©MIXI
  112. 通信改変の保険的対策 SSL証明書のPinningを行う。 BurpSuiteの証明書? 信頼できないのでエラー! アプリ 218 【補足】 BurpSuite等の PinningはWebだと廃止の流れがあります(例えばChromeでの廃止)が、 ゲームサーバ

    プロキシツール ・ブラウザ → 運営側がいじれない ・自社スマホアプリ → 運営側がいじれる という違いがあるため、 不備のある証明書が固定されてしまった場合等の事情も異なってきます。 ちなみにAndroidセキュアコーディングガイドでは中間者攻撃への有効策としてPinningが紹介されていま す。 ©MIXI
  113. マクロ ゲームの処理(レベル上げ等単純な処理)を自動化し、ゲーム内で利益を得ようとする手法。 一応、ゲームに対して行っていること自体は正規の行動のため厳密にはチートではないこともある が、 「ラクをして強くなる」という点においては近い行為。 スマホゲームにおいて行われるマクロの方法はいろいろある。 • エミュレータでアプリを動作させ、PCの操作記録ツールを使用する。 • マクロ用のスマホアプリを使用する。

    • 実際のゲームフローで送信される通信リクエストを再現/送信することで、時短ゲームクリア等を行うパターンもある 。 (これはもはやマクロというより通信改変の亜種かも。) ・クエストがゲーム体験の肝な場合、それを 1秒でクリアできちゃうとかだったらマズそう。 ・ガチャの演出見ずに早く回せちゃうとかだったら「だからなんなの?」という話でしかなさそう。 というように「自分のゲームにおいてマズいのか?」を考える必要がある。 そしてマズい場合、対策 (緩和策)を検討する必要がある。 222 ©MIXI
  114. マクロの緩和策 • 通常プレイではあり得ない値(スコア/クリア時間等)ではないかサーバ側でチェックする。 • その処理に対しては報酬を与えない • たとえばスロットの場合、スロット回転が終わるまでの最低時間を予め計測しておき、 それよりも明らかに早い間隔で回されている場合はお金だけ減らして報酬を与えないようにする。 • ログをとっておき、BANする

    • たとえばクエストの場合、明らかに規定クリア時間より早いものを見つけたら記録しておく。後からBANする。 • すぐBANすると、チーターにBANされた理由を感づかれる→対策されるかもしれないので、 時間をあえて置いてBANすることで理由を悟らせないのが望ましい。 • 223 自動化のための通信リクエスト再現を難しくする。 • リクエストパラメータの暗号化 • リクエストの改ざん検知 • コードの難読化 ©MIXI
  115. 参考ドキュメント モバイルのセキュリティのことで迷ったら覗いてみると助けになるかもしれないものたち • Mobile Application Security Design Guide • •

    https://github.com/OWASP/www-project-mobile-application-security-design-guide セキュアコーディングガイド • Android (具体的なコードを交えて実践的に書かれている) • • http://www.jssec.org/dl/android_securecoding.pdf Apple (iOSの具体的な話というよりは一般論的な話) • https://developer.apple.com/library/content/documentation/Security/Conceptual/SecureCodingGuide/Introd uction.html • OWASP Mobile Top 10 • 226 https://owasp.org/www-project-mobile-top-10/ ©MIXI
  116. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • • 227 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 公開しないもの = 管理画面や開発環境など 次は ここの話! ©MIXI
  117. 公開しないもの の守り方 シンプルに「アクセス制御する」に尽きるが、やり方は色々ある。 • 境界防御 (IP制限) • ゼロトラスト的制御 • Basic認証

    • リクエストヘッダに秘密の値を付与して検証 etc 手段によって安全性のレベルと実装,運用コストは変わってくる。 どれが絶対に良い悪いという話ではなく、ケースによって適切な手段を選んでゆこう そのために手札を増やしておこう! (セキュリティ室としてはゼロトラスト的な制御を推奨することが多いです) 228 ©MIXI
  118. 【演習】Juice Shopをアクセス制御で守ろう 今回の研修で抑えておきたい「アクセス制御」の二つの思想 • 境界防御 → NWの境界線で守っていく考え方。 • ゼロトラスト →

    弊社でも取り組んでいるイマドキ(?)の考え方/やり方。 Google Cloudの機能を使って、 境界防御とゼロトラストの思想それぞれでJuice Shopをアクセス制御してみましょう! • 229 Juice Shopは皆さんが運営しているサービスの試験環境だと想定してください。 ©MIXI
  119. 境界防御とは 一般的な会社のネットワーク構成はこんな感じだと思います。 会社のネットワーク PC インターネット PC ルータ等(詳細は省略) App & Data

    クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 AWS上 の App & Data App & Data VPN PC 会社ではないどこか 230 ©MIXI
  120. 境界防御とは 一般的な会社のネットワーク構成はこんな感じだと思います。 会社のネットワーク PC インターネット PC ルータ等(詳細は省略) クラウド的なものたち Google Cloud上

    の App & Data Saas の App & Data 終端装置 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 会社ではないどこか 231 ©MIXI
  121. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 • 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) • 攻撃監視やロギングが一定される。→(攻撃の検知や調査) 一般的な会社のネットワーク構成はこんな感じだと思います。 • 会社の終端装置から外に出る。→(IP制限による攻撃者排除) 会社のネットワーク

    PC インターネット 社内なら安心なので PC アクセスされる側は信じる ルータ等(詳細は省略) クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 社内なら安心なので アクセスされる側は信じる 233 会社ではないどこか ©MIXI
  122. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 • 社内ネットワークなら安心という世界観 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) • 攻撃監視やロギングが一定される。→(攻撃の検知や調査) 一般的な会社のネットワーク構成はこんな感じだと思います。 • 会社の終端装置から外に出る。→(IP制限による攻撃者排除)

    会社のネットワーク PC インターネット 社内なら安心なので PC アクセスされる側は信じる ルータ等(詳細は省略) クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 社内なら安心なので アクセスされる側は信じる 234 会社ではないどこか ©MIXI
  123. 【演習】Juice Shopを境界防御にもとづいて守ろう 1. Google CloudのコンソールCloud Armor設定画面にアクセス 2. ポリシーを作成 a. 3.

    Default rule Action a. 4. 5. デフォルトは拒否でステータス403 ルールの追加 a. モード→基本モード b. 一致→許可したいIP c. 優先度→1000 ターゲットへのポリシーの適用 a. 6. PolicyTypeにバックエンドセキュリティポリシーを選択 ターゲットの追加(ロードバランサのバックエンドサービス) 高度な作成 a. スルー 以上で設定したIP以外でアクセスすると403エラーが返るようになります。 236 ©MIXI
  124. ゼロトラストとは 会社のネットワーク PC インターネット PC ルータ等(詳細は省略) App & Data クラウド的なものたち

    Google Cloud上 の App & Data Saas の App & Data 終端装置 AWS上 の App & Data App & Data VPN PC 会社ではないどこか 237 ©MIXI
  125. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 • 社内ネットワークなら安心という世界観 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) • 攻撃監視やロギングが一定される。→(攻撃の検知や調査) 一般的な会社のネットワーク構成はこんな感じだと思います。 • 会社の終端装置から外に出る。→(IP制限による攻撃者排除)

    会社のネットワーク PC インターネット 社内なら安心なので PC アクセスされる側は信じる ルータ等(詳細は省略) クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 社内なら安心なので アクセスされる側は信じる 238 会社ではないどこか ©MIXI
  126. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 • 社内ネットワークなら安心という世界観 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) • 攻撃監視やロギングが一定される。→(攻撃の検知や調査) 一般的な会社のネットワーク構成はこんな感じだと思います。 • 会社の終端装置から外に出る。→(IP制限による攻撃者排除)

    会社のネットワーク PC インターネット 社内NWは 信頼できる=trust 社内なら安心なので PC アクセスされる側は信じる ルータ等(詳細は省略) 終端装置 ワン!! クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 社内なら安心なので アクセスされる側は信じる 239 会社ではないどこか ©MIXI
  127. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 と思ったらインターネット社会では思い通りにはならなかった。 • 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) 標的型攻撃はじめ色々な攻撃リスクが顕在化してきた。 • 攻撃監視やロギングが一定される。→(攻撃の検知や調査) 一般的な会社のネットワーク構成はこんな感じだと思います。 色々繋がるネット社会において完全クリーンにすることは困難。

    • 会社の終端装置から外に出る。→(IP制限による攻撃者排除) 会社のネットワーク PC インターネット PC ルータ等(詳細は省略) クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 会社ではないどこか 240 ©MIXI
  128. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 社内ネットワークだからといって それだけで安心とは考えない世界観 と思ったらインターネット社会では思い通りにはならなかった。 • 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) 標的型攻撃はじめ色々な攻撃リスクが顕在化してきた。 • 攻撃監視やロギングが一定される。→(攻撃の検知や調査)

    一般的な会社のネットワーク構成はこんな感じだと思います。 色々繋がるネット社会において完全クリーンにすることは困難。 • 会社の終端装置から外に出る。→(IP制限による攻撃者排除) 会社のネットワーク PC インターネット 社内ってだけじゃ PC アクセスされる側は信じない ルータ等(詳細は省略) クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 社内ってだけじゃ アクセスされる側は信じない 241 会社ではないどこか ©MIXI
  129. 境界防御とは ここに繋ぐと認証等の各種対策/制約により下記が得られていた。 社内ネットワークだからといって それだけで安心とは考えない世界観 と思ったらインターネット社会では思い通りにはならなかった。 • 見知らぬ者が社内NWに居ない。→(盗聴者や攻撃者の排除) 標的型攻撃はじめ色々な攻撃リスクが顕在化してきた。 • 攻撃監視やロギングが一定される。→(攻撃の検知や調査)

    色々繋がるネット社会において完全クリーンにすることは困難。 • 会社の終端装置から外に出る。→(IP制限による攻撃者排除) 会社のネットワーク PC インターネット 何も=zero 信頼できない=trust 社内ってだけじゃ PC アクセスされる側は信じない ルータ等(詳細は省略) 終端装置 ワン!! クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 会社IPがこれ App & Data AWS上 の App & Data App & Data VPN PC 業務用ならIP制限するものたち 社内ってだけじゃ アクセスされる側は信じない 242 会社ではないどこか ©MIXI
  130. 誤解してはならないこと • 境界防御の全てがオワコンというわけではない。 • • 依然として使われているし、重要。手札として持っておこう。 単純に ゼロトラスト = リモート何でもOK

    ということではない。 • 公開エンドポイントへのアクセス制御方法が社内IPに依存しなくなったというだけ • PC側の保護も必要となる。AV、EDR、PFW、覗き見、etc… • 当然、カフェ等での業務やフリーWi-Fiでの業務等はリスクがある ゼロトラストを誤解/過信して、 セキュリティレベルが下がることの無いように。 254 ©MIXI
  131. Juice Shopをゼロトラスト的に守るとしたら? MIXI研修時の演習環境はこのようになっていました。 Public NW GoogleのNW 認証/認可 IAP HTTPS Cloud

    Run Cloud Load Balancing 1 HTTP 参加者 1 Juice Shop 1 Cloud Run HTTPS Cloud Load Balancing 2 HTTP Juice Shop 2 参加者 2 256 ©MIXI
  132. Juice Shopをゼロトラスト的に守るとしたら? MIXI研修時の演習環境はこのようになっていました。 Public NW GoogleのNW 認証/認可 IAP ここがエンフォーサの役割を 果たしている

    参加者でのGoogleアカウントで認 証されれば通過/それ以外は拒否 HTTPS Cloud Run Cloud Load Balancing 1 HTTP 参加者 1 Juice Shop 1 Cloud Run HTTPS Cloud Load Balancing 2 HTTP Juice Shop 2 参加者 2 258 ©MIXI
  133. Juice Shopをゼロトラスト的に守るとしたら? MIXI研修時の演習環境はこのようになっていました。 Public NW GoogleのNW 認証/認可 IAP ここがエンフォーサの役割を 果たしている

    参加者でのGoogleアカウントで認 証されれば通過/それ以外は拒否 HTTPS Cloud Run Cloud Load Balancing 1 HTTP 参加者 1 Juice Shop 1 これから、このルールを変えてみる 演習をしていただきます! Cloud Run HTTPS Cloud Load Balancing 2 HTTP Juice Shop 2 参加者 2 259 ©MIXI
  134. 【演習】Juice Shopをゼロトラストにもとづいて守ろう 自身のJuice Shop環境のIAP設定を操作し、ゼロトラストにもとづいたアクセス制御を行おう。 • IAPとは • IAP とは、ウェブサイトへのリクエストをインターセプトし、リクエストを送信したユーザーを認証して、認 証されたユーザーにのみサイトへのアクセスを許可

    する、という一連の処理を行うサービスです。 • 対応しているプラットフォームは、App Engine、Compute Engine のほか、Google Cloud ロードバランサの 背後で動作するサービスなど、さまざまなものがありますが、その利用は Google Cloud に限定されません。 IAP コネクタと合わせて使用すれば、オンプレミスのアプリケーションを保護することも可能です。 • 260 ざっくりいうと、ロードバランサ等へのアクセス時にGoogleアカウント等の認証を挟めるサービス。 ©MIXI
  135. 【演習】Juice Shopをゼロトラストにもとづいて守ろう 自身のJuice Shop環境のIAP設定を操作し、ゼロトラストのアクセス制御を行おう。 やること - Identity-Aware ProxyというGoogle Cloudサービスを使ってIP制限を行い、挙動を確認する -

    確認すること - IAPをONにして、かつアクセス権があるときの挙動 - - IAPをONにして、かつアクセス権が無いときの挙動 - - Googleログイン後にアクセスできればOK レスポンスが「You dont have access」になればOK IAPをOFFにしたときの挙動 - シークレットブラウザなど、Googleログインしてない状態でアクセスできたらOK ※社内研修時はJuice ShopをGoogle CloudでデプロイしていたためIAPを使用しました 261 ©MIXI
  136. 【演習】Juice Shopをゼロトラストにもとづいて守ろう 1. IAPサービス画面にアクセス 2. 対象バックエンドサービスを選択しIAPをONにする 3. 画面右側にある「IAP-secured Web App

    User」欄に自分を追加 a. 4. これでアクセス権が付与される IAPのON/OFF、IAP-secured Web App Userの付与/剥奪によって挙動の変化を確認 a. 確認すること b. IAPをONにして、かつアクセス権があるときの挙動 i. c. IAPをONにして、かつアクセス権が無いときの挙動 i. d. レスポンスが「You dont have access」になればOK IAPをOFFにしたときの挙動 i. 262 Googleログイン後にアクセスできればOK シークレットブラウザなど、Googleログインしてない状態でアクセスできたらOK ©MIXI
  137. MIXIとゼロトラスト MIXIでもゼロトラスト設 計での防御を使ってい インターネット る! 会社のネットワーク PC PC ルータ等(詳細は省略) App

    & Data クラウド的なものたち Google Cloud上 の App & Data Saas の App & Data 終端装置 AWS上 の App & Data App & Data VPN PC 会社ではないどこか 263 ©MIXI
  138. MIXIとゼロトラスト うちの会社で使われているゼロトラストベースの構成(エンフォーサ + IDP)の例 • • AWS • ALB +

    IdP • ALB + Cognito Google Cloud • Cloud Load Balancing + IAP セキュリティ室で導入サポートも行っています! 264 ©MIXI
  139. 【演習】(余談) Juice ShopをWAFで守ろう WAFについて • Webアプリケーションの脆弱性に対しては一つ一つ対策を施していくのが基本だが、 WAF(WebApplicationFirewall)によって防御するという選択肢もある。 • リクエスト中に攻撃パターンの文字列が含まれていると遮断する(403応答など)。 •

    WAFだけで守り切るのは困難だったり、正常なリクエストにも反応してしまう可能性があったり、基本的に はおすすめはしていないが、特定のケースで使える場合があるため、選択肢として持っておくとよい • 。 レガシーなつくりでコードが入り組んでおり、アプリケーションの改修が難しいといった場合、WAFで一元 的に攻撃シグネチャを遮断するという対策手段はアリかもしれない。 • 266 Google CloudではCloud ArmorにWAF機能がある。 ©MIXI
  140. 【演習】(余談) Juice ShopをWAFで守ろう 1. Cloud Armorページにアクセス 2. ポリシーを作成or編集 3. 「ルールを追加」でエディタ部分に右をコピペ

    a. これが特定文字列を弾くルールセット 4. アクションは拒否(403)に 5. 優先度→10 6. WAF設定後、UNION〜の文字列を送信するとWAFが作動し 403エラーが返るようになればOK 269 evaluatePreconfiguredExpr('sqli-stable', ['owasp-crs-v030001-id942110-sqli', 'owasp-crs-v030001-id942120-sqli', 'owasp-crs-v030001-id942150-sqli', 'owasp-crs-v030001-id942180-sqli', 'owasp-crs-v030001-id942200-sqli', 'owasp-crs-v030001-id942210-sqli', 'owasp-crs-v030001-id942260-sqli', 'owasp-crs-v030001-id942300-sqli', 'owasp-crs-v030001-id942310-sqli', 'owasp-crs-v030001-id942330-sqli', 'owasp-crs-v030001-id942340-sqli', 'owasp-crs-v030001-id942380-sqli', 'owasp-crs-v030001-id942390-sqli', 'owasp-crs-v030001-id942400-sqli', 'owasp-crs-v030001-id942410-sqli', 'owasp-crs-v030001-id942430-sqli', 'owasp-crs-v030001-id942440-sqli', 'owasp-crs-v030001-id942450-sqli', 'owasp-crs-v030001-id942251-sqli', 'owasp-crs-v030001-id942420-sqli', 'owasp-crs-v030001-id942431-sqli', 'owasp-crs-v030001-id942460-sqli', 'owasp-crs-v030001-id942421-sqli', 'owasp-crs-v030001-id942432-sqli'] ) ©MIXI
  141. 【演習】(余談) Juice ShopをWAFで守ろう Q. WAF最強!脆弱性自体を直さなくても、これさえあればいいじゃん! A. WAFはあくまで対症療法だと思っておこう。ちゃんと直そう。 - 完全にガードできるわけではない -

    今回の例では、実は "email":"[email protected]'--" と入力して不正アクセスする攻撃は演習でのWAFでは 防げません! - 270 厳しくフィルタリングし過ぎると正常なリクエストを弾いてしまう懸念もある ©MIXI
  142. 前提となる考え 「セキュアに開発業務」をするために守らなければいけないもの • • 開発の前提 • インフラ(AWS, GoogleCloud)の環境。NW設定等。 • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 開発する対象 • 公開するもの = ユーザに公開しているサービス • • 271 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 クライアント側 • 公開しないもの = 管理画面や開発環境など • AIを使う上で気を付けたいこと ©MIXI
  143. AIをサービスに組み込むとしたら 2つのドキュメントのうち、どれを参考にするかは対象となるレイヤーによって変わります。 ❏ OWASP TOP 10 for LLM Applications ➔

    LLMを組み込んだアプリにおいて代表的なセキュリティリスクをまとめたもの ◆ カスタマーサポート用のチャットボットや社内ドキュメントの検索AIなど、 非エージェント型のAIを組み込む場合に参照するドキュメント ❏ OWASP TOP 10 for Agentic Applications ➔ 自律的に行動するエージェント型AIを組み込んだアプリにおいて代表的なセキュリティリスク をまとめたもの ◆ Slackの投稿内容からその日のタスクを洗い出してタスク管理サービスに登録するアプリなど、 「行動するAI」をサービスに組み込む場合に参照するドキュメント 273 ©MIXI
  144. AIをサービスに組み込むとしたら 各ドキュメントの項目は次のとおりです ★ OWASP TOP 10 for LLM Applications ★

    OWASP TOP 10 for Agentic Applications LLM01:2025 Prompt Injection(プロンプトインジェクション) ASI01: Agent Goal Hijack(エージェント目標の乗っ取り) LLM02:2025 Sensitive Information Disclosure(機密情報の漏洩) ASI02: Tool Misuse & Exploitation(ツールの誤用と悪用) LLM03:2025 Supply Chain(サプライチェーン) ASI03: Identity & Privilege Abuse(IDと特権の乱用) LLM04:2025 Data and Model Poisoning(データ/モデル汚染) ASI04: Agentic Supply Chain Vulnerabilities LLM05:2025 Improper Output Handling(不適切な出力処理) (サプライチェーンの脆弱性) LLM06:2025 Excessive Agency(過剰な権限・自律性) ASI05: Unexpected Code Execution (RCE) LLM07:2025 System Prompt Leakage(システムプロンプトの漏洩) (予期しないコード実行) LLM08:2025 Vector and Embedding Weaknesses ASI06: Memory & Context Poisoning (ベクトル/埋め込みの弱点) (記憶とコンテキストの汚染) LLM09:2025 Misinformation(誤情報/ハルシネーション) ASI07: Insecure Inter-Agent Communication LLM10:2025 Unbounded Consumption(無制限のリソース消費) (安全でないエージェント間通信) ASI08: Cascading Failures(連鎖的な障害) ASI09: Human-Agent Trust Exploitation (人間とエージェントの信頼の悪用) ASI10: Rogue Agents(反逆エージェント) 274 ©MIXI
  145. ①入力 攻撃者による悪意のある入力やRAG文書に隠された指示により、AIが本来の目的を捨てて攻撃者の指示に 従い、機密情報の出力や破壊的な操作等を行う可能性があります。 ★ ★ 該当する項目 ◦ LLM01: Prompt Injection(プロンプトインジェクション)

    ◦ ASI01: Agent Goal Hijack(エージェント目標の乗っ取り) 対策例 ◦ 入力を信用しない ▪ プロンプトを検証する、Bedrock Guardrails(AWS)や Model Armor(Google Cloud)等のLLMガードレールを導入する、等 276 ◦ システムプロンプトに制約事項やセキュリティ上の注意事項を設定する ◦ 高いリスクを伴う操作は人間による承認を必須とする ©MIXI
  146. ②実行 AIが生成したコマンドやSQLクエリ等をそのまま実行したり、エージェントが権限の範囲内でツールを危 険に使ったりすることで、データの破壊や機密情報の外部送信等の問題に繋がる可能性があります。 ★ ★ 該当する項目 ◦ LLM05:2025 Improper Output

    Handling(不適切な出力処理) ◦ ASI02: Tool Misuse & Exploitation(ツールの誤用と悪用) ◦ ASI05: Unexpected Code Execution (RCE)(予期しないコード実行) 対策例 ◦ 出力の検証と無害化を行う ▪ 277 evalを禁止にする、SQLをパラメータ化する、等 ◦ 本番環境では実行させず、サンドボックス環境で実行する ◦ 高いリスクを伴う操作は人間による承認を必須とする【①でも登場!】 ©MIXI
  147. ③認証・権限 過剰な権限を付与している、認証・認可に使用するトークンの有効期限やスコープが広すぎるなど、権限 の設計や制御に不備がある場合に、権限昇格やアクセス制御の回避などに繋がる危険性があります。 ★ ★ 該当する項目 ◦ LLM06:2025 Excessive Agency(過剰な権限・自律性)

    ◦ ASI03: Identity and Privilege Abuse(IDと特権の乱用) 対策例 ◦ ◦ AIに与える権限は必要最小限に留める、トークンは短命かつタスク単位に分離にする ▪ 例:読み取り以外の行動を想定していないため、書き込み権限は与えない ▪ 例:トークンの有効期限が切れたり別タスクの際には再度認証・認可を要求する エージェントに独立したIDを付与し、「誰の立場で、どの権限で」行動したか追跡できるようにする ▪ 複数のエージェントが絡むような場面では、知らないうちに権限が拡大している場合があります。 IDを付与することで権限を明確にし、対人間と同じようにエージェントに対しても権限チェックをしましょう。 278 ©MIXI
  148. ④サプライチェーン AIシステムを構成する外部コンポーネントに脆弱性が含まれている場合や、データセット、ツール等が汚 染されている場合に、バックドアの混入やハルシネーション等の問題が引き起こされる可能性がありま す。 ★ ★ 該当する項目 ◦ LLM03:2025 Supply

    Chain(サプライチェーン) ◦ ASI04: Agentic Supply Chain Vulnerabilities(サプライチェーンの脆弱性) 対策例 ◦ 提供元が信用できるか慎重かつ厳しく審査する ◦ SBOMやML-BOM(Machine Learning Bill Of Materials)、AIBOM(AI Bill of Materials)を活用し、 依存関係をモニタリングしておく ▪ 外部のライブラリやプラグインだけでなく、AIのモデルやデータセットもML-BOMなどを活用して 管理対象に含めましょう 281 ©MIXI
  149. ⑤データ・コンテキスト・RAG クレデンシャルなどの機密情報が学習される、RAGやメモリが偽情報で汚染される、マルチテナント環境 においてアクセス制御に不備があるなど、データの流れに関連した様々な問題が情報漏洩やエージェント の意図しない行動などを引き起こす可能性があります。 ★ 該当する項目 ◦ LLM02:2025 Sensitive Information

    Disclosure(機密情報の漏洩) ※便宜上、⑤に分類していますが、他でも同じことが起こり得るため要注意! 282 ◦ LLM04:2025 Data & Model Poisoning(データとモデルの汚染) ◦ LLM07:20205 System Prompt Leakage(システムプロンプトの漏洩) ◦ LLM08:2025 Vector & Embedding Weaknesses(ベクトルと埋め込みの弱点) ◦ ASI06: Memory & Context Poisoning(記憶とコンテキストの汚染) ©MIXI
  150. ⑤データ・コンテキスト・RAG ★ 対策例 ◦ 機微な情報を入力や学習に用いない ◦ 入力を検証する【①でも登場!】 ▪ ◦ アクセス境界を明確にして制限する

    ▪ 283 例:入力に機微情報が含まれていないか検証する、RAG知識ベースに入れる前に文書を検証する 例:テナントごとにベクトルDBを分離する、検索範囲に制限を設ける ©MIXI
  151. ⑥運用・設計 運用や設計の不備により、エージェントが危険な行動する、エージェント間でミスの伝播する、中間者攻 撃を受けるなど様々な問題に繋がる可能性があります。 ★ ★ 284 該当する項目 ◦ LLM10:2025 Unbounded

    Consumption(無制限のリソース消費) ◦ ASI07: Insecure Inter-Agent Communication(安全でないエージェント間通信) ◦ ASI08: Cascading Failures(連鎖的な障害) ◦ ASI10: Rogue Agents(反逆エージェント) 対策例 ◦ 異常検知を行い、すぐに異常に気づけるような仕組みを整備する ◦ 緊急停止機能(キルスイッチ)を実装する ◦ エージェント間の通信にはmTLS(TLSの拡張版で、双方を認証する技術)を取り入れる ◦ 「誰が何を入力したか、AIが何を判断して実行したか」を追えるようなログを残す ◦ 高いリスクを伴う操作は人間による承認を必須とする【①②でも登場!】 ©MIXI
  152. ⑦人間 AIの出力を信じすぎることによって誤情報をそのまま外部に発信してしまったり、エージェントの危険な 操作を誤って承認してしまう可能性があります。 ★ ★ 該当する項目 ◦ LLM09:2025 Misinformation(誤情報/ハルシネーション) ◦

    ASI09: Human-Agent Trust Exploitation(人間とエージェントの信頼の悪用) 対策例 ◦ ◦ 出力を信用させない ▪ 断定させないUIや検証を促すUI ▪ 根拠表示を必須にし、確定情報でない場合は未検証である旨を明示する 影響度の大きい操作は必要に応じて2重の承認を設ける ▪ 285 入力者と上長の承認の両方を必須にするなど ©MIXI
  153. MCPに関わるセキュリティリスク MCPサーバーを構築する場合、OWASP TOP 10 for LLM/Agentic Applicationsとは異なる観点で セキュリティリスクに対処する必要があります。 そこで参考になるドキュメントが「OWASP MCP

    TOP 10」です。 ❏ OWASP MCP TOP 10 https://owasp.org/www-project-mcp-top-10/ ※2026年4月時点ではベータ版のため、 正式版では内容が変更されている可能性があります。 288 ©MIXI
  154. MCPに関わるセキュリティリスク ★ OWASP MCP TOP 10 MCP01:2025 Token Mismanagement &

    Secret Exposure(トークンの不適切な管理と秘密の漏洩) MCP02:2025 Privilege Escalation via Scope Creep(スコープクリープによる権限昇格) MCP03:2025 Tool Poisoning(ツールポイズニング) MCP04:2025 Software Supply Chain Attacks & Dependency Tampering (ソフトウェアサプライチェーン攻撃と依存関係の改ざん) MCP05:2025 Command Injection & Execution(コマンドインジェクションと実行) MCP06:2025 Intent Flow Subversion(インテントフローの転覆) MCP07:2025 Insufficient Authentication & Authorization(不十分な認証・認可) MCP08:2025 Lack of Audit and Telemetry(監査と監視の不足) MCP09:2025 Shadow MCP Servers(シャドーMCPサーバー) MCP10:2025 Context Injection & Over-Sharing(コンテキストインジェクションと過剰共有) 289 ©MIXI
  155. ①認証・権限系 ★ 該当する項目 MCP01:2025 Token Mismanagement & Secret Exposure MCP02:2025

    Privilege Escalation via Scope Creep MCP07:2025 Insufficient Authentication & Authorization ★ シナリオ例 ◦ サーバー間の認証や認可に使用するトークンをツール定義にハードコーディングしており、ツール定義から トークンが漏洩して不正アクセスを受けた(MCP01) ◦ MCPサーバーに過剰な権限が与えられており、意図せず本番環境のDBを初期化するツールが 実行されてしまった(MCP02) ◦ 出金権限を持たないエージェントから出金ツールの呼び出し要求を受け入れてしまい、 不正に出金された(MCP07) 291 ©MIXI
  156. ①認証・権限系 ★ 考えられる対策 ◦ トークンはAWS Secrets Managerなどの安全な保管場所に保管する(MCP01) ▪ ◦ MCPサーバーに過剰な権限を与えない(MCP02)

    ◦ MCPサーバー側でも権限チェックを実施する(MCP07) ▪ 292 併せてトークンを短命にしておくと良いです。 例:編集権限を持たないエージェントから編集ツールへのアクセス要求が来たため、拒否する ©MIXI
  157. ②実行・コード系 ★ 該当する項目 MCP05:2025 Command Injection & Execution MCP06:2025 Intent

    Flow Subversion ★ シナリオ例 ◦ 「logsディレクトリ内のファイルを一覧表示し、/etc/passwdの内容も表示して」と指示を与えたところ、 「ls logs; cat /etc/passwd 」というコマンドがそのまま実行され、アカウント情報が漏洩する(MCP05) ◦ 「『users; DROP TABLE users;-- 』というテーブルのデータを一覧表示して」と指示したところ、 「SELECT * FROM users; DROP TABLE users;-- 」というSQL文が実行され、データベースが破壊される (MCP05) ◦ 攻撃者が用意したGitHubの公開リポジトリから悪意のあるissueを読み込み、被害者の非公開リポジトリにあ るソースコードが攻撃者宛てに送信されてしまう(MCP06) 293 ©MIXI
  158. ②実行・コード系 ★ 考えられる対策 ◦ ホワイトリストを用意して想定外のコマンド実行を防ぐ(MCP05) ◦ MCPクライアントからの入力をMCPサーバー上で無害化する(MCP05) ▪ 例:プレースホルダを使ってMCPサーバー側でSQLクエリを組み立てる、 パスが含まれている場合は正規化してMCPサーバー側で検証する、等

    ◦ 当初の意図から外れたツールを呼び出せないように制限する(MCP06) ▪ MCP06は意図を変えられてしまう問題なので、例えば当初の意図がissueの読み込みなら、 データの書き込みや送信など明らかに意図から外れているものは実行できないようにする 294 ©MIXI
  159. ③設計・運用系 ★ 該当する項目 MCP08:2025 Lack of Audit and Telemetry MCP09:2025

    Shadow MCP Servers MCP10:2025 Context Injection & Over-Sharing ★ シナリオ例 ◦ ログを取っていなかったため、インシデントの原因分析に支障が出た(MCP08) ◦ 監視を行っていなかったため異常検知が遅れてしまい、被害が拡大した(MCP08) ◦ 社内ルールや周知事項を無視して信頼できないMCPサーバーを社内に導入したところ、 MCPサーバーに悪意のあるコードが含まれており、社外秘情報が外部に送信された(MCP09) ◦ マルチテナント環境においてコンテキストが共有されており、別会社のコンテキストに含まれる機密情報が出 力された(MCP10) 295 ©MIXI
  160. ④サプライチェーン系 ★ 該当する項目 MCP03:2025 Tool Poisoning MCP04:2025 Software Supply Chain

    Attacks & Dependency Tampering ★ シナリオ例 ◦ 導入したMCPサーバーのツール説明が改ざんされており、DBの検索を行うツールを呼び出したところDBの 初期化を行うツールが実行され、DBが破壊される(MCP03) ◦ 外部から取ってきたMCPサーバーのパッケージにバックドアが仕込まれており、バックドア経由で 不正アクセスを受ける(MCP04) 297 ©MIXI
  161. ④サプライチェーン系 ★ ★ 考えられる対策 ◦ 提供元が信用できる厳しく調査する(MCP03、MCP04) ◦ ツールの説明内容と実態のレビューを行う(MCP03) ◦ 改ざん対策として署名の付与と検証を行う(MCP03)

    ◦ SBOMを運用して依存関係をモニタリングする(MCP04) 参考 ツールポイズニングの具体的な攻撃手法は以下のサイトに紹介されているため、もし興味があれば 確認してみてください https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks 298 ©MIXI
  162. AIを開発で利用する際の注意点 • 権限を必要以上に与えることによるリスク ◦ 権限を必要以上に与えすぎてしまうことで、Webサイトのクラウド移行時に、本番環境のDBや ネットワーク設定等をエージェントが削除してしまい、2年半分の本番データが消失したという事例がありま す。 The $5 Decision

    That Wiped 2.5 Years of Production Data https://www.quali.com/blog/the-5-dollar-decision-that-wiped-production-data-agentic-ai-governance/ 与える権限は必要最小限に留め、危険な操作であれば人間による承認を挟むようにしたり、 変更前の状態でバックアップを取って安全に保管しておくなどの対策を取りましょう。 302 ©MIXI
  163. セキュアに開発しよう! • • 開発の前提を守る • インフラ(AWS, GoogleCloud)の環境。NW設定等。 → • 作業環境。PCやクレデンシャル等。

    • データの取り扱い。個人情報等。 → → 分離,アクセス制御等の適切な設計設定を。 端末,クレデンシャルは堅牢に。ツールは慎重に扱う。 扱う情報が何なのか整理。法律やルールも確認。 開発する対象を守る • 公開するもの = ユーザに公開しているサービス • • 306 早見表 サーバ側 • 自分たちでコードを作り込む箇所 • ミドルウェアやライブラリなど外部のコードを流用する箇所 → クライアント側 → Top10など参考に脆弱性を作り込まないコーディングを。 CVE等の情報をもとにリスク評価を。 → 重要なデータとロジックを持たないように。 • 公開しないもの = 管理画面や開発環境など → • AIを使う上で気を付けたいこと → 適切なアクセス制御を。 Top10など参考にリスクケアを。 ©MIXI