脆弱性(vulnerability)とは、情報システムに存在するセキュリティ上の欠陥・弱点のことである。脆弱性を突かれると、不正アクセスや情報漏えい、システムの改ざんなどの被害につながる。試験では、脆弱性がなぜ生まれるのか、代表的な脆弱性にはどのようなものがあるか、そしてどう対策するかを整理して理解しておく必要がある。
脆弱性が生まれる主な原因
- 設計・実装の不備:設計段階での考慮漏れや、コーディング時の入力値チェック漏れなどのミスが混入することで脆弱性が生まれる。
- 設定不備:初期設定のまま運用したり、不要なポートやサービスを開放したままにしたりすることで、意図せず攻撃の糸口を与えてしまう。
- 修正プログラムの未適用:既知の脆弱性に対する修正プログラム(パッチ)が公開されているにもかかわらず適用が遅れ、攻撃対象として残り続ける。
代表的な脆弱性の種類
- バッファオーバーフロー:プログラムが確保したメモリ領域(バッファ)を超えるデータを書き込ませることで、プログラムを誤動作させたり、不正なコードを実行させたりする。
- SQLインジェクション:Webアプリケーションの入力欄に不正なSQL文を注入し、データベースを不正に操作したり情報を盗み出したりする。
- クロスサイトスクリプティング(XSS):脆弱なWebサイトに悪意あるスクリプトを埋め込み、閲覧者のブラウザ上で実行させることで、Cookie情報の窃取や偽の画面表示を行う。
- クロスサイトリクエストフォージェリ(CSRF):利用者が別サイトにログインした状態を悪用し、利用者の意図しない操作(送金や退会など)を勝手に実行させる。
SQLインジェクションは不正なSQL文でデータベースを直接狙う攻撃、クロスサイトスクリプティング(XSS)は閲覧者のブラウザ上でスクリプトを実行させる攻撃、クロスサイトリクエストフォージェリ(CSRF)はログイン済みの利用者に意図しない操作をさせる攻撃と、狙う対象の違いで区別する。
ゼロデイ攻撃
脆弱性が発見されてから修正プログラムが提供されるまでには、どうしても時間差が生じる。この、対策がまだ存在しない期間を狙って行われる攻撃を「ゼロデイ攻撃」と呼ぶ。パッチが存在しないため、通常のパッチ適用による対策が間に合わない点が特徴である。
ゼロデイ攻撃は「修正プログラムが存在しない期間」を突く点が最大の特徴。パッチマネジメントのような事後対応が効かないため、WAFの導入など攻撃の影響そのものを軽減する対策と組み合わせて理解しておくとよい。
脆弱性への対策
- パッチマネジメント(パッチ管理):OSやソフトウェアの修正プログラムの提供状況を把握し、検証のうえ速やかに適用する運用の仕組み。
- 脆弱性診断(脆弱性スキャン・ペネトレーションテスト):ツールや専門家による疑似的な攻撃を通じて、システムに存在する脆弱性を洗い出す。
- 脆弱性情報の収集:JVN(Japan Vulnerability Notes)やCVE(Common Vulnerabilities and Exposures)などの情報源を定期的に確認し、自組織のシステムへの影響を把握する。
- WAF(Web Application Firewall)の導入:Webアプリケーションへの不正な通信を検知・遮断し、脆弱性が残っていても攻撃による影響を軽減する。
試験では、脆弱性の種類とその原因、対策の組み合わせを問う問題が多い。「攻撃を防ぐ対策」なのか「攻撃を検知する対策」なのか、「事前の予防」なのか「事後の被害軽減」なのかを意識して整理しておくとよい。
ぞうログ