ITパスポート 2017年 春期 問80
問題文
情報セキュリティを脅かすもののうち、ソフトウェアの脆弱性を修正するパッチを適用することが最も有効な対策となるものはどれか。
選択肢
ア:総当たり攻撃
イ:ソーシャルエンジニアリング
ウ:バッファオーバフロー(正解)
エ:ポートスキャン
🔒 解説は解答すると表示されます
ソフトウェアの脆弱性を修正するパッチを適用することが最も有効な対策となるものはどれか。【ITパスポート 解説】
正解の理由
選択肢のうち、ソフトウェアの設計や実装の欠陥(脆弱性)そのものを直接つぶす対策が最も有効なのは、バッファオーバフローです。バッファオーバフローはプログラムのメモリ処理のミス(ソフトウェアの不具合)を攻撃に使われます。したがって、その不具合を修正する「パッチ(ソフトウェアの修正プログラム)」を当てれば、攻撃が成立しなくなりやすいです。ここで正解は ウ です。
※用語補足:
- パッチ:ソフトウェアの不具合や脆弱性を修正するための更新ファイル。
- バッファオーバフロー:あらかじめ確保した記憶領域(バッファ)以上にデータを書き込んで、隣接するメモリを上書きしてしまう現象。プログラムを不正に動かす手段になる。
解法ステップ
- 問題文のキーワードを確認:「脆弱性を修正するパッチを適用することが有効」
- 各選択肢が「ソフトウェアの脆弱性を直接利用する攻撃」かどうかを判定する。
- ソフトウェアのバグを利用するもの → パッチで直接対処できる可能性が高い。
- 人や設定・認証を狙うもの → パッチでは根本的に防げないことが多い。
- 各選択肢を当てはめる:総当たり攻撃(ア)=認証弱点、ソーシャルエンジニアリング(イ)=人の心理、バッファオーバフロー(ウ)=ソフトのバグ、ポートスキャン(エ)=探索活動。
- 「ソフトウェアの脆弱性を修正する」対策に最も合うものを選ぶ → ウ。
選択肢別の誤答解説
-
ア: 総当たり攻撃(ブルートフォース、brute-force)
- 意味:パスワードなどを片っ端から試す攻撃。
- パッチで根本的に止められるわけではありません。対策は長いパスワード、アカウントロック、レート制限や多要素認証(MFA)などです。
-
イ: ソーシャルエンジニアリング
- 意味:人の心理や信頼を突いて情報を引き出す手口(例:なりすましでパスワードを聞き出す)。
- ソフトウェアの修正(パッチ)では防げません。対策は教育・手順・認証の強化です。
-
ウ: バッファオーバフロー(正解)
- 意味:プログラムがメモリ境界を超えて書き込む不具合を利用され、任意のコード実行などに繋がる。
- その原因となるコードを修正するパッチを当てれば、同じ攻撃はできなくなるため、パッチ適用が非常に有効です。もちろん追加の対策(ASLR、DEP、入力検証など)も有効です。
-
エ: ポートスキャン
- 意味:ネットワーク上で開いているサービスの“入口”を探す行為(探査)。
- ポートスキャン自体は情報収集であり、ソフトの脆弱性修正だけで止められるものではありません。ファイアウォールやアクセス制御で対応するのが一般的です。
よくある誤解
-
「パッチを当てればすべての攻撃が防げる」
- 誤り。パッチはソフトウェアの既知の脆弱性に有効ですが、人的攻撃(ソーシャルエンジニアリング)や弱いパスワードなどには別の対策が必要です。
-
「バッファオーバフローは古い話で現実的ではない」
- 誤り。言語や環境によっては今でも起きます。特にCやC++などメモリ管理を手動で行う言語では注意が必要です。
-
「ポートスキャンは無害だからパッチは不要」
- ポートスキャン自体は攻撃ではなく探査ですが、そこで見つかった脆弱なサービスに対して攻撃が行われます。脆弱性があればパッチが必要ですが、探査対策(ファイアウォール)も同時に重要です。
補足コラム
バッファオーバフローの簡単なイメージ:コップ(バッファ)に水(データ)を注ぐとき、コップを超えてあふれると周りが濡れて(隣接メモリが上書きされ)しまう状態です。攻撃者はその「あふれた」部分に細工をして、本来のプログラムの流れを書き換え、任意の処理を実行させます。
防御手段(代表例):
- パッチ適用:脆弱なコードを修正する最も直接的な対策。
- ASLR(Address Space Layout Randomization:メモリ配置のランダム化)やDEP(Data Execution Prevention:データ領域での実行禁止)などの実行環境による保護。
- 入力検証と安全なコーディング(境界チェックを行う)。
- 安全な言語の選択(例:JavaやPythonはメモリ安全性が高い)。
小さなコード例(脆弱性のイメージ、C言語):
#include <stdio.h>
#include <string.h>
void vulnerable(char *input) {
char buf[8];
strcpy(buf, input); // inputの長さチェックがない → バッファオーバフローの危険
}
int main(int argc, char *argv[]) {
if (argc > 1) {
vulnerable(argv[1]);
}
return 0;
}
上記のようなコードは入力長をチェックしないため、長い入力でバッファをあふれさせられます。修正(パッチ)は strcpy を使わない、あるいは長さチェックを入れる等の方法になります。
FAQ
Q1. パッチを当てるタイミングはいつが良いですか?
A1. 公開されたらできるだけ速やかに。ただし業務影響の確認やテストが必要な場合は段階的にロールアウトします。重要度(緊急度)に応じて優先順位を付けます。
A1. 公開されたらできるだけ速やかに。ただし業務影響の確認やテストが必要な場合は段階的にロールアウトします。重要度(緊急度)に応じて優先順位を付けます。
Q2. 自動更新は常にオンにしてよいですか?
A2. 小規模な個人環境では有効ですが、業務システムでは更新による不具合のリスクもあるため、テスト環境で検証してから本番へ反映する手順が望ましいです。
A2. 小規模な個人環境では有効ですが、業務システムでは更新による不具合のリスクもあるため、テスト環境で検証してから本番へ反映する手順が望ましいです。
Q3. パッチが当てられない古いソフトはどうする?
A3. サポート終了のソフトは脆弱性が残りやすいので、可能なら新しいバージョンへの移行、代替ソフト導入、もしくはネットワーク的に隔離するなどの対処が必要です。
A3. サポート終了のソフトは脆弱性が残りやすいので、可能なら新しいバージョンへの移行、代替ソフト導入、もしくはネットワーク的に隔離するなどの対処が必要です。
Q4. パッチ以外でバッファオーバフローに有効な対策は?
A4. ASLR、DEP、コンパイラのセキュリティオプション、コードレビューや静的解析ツールなど複数の対策を組み合わせる「多層防御」が効果的です。
A4. ASLR、DEP、コンパイラのセキュリティオプション、コードレビューや静的解析ツールなど複数の対策を組み合わせる「多層防御」が効果的です。
関連キーワード: パッチ、脆弱性、バッファオーバーフロー、総当たり攻撃、ソーシャルエンジニアリング、ポートスキャン、ASLR、DEP、CVE、ソフトウェア更新

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

