1.ハニーポット基礎
1.1. ハニーポット基礎
1.1.1. ハニーポットとは
ハニーポットは不正な攻撃者の行動・手法などを観察/分析する受動的/能動的な目的で設置される罠システムのこと。
仮想または実際のコンピューターシステムやネットワークを用いて構築する。
ハニーポット設置の目的は以下の通り。
- 攻撃検出 … ハニーポットは攻撃者の活動を引き寄せ、検出し、その情報を解析/分析する
- 研究と分析 … ハニーポットを攻撃のトレンドや攻撃手法の研究に使用する。
1.1.2. ハニーポットの分類
ハニーポットはその動作環境と仕組みの組み合わせによって種別を分類することができる。
動作環境ではサーバで動作するサーバ型、クライアントで動作するクライアント型がある。
仕組みでは実在環境を用意する高対話型、システムエミュレートする低対話型がある。
- 高対話型ハニーポット … 実際のOSやアプリケーションを利用し、そこに残存している脆弱性などをそのまま不正攻撃者に対して弱点として見せる形式のハニーポット
- 低対話型ハニーポット … 特定のOSやアプリケーションをエミュレーションして監視する形式のハニーポット
1.1.3. ハニーポットの種類
高対話型ハニーポットの特徴と種類
高対話型ハニーポットの特徴は以下の通り。
- 攻撃者に関する情報が多い
- システムやネットワークの構築に手間がかかる
- 実際にOSやアプリケーションが攻撃を受けてしまう可能性がある
高対話型ハニーポットは不正な攻撃者に関して詳細な情報を取得・分析したい場合や、効果的な対策を講じたいような場合に向いている。
また高対話型ハニーポットは以下の通り。
種類 | 説明 | URL |
---|---|---|
HiHat | Web型 | http://hihat.sourceforge.net |
HoneyPi | Python製 | https://github.com/foospidy/HoneyPy |
opencanary | SMB/HTTPエミュレート可能 | https://github.com/thinkst/opencanary |
Capture-HPCNG | クライアント型 | https://github.com/CERT-Polska/HSN-Capture-HPC-NG |
Argos | サーバ型 | http://www.few.vu.nl/argos/ |
低対話型ハニーポットの特徴と種類
低対話型ハニーポットの特徴は以下の通り。
- システムやネットワークの構築が比較的簡便
- 得られる情報量に限りがある
また低対話型ハニーポットは以下の通り。
種類 | 説明 | URL |
---|---|---|
Dionaea | 脆弱性を模したサービスを展開して、マルウェアを収集するためのハニーポット | https://github.com/DinoTools/dionaea |
Honeyd | 仮想ネットワーク内で複数のハニーポットを展開 | https://github.com/DataSoft/Honeyd |
DShield | Web型 | https://github.com/DShield-ISC/dshield |
Glastopf | Webアプリケーション型のハニーポット | https://github.com/mushorg/glastopf |
Cowrie | 中規模の対話型SSHとTelnetのハニーポット。ブルートフォース攻撃やシェルの対話が記録されるようになっている。 | https://github.com/micheloosterhof/cowrie |
Conpot | ICS(工業用プロトコル) | http://www.conpot.org |
Glutton | プロトコル非依存のハニーポット。Golang製 | https://github.com/mushorg/glutton |
Honeytrap | ハニーポットの実行や監視をするためのハニーポット | https://github.com/honeytrap/honeytrap |
WOWHoneypot | Webハニーポット。日本製 | https://github.com/morihisa/WOWHoneypot |
Kippo | SSHハニーポットで攻撃者がSSHにアクセスしようとする試行を記録する | https://github.com/desaster/kippo |
Ghost | USBハニーポット | https://github.com/honeynet/ghost-usb-honeypot |
Snort | ネットワーク侵入検知システム兼ハニーポット | |
Thug | Webハニークライアント | https://github.com/buffer/thug |
1.1.4. ハニーポットの分類ごとの特徴
サーバ型×低対話型ハニーポット
サーバ上にハニーポット環境を構築し、攻撃者からの攻撃を待ち受けるタイプのハニーポット。
特徴は以下の通り。
- 脆弱なサーバ環境をエミュレートしてログを記録しているため、不正なファイルを設置されたり、ファイルを盗まれたりする可能性が低い
- ハニーポット自体に脆弱性があった場合は攻撃を受ける可能性がある
- ハニーポットを検出する仕組みによって攻撃検出を回避される場合がある
サーバ型×高対話型ハニーポット
サーバ上に故意に脆弱な環境を構築し重要そうなファイルなどを設置し攻撃を待ち受けるタイプのハニーポット。
特徴は以下の通り。
- 低対話型のものよりも攻撃ログが正確に記録されやすい
- 攻撃された後のリカバリができるようにアウトバンド通信の制限や設定を適切にする必要がある。
- ハニーポット運用玄人向けの構成
クライアント型×低対話型ハニーポット
通常のPC上にインストールしたハニーポットソフトウェアを利用してさまざまな環境(ユーザーエージェントなど)をエミュレートして悪性のウェブサイトにアクセスしたり、脆弱なソフトウェア(Flash や Adobe Acrobat Reader など)のエミュレートをしてファイルを開き、どのようにマルウェア感染をするかなどのログを取得するタイプのハニーポット。
特徴は以下の通り。
- 脆弱なサーバ環境をエミュレートしてログを記録しているため、不正なファイルを設置されたり、ファイルを盗まれたりする可能性が低い
- ハニーポット自体に脆弱性があった場合は攻撃を受ける可能性がある
クライアント型×高対話型ハニーポット
故意にセキュリティパッチの当たっていないOSやソフトウェアを利用し、悪意のウェブサイトにアクセスしたり、悪性のファイルを開いたりするタイプのハニーポット。
運用のためには通常は利用していないPCを利用し、現状回復が容易にできるようにしておく必要がある。
1.1.5. ハニーポット運用の目的
ハニーポット運用のためには、まずは目的を明確にしてからハニーポットを選定する必要がある。 それは取得したい情報の種類や目的を明確化することにより、より効果的な運用を行うためである。
ハニーポット運用の目的と運用例は以下の通り。
例 | 運用対象 |
---|---|
ランサムウェアwanna cryが現在も活動しているか知りたい | ・Wannacry(pt)が観測できるよう改良された Dionaeaハニーポットを利用する |
Wordpressを運用しているため、Wordpressへの攻撃を観測したい | ・Dockerコンテナ上で動くHoneyPressハニーポットを利用する |
Wordpressプラグインとして利用できるwp-smart-honeypotを利用する | |
Apache Struts2を利用しているサービスを運用しているため、Struts2への攻撃を監視したい | CVE2017-5638 の脆弱性を悪性した攻撃を検出する StrutsHoneypotを利用する |
2016年に流行したIOTボットの活動の調査をしたい | telnet/sshへの攻撃観測できるCowrieハニーポットを利用する |
MongoDBなどのデータベースを狙った攻撃を知りたい | MongoDB-Honeyproxyを利用する |
目的が複数あるので複数のハニーポットを使用したい | 複合ハニーポットのT-Potを利用する |
1.2. ハニーポットの設置と運用
1.2.1. 設置場所
ハニーポットは観測したい攻撃の種類に応じてネットワークに設置する場所を正しく選定することが重要になる。
設置場所の候補とみられそうな攻撃は以下の通り。
場所 | 説明 | 受けそうな攻撃 |
---|---|---|
ISPネットワーク | 光回線終端装置配下 | 不特定多数による攻撃が観測可能 |
DMZネットワーク | DMZのNW配下 | 不特定多数による攻撃/対象NW(IP範囲)に対する攻撃が観測可能 |
内部ネットワーク | 内部のNW配下 | DMZのセキュリティを回避した攻撃/内部からの物理攻撃が観測可能 |
また観測対象とする攻撃、観測環境、観測イベント、観測場所に応じて収集可能な情報が異なるため、適切な方法を検討する必要がある。
- 対象とする攻撃
- Windowsファイル共有の脆弱性、Webサーバの脆弱性、Webブラウザの脆弱性
- 観測環境(OS)
- Windows, Linux, MacOS, Andorid, IOS等
- 観測イベント
- ホスト上のイベント(プロセス/ファイル/レジストリ等)、NW上のイベント(通信ログ、プロトコル解析)
- 観測場所
- 攻撃を待ち受けるための設置場所(内部NW, DMZ, ISP回線上など)
1.2.2. 脆弱な環境/観測環境の構築
脆弱性のあるソフトウェア/OSの入手
脆弱性のある/サポート終了したMicoroSoftのOSはVisual Studioサブスクリプションへの加入で入手できる場合がある。 またグレーではあるが、MASやWeb Archive上のファイルからも入手できるかもしれない。
脆弱性が多数報告されたAdobeFlashPlayerやOracle Java、Adobe Readerも探せば入手可能。
脆弱な環境を作る場合(特に高対話型ハニーポットを動かす場合)は万一システムが乗っ取られても被害を最小限にとどめられるように、パケットフィルタ機能、FWによる防衛、OSの仮想化が重要になる。
仮想化による保護
仮想化によるハニーポット運用は安全面だけでなく、運用面でもメリットをもたらす。 仮想化の方法は以下の通り。
- Linuxのファイルシステム仮想化機能を使用する
- chroot
- jail
- 仮想化ソフトウェア/OSを使用する
- Vmware player/Vmware Exsi
- VirtualBox/Quem/KVM
- proxmoxVE
観測環境の構築
仮想ソフトウェア/OS上で「標的ホスト」、「攻撃ホスト」等を用意し、要件に合わせたNW(インターネット禁止、ホストと独立したNW)を組むなどして検証を行う。
攻撃ホストにはKali Linuxを使用することが多い。
1.3. ハニーポットへの攻撃/試験
1.3.1. 標的ホストと攻撃の準備
標的ホストの準備
Windowsの脆弱性検証を例に挙げると、windows7 Service Pack 1がWindowsで脆弱性が断トツで多い。 windows7の検証例を挙げると、VM上での初期起動後以下設定を行い実施することが見込まれる。
- セキュリティアップデート(Windows Update)の無効化
- セキュリティ機能(Windows Firewall, UAC)の無効化
- ファイル拡張子/隠しファイルの可視化
攻撃の準備
基本的に攻撃は「調査」=>「攻撃」=>「侵入」のステップで行われる。 フェーズはコチラを参考。
標的の調査
標的NW,IPの特定にはNmap,p0f/ツール等によるNWスキャンが初めに行われる。 応答があったホストに対してはさらなるスキャンにより以下特定が行われる。
- OSフィンガープリンティング
- TCP/IPスタックフィンガープリンティングが用いられる
- サービス稼動上の確認
- ポート番号のスキャン
- アプリケーションの特定
- 応答メッセージ(バナー)が用いられる
脆弱性/攻撃コードの検索
判明したOS/アプリケーション/プログラムの情報を把握出来たら、CVE、CVE Details、ExploitDBなどの情報をもとに脆弱性の有無を検索する。
脆弱性に対してはPoC(実証コード)という攻撃の試験コードのプロトタイプをそのまま用いる。
1.4. 自作ハニーポットの構築
1.4.1. ロギングの重要性
自作のハニーポットでは攻撃のログの保存、観測環境破壊されない仕組みが重要となる。
1.4.2. windowsホストの攻撃観測ツールProcessMonitor
ProcessMonitor
ProcessMonitorはMicrosoft Sysinternalsのツールの1つ。
ファイルアクセスイベント。レジストリアクセスイベント、ネットワークアクセスイベント。プロセス/スレッド数の処理が見れる。
ProcessMonitorの自動化
# 設定ファイルとログの保存先の指定
procmon.exe /loadconfig conf.pmc /backingfile log.pml /quiet
# 終了
procmon.exe /Terminate
# pmlのcsv変換
procmon.exe /Openlog log.pml /SaveAs log.csv
1.4.3. ネットワーク上のイベント観測
使えるツールにはtcpmdump、WireSharkがある。
tcpdump
tcpdump [オプション]
オプション | 説明 |
---|---|
-i | キャプチャするNICを指定 |
-w [ファイル名] | キャプチャ結果をファイル出力 |
-r [ファイル名] | キャプチャ結果を読込解析 |
-s [サイズ] | キャプチャバッファサイズの指定 |
-c [回数] | 受信するパケット数を指定 |
[条件式] | フィルタリングの条件式 |
-F [ファイル名] | フィルタリングを記述したファイルから条件式を読込 |
NIC名の確認はLinuxならifconfig
、Windowsならipconfig
で確認可能。
条件式 | 意味 | 例 |
---|---|---|
host [ホスト名] | パケットの送信元/先が指定のホスト | host 192.168.1.110 |
dst host [ホスト名] | パケットの送信先が指定のホスト | dst host 192.168.1.110 |
src host [ホスト名] | パケットの送信元が指定のホスト | src host 192.168.1.110 |
net [ネットマスク] | パケット送信元が指定のネットワークに含まれる場合 | net 192.168.1.0/24 |
port [ポート番号] | パケットの送信元/先が指定のポート | port 80 |
dst port [ポート番号] | パケットの送信先が指定のポート | dst port 80 |
src port [ポート番号] | パケットの送信元が指定のポート | src port 80 |
パケットキャプチャの実施先はハニーポットのホスト上、通信経路上でもよい。
1.4.4. 通信のフィルタリング
通信パケットのフィルタリングはハニーポットが乗っ取られてフィルターが変更されることを考慮して、通信経路上でブロックするのが望ましい。
iptables
通信のブロックはLinuxではiptables
w用いて実現可能。
iptablesに関してはコチラから確認できる。
設定例は以下の通り。
## DNSとNTPのみを許可する例
# ハニーポットが送信するDNS(UDP53)を許可
iptables -A FORWARD -s [honeypot-ip] -p udp --dport 53 -j ACCEPT
# ハニーポットが受信する送信元ポート(UDP53)を許可(DNS応答)
iptables -A FORWARD -d [honeypot-ip] -p udp --sport 53 -j ACCEPT
# NTPサーバの通信を許可
iptables -A FORWARD -d [ntp-server-ip] -p udp --dport 123 -j ACCEPT
# NTPサーバからの通信を許可
iptables -A FORWARD -d [ntp-server-ip] -p udp --sport 123 -j ACCEPT
# 上記以外のUDPをDROP
iptables -A FORWARD -p udp -j DROP
## Webのみ(80,443)を許可する例
# ハニーポットからのTCP80/443(WEB)のセッション確立を許可
iptables -A FORWARD -s [honeypot-ip] -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A FORWARD -d [honeypot-ip] -p tcp -m state --state NEW --dport 443 -j ACCEPT
# TCPセッションが確立した後の通信を許可
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# 上記以外のTCPをフィルタ
iptables -A FORWARD -p tcp -j DROP
# ICMP(Ping応答)のブロック
iptables -A FORWARD -p icmp -j DROP
1.4.5. ハニーポットであることの隠蔽
ハニーポットがハニーポットであると攻撃貴社に検知されては意味がない。 KippoとDioanaeaでは以下のようにしてハニーポットであることが判明してしまう。
- Kippo
- プロトコルエラーの文字列受信時に本来のOpenSSHと異なる応答である
bad packet length
を応答する
- プロトコルエラーの文字列受信時に本来のOpenSSHと異なる応答である
- Dionaea
- MySQLでの擬態時にMySQLのエラーメッセージとして
Length SQL
と通常のMYSQLと異なる応答をする
- MySQLでの擬態時にMySQLのエラーメッセージとして
またその他にハニーポット検知方法には「仮想環境」「特定のIP」「特殊な設定情報(ユーザID,ディレクトリ、ハニーポット固有のものか)」で検知される場合がある。
低対話型ハニーポットであれば"いかに本物と同じようにエミュレートするか"といったことが重要になる。
高対話型ハニーポットの場合は"ハニーポット固有のユーザ名/ファイル/ディレクトリで運用しない"ことが重要になる。