www.morihi-soc.net

誰もが安心して使える、安全なインターネットを目指して

ハニーポット観察記録 番外編 〜IRCBOT はプロセスの名前を騙るのか?〜

どうも.ハニーポッターです.

最近見たブログ記事「[Perl] 細かすぎて伝わらないPerlと$0変数 – コマンド名偽装(ろば電子が詰まっている)」で,下記のような記述をみかけました.

引用:$0操作はpsコマンドからの隠蔽目的でもよく使われます。具体的には、Perlでマルウェアを書いている人たちの間では、この$0いじりをするのは常套手段でありよく使われる手法です。

ハニーポットでは IRCBOT に感染させようとする攻撃をたくさん検知しています.たとえば Apache MagicaphpMyAdmin など毎日毎日検知します.

私は攻撃検知時に可能な限り IRCBOT のソースコードを入手し,解析をしています.そこで今回は,今までに収集した IRCBOT たちが,どのようなプロセス名を $0 に設定しているのか調査してみました.

IRCBOT ソースコード

いくつか IRCBOT のソースコードから $0 でプロセス名を設定している部分を紹介します.

ソースコード例1

my $processo = ‘-‘;
(中略)
$0=”$processo”.“\0″x16;

 

ソースコード例2

my @rps = (“/usr/local/apache/bin/httpd -DSSL”,
“/usr/sbin/httpd -k start -DSSL”,
“/usr/sbin/httpd”,
“ksoftirqd/0”,
“khelper”,
“kblockd”,
“/usr/sbin/apache2 -k start”,
“kmpathd”,
“httpd”,
“/usr/sbin/acpid”,
“/usr/sbin/cron”);
my $process = $rps[rand scalar @rps];
$0=”$process”.“\0″x16;;

 

ソースコード例3

my @fakeps = (“/usr/local/apache/bin/httpd -DSSL”,
“/usr/sbin/httpd -k start -DSSL”,
“/usr/sbin/httpd”,
“gnome-pty-helper”,
“httpd”);
(中略)
my $xproc = $fakeps[rand scalar @fakeps];
$0=”$xproc”.“\0”;

 

プロセス名

ハニーポットで収集した100個以上の IRCBOT のソースコードから,$0 に設定しているプロセス名を抜き出しました.その結果は下記のとおりです.

  1. -bash
  2. [bash]
  3. [cpuset]
  4. [httpds]
  5. [kattr]
  6. [sync_supers]
  7. [sync_supers]
  8. /sbin/klogd -c 1 -x -x
  9. /sbin/syslogd
  10. /sbin/syslogd”,”/sbin/klogd -c 1 -x -x
  11. /usr/bin/httpd -SSL
  12. /usr/local/apache/bin/httpd -DSSL
  13. /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
  14. /usr/sbin/acpid
  15. /usr/sbin/apache/asterisks
  16. /usr/sbin/apache/log
  17. /usr/sbin/apache2
  18. /usr/sbin/apache2 -k start
  19. /usr/sbin/asteriskd
  20. /usr/sbin/atd
  21. /usr/sbin/cron
  22. /usr/sbin/httpd
  23. /usr/sbin/httpd -k start -DSSL
  24. /usr/sbin/httpde
  25. /usr/sbin/httpde -k startd -SSL
  26. /usr/sbin/sshd
  27. /usr/sbin/sshd -D
  28. /usr/sbin/sshd -i
  29. auditd
  30. core
  31. cpuset
  32. crond
  33. gnome-pty-helper
  34. grep
  35. htlpd
  36. httpd
  37. kblockd
  38. khelper
  39. klogd -x
  40. kmpathd
  41. ksoftirqd/0
  42. nagios
  43. rpc.idmapd
  44. spamd chiIde
  45. suid
  46. sysprot

50音順です.また複数のソースコードに含まれていた場合の重複を除きます.

1つのソースコードに1つのプロセス名だけだったり,複数のプロセス名から選択するものだったり,50種類弱の多種多様なプロセス名で偽装することが分かりました.

なお中には,複数のプロセス名を設定しているにも関わらず,ランダムに選ぶというコーディングを忘れているソースコードもありました.(つまり,毎回同じプロセス名が選ばれる)

サンプリングの母集団が Web サーバの脆弱性を狙った攻撃で感染する IRCBOT のソースコードのため,「apache」や「httpd」という名前関連のプロセスが多いという偏りが生じている可能性はあります.

また「bash」というプロセス名は,Shellshock 以降で見られるようになりました.

さらに,一部不思議なプロセス名にしているものがありました.例えば「htlpd」や「spamd chiIde (4文字目が,小文字のエルではなく,大文字のアイ)」です.どういう意図でこのプロセス名を指定しているのか分かりかねますが,ちょっと気になりました.

 

NULL

ソースコード例1,2,3のソースコードの最後の部分のように,$0 にプロセス名を設定するとき,最後に「”\0”」や「”\0″x16」をくっつけているものがありました.

\0 はみなさんご存知の通り,制御文字の NULL 文字ですね.もちろん ps コマンドで実行中の IRCBOT のプロセス名を表示しても,画面に印字されません.

また x は Perl の x 演算子と呼ばれるものです.x に続く数字の回数分,x の直前の文字を繰り返します.つまり「”\0”x16」の意味は NULL 文字を16回繰り返すということになります.

明確な意図はよくわかりませんが,ps コマンドでプロセス名を表示したときに,ウインドウ幅一杯に不可視の NULL 文字を表示させて,プロセス名の偽装の隠蔽をしようとしているのでしょうか? 妄想は募るばかりです.

 

まとめ

今回は,ハニーポット観察記録の番外編として,IRCBOT がプロセス名を偽装するときのプロセス名について調査しました.
本物のプロセスとしてあるような名前から不思議な名前まで50種類近くあることがわかりました. 

こうやってまとめて一覧化していくだけでも経験値が溜まっていくので,プロセス名を見ただけで
「( ゚д゚)! これは偽装されたプロセス名だ!」と光って見えるようになる・・・気がします.

 

参考情報

[Perl] 細かすぎて伝わらないPerlと$0変数 – コマンド名偽装 (ろば電子が詰まっている)
http://d.hatena.ne.jp/ozuma/20141129/1417199650

 

Written by 森久

11月 30th, 2014 at 11:49 am