■squidGuardとSnortでJavaのゼロデイ攻撃を防ぐ。 私の実験環境で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.jar ■Snortのルールを追加する。 まずは上記のルールを追加。 $ 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