現代のコンピューターは、ネットワーク通信がほぼ必須といっていいほど身近なものになっています。インターネットを使い、情報収集や動画、音楽に加えチャットなどのコミュニケーションができるようになりました。そのような通信を行うには接続先があり、頻繁に我々のコンピューターから見ず知らずのコンピューターへと接続して通信を行っています。
しかし正常な通信だけではなく、不正な通信、たとえばマルウェアやフィッシング等にかかってしまうと、C&C 1サーバーとの通信や偽サイトにアクセスしてしまい、情報漏洩等のインシデントに繋がる恐れがあります。
普通の人間であればC&Cサーバーへの通信が起こっていることに気づけるわけもなく、知らぬ間に情報が抜き取られてしまいます。
そういったことを起こさないためには、どうしたらいいのでしょうか?
今回はいくつかあるソリューションの中から、IDS/IPSに焦点を当てます。
「WinDivert」を利用して、Windowsで動作する簡単なIDS/IPSを自作します。
プログラミング言語は、C言語を使用します。
今回は、通信の制御を行うので、ネットワークの知識が必要になるかもしれません。
なるべく詳細に解説・説明を行いますが、わからない単語など出てきたら適宜Google等で検索してみてください。
本書籍の情報について、可能な限り正確な情報を掲載するよう努めています。しかし、誤情報が入り込んだり、情報が古くなったりすることもあります。必ずしも正確性を保証するものではありません。また、合法性や安全性なども保証しません。
本書籍の内容によって生じた損害等の一切の責任を負いかねますので、ご了承ください。
過去に頒布した当サークルの技術書については、以下サイトでも頒布しています。
ご興味ある方は、以下のリンクからご確認ください。
・技術書典 : https://techbookfest.org/organization/5096105316450304
・Booth : https://frees.booth.pm/
ここでは、「IDS」および「IPS」についてそれぞれ説明します。
IDS/IPSは、単体の機器で動作するネットワーク型と、コンピューターにインストールするようなホスト型のふたつに分かれます。基本的にはセキュリティー装置と分類されることが多く、企業のネットワークやみなさんのコンピューターにも、もしかしたらあるかもしれません。
IDSはIntrusion Detection Systemの略で、日本語では「侵入検知システム」と呼ばれます。
ネットワーク上に流れる通信を監視して、不正な通信を発見した際に通知を行うシステム、またはアプリケーションのことです。
図1.1はネットワーク型のIDSの例で、スイッチングハブ等のポートミラーリング機能を利用して、流れている通信をコピーします。通信を確認し、侵入されていると検知したら、ログに出力されます。ログの出力をもとに、侵入されているのか判断を行います。
IPSは、Intrusion Prevention Systemの略で、日本語では「不正侵入防止システム」と呼ばれます。
ネットワーク上に流れる通信を監視して、不正な通信を発見した際に通信をブロックするシステムまたはアプリケーションです。
図1.2はネットワーク型のIPSの例で、ネットワーク機器間に設置して通信を監視します。通信を確認し、侵入やよろしくない不正な通信を確認した場合、通信を流さずに止めることが可能です。
IDSとIPSは似ていますが、不正な通信を検知するのがIDS、不正な通信を検知してブロックするのがIPSです。
IDS/IPSには、いくつか種類が存在しネットワークの流れる通信を監視するIDSおよびIPSは、NIDS(Network-based Intrusion Detection System)およびNIPS(Network-based Intrusion Prevention System)と呼ばれます。
ネットワーク型IDS/IPSが搭載されたネットワーク機器の代表としては、
・Fortigate シリーズ : https://fortinet.com/jp/products/ips
・Cisco Secure IPS : https://www.cisco.com/c/ja_jp/products/security/ngips/index.html
・Netstable : https://www.mcsecurity.co.jp/
などが挙げられます。
サーバーやクライアントPCにインストールするIDS/IPSは、HIDS(Host-based Intrusion Detection System)およびHIPS(Host-based Intrusion Prevention System)と呼ばれます。
HIDS/HIPSはNIDS/NIPSと同じで、ネットワークパケットを監視・ブロックする機能を持ちます。NIDS/NIPSの違いとしては、実行中のプロセス、ファイル、およびレジストリキーなどホストコンピューターの状態を監視して、不正な動作等を検知・ブロックします。
商用製品としては、
・Symantec Endpoint Protection : https://licensecounter.jp/symantec/product/sep/
・ESET Endpoint Security : https://help.eset.com/ees/7/ja-JP/idh_hips_main.html
などがあり、アンチウイルスソフトに付属していることが多いです。
OSSのIDS/IPSは以下のようなものがあります。
・Snort : https://www.snort.org/
・Suricata : https://suricata.io/
・OSSEC : https://www.ossec.net/
サーバーやクライアントPCにインストールするIDS/IPSにも、OSSECのようなOSやアプリケーションのログを見るIDSと、SnortやSuricataなどのホスト自身で送受信するパケットを検閲するネットワーク型IDS/IPSと分けられます。
今回自作するものは、ホストマシンにインストールして自身が送受信するパケットの検知・防御をホスト側で行う、ホストインストール型 ネットワークIDS/IPSとなります。
コンピューターまたはネットワークで起こる通信等を「イベント」といい、IDS/IPSはイベントを監視して分析を行います。
どのような種類のイベントを検知できるかを以下で説明します。
IDS/IPSには、侵入を検知する方法がいくつかあります。代表的な例をふたつ紹介します。
シグネチャベース検出は、既知の攻撃パターンや、マルウェアの特徴的なパターンを監視し、それらのシグネチャに一致するトラフィックや活動を検出します。
シグネチャデータベースを使用して、既知の攻撃に対して警告またはブロックのアクションを実行します。
アノマリベース検出は、通常のトラフィックおよびアクティビティーのベースラインを学習し、異常な振る舞いを検出します。これにより、未知の攻撃や新たな脅威に対しても対策できる可能性が高まります。
アノマリベースIPSは、異常なトラフィック、不審なユーザーの活動、リソースの不審な利用などを検出することができます。
インバウンド通信とは、インターネットなどの外部環境から自組織等のネットワーク・コンピューターにアクセスする通信を意味します。
自組織でWebサーバーなどの公開サーバーを公開しており、ユーザーがWebサーバーにアクセスしにいく通信がアウトバンドです。
公開されているサーバーで誰でもアクセスできるため、攻撃を受けます。IDS/IPSは、通信の内容を読み取り、攻撃されているか検知することが可能です。
図1.3は、Apache Log4j(CVE-2021-44228)1の脆弱性を利用した攻撃の例です。
この脆弱性は、Javaのログライブラリーによって起こり、リモートから攻撃が可能な脆弱性です。
①では攻撃者が「{jndi:ldap://~」の内容で攻撃のコードをWebサーバーに向けて送信しています。WebサーバーやWebサーバーに到達する前にIDS/IPSがある場合、「{jndi:ldap://」をシグネチャとして登録していると、攻撃を検知できる可能性があります。
アウトバンド通信とは、自組織等の内部ネットワーク・コンピューターから外部へのデバイスやシステムに対して送信される通信を意味します。
例として、コンピューターがマルウェアに感染してC&Cサーバーにアクセスしていたとします。IDS/IPSがネットワーク上に設置されているか、対象マシンにインストールされており、シグネチャとしてC&CサーバーのIPアドレスリストを定期的に取得しておけば、ルールに合致した際に、コンピューターとC&Cサーバーとの通信を検知することができ、侵入されていることに気づくことができます。
ほかにも、マルウェア固有の通信を特定できたり、フィッシングを検知したりと、様々なことが可能です。
IDS/IPSは、導入しただけでは効果はあまり発揮されません。せっかく導入したけどログの確認を怠り、誤検知か異常なのか検知内容がわからず運用がうまくいかないこともしばしあります。
機器の導入だけではなく、検知したイベントの検証にも時間を費やさなければいけません。そして、実際に攻撃を受けているのか侵入されているのか、どのような攻撃を行ったのかを検知されたログから推測する技術も必要です。
運用する人材の力も向上させることにより、IDS/IPSの効果がより高まります2。