マルウェア解析の現場から-01

 リージョナルトレンドラボでは、毎日たくさんのマルウェアの解析を行なっています。そのほとんどは自動解析システムにより人手を介さずに行われていますが、より詳細な動作を知る必要がある場合や深い分析が必要な場合は、解析エンジニアがリバースエンジニアリング的な手法を用いて解析しています。そして解析していると、エンジニアは人間ですから主観的に「面白い」と感じる瞬間があります。「面白い」と感じる対象は様々です。不正プログラムの動作、プログラムの作られ方、潜んでいるメッセージなどなど・・・。そこで本ブログのこのシリーズでは、日本のリージョナルトレンドラボで日々解析している中でエンジニアが「面白い」と感じた内容について、その内容が重大であるかどうかに関係なくご紹介していきます。「マルウェア解析」という一見難しそうに思えるものが少しでも身近に感じられ、マルウェアに対する注意が向上する一助になれば幸いです。

■この通信は何をしている?

 「このマルウェアが動作していると多数の宛先に対して多数の通信を行っている。この通信が何を行っているのか明らかにして欲しい。」
このマルウェア「TROJ_PUVBED.AA」の解析を始めたのは、そんなお客様からの要望がきっかけでした。キャプチャしたパケットの通信状況を見ると、確かに多数のIPアドレスに対してコネクションを張ろうとしている様子がわかります(図1 多数のIPアドレスのポート3128への通信)。しかし、接続先がダウンしているのかコネクションが張られないため通信内容は確認できません。そこで、このマルウェアが行う通信内容を明らかにすることを目的として解析を開始しました。

図1 多数のIPアドレスのポート3128への通信
図1 多数のIPアドレスのポート3128への通信

■送信している内容「POST /+7441.html」、この数字は・・・?

 実環境では接続に失敗する状態でも、検証環境では通信が成功したように見せかけ、成功した後の動作を調べることができます。クローズドな環境でダミーのサーバを相手に通信させたり、OllyDbgなどのデバッガを利用して成功したあとの動作を強制的に実行させるのです。すると、ポート3128という固定値のポートに対して、POST /+7441.html というHTTPのPOSTリクエストを送信していることが分かりました。しかし、POSTというデータを送信するためのメソッドが使われているものの、送信されているデータはありません。これは何をやっているのだろう・・・? この「7441」という数字は何だろう・・・? 逆アセンブラであるIDAProを使ってこの「7441」という数字がどのように決められているのか調べてみると、その前段でrand関数を使ってランダムな数字が作られていることがわかります(図2 ランダムなポート番号の生成)。さらに、生成した値を使ってポートを開けていることも分かりました。つまり、このマルウェアはランダムにポートを開け、自分が開いたそのポートの番号を外部のホストへ通知しているのでした。

図2 ランダムなポート番号の生成
図2 ランダムなポート番号の生成

■マルウェア同士で通信している?

 このマルウェアは二つのポートを開いています。一つは「3128」という固定値。もう一つはランダムな番号です。あれ?「3128」は先ほどの通信先のポート番号と同じです。そこでこのマルウェアが開いたポートにデータを受信した後の処理を見てみると、いくつもの処理がある中の一つに、受信データの先頭1バイトが「P」である場合に受信データ中に「+」が存在しているか調べ、存在する場合はその後に続く文字を数値として取得しようとしている処理が見えます。さらに取得した後には、取得した数値をポート番号として接続元のIPアドレスに接続しようとしているのです。これはひょっとして、このマルウェア同士が通信しているのではないか? そう思ったら早速検証です。IDAProとにらめっこしているよりも早くて正確。検証環境上で2台のホストを用意してそれぞれにマルウェアを動作させます。もちろん、一台ではOllyDbgを使って接続先を自分が立てたダミーのホストになるよう強制的に変更します(図3 接続先を検証環境用に変更)。その結果、確かにマルウェア同士が通信していることが確認できました。一方のマルウェアがPOSTリクエストでポート番号を通知すると、もう一方のマルウェアがそのポート宛てにGETリクエストを送るのです(図4 通信シーケンス)。

図3 接続先を検証環境用に変更
図3 接続先を検証環境用に変更

図4 通信シーケンス
図4 通信シーケンス

■受け渡している内容はIPアドレス、総合すると・・・!?

 さらに解析を進めていくと「面白い」ことが分かります。ポート番号通知を受け取った側では、接続元のIPアドレスを保存しておき、ポート番号通知のPOSTリクエストを受けた際にその応答として保存しているIPアドレスの情報を送信しているのです(図5 受信したIPアドレス情報)。つまり総合すると、マルウェア同士で自身のホストが通信できたホストのIPアドレスの情報を送信しあっているということになります。そしてこれらの通信の結果として、このマルウェアによるネットワークが構築されることになります。このようにプログラム同士が対等な立場で通信しあうことによって構築されるネットワークは、ピア・ツー・ピア(P2P)ネットワークであると言うことができるでしょう。

図5 受信したIPアドレス情報
図5 受信したIPアドレス情報

■攻撃者の目的は?

 では攻撃者はどのような目的でこのマルウェアによるP2Pネットワークを利用するのでしょう?さらに解析を進めていくと、このマルウェアがオープンしたランダムなポートを利用すると、送信したデータを指定した転送先へ転送できることがわかりました。感染ホスト上に別の任意番号のポートを開けさせ、そのポートに受信したデータを指定の転送先へ転送させる機能もあります。このような通信を中継するホストは一般に「踏み台」と呼ばれています。つまり、攻撃者はマルウェアによる「踏み台」ネットワークを構築しているのです。また、攻撃者が攻撃を仕掛ける際には自身の身元が明らかになることを警戒しますが、感染ホストが自身のIPアドレスを直接攻撃者のサーバへ知らせると、そこから攻撃者の身元を追える可能性がでてきます。しかし、このネットワークを利用すると、攻撃者はこのネットワーク上で流れているIPアドレス情報を見ることで、自身の存在を隠したまま感染ホストの存在を容易に知ることが可能なのです。なお、その後行なったネットワーク活動状態の調査では、この「踏み台」がスパムメール送信などで実際に利用されていることがわかっています(図6 送信データ)。

図6 送信データ
図6 送信データ

 さて、ここまでお付き合いいただきましてありがとうございました。マルウェア解析者がどのようなことを考えながら解析しているのか、その一端を感じていただけたでしょうか? え?このマルウェアにはどう対策したら良いかって? 様々な対策が考えられると思いますが、それはここでは述べません。ここで公開すると、攻撃者にこちらの手の内を見せることにもなってしまいますので。一つ言えるのは、トレンドマイクロの最新テクノロジーを利用した製品を使用していれば、過剰に恐れる必要はないということです。それでは、またの機会まで。