203 Views
August 13, 26
スライド概要
2026年エンジニア新人研修の資料です。
サイボウズ株式会社の主に開発本部の資料を公開するアカウントです。
開運研修 2026 セキュリティ 1
アジェンダ • 情報セキュリティの基礎 • Webの脆弱性を知る • ソフトウェアサプライチェーン攻撃とその対策 • Vibe Codingとセキュリティ • まとめ 開運研修2026 セキュリティ講義 2
情報セキュリティの基礎 3
情報セキュリティの基礎 情報セキュリティの3要素(CIA) 情報セキュリティとは情報資産の「CIA」を維持すること • 機密性(Confidentiality): 認可されていない者に情報を開示しない • 完全性(Integrity): 情報の正確さ・完全さを保つ • 可用性(Availability): 必要なときに情報にアクセスできる 情報資産の例: PC、設備、印刷物、情報、人 => CIAを脅かすものは何? 開運研修2026 セキュリティ講義 4
情報セキュリティの基礎 脅威はすぐそばにある 世の中には、悪意を持って企業やOSSを攻撃する人が大勢いる システム停止 政治主張 金銭目的 信頼失墜 愉快犯 情報改竄 国家支援 情報漏洩 この講義では、開発者として攻撃の隙を作らないために 何ができるかを学ぶ 開運研修2026 セキュリティ講義 5
情報セキュリティの基礎 CVE・CWE・CVSS • CWE(Common Weakness Enumeration)1 • 脆弱性タイプの識別番号 • 例: CWE-89(SQLインジェクション)、CWE-352(CSRF) • CVE(Common Vulnerabilities and Exposures)2 • 個々の脆弱性の識別番号 • 例: CVE-2021-44228(Log4Shell)、 CVE-2025-55182 (React2Shell) • CVSS(Common Vulnerability Scoring System)3 • 脆弱性の深刻度を0.0〜10.0で数値化 • 異なる脆弱性を同じ基準で比較できる [1] https://www.ipa.go.jp/security/vuln/CWE.html [2] https://www.ipa.go.jp/security/vuln/CVE.html [3] https://www.first.org/cvss/ 開運研修2026 セキュリティ講義 6
Webの脆弱性を知る 7
Webの脆弱性を知る ユーザーの入力は「信頼」できない Webアプリはユーザーからの入力を受け取って処理をする では、ユーザーの入力が開発者の想定しない形だったら? データベースを ブラウザで 権限のないデータ 操作される スクリプトが実行される が見られてしまう SQLインジェクション XSS アクセス制御の不備 → これらの脆弱性は入力の扱い方を誤ったことで生じる 開運研修2026 セキュリティ講義 8
Webの脆弱性を知る SQLインジェクション 入力がそのままSQLクエリに挿入されることが原因 脆弱なコード SELECT * FROM users WHERE name = ’入力値’ ここに ‘ OR 1=1 -- と入力すると… 実行されるSQL SELECT * FROM users WHERE name = ’’ OR 1=1 --’; → WHERE 句が真になり 全ユーザーのデータが漏洩する 対策 : プレースホルダを用いて SQLクエリを組み立てる4 [4] https://www.ipa.go.jp/security/vuln/websecurity/sql.html 開運研修2026 セキュリティ講義 9
Webの脆弱性を知る クロスサイトスクリプティング(XSS) 入力がそのままHTMLに埋め込まれることが原因 1 2 3 4 攻撃者が悪意ある 他のユーザーが スクリプトが実行 攻撃者が スクリプトを投稿 そのページを閲覧 Cookieが攻撃者に送信 被害者になりすまし 被害者はページ訪問やURLクリックで、攻撃者が書いたスクリプトが発火 XSSの種類 : 蓄積型: スクリプトがDBに保存され永続化 DOM-Based: DOM操作でスクリプトが実行 反射型: スクリプトがそのまま返される 対策 : ユーザーの入力をHTMLとして解釈させない テキストならinnnerText5で挿入する HTMLを許可したい場合はDOMPurify6を噛ませる [5] https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/innerText [6] https://www.npmjs.com/package/dompurify 開運研修2026 セキュリティ講義 10
Webの脆弱性を知る アクセス制御の不備 ユーザーの権限を正しくチェックできていないことが原因 自分が閲覧できるページ https://blog.example.com/pages/1000 IDが連番になっているので、+1してみると閲覧できてしまった... 自分が閲覧できないはずの非公開ページ https://blog.example.com/pages/1001 OWASP Top 10:20257 で1位 対策 : 全てのリソースアクセスを 典型的だけど発生しやすい脆弱性 「誰が・何に・何をできるか」を検証 [7] https://owasp.org/Top10/2025/ 開運研修2026 セキュリティ講義 11
ソフトウェアサプライチェーン攻撃と その対策 12
サプライチェーン なぜ今ソフトウェアサプライチェーンのセキュリティが重要か ソフトウェアが積極的に侵害され、自社が影響を受ける時代 1 2 3 4 コントリビュータの ソフトウェアが ソフトウェアを使う 窃取したシークレット アカウント侵害など 悪意あるものに置換 環境でシークレット で別パッケージ侵害 漏洩 実際に起きた事例 2025年3月 2026年2~3月 reviewdog/tj-actions 侵害8 GitHub Actions侵害→@v1タグ書き換え→CIでシークレット漏洩 Trivy 侵害9 GitHub Actions侵害→LiteLLM・Telnyx(PyPI)へ横展開 [8] https://unit42.paloaltonetworks.com/github-actions-supply-chain-attack/ [9] https://diary.shift-js.info/trivy-compromise 開運研修2026 セキュリティ講義 13
サプライチェーン 悪意あるコードを取り込まないために 3つの観点で対策する • GitHub Actions : 侵害されたActionsの影響を受けないための設定 • 依存管理 : 悪意あるパッケージを取り込まないための仕組み • シークレット管理 : シークレットを漏らさないための仕組み 開運研修2026 セキュリティ講義 14
サプライチェーン [GitHub Actions] タグ参照はなぜ危険か mutable(可変) なタグ参照を immutable(不変) な SHA に変える タグ参照(mutable) SHA pinning (immutable) uses: actions/[email protected] uses: actions/checkout@de0fa… @v6.0.2 タグは書き換え可能 Commit SHAは変更不可能 →攻撃者がタグを悪意あるコミット →タグが書き換えられても使用元の に差し替えるとCIが汚染される CIには影響しない タグ→SHAの置換には pinact10 が便利 [10] https://github.com/suzuki-shunsuke/pinact 開運研修2026 セキュリティ講義 15
サプライチェーン [GitHub Actions] セキュリティ対策 GitHub Actionsの実行環境(ランナー)を本番環境と同等のセキュリティに permissions を最小限に pull_request_target に注意 ワークフローの permissions を絞る 外部からのPRに対してワークフローを実行 不要な permissions は付与しない →外部からのコードがシークレット有で実行 ビルドとデプロイを分離 発展: CI/CDのログ・テレメトリ保存 依存が入ってくるビルドとデプロイを分離 CI/CD 環境は監視対象にならないがち デプロイ用のシークレットを保護 インシデント時に調査できるようにログや テレメトリの確保を意識 参考: https://zenn.dev/cybozu_ept/articles/573c706ec08b48 開運研修2026 セキュリティ講義 16
サプライチェーン [依存管理] パッケージ名の罠 パッケージを追加するとき、名前・実在性・信頼性を必ず確認する Typosquatting Slopsquatting 正規パッケージ名に似た名前の AIが実在しないパッケージ名を提案 悪意あるパッケージを登録する攻撃 → 攻撃者がその名前で登録 requests requets ← タイポで悪意パッケージ AI: “flask-oauth2-helper” → 実在せず、攻撃者が先回りして登録 人間のタイプミスを狙う AIのハルシネーションを狙う 最低限、追加前に正しい名前かどうかは確認する 開運研修2026 セキュリティ講義 17
サプライチェーン [依存管理] パッケージ依存の安全な管理 ツール設定で、悪意あるパッケージの取り込みを防ぐ Takumi Guard11 npm・PyPIのプロキシを経由して悪性パッケージをブロックするツール npm・PyPIを使用する端末で設定しておくことで緩和策として有効 lockfile の徹底 Dependency Cooldown Lockfile に記載のバージョンを厳密に再現 新バージョンの公開後、一定期間空ける 各パッケージマネージャーに実装されている npm ci uv sync –-frozen # npm # PyPI(uv) [11] https://flatt.tech/takumi/features/guard pnpm config set minimum-release-age 4320 # 3days 開運研修2026 セキュリティ講義 18
サプライチェーン [依存管理] Renovate / Dependabot によるパッケージの更新について 自動マージは望ましくない、Dependency Cooldownを設定する 自動マージは望ましくない Dependency Cooldown12 侵害されたパッケージの新バージョンが 新規リリースから一定期間は、更新PR 自動でマージされると、悪性パッケージ の自動作成を遅延させる が取り込まれてしまう 悪性パッケージの多くは期間内に削除される # Renovate automerge: false # Dependabot gh pr merge -–auto で取り込まない # Renovate minimumReleaseAge: "14 days” # Dependabot cooldown: default-days: 14 days [12] https://docs.renovatebot.com/key-concepts/minimum-release-age/ 開運研修2026 セキュリティ講義 19
サプライチェーン シークレットの管理 シークレットをコードに書かない、漏らさない仕組みを入れる やってはいけないこと ソースコードや .env に直接書く Slack や bozumanの公開の場所で シークレットを共有する 1Password13での管理 端末内に平文で記載は望ましくない 1Passwordにシークレットを格納し、 1Password CLI で安全に参照 .envなど API_KEY=op://… AIコーディングツールに入力する op run -- <command> [13] https://developer.1password.com/docs/cli/ 開運研修2026 セキュリティ講義 20
Vibe Codingとセキュリティ 21
VideCodingとセキュリティ 「動く」と「安全」は異なる AIが書いたコードには、人間が書いた場合よりも多くの問題が含まれる 1.7 倍 よくある問題パターン • パスワードの不適切な扱い(1.88倍) AI生成PRに含まれる問題の数 • 安全でないオブジェクト参照(1.91倍) (人間のコードとの比較) • XSS 脆弱性(2.74倍) ※ CodeRabbitによる調査14 • ロジックの不備(1.82倍) 「動くけど安全ではない」コードが生まれやすい [14] https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report 開運研修2026 セキュリティ講義 22
VideCodingとセキュリティ AIエージェントを安全に動かす AIが提案したコマンド、中身を理解してから実行していますか? • sandboxモード15を有効にする • ファイルシステム、ネットワークのアクセス範囲を制限 • Claude Codeでは /sandbox コマンドで有効化 • コマンドの許可リスト・拒否リストを設定する • エージェントが実行できるコマンドを明示的に制御する • Claude Codeでは settings.json で許可・拒否コマンドを定義できる • --dangerously-skip-permissions の危険性を理解する • 全ての承認プロンプトをスキップし、エージェントに無制限の権限を与える [15] https://code.claude.com/docs/ja/sandboxing 開運研修2026 セキュリティ講義 23
VideCodingとセキュリティ AI生成コードの品質を担保する AI生成コードは「信頼できない第三者が書いたコード」として扱う • AIの出力をレビューする • AI生成コードを信頼できないものとして人間がレビューする • 追加された依存パッケージの実在性・信頼性を確認する • セキュリティレビュー用のスキルで確認する • Claude Codeでは /security-review で一般的なセキュリティ観点をチェック可能 • CI/CDで自動チェックを回す • 静的解析(SAST)を組み込むことで既知の脆弱性パターンを検出 人間のレビューにも限界があるので仕組みと組み合わせてチェック 開運研修2026 セキュリティ講義 24
まとめ 25
まとめ 講義で扱った話題の共通構造 今日触れた全ての話題に共通する原則は「信頼しない」こと Web脆弱性 サプライ チェーン攻撃 Vibe Coding ユーザーの入力を 依存パッケージを AIの出力を 信頼しない 信頼しない 信頼しない 脆弱性の多くは ソフトウェアが積極的 AIが出したコード・ 「入力の扱い方」が に侵害される世の中 コマンド・依存関係に 原因 は問題がある可能性 「信頼しない」ことが安全への出発点になる 開運研修2026 セキュリティ講義 26
まとめ セキュリティは変化し続ける 数年後には新たな話題が注目トピックになるかも 数年前の講義 今日の講義 数年後の研修 Web脆弱性が中心 サプライチェーン攻撃 今はまだ存在しない サプライチェーンやAI Vibe Codingのリスク 新たな脅威・技術への の話題はなかった 新しい脅威が加わった 対応が必要になる CIA、入力を信頼しないなど不変の原則を土台にしつつ、 新しい脅威をキャッチアップし続けることが重要 開運研修2026 セキュリティ講義 27