ストーリー
佐藤CTOがチェックリストを取り出しました。
Q1. OWASP Top 10 (2021) で最も深刻度が高いカテゴリとして位置づけられているのはどれか?
A. インジェクション(SQLインジェクション等) B. アクセス制御の不備(Broken Access Control) C. 暗号化の失敗(Cryptographic Failures) D. セキュリティの設定ミス(Security Misconfiguration)
答えを見る
正解: B
OWASP Top 10 (2021) では、**A01: Broken Access Control(アクセス制御の不備)**が1位にランクされています。2017年版では5位でしたが、発生頻度の増加により1位に上昇しました。具体的には以下が含まれます。
- 他ユーザーのリソースへの不正アクセス(BOLA/IDOR)
- 権限昇格(一般ユーザーが管理者操作を実行)
- URLやパラメータの操作によるアクセス制御の迂回
- CORSの設定ミスによる不正なクロスオリジンアクセス
インジェクションは2017年の1位から2021年には3位(A03)に移動しています。
Q2. XSS(クロスサイトスクリプティング)攻撃の3つの主要タイプとして正しくないのはどれか?
A. Stored XSS(格納型) B. Reflected XSS(反射型) C. Encrypted XSS(暗号型) D. DOM-based XSS(DOM操作型)
答えを見る
正解: C
XSSの3つの主要タイプは以下の通りです。「Encrypted XSS(暗号型)」は存在しません。
| タイプ | 説明 | 特徴 |
|---|---|---|
| Stored XSS | 悪意のあるスクリプトがサーバーに保存される | DBに保存され、ページ表示時に実行。掲示板、コメント欄等 |
| Reflected XSS | スクリプトがリクエストに含まれ、レスポンスに反映される | URLパラメータ経由。被害者がリンクをクリックする必要がある |
| DOM-based XSS | クライアントサイドのJavaScriptがDOMを操作する際に発生 | サーバーを経由せず、ブラウザ内で完結。innerHTML等が原因 |
対策にはコンテキストに応じたエスケープ処理、CSP(Content Security Policy)ヘッダーの設定、フレームワークの自動エスケープ機能の活用が重要です。
Q3. CSRF(クロスサイトリクエストフォージェリ)攻撃の防御策として最も効果的なのはどれか?
A. SQLクエリのパラメータ化 B. CSRFトークンの使用とSameSite Cookie属性の設定 C. 入力値の文字数制限 D. HTTPSの導入
答えを見る
正解: B
CSRFはユーザーの認証済みセッションを悪用して、意図しないリクエストを送信させる攻撃です。効果的な防御策は以下の組み合わせです。
-
CSRFトークン(Synchronizer Token Pattern)
- サーバーがランダムなトークンを生成し、フォームに埋め込む
- リクエスト時にトークンを検証し、正規のフォームからの送信か確認
-
SameSite Cookie属性
SameSite=Lax: クロスサイトのGETリクエストのみCookie送信を許可SameSite=Strict: クロスサイトリクエストではCookieを一切送信しない
-
Double Submit Cookie Pattern
- Cookieとリクエストヘッダーでトークンを二重に送信
Aはsql injection対策、CはXSSやバッファオーバーフロー対策、DはMITM対策であり、CSRFには直接効果がありません。
Q4. 以下のSQLインジェクション攻撃パターンのうち、Time-based Blind SQLインジェクションに該当するのはどれか?
A. ' UNION SELECT username, password FROM users --
B. ' AND 1=CAST((SELECT version()) AS int) --
C. ' AND (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END) --
D. ' OR '1'='1' --
答えを見る
正解: C
SQLインジェクションの主な攻撃パターンは以下の通りです。
| パターン | 特徴 | 該当する選択肢 |
|---|---|---|
| UNION-based | UNION句でクエリを結合し、別テーブルのデータを取得 | A |
| Error-based | 意図的にエラーを発生させ、エラーメッセージから情報を取得 | B |
| Time-based Blind | pg_sleep()等で応答遅延を発生させ、条件の真偽を判定 | C |
| Boolean-based Blind | 条件式の真偽でレスポンスの違いを観察 | D(の発展形) |
Time-based Blind SQLiでは、データベースの応答時間の差を利用して情報を1ビットずつ抽出します。pg_sleep(5)(PostgreSQL)やSLEEP(5)(MySQL)、WAITFOR DELAY(SQL Server)が使用されます。レスポンス内容が変わらない場合でも攻撃可能なため、検出が困難です。
Q5. OWASP API Security Top 10 (2023) における「BOLA(Broken Object Level Authorization)」の説明として正しいのはどれか?
A. APIエンドポイントの認証が欠如している B. APIリクエストのレート制限が設定されていない C. APIがオブジェクトIDを推測可能な形で公開し、他ユーザーのオブジェクトにアクセスできる D. APIのレスポンスに機密情報が含まれている
答えを見る
正解: C
**BOLA(Broken Object Level Authorization)**は、OWASP API Security Top 10で最も深刻な脆弱性(API1
)です。IDOR(Insecure Direct Object Reference)とも呼ばれます。# 正常なリクエスト(自分の注文を取得)
GET /api/v1/orders/12345
Authorization: Bearer <user_a_token>
# BOLAを悪用(他ユーザーの注文を取得)
GET /api/v1/orders/12346 ← IDを変更するだけ
Authorization: Bearer <user_a_token>
攻撃者はオブジェクトIDを推測・列挙することで、他ユーザーのデータにアクセスします。防御策は以下の通りです。
- オブジェクトレベルの認可チェック: 各リクエストでオブジェクトの所有者を検証
- UUIDの使用: 連番IDではなくUUIDv4を使用して推測を困難にする
- 認可ミドルウェア: 全APIエンドポイントに一貫した認可チェックを適用
Q6. ペネトレーションテストにおける「ブラックボックステスト」と「ホワイトボックステスト」の違いとして正しいのはどれか?
A. ブラックボックスは内部情報あり、ホワイトボックスは外部情報のみ B. ブラックボックスはツールのみ使用、ホワイトボックスは手動テストのみ C. ブラックボックスは事前情報なしで実施し、ホワイトボックスはソースコードやアーキテクチャ情報を基に実施する D. ブラックボックスはWebアプリ向け、ホワイトボックスはネットワーク向け
答えを見る
正解: C
ペネトレーションテストのアプローチには3つのタイプがあります。
| タイプ | 事前情報 | 特徴 | 適用場面 |
|---|---|---|---|
| ブラックボックス | なし | 外部攻撃者の視点でテスト。URLと基本機能のみ知っている状態 | 外部脅威のシミュレーション |
| グレーボックス | 部分的 | 認証情報やAPI仕様等の一部情報を提供 | 最もコスト効率が高い |
| ホワイトボックス | 完全 | ソースコード、アーキテクチャ図、DB設計等を全て提供 | 網羅的な脆弱性発見 |
ブラックボックスは実際の攻撃者を模倣しますが、カバレッジが低く時間がかかります。ホワイトボックスは網羅性が高いですが、コストが高くなります。実務ではグレーボックスが最もバランスが良いとされています。
Q7. APIセキュリティにおいて、GraphQL特有のセキュリティリスクとして最も注意すべきなのはどれか?
A. CORSの設定ミス B. クエリの深さ・複雑さによるDoS攻撃(Query Depth Attack) C. Basic認証の使用 D. セッションの固定化
答えを見る
正解: B
GraphQL特有のセキュリティリスクとして、クエリの深さ・複雑さによるDoS攻撃が最も重要です。
# Query Depth Attack の例(ネストの深いクエリ)
query {
user(id: 1) {
friends {
friends {
friends {
friends {
friends {
# 無限にネスト可能 → サーバーリソース枯渇
name
}
}
}
}
}
}
}
GraphQL特有のリスクと対策は以下の通りです。
| リスク | 説明 | 対策 |
|---|---|---|
| Query Depth Attack | 深くネストしたクエリでサーバー負荷 | クエリ深度制限(maxDepth) |
| Query Complexity Attack | コストの高いフィールドの大量取得 | クエリコスト分析 + 上限設定 |
| Batching Attack | 1リクエストに大量のクエリを含める | バッチサイズ制限 |
| Introspection Leak | スキーマ全体が露出 | 本番でIntrospectionを無効化 |
| Field Suggestion | エラーメッセージからフィールド名が推測可能 | フィールドサジェスションの無効化 |
A、C、Dは GraphQL に限らず一般的なWebアプリケーションのリスクです。
Q8. CVSSv3.1スコアが9.8の脆弱性のBase Metricsとして最も適切な組み合わせはどれか?
A. AV
/AC/PR/UI/S/C/I/A B. AV/AC/PR/UI/S/C/I/A C. AV/AC/PR/UI/S/C/I/A D. AV/AC/PR/UI/S/C/I/A答えを見る
正解: A
CVSSv3.1スコア9.8はCriticalレベルの脆弱性です。選択肢Aのベクター文字列を解析すると以下の通りです。
| 指標 | 値 | 意味 |
|---|---|---|
| AV | Network | ネットワーク経由で攻撃可能 |
| AC | Low | 攻撃の複雑さが低い |
| PR | None | 権限不要 |
| UI | None | ユーザー操作不要 |
| S | Unchanged | スコープ変更なし |
| C | High | 機密性への影響: 高 |
| I | High | 完全性への影響: 高 |
| A | High | 可用性への影響: 高 |
これは典型的な認証不要でリモートから悪用可能な脆弱性(例: 未認証のSQLインジェクション、リモートコード実行)のプロファイルです。
他の選択肢のスコア目安:
- B: 約2.0(物理的アクセス不要だが複雑で影響が限定的)
- C: 約6.1(Reflected XSS等)
- D: 約2.4(物理的アクセスが必要な脆弱性)
合格基準
- 合格スコア: 80%(8問中7問以上正解)
- 不合格の場合は、Step 4の各レッスンを復習してください
「脆弱性診断は知識と実践の両輪だ。次のStep 5では、セキュリティを組織の仕組みとして定着させる方法を学ぶ」 — 佐藤CTO
推定読了時間: 15分