情報処理安全確保支援士試験問題で出題されるハッキングの基本

基本的な手順を覚える
未経験者の最大の弱点
実務経験がない方が情報処理安全確保支援士の午後問題でつまづく1つの要因に、一般的なハッキングの手順を理解していないことが挙げられます。ブルートフォース攻撃など、個々の攻撃手法は理解していたとしても、全体的な手順を理解していないために、問題文をストーリーとしてとらえることができず、イメージしながら読むことができません。
このページでは、一般的な攻撃の手順を理解することで、問題文のストーリーを理解しやすくし、問題文の読むスピードや正確性を向上させることを目指します。
攻撃の対象
試験で出題される主な攻撃対象は、社内サーバ・Webサーバ・Webブラウザがあります。
社内サーバの場合、攻撃対象となる企業の社内サーバにアクセスし、主に機密情報の窃取やファイルの破壊、暗号化などを行います。特に、最近では、機密情報を窃取した上で、ファイルを暗号化し、復号と見返りに金銭を要求するランサムウェアが問題となっています。金銭を断ると窃取した機密情報がダークウェブなどに漏えいされるという二重脅迫型のランサムウェアが増加しています。攻撃者は、管理者権限を奪取し、社内サーバを管理下に置く(乗っ取る)ことを目指します。
Webサーバの場合、他人のID・パスワードにより不正アクセスし、個人情報を窃取したり、攻撃者に送金したりします。多要素認証の導入が主な対策となります。また、Webサーバ内のデータを消去や改ざんする攻撃も多く出題されています。
Webブラウザの場合、WebブラウザのHTTPリクエストやHTTPレスポンスを悪用し、Webブラウザが意図しない動作をするようにします。これにより、攻撃者は他人のWebブラウザを通じ、攻撃対象となるWebサーバを攻撃することができます。
主な攻撃の手順
攻撃対象の公開情報(ホームページ。SNSなど)をもとに、従業員の情報やメールアドレスなどの組織情報のほか、ドメイン名などネットワーク情報を収集します。
- 公開情報の収集で入手したドメイン名からIPアドレスやDNSサーバを特定します。
- 特定したIPアドレスのうち、pingコマンドによりサーバが稼働するIPアドレスを特定します。
- 稼働するIPアドレスに対しポートスキャンを行うことにより稼働するサービス(ポート番号)を特定します。ポートスキャンは、接続時にログに残ることから、攻撃対象である接続先に検出されやすいという弱点があります。そのため、SYNスキャン、ステルススキャン、ハーフポートオープンスキャンなど、ログに残りにくい方法が利用されます。
- 稼働するサービスのアプリケーション、バージョンなどの情報を収集します。具体的には、サービスに接続した際に表示されるウェルカムバナーにより把握します。
- 得られたアプリケーション、バージョンなどの情報が、ベンダーや公的機関などが公開する脆弱性情報に掲載されているか確認します。
- 得られた脆弱性情報に対する攻撃手法(Exploit)が公開されている場合もあります。
- Exploitの内容によっては容易にアクセス権限を取得でき、攻撃対象のサーバにログインすることができます。
- ログインするためのIDを特定します。メールアドレスのほか、これまでの情報収集で得られた生年月日などから推測します。
- パスワードを特定するため、パスワードクラッキングを行います。具体的には、辞書攻撃、総当たり攻撃、レインボーテーブル攻撃、パスワードスプレー攻撃などがあります。
- アクセス権の取得に成功した場合、後処理としてバックドアの作成や痕跡の消去を行うため、管理者権限の奪取を目指します。
- 試験問題上は、権限昇格の具体的な手法を学ぶ必要はありません。
- 権限昇格によりアクセス権を取得したとしても、パスワードの変更などにより再びアクセスすることができなくなる場合があります。
- そこで、バックドアを作成することにより、管理者権限でいつでもアクセスする環境を構築します。
- 具体的には、攻撃者用のアカウントの追加、ネットワーク系のサービス(リモートデスクトップ、netcat、xinetdなど)の利用、アプリケーションのインストールなどがあります。
- バッグドアを隠ぺいします。具体的には、ファイルやサービス・プロセスの名前を紛らわしくするなどの方法があります。
- ログを消去します。具体的には、ファイルやレコードの消去、レコードの改ざんなどがあります。
- 上記の方法により痕跡を消去することができない場合は、痕跡をカモフラージュします。具体的にはログレコードを増やす方法があります。
Webアプリケーションへの攻撃
秘密情報の漏えいを目的とした攻撃
秘密情報を漏えいさせる方法として、本人になりすましてログインする方法と公開が予定されていないファイルへアクセスする方法があります。
- 本人になりすましてログインする方法
- 本人のID・パスワードを利用してログインする
- セッションを奪取する
- 公開が予定されていないファイルへアクセスする方法
- ディレクトリトラバーサル(パストラバーサル)
- サーバサイドリクエストフォージェリ(SSRF)
- SQLインジェクション
本人になりすましてログインする方法
認証を要するWebアプリケーションにおいては、本人のアカウントにログインすることができれば、秘密情報を取得できる可能性が高まります。
ID・パスワードの推測
ID・パスワードの強度に不足がある場合は、攻撃者に推測されやすく、不正ログインのリスクが高まります。強度が不足する事例としては、IDにメールアドレスを使用する、パスワードの桁数や文字種が少ない、パスワードに日付を使用するといった場合が挙げられます。
また、外部の目につく場所にパスワードを保管するなど、ID・パスワードの管理に不備がある場合は、ID・パスワードが漏えいするリスクが高まります。技術的にセキュリティを強化したとしても、人から聞き出すソーシャルエンジニアリングによりIDやパスワードが漏えいすることもあるため、管理上の問題も重視する必要があります。
フィッシング(ID・パスワードの窃取)
ID・パスワードを入手する他の方法としては、本人のIDとパスワードを窃取するフィッシングがあります。情報処理安全確保支援士試験で出題されるフィッシングのほとんどが、メールの本文にわなサイトのURLを掲載し、IDとパスワードを入力させる方法です。この方法が成功する前提として、メールアドレスを知っていること、メール本文に違和感がないことが必要です。そのために、事前の情報取集が重要となります。
認証の不備
パスワードの入力回数を制限をしない、複数の文字種を使用しないパスワードを許容する、多要素認証を導入しないなど、強度が不十分な認証方式を採用した場合、不正にログインされるリスクが高まります。
セッションの奪取(乗っ取り)
ID・パスワードが分からなくても、セッションを奪取することにより本人のアカウントを乗っ取ることができます。
そもそも、ユーザー認証を必要とするWebアプリケーションでは、操作性を考慮して、ログアウトするまでログインの状態を維持する必要があります。しかし、HTTPでは、HTTPリクエストとHTTPレスポンスを合わせたセッションごとに通信が完結し、次回のHTTPリクエストには前回の内容を引き継ぐことができません(ステートレス)。
そこで、WebサーバはセッションIDをレスポンスヘッダ(Set-Cookie)に含めてブラウザに通知し、ブラウザはそれ以降のリクエストヘッダにセッションIDをCookieに含めてWebサーバに通知します。これにより、HTTPリクエストのたびにログインを行わなくてもログイン状態を保つことができます。
この仕組みを悪用して本人になりすましてログインする手法が、セッションハイジャックやセッションフィクセーション(セッションIDの固定化)です。
セッションハイジャックは、本人のセッションIDをHTTPリクエストのCokkieヘッダに設定し、本人がログインしたセッションを乗っ取る方法です。本人のセッションIDを得るための方法は、セッションIDを類推する方法や、クロスサイトスクリプティング(XSS)によりcookieを窃取する方法があります。
また、セッションフィクセーションは、攻撃者が用意したセッションIDで本人にログインさせた上で、攻撃者が同じセッションIDをHTTPリクエストのCokkieヘッダに設定することにより、本人がログインしたセッションを乗っ取る方法です。攻撃者が用意したセッションIDを本人のブラウザにCookieとして設定する方法は、XSSやHTTPヘッダインジェクションが考えられます。
公開が予定されていないファイルへのアクセス
ログインを要しないWebアプリケーションにおいても、公開が予定されていないファイルに直接アクセスすることにより、秘密情報を取得できる可能性が高まります。ここでは、ディレクトリトラバーサル、サーバサイドリクエストフォージェリ(SSRF)、SQLインジェクションによる攻撃手法を解説します。
ディレクトリトラバーサル(パストラバーサル)
相対パスを指定しWebアプリケーションがアクセスを想定しないファイルに直接アクセスすることによって、秘密情報を取得します。
サーバサイドリクエストフォージェリ(SSRF)
リクエストに含まれる接続先のパスのクエリ文字列を改ざんすることにより、標的のサーバを踏み台として、別のサーバにアクセスし、秘密情報を取得します。
SQLインジェクション
リクエストに不正なSQL文を含めることで、不正なSQLが実行され、レスポンスを通じてWebサーバ内のデータベースのレコードがブラウザに返されます。
情報の改ざんを目的とした攻撃
Webアプリケーション内の情報を改ざんを目的とした攻撃手法として、以下の3つが挙げられます。
SQLインジェクション
リクエストに不正なSQL文を含めることで、不正なSQLが実行され、Webサーバ内のデータベースのレコードを上書き(改ざん)します。
クロスサイトリクエストフォージェリ(CSRF)
わなサイトから不正なスクリプトを受け取ったブラウザが、標的のWebサイトに不正なリクエストを送信し、Webサーバ内のデータを上書き(改ざん)します。
バッファオーバーフロー(BOF)
メモリ上のバッファ領域をあふれさせ、Webサーバ内のデータを上書き(改ざん)します。
不正な決済を目的とした攻撃
最後に、不正な決済を目的とした攻撃として、以下の2つが挙げられます。
ID・パスワードの窃取
フィッシングやセッションの奪取により本人になりすましてログインし、決済します。
クロスサイトリクエストフォージェリ(CSRF)
わなサイトから決済画面に直接アクセスし、本人が意図しない決済を行います。