2020年12月13日にCISA(The Cybersecurity and Infrastructure Security Agency),CERT(Computer Emergency Readiness Team)がアナウンスしたSunBurstマルウェアに対して、FireEyeとMicrosoftがキルスイッチ(avsvmcloud[.]comの名前解決の押収によるC2サーバーへの接続不可)を作成しました。
文:ジュピターテクノロジー よしひろ
このキルスイッチによって、SunBurstの影響は限定的となりつつありますが、ntop製品を活用してこれを検知・ブロックできるか?の疑問に回答したいと思います。
本ブログ記事は、ntop社のブログ「Efficiently Detecting and Blocking SunBurst Malware」を意訳してご紹介しております。
12月初旬にSunBurstと名付けられたマルウェアが明らかになり、直ぐに対策が講じられました。
実際にSnortやSuricataは、対応するルールを開示しました。
ntop社はこのルールを分析し、ntopが提供するツールでSunBurstを検知しブロックできるか?の検証をしました。
この疑問に対する答えは、YESです。
先ずは上記のルールをいくつかみてみましょう。
any/anyでルールが記述されていることに気が付くと思います。
これは、IDSは総てのシングルコネクションを監視することを意味します。
このIDSの総チェックによって、IDS自体のパフォーマンスが低下し誤検知が発生する可能性があります。
alert tcp any any <> any 443 (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"|16 03|"; depth:2; content:"avsvmcloud.com"; distance:0; sid:77600845; rev:1;)
alert tcp any any <> any 443 (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"|16 03|"; depth:2; content:"|55 04 03|"; distance:0; content:"digitalcollege.org"; within:50; sid:77600846; rev:1;)
alert tcp any any <> any 443 (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"|16 03|"; depth:2; content:"|55 04 03|"; distance:0; content:"freescanonline.com"; within:50; sid:77600847; rev:1;)
SunBurstは、TLS SNI(Server Name Indication)で検索できます。
つまり、ntopのnDPIで検知することができます。
上記のルールは、暗号化されたトラフィックの接続前に実行されるため、最適ではありません。
非常に初歩的なルールであり、範囲が制限されてしまいます。
一方、nDPIがどのようにSunBurstの実際のTLSトラフィックを分析しているかを確認してみましょう。
TCP 192.168.1.102:51293 <-> 20.140.0.1:443 [proto: 91/TLS][cat: Web/5][7 pkts/998 bytes <-> 6 pkts/1553 bytes][Goodput ratio: 52/74][1.74 sec][ALPN: h2;http/1.1][bytes ratio: -0.218 (Download)][IAT c2s/s2c min/avg/max/stddev: 0/109 253/420 1142/1033 447/434][Pkt Len c2s/s2c min/avg/max/stddev: 66/66 143/259 583/1215 180/428][Risk: ** Self-signed Certificate **][TLSv1.2][Client: avsvmcloud.com][JA3C: 2a26b1a62e40d25d4de3babc9d532f30][JA3S: 364ff14b04ef93c3b4cfa429d729c0d9][Issuer: CN=localhost][Subject: CN=localhost][Certificate SHA-1: D2:D1:B8:2B:15:FB:C9:51:B7:24:FF:56:B4:EF:9D:82:E2:E5:EA:B3][Validity: 2020-10-14 21:20:12 – 2022-12-17 11:32:25][Cipher: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384][Plen Bins: 33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0]
ご覧のとおり、自己署名TLS証明書であることが分かります。
他のルールもみてみましょう。
alert tcp any any -> any any (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"T "; offset:2; depth:3; content:"Host:"; content:"freescanonline.com"; within:100; sid:77600852; rev:1;)
alert tcp any any -> any any (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"T "; offset:2; depth:3; content:"Host:"; content:"deftsecurity.com"; within:100; sid:77600853; rev:1;)
alert tcp any any -> any any (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"T "; offset:2; depth:3; content:"Host:"; content:"thedoccloud.com"; within:100; sid:77600854; rev:1;)
alert tcp any any -> any any (msg:"APT.Backdoor.MSIL.SUNBURST"; content:"T "; offset:2; depth:3; content:"Host:"; content:"virtualdataserver.com"; within:100; sid:77600855; rev:1;)
上記のルールは、HTTP(標準ポート以外でも検知)を検索し、特定サイト(例: freescanonline.com)のコネクションを発見した場合にアラート発報します。
これらのルールの記述は、2000年に設計された古い手法であり、シンプルに記述できるnDPIのルールだと以下のようになります。
$ cat sunburst.protos
# Format:
# <tcp|udp>:,<tcp|udp>:,.....@
# Subprotocols
# Format:
# host:"",host:"",.....@
#
# IP based Subprotocols
# Format:
# ip:,ip:,.....@
host:"avsvmcloud.com"@APT.Backdoor.MSIL.SUNBURST
host:"digitalcollege.org"@APT.Backdoor.MSIL.SUNBURST
host:"freescanonline.com"@APT.Backdoor.MSIL.SUNBURST
host:"freescanonline.com"@APT.Backdoor.MSIL.SUNBURST
host:"deftsecurity.com"@APT.Backdoor.MSIL.SUNBURST
host:"thedoccloud.com"@APT.Backdoor.MSIL.SUNBURST
host:"virtualdataserver.com"@APT.Backdoor.MSIL.SUNBURST
ntopのnDPIのコマンド、ndpiReaderを実行してみましょう。
$ ndpiReader -p sunburst.protos -i ~/avsvmcloud.com.pcap -v 2
...
Detected protocols:
APT.Backdoor.MSIL.SUNBURST packets: 13 bytes: 2551 flows: 1
Protocol statistics:
Acceptable 2551 bytes
JA3 Host Stats:
IP Address # JA3C
1 192.168.1.102 1
1 TCP 192.168.1.102:51293 <-> 20.140.0.1:443 [proto: 91.255/TLS.APT.Backdoor.MSIL.SUNBURST][cat: Web/5][7 pkts/998 bytes <-> 6 pkts/1553 bytes][Goodput ratio: 52/74][1.74 sec][ALPN: h2;http/1.1][bytes ratio: -0.218 (Download)][IAT c2s/s2c min/avg/max/stddev: 0/109 253/420 1142/1033 447/434][Pkt Len c2s/s2c min/avg/max/stddev: 66/66 143/259 583/1215 180/428][Risk: ** Self-signed Certificate **][TLSv1.2][Client: avsvmcloud.com][JA3C: 2a26b1a62e40d25d4de3babc9d532f30][JA3S: 364ff14b04ef93c3b4cfa429d729c0d9][Issuer: CN=localhost][Subject: CN=localhost][Certificate SHA-1: D2:D1:B8:2B:15:FB:C9:51:B7:24:FF:56:B4:EF:9D:82:E2:E5:EA:B3][Validity: 2020-10-14 21:20:12 - 2022-12-17 11:32:25][Cipher: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384][Plen Bins: 33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0]
ntopngでこのルールを読み込むには、次のようになります。
ntopng -p sunburst.protos -i ~/avsvmcloud.com.pcap
Sunburstをマルウェアだと設定するために、”設定”→"アプリケーションとカテゴリ"からカテゴリをマルウェアに設定してください。