クラウドネイティブハニーポッド(lurker) + Palo Alto VM-Seriesで攻撃通信を解析してみた


# はじめに

諸事情でPalo Alto VM-Series on AWS（以下Palo Alto VM）の動作検証を行なっていました。せっかく動かしているので、FWの後ろにハニーポッド(lurker)を動作させ、どんな通信がAWS上のEC2に飛んでくるのかを観測しました。

## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174361/3188a18c-afcc-08e4-48d7-95c51458d201.png)

### Palo Alto VM
EC2の前段でトラフィックを観測し、脅威として検知できた場合にロギングを行う。
L3/L4のレベルではインターネットからハニーポッド向け通信を全許可しており、セキュリティポリシーで脅威防御の機能を有効化。

### lurker
ハニーポッドとして@m_mizutani さんが作成された[lurker(Github)](https://github.com/m-mizutani/lurker)を利用しました。（ありがとうございます！）
ご本人による紹介記事は[こちら](https://zenn.dev/mizutani/articles/honeypot-2022)
lurkerはSYNに対して偽のSYN-ACKを返し、攻撃者からのペイロードを受信・記録するシンプルなハニーポッドです。

## 環境構築
Palo Alto VMの動作環境の構築はそれだけで長文になるので、いつか別記事でまとめます。。。
この記事ではlurkerの環境構築を記載します。

### lurkerの環境構築

#### 適当なEC2インスタンスを起動
今回はAmazon Linux 2の t3.nanoを利用します。
Public Subnetに立ててGlobal IP割り当てを有効化し、Secuirty Group・ACLは全許可します。
この時作ったセキュリティガバガバのSGはうっかり他の用途で利用しないようにわかりやすい名前をつけておきましょう。
起動できたらsshでログインします。

これ以降のコマンドは適宜sudoを補うか、面倒な場合はsudo -iしてから作業してください。
最終的に破棄する環境なので、rootで作業しても問題はないかと思います）
*手順は全てec-userでログイン後に`sudo -i`した上で検証しています。


### lurker前提環境のセットアップ

go installでlurkerをインストールするためのGo環境の構築と、lurkerが動作するための前提となるlibpcap-develおよびgccをインストールします。
また、lurkerによる偽装SYN+ACK（のみ）が相手側に届くようにiptablesもインストールします。（詳細は後述）
```shell-session: lurker前提環境のセットアップ
# wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz
# tar xvf go1.18.3.linux-amd64.tar.gz

//go1.18.3.linux-amd64.tar.gz 部分は適宜最新のパッケージを指定してください

# mv go /usr/local/go
# mkdir $HOME/go
# echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile 
# echo 'GOPATH="$HOME/go"' >> $HOME/.bash_profile 
# echo 'export GOPATH' >> $HOME/.bash_profile
# yum install libpcap-devel gcc iptables-services -y
```

lurkerは攻撃者からのSYNパケットに対して偽装SYN+ACKを返してくれるのですが、Listenしていないポートへの通信はLinuxのTCP/IPスタックがRSTを返してしまうため、そこでセッションが終了してしまいます。これだと攻撃通信のペイロードが観測できないので、iptablesでSYNパケットをドロップさせる設定を行います。これでTCP/IPスタックはRSTは返さなくなりますが、ICMPのDistination Unreachableは返してしまい、ここでセッションが終了してしまうので、これもドロップさせます。
(この辺りはめちゃくちゃハマったのですが、@m_mizutaniさんにご相談して対処方法を教えていただきました。ありがとうございました！)

/etc/sysconfig/iptables を以下の内容に編集します。

```shell:/etc/sysconfig/iptables
（略）
*filter
:INPUT ACCEPT [0:0]
-I INPUT -p tcp --dport 22 -j ACCEPT
-I OUTPUT -p icmp --icmp-type destination-unreachable -j DROP

# Set default chain policies
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT

# Accept on localhost
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# Allow established sessions to receive traffic
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
（略）
```
上記の設定は以下のページを参考に作成しています。
[Deny all incoming connections with iptables?](https://superuser.com/questions/427458/deny-all-incoming-connections-with-iptables)
[Disable ICMP Unreachable replies](https://serverfault.com/questions/522709/disable-icmp-unreachable-replies)


### lurkerのインストールと起動

```shell-session:lurker
# go install github.com/m-mizutani/lurker@latest

$GOPATHで指定したディレクトリにインストールされます。
実行バイナリは$GOPATH/bin/lurkerです。

lurker -i eth0 -n 192.0.2.100/24 -e 22
```
オプションの指定は-i, -nでeth0のインターフェースとIPアドレスを念の為指定、-eでSSHで利用するポートを除外しています。
IPアドレス部分は適宜サーバのLocal IPに読み替えて実行してください。

こんな感じで「ACKed」のログが出てくれば成功しています。
curlで手元のPCからEC2のGlobal IPを実行した際にしばらく固まる場合も正しく動作しています。(iptablesの設定が正しくない場合はすぐにセッションがリセットされるため固まりません)

    [2022-06-22T13:32:27.886] 162.142.125.212:45928 -> 10.0.255.250:12286 (ACKed)

    [2022-06-22T13:32:30.886] 109.237.103.123:57709 -> 10.0.255.250:80 (SYNed)

    [2022-06-22T13:32:55.886] 162.142.125.221:51164 -> 10.0.255.250:1194 (ACKed)
    0000  00 0E 08 B9 D2 05 FF 16 E1 2E 8A 00 00 00 00 00  | ...¹Ò.ÿ.á....... |
    ----------------------------------[dump]----------------------------------
    ...¹Ò.ÿ.á.......
    --------------------------------------------------------------------------

    [2022-06-22T13:32:55.886] 162.142.125.188:52814 -> 10.0.255.250:1194 (SYNed)

    [2022-06-22T13:33:00.886] 185.162.235.162:54668 -> 10.0.255.250:3307 (ACKed)
    0000  16 03 01 00 EE 01 00 00 EA 03 03 08 91 7D 53 13  | ....î...ê....}S. |
    0010  FE 1F B4 54 1D 90 9D 45 68 9A C9 06 94 FA 54 29  | þ.´T...Eh.É..úT) |
    0020  C8 FD B3 C6 32 7A 06 A2 D8 A6 F2 20 77 84 7B 7A  | Èý³Æ2z.¢Ø¦ò w.{z |


ペイロードをSlackやBigQueryに保管するオプションもあります。詳細はこちらをご覧ください。


## ハニーポッド動作結果

### 結果
2022年5月11日〜6月1日までこの状態で動作させ、Palo　Alto VMで脅威として検知された通信は1524件ありました。
内訳は以下の通りです。

脅威名 | 検知件数 
----|----
SIPVicious Scanner Detection(54482) | 489
SSH User Authentication Brute Force Attempt(40015) | 274
RPC Portmapper DUMP Request Detected(32796) | 112
ZGrab Application Layer Scanner Detection(57955) | 108
Realtek Jungle SDK Remote Code Execution Vulnerability(91535) | 57
Metasploit VxWorks WDB Agent Scanner Detection(56693) | 40
ZmEu Scanner Detection(34605) | 38
RealNetworks HELIX Server DESCRIBE DoS Vulnerability(33777) | 30
Shenzhen TVT DVR Remote Code Execution Vulnerability(57052) | 27
HTTP Unix Shell IFS Remote Code Execution Detection(56830) | 27
Pivotal Spring Data Commons Remote File Read XXE Vulnerability(40992) | 26
phpunit Remote Code Execution Vulnerability(55852) | 26
NJRat.Gen Command and Control Traffic(11921) | 22
Microsoft Vista SMB Negotiate Protocol DoS(32348) | 21
Microsoft Windows SMB Variable Validation Vulnerability(33367) | 21
Apache HTTP Server Path Traversal Vulnerability(91752) | 17
Gh0st.Gen Command and Control Traffic(13264) | 15
Cisco Smart Install Protocol Vulnerability(56653) | 15
Mirai and Reaper Exploitation Traffic(54617) | 13
MVPower DVR Shell Unauthenticated Command Execution Vulnerability(57566) | 13
MVPower DVR TV Shell Unauthenticated Command Execution Vulnerability(54553) | 13
NetWire RAT Command and Control Traffic Detection(85447) | 11
ThinkPHP Remote Code Execution Vulnerability(54825) | 11
SSH Failed Brute-force Authentication Attempt(40104) | 9
PHP Vulnerability Scanning Detection(57797) | 8
ThinkCMF File Inclusion Vulnerability(58701) | 8
D-Link DSL Soap Authorization Remote Command Execution Vulnerability(58483) | 8
Morto RDP Request Traffic(13274) | 8
Nmap Scripting Engine Detection(58433) | 6
Microsoft PPTP Server Buffer Overflow Vulnerability(32563) | 5
DNS Amplification Attack Query(36027) | 5
Apache Log4j Remote Code Execution Vulnerability(92001) | 5
NTPsec ntpd ctl_getitem Out-of-Bounds Read Vulnerability(54953) | 4
Axis SSI Remote Command Execution Vulnerability(57798) | 4
Masscan Port Scanning Tool Detection(56115) | 4
ZeroAccess.Gen Command and Control Traffic(13235) | 3
Muieblackcat Scanner Remote Code Injection Vulnerability(54499) | 3
F5 BIG-IP Authentication Bypass Vulnerability(92570) | 3
Netis/Netcore Router Default Credential Remote Code Execution Vulnerability(39587) | 2
GPON Home Routers Remote Code Execution Vulnerability(37264) | 2
Zimbra Remote Code Execution Vulnerability(55505) | 2
Apache Olingo XML Deserializer External Entity Injection Vulnerability(57605) | 2
Netgear DGN Device Remote Command Execution Vulnerability(40741) | 2
HTTP Directory Traversal Request Attempt(30844) | 2
Sun ONC RPC Small Piece fragmentation Evasion Detection(54578) | 1
Zyxel CNM Secure Manager Remote Code Execution Vulnerability(57811) | 1
ASUS/Netcore Router Default Credential Remote Code Execution Vulnerability(39438) | 1
総計 | 1524


### 所感

**特に多い攻撃**
SIPを狙ったスキャン行為が全体と1/3とかなり多く、次点ではSSHに対するブルートフォースアタックがランクインしています。この2つが攻撃全体の半分程度を占めています。（「Palo　Alto VMでの検知のしやすさ」にもよるため、攻撃の実態と完全に一致するとは言えませんが、これらの攻撃が多い傾向にあるとは言えそうです）

AWSなどパブリッククラウド上のグローバルIPに対するSSHへのブルートフォースアタックはあるもの、という前提で対策が必要ですね。
接続可能なGlobal IPを制限する、ID/Password認証を禁止して鍵認証を利用するなどは有効と考えられます。

**古い機器・OS等の脆弱性**
また、比較的新しい脆弱性を狙ったもあれば、古くからある脆弱性を狙った通信も少なくありません。例えば、いまだにVistaを狙った通信（Microsoft Vista SMB Negotiate Protocol DoS）も観測できています。一般に長期間脆弱性を放置し続けること・サポート切れの製品を利用し続けることは非常にリスクが高いとは言われますが、攻撃の実態からも裏付けられます。

**Apache Log4j**
有名どころでは数は少ないながらもApache Log4jの攻撃通信も5件観測できました。
ペイロード部分の一部ですが、こんな感じで取得できています。
![Screenshot 2022-06-22 23.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174361/c5971048-046c-6c53-2167-2ca3bfd0e71f.png)


### lurker + Palo Alto VM でのハニーポッド運用について
lurkerでは低コストかつ安全性の高いハニーポッドを運用でき、個人でハニーポッドを動かして、お手軽にどんな攻撃があるのか観測したい場合にはちょうどいいツールだと感じました。
Palo Alto VMも思ったより脅威を検知・ロギングしてくれました。
後でまとめて集計したり、脅威通信のログからlurkerのペイロードを参照したりといった用途で活用でき、とても便利でした。
ただ、Palo Alto VMは常時起動させると月75,000円程度かかってしまうため、ハニポ運用だけのために使うにはちょっと厳しい印象です。

コストを抑えつつ、今回のような分析ができる仕組みを作るのが今後の課題です。

#### lurkerを使ってみて

* 低コスト
月間3.14USD（t3.nano）〜利用可能です。

* 安全
偽装SYN+ACKを返すだけなのでハニーポッドが踏み台になることへの考慮等も不要です。
私のようなハニポ初心者でもあまり怯えることなく動かせました。

* その他便利な機能も（試せてはいない）
攻撃通信のペイロードもの取得や、Slack・BigQueryとの連携などの便利な機能もあります。

#### Palo Alto VMを使ってみて
* 高い
2,500円/日＝75,000円/月程度かかりました。
別件の検証のためやや大きいインスタンスタイプを起動していたことも影響しているのですが、個人でハニポ運用するには厳しいでし、会社予算で運用するとしても、定常的にこの金額が使えるなら別のことで使いたいですね。。。

* 脅威通信の検知とロギング
疑似ACK+SYNの後の通信だけでどこまで脅威検知できるのか疑問でしたが、思ったより検知してくれました。
ペイロードだけ見てもなんの攻撃か調べるのは結構骨が折れますし、意義のあるデータが取得できたと思います。