ゼロトラストとは「何も信じない」ことを前提とした、セキュリティネットワークの見直しを推進する考え方です。
ここでは、ARP攻撃によるセキュリティインシデントと、セグメントの分割による対策について書いてみます。
下図はファイアウォールの内側にある社内ネットワークをふたつのセグメントに分離した例です。セグメントとは、LANのネットワークを構成する範囲の単位です。リピータハブやスイッチングハブで区切られる範囲を指しています。ひとつの空間をドア付きの壁によって仕切るイメージです。
この例では、太郎君を含む利用者のパソコン(クライアントPC)はすべてPCセグメントに設置され、サーバ類はサーバーセグメントに設置しています。すべての利用者はファイアウォールのフィルタリングを介して、LDAPサーバで利用者認証が行われます。ですので、PCセグメントからLDAPサーバへのアクセスはHTTPS(HTTP over TLS)で許可されています。また、社内のPC利用者から人事情報サーバへのアクセスはブラウザ経由による参照のみが許可されています。
サーバー管理用PCは、システム運用者がSSH(Secure SHell)によるサーバ類の遠隔操作するためのパソコンです。一般的にサーバ機器は、専用のサーバルームやデータセンターに設置されます。システム運用者の作業場所とは物理的に離れた場所に設置されています。サーバ類を運用保守する毎に、サーバルームへ何度も行って帰って来るのは非効率なので、SSHというプロトコルを用いてサーバを遠隔操作します。
そのため、サーバー管理用PCはファイアウォールのフィルタリングを介して、SSHによるサーバーセグメントへのアクセスを許可します。
このとき、太郎君のPCがマルウェアに感染したと仮定します(下図)。
マルウェアに感染した太郎君のPCは、ARP(Address Resolution Protocol)ポイズニング攻撃を受け、ARPテーブルは書き換えられます。ARPとは、IPアドレスからMACアドレスを調べる仕組みです。ARPテーブルは、ARPによって割り出した、IPアドレスとMACアドレスの対応表です。通常はローカルのPCにキャッシュとして保存されています。
Windowsであれば、ARPテーブルの内容は「arp」コマンドで確認できます。
マルウェアの感染による、ファイアウォールのARPテーブルと、サーバー管理用PCのARPテーブルは、下記の如く太郎君のPCと誤認される情報に書き換えられます。
マルウェアは太郎君のPCで通信を盗聴し、サーバー管理用PCを使用しているシステム運用者の利用者IDとパスワードを入手します。入手したIDとパスワードで、太郎君のPC上でLDAPサーバと、人事情報サーバにSSHで接続する攻撃が可能となります。
このセキュリティインシデントは、ファイアウォールとサーバー管理用PCの間にマルウェアに感染した一般利用者である太郎君のPCを割り込ませた中間者攻撃を行ったことが原因です。
そこで、社内ネットワークのセグメントを下記のように設計していたらどうでしょうか!?はじめに書いた図では、PCをひとつのセグメントとしていますが、サーバー類を管理するためのセグメントを管理セグメントとして分離します。
この場合、太郎君のPCがマルウェアに感染しても、管理者PCの通信を盗聴するのは困難です。なぜなら、PCセグメント内には、サーバー管理用PCとサーバ類の通信が流れないからです。
仮にサーバー管理用のPCでログインするシステム運用者のIDとパスワードを入手しても、太郎君のPCからサーバー管理用PCになりすまして、サーバにアクセスしてもTCPコネクションの確立は出来ません。
TCPのコネクションは下図のような3ウェイハンドシェイクが使われます。
太郎君のPCがSYNパケットを投げるのは、要求元であるPCセグメントから要求先のサーバーセグメントです。一方、サーバがSYN/ACTを返すのは、サーバーセグメントから管理セグメントの経路をたどります。
太郎君のPCにはサーバからの返信が届かないので、PCとサーバ間でのTCPコネクションの確立を防ぎます。
ゼロトラストによるセキュリティ設計思想のひとつは、セグメントを細かく分割することです。