やり取り型攻撃(やりとりがたこうげき)とは | 意味や読み方など丁寧でわかりやすい用語解説
やり取り型攻撃(やりとりがたこうげき)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
やりとりがたこうげき (ヤリトリガタコウゲキ)
英語表記
Interactive attack (インタラクティブ アタック)
用語解説
やり取り型攻撃とは、コンピュータシステムやネットワーク上で行われる通信の「やり取り」や「流れ」そのものを悪用して、不正な操作や情報の窃取を行うサイバー攻撃の一種である。単に情報を盗み見るだけでなく、正規の通信に介入したり、過去の通信データを再利用したりすることで、システムを欺き、認証を突破したり、意図しない動作をさせたりする点が特徴だ。システムがユーザーや他のシステムと交わすメッセージ、認証プロセス、セッション状態といった「対話」の脆弱性を狙うため、このような名称で呼ばれる。システムエンジニアを目指す上で、このような攻撃がどのように行われ、どのように防御すべきかを理解することは非常に重要となる。
やり取り型攻撃の典型的な例として、リプレイ攻撃、中間者攻撃、セッションハイジャックなどが挙げられる。
リプレイ攻撃(Replay Attack)は、正規のユーザーが行った通信内容を盗聴し、その通信を後で攻撃者がそっくりそのまま再送することで、システムを欺く手法である。たとえば、ユーザーがログインする際の認証情報(IDとパスワード)がネットワーク上を流れるのを傍受し、その情報を攻撃者が改めてサーバーに送信することで、正規のユーザーとしてシステムに侵入しようとする。これは、たとえ認証情報が暗号化されていたとしても、暗号化されたデータそのものを再送するだけで認証が通ってしまう場合に有効な攻撃だ。対策としては、通信にタイムスタンプを付与し、古いタイムスタンプを持つメッセージを拒否する、一度しか使えない認証情報(ワンタイムパスワード)を用いる、あるいはチャレンジレスポンス認証のように、毎回異なる質問(チャレンジ)に対して正しい応答(レスポンス)を生成させる仕組みを導入し、通信が使い回されないようにすることが一般的である。
中間者攻撃(Man-in-the-Middle Attack, MitM)は、攻撃者が通信を行う二者間(例えば、ユーザーとウェブサーバー)の間に割り込み、両者の通信を盗聴・改ざんする手法である。攻撃者は、ユーザーにとってはウェブサーバーに、ウェブサーバーにとってはユーザーになりすますことで、あたかも正規の通信相手であるかのように振る舞う。この結果、ユーザーがサーバーに送る情報はすべて攻撃者を経由し、サーバーがユーザーに送る情報もまた攻撃者を経由することになる。これにより、攻撃者は通信内容をリアルタイムで監視したり、意図的に改ざんしたりすることが可能になる。例えば、ウェブサイトがSSL/TLSによって暗号化されている場合でも、攻撃者がユーザーに対して偽の証明書を提示し、自身を正規のサイトであるかのように見せかける「SSLストリッピング」のような手法も存在する。この攻撃を防ぐためには、公開鍵証明書の正当性を厳しく検証することや、VPN(仮想プライベートネットワーク)のように信頼できる暗号化された経路を利用することが有効だ。
セッションハイジャック(Session Hijacking)は、ユーザーが一度システムにログインして確立された「セッション」を攻撃者が乗っ取ることで、認証なしにシステムへのアクセスを継続する手法である。多くのウェブアプリケーションでは、ユーザーがログインすると、そのユーザーを識別するための一時的な情報である「セッションID」が発行され、通常はクッキーなどに保存されてブラウザとサーバー間でやり取りされる。攻撃者は何らかの方法でこのセッションIDを盗み出し、自身のブラウザに設定することで、正規のユーザーとして振る舞い、本来アクセス権のない情報にアクセスしたり、不正な操作を行ったりする。セッションIDは、URLのパラメータに含まれていたり、HTTPヘッダに含まれていたりするが、これらが推測されやすい、あるいは盗聴されやすい状況にあると攻撃のリスクが高まる。この攻撃を防ぐには、セッションIDを推測されにくい十分なランダム性を持つものにすること、HTTPS(SSL/TLS暗号化されたHTTP)を常に使用してセッションIDの盗聴を防ぐこと、セッションIDと関連付けてIPアドレスなどの情報を管理し、不審なIPアドレスからのアクセスを拒否するなどの対策が必要となる。
これらのやり取り型攻撃は、通信プロトコルやアプリケーションが持つ「状態」や「流れ」を悪用する点で共通している。システムの設計者は、通信が単なる情報の送受信だけでなく、時間軸やシーケンス、相手との関係性といった要素を持つことを意識し、それらの要素が攻撃に利用されないよう堅牢なメカニズムを組み込む必要がある。認証の多要素化、通信内容の暗号化、セッション管理の厳格化、そしてプロトコル設計における再送攻撃や中間者攻撃への耐性を持たせることなどが、これらのやり取り型攻撃に対する基本的な防御策となる。システムエンジニアは、単に機能を実装するだけでなく、その機能がどのような環境で、どのような「やり取り」を経て利用されるのかを深く理解し、潜在的な攻撃経路を塞ぐ視点を持つことが求められる。