labunix's blog

labunixのラボUnix

CVE-2012-4681をSnortで検出、アラート、SquidGuardとiptablesでブロック

■squidGuardとSnortJavaゼロデイ攻撃を防ぐ。
 私の実験環境で1/13台(Windows)でJava1.6.xがあることを確認しましたw。
 Squeezeには無く、JavaScriptも通らないw3mブラウザを使ってテストします。

■シマンテックのページではいわゆる出口対策と言えると考えます。
 なぜなら、「2,3」の説明に絞られており、
 シナリオとして「2」を発見=感染だと考えるのが自然だからです。

 Java の新しいゼロデイ脆弱性(CVE-2012-4681)
 http://www.symantec.com/connect/ja/blogs/java-cve-2012-4681

1.マルウェアの供給元のWebサイトついては以下のようにぼかされています。

ok.XXXX.net/meeting/applet.jar
62.152.104.XXX/public/meeting/applet.jar

2.ダウンロードされるマルウエアは以下の2種類と説明されています。

hi.exe
Flash_update.exe

3.マルウエアがアクセスするのは下記とのことです。

hello.icon.pk
223.25.233.244

■squidGuardの「personal/domains」「personal/urls」に上記を参考にブロック。
 出口対策を行い、マルウエアがアクセスする先を止めます。

 SquidGuardのクエリを受け取るbash/CGI
 http://d.hatena.ne.jp/labunix/20120827

$ w3m -dump http://223.25.233.244

Status  302 Access Denied
From    url:http://223.25.233.244/
        clientaddr:192.168.188.188
Browser w3m/0.5.2+cvs-1.1027

$ w3m -dump http://hello.icon.pk | head -3

Status  302 Access Denied
From    url:http://hello.icon.pk/

■Fセキュアの情報と合わせると、供給元もブロックできます。
 とても素敵なことにここにはSnortのルールもあります。

 Oracle Java 7の脆弱性を狙った攻撃について
 http://blog.f-secure.jp/archives/50677218.html

1.上述のsquidGuardでブロック。

ok.aa24.net
59.120.154.62
62.152.104.149

$ w3m -dump http://ok.aa24.net/meeting/applet.jar | head -3

Status  302 Access Denied
From    url:http://ok.aa24.net/meeting/applet.jar

$ w3m -dump http://62.152.104.149/public/meeting/applet.jar | head -3

Status  302 Access Denied
From    url:http://62.152.104.149/public/meeting/applet.jarSnortのルールを追加する。
 まずは上記のルールを追加。

$ grep -v "^#" /etc/snort/rules/local.rules | sed s/";\|("/"&\n"/g
alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (
msg:"ET CURRENT_EVENTS JavaScript Obfuscation Using Dadong JSXX Script";
 flow:established,to_client;
 file_data;
 content:"Encrypt By Dadong";
 distance:0;
 classtype:bad-unknown;
 sid:2014155;
 rev:2;
)

■以下のルールで「any -> any」のルールを追加します。

 Snortのalertログで遊ぶ
 http://d.hatena.ne.jp/labunix/20120821

$ echo "200000001 20141550" | awk '{print $1+$2}'
220141551

■Snortのルールで「applet.jar」はすべて検出、アラートする。
 ※上記はコメントアウト。ブロックはしない。

alert tcp any 80 -> any any (
msg:"applet.jar";
uricontent:"applet.jar";
nocase;
 sid:202014155;
 rev:2;
)

$ sudo grep local.rules /etc/snort/snort.conf
include $RULE_PATH/local.rules

$ sudo /etc/init.d/snort config-check && \
  sudo snort -T -c /etc/snort/rules/local.rules && \
  sudo /etc/init.d/snort restart

■Webコンテンツ「applet.jar」を準備します。
 ※中身は空で良い。

$ echo "WebServer"; sudo touch /var/www/malware/applet.jar
WebServer

$ echo "Client";env LANG=C /sbin/ifconfig eth0 | grep "inet addr" | sed s/".*addr\:"// | sed s/" .*"//g
172.0.0.188
$ w3m -dump_extra -no-proxy http://192.168.188.188/malware/applet.jar
W3m-current-url: http://192.168.188.188/malware/applet.jar
W3m-document-charset: US-ASCII
HTTP/1.1 200 OK
Date: Wed, 29 Aug 2012 12:33:23 GMT
Server: Apache/2.2.16 (Debian)
Last-Modified: Wed, 29 Aug 2012 12:03:18 GMT
ETag: "49b62-0-4c8665826cd80"
Accept-Ranges: bytes
Content-Length: 0
Connection: close
Content-Type: application/java-archive

$ echo "select * from signature where sig_sid=220141551;" | \
  sudo -u snort mysql -u snort -D snort -p
Enter password:
sig_id  sig_name        sig_class_id    sig_priority    sig_rev sig_sid sig_gid
16      applet.jar      0       NULL    2       220141551 1

■iptablesでブロック
 
$ sudo grep "59.120.154.62\|62.152.104.149\|223.25.233.244" 
[0:0] -A INPUT -s 59.120.154.62/32 -i eth0 --j DROP
[0:0] -A INPUT -s 62.152.104.149/32 -i eth0 --j DROP 
[0:0] -A INPUT -s 223.25.233.244/32 -i eth0 -j DROP

$ sudo iptables-resrore -c /etc/iptables-save
$ sudo iptables-save -c | sudo tee /etc/iptables-save

■どの道、「-no-proxy」では外には出れませんが。。。

$ w3m -dump -no-proxy http://d.hatena.ne.jp/labunix & sleep 10 && sudo pkill w3m
[1] 18609
[1]+  終了しました      w3m -dump -no-proxy http://d.hatena.ne.jp/labunix
$ w3m -dump -no-proxy http://223.25.233.244 & sleep 10 && sudo pkill w3m
[1] 18609
[1]+  終了しました      w3m -dump -no-proxy http://223.25.233.244
$ w3m -dump -no-proxy http://59.120.154.62 & sleep 10 && sudo pkill w3m
[1] 18613
[1]+  終了しました      w3m -dump -no-proxy http://59.120.154.62
$ w3m -dump -no-proxy http://62.152.104.149 & sleep 10 && sudo pkill w3m
[1] 18617
[1]+  終了しました      w3m -dump -no-proxy http://62.152.104.149

■ちゃんとDROPしています。

$ sudo iptables -L -v -n | grep "59.120.154.62\|62.152.104.149\|223.25.233.244"
    7   436 DROP       all  --  eth0   *       59.120.154.62        0.0.0.0/0
   11   660 DROP       all  --  eth0   *       62.152.104.149       0.0.0.0/0
    0     0 DROP       all  --  eth0   *       223.25.233.244       0.0.0.0/0