チェックポイント:セキュリティツールを導入しよう
クイズの説明
Step 5で学んだ内容の理解度をチェックします。
- 全8問
- 合格ライン: 80%(7問正解)
- 不合格の場合は復習してから再挑戦してください
問題
Q1. SASTが検出できない脆弱性はどれですか?
- A) ハードコードされたAPIキー
- B) SQL文の文字列連結
- C) 本番環境の設定ミス(不要なポートが開いている)
- D) eval() の使用
正解: C
SASTはソースコードを静的に分析するため、実行環境の設定ミスは検出できません。 本番環境の設定ミス(ポートの開放、不要なサービス、デフォルトパスワード等)は、 DAST やインフラ設定の監査で検出します。
A、B、Dはいずれもソースコードに含まれる問題のため、SASTで検出可能です。
</details>Q2. CodeQLの特徴として正しいものはどれですか?
- A) 実行中のアプリケーションをテストする
- B) データフロー分析でソースからシンクまでの値の流れを追跡する
- C) 依存パッケージの脆弱性のみをチェックする
- D) コードのフォーマットを自動修正する
正解: B
CodeQL はセマンティックコード分析ツールで、データフロー分析が強力な特徴です。 ユーザー入力(ソース)からデータベースクエリ(シンク)までの値の流れを追跡し、 途中でサニタイズされていない場合に脆弱性として報告します。
Aは DAST、Cは SCA の説明です。
</details>Q3. OWASP ZAP のベースラインスキャンの目的として正しいものはどれですか?
- A) ソースコードの品質を分析する
- B) 依存パッケージの脆弱性をチェックする
- C) 実行中のアプリに対して基本的な脆弱性テストを実行する
- D) データベースのパフォーマンスを測定する
正解: C
OWASP ZAP のベースラインスキャンは、実行中のWebアプリケーションに対して パッシブスキャン(リクエスト/レスポンスの分析)を中心に基本的な脆弱性テストを行います。
セキュリティヘッダーの欠如、Cookie設定の問題、情報漏洩などを検出します。 フルスキャンに比べて短時間で完了するため、CI/CDパイプラインに組み込みやすいです。
</details>Q4. Dependabotの役割として正しいものはどれですか?
- A) コードの脆弱性を自動修正する
- B) 依存パッケージの更新PRを自動作成する
- C) デプロイを自動化する
- D) テストを自動生成する
正解: B
Dependabot は依存パッケージの新バージョン(特にセキュリティ修正を含むもの)を 検出し、バージョンを更新するPull Requestを自動的に作成します。
開発者はPRをレビューし、CIテストが通ればマージするだけで パッケージを最新の安全なバージョンに更新できます。
</details>Q5. CVSSスコアが9.5の脆弱性の深刻度と対応方針として正しいも のはどれですか?
- A) Low: 次回メンテナンス時に対応
- B) Medium: 計画的に対応
- C) High: 早急に対応
- D) Critical: 即座に対応
正解: D
CVSSスコア 9.0-10.0 は Critical(致命的)に分類されます。 リモートコード実行やデータの完全な漏洩が可能な脆弱性が該当し、 発見次第、即座に対応する必要があります。
Log4Shell(CVE-2021-44228)はCVSSスコア10.0でした。
</details>Q6. シフトレフトの考え方として正しいものはどれですか?
- A) セキュリティチェックを本番環境で行う
- B) セキュリティチェックを開発プロセスの早い段階で行う
- C) セキュリティチェックをリリース後に行う
- D) セキュリティチェックを手動で行う
正解: B
シフトレフトとは、従来は開発プロセスの後半(右側)で行っていたセキュリティチェックを、 開発プロセスの前半(左側)に移動させる考え方 です。
問題を早期に発見するほど修正コストは低く、 本番環境に脆弱性が到達するリスクも低減されます。
</details>Q7. Pre-commitフックでセキュリティチェックを行う利点はどれですか?
- A) CI/CDパイプラインが不要になる
- B) コミット前にローカルで問題を検出し、脆弱なコードがリポジトリに入ることを防ぐ
- C) テスト環境が不要になる
- D) コードレビューが不要になる
正解: B
Pre-commitフックは、git commit を実行する前にローカルでチェックを行い、
問題がある場合はコミットを阻止します。
これにより、脆弱なコードやシークレットがリポジトリに入ることを 最も早い段階で防ぐことができます。
ただし、CI/CDやコードレビューの代わりにはなりません。 Pre-commitはローカルでバイパスできるため、多層防御の1つとして位置づけます。
</details>Q8. package-lock.json をGitにコミットすべき理由として正しいものはどれですか?
- A) ファイルサイズが大きいため、CDNで配信するため
- B) 全環境で同じバージョンの依存パッケージを保証し、再現性を確保するため
- C) npm install の速度を向上させるため
- D) package.json が不要になるため
正解: B
package-lock.json は依存パッケージの正確なバージョンを記録しています。
これをコミットすることで、開発環境、CI、本番環境の全てで
同じバージョンのパッケージがインストールされることが保証されます。
セキュリティの観点では、テスト済みの安全なバージョンが 本番環境でも確実に使用されることを意味します。
</details>結果
7問以上正解の場合
合格です。おめでとうございます。
Step 5「セキュリティツールを導入しよう」を完了しました。 次は Step 6「知識を確認しよう」に進みましょう。
6問以下の場合
もう少し復習しましょう。
| 問題 | 復習セクション |
|---|---|
| Q1, Q2 | step5_1 SAST(静的解析)ツール |
| Q3 | step5_2 DAST(動的解析)の基本 |
| Q4, Q5, Q8 | step5_3 依存パッケージの脆弱性管理 |
| Q6, Q7 | step5_4 CI/CDにセキュリティチェックを組み込もう |
Step 5 完了
お疲れさまでした。
学んだこと
- SASTツール(ESLint, SonarQube, CodeQL)
- DASTツール(OWASP ZAP, Burp Suite)
- SCAツール(npm audit, Dependabot, Snyk)
- CI/CDパイプラインへのセキュリティ組み込み
次のステップ
Step 6: 知識を確認しよう(1時間)
全ステップの知識を総合した最終試験に挑戦します。
推定所要時間: 15分