IoTSecJP Vol.5 訂正情報
2020年2月29日(土)に技術書典8で頒布予定の「IoTSecJP Vol.5」についてお知らせや訂正情報がある場合はこちらに記載いたします。
初版訂正情報 2019/02/11:現在訂正情報はありません。
IoTSecJP Vol.4 訂正情報
2019年9月22日(日)に技術書典7で頒布予定の「IoTSecJP Vol.4」について訂正情報がある場合はこちらに記載いたします。
初版訂正情報 2019/09/09:現在訂正情報はありません。
IoTSecJP Vol.3 訂正情報
2019年4月14日(日)に技術書典6で頒布予定の「IoTSecJP Vol.3」について訂正情報がある場合はこちらに記載いたします。
初版訂正情報 2019/03/24:現在訂正情報はありません。
IoTSecJP Vol.2 訂正情報
2018年8月10日(金)にコミックマーケット94で頒布予定の「IoTSecJP Vol.2」について訂正情報がある場合はこちらに記載いたします。
初版訂正情報 2018/07/21:現在訂正情報はありません。
古いマルウェアを観察するシリーズ(2)Gafgyt
こんにちは。にほんももんがです。それではまたしても古いマルウェアを観察するシリーズをやりたいと思います。
今回はGafgyt(Lizkebab,qbot,Torlus,LizardStresserなどたくさん別名がある)です。Miraiが注目を浴びてからあまり注目されませんが、観測しているとまだまだ生きているみたいです。また、2018年4月に書かれた以下の記事でもまだまだ生きていると報告されていますね。
このマルウェアはたくさん別名があるのですが、掲示板やYoutubeにころがっている動画などを見ると、悪い人たちの間ではqbotで通っていることが多いみたいです。全く別のQbotというマルウェアもあるので、ここではGafgytと呼ぶことにします。
検体情報
- sha256
- 340ed60806df8656ced7c8989854adc680b2390dc6466a6108f307a0e5750175
- Virustotal
もう一ヶ月ほど前になりますが、今回観察した検体は、2018年5月21日ごろハニーポットにひっかかりました。
stripされていなかったため、radare2で関数一覧を見てみました。
$ radare2 340ed60806df8656ced7c8989854adc680b2390dc6466a6108f307a0e5750175 Warning: Cannot initialize dynamic strings -- Execute a command on the visual prompt with cmd.vprompt [0x00008190]> aaa [x] Analyze all flags starting with sym. and entry0 (aa) [ ] [Value from 0x00008000 to 0x0002014c aav: 0x00008000-0x0002014c in 0x8000-0x2014c aav: 0x00008000-0x0002014c in 0x2814c-0x2f590 Value from 0x0002814c to 0x0002f590 aav: 0x0002814c-0x0002f590 in 0x8000-0x2014c aav: 0x0002814c-0x0002f590 in 0x2814c-0x2f590 [x] Analyze len bytes of instructions for references (aar) [x] Analyze function calls (aac) [x] Use -AA or aaaa to perform additional experimental analysis. [x] Constructing a function name for fcn.* and sym.func.* functions (aan) [0x00008190]> afl 0x00008094 1 24 sym._init 0x000080b0 2 56 sym.__do_global_dtors_aux 0x00008128 1 8 sym.call___do_global_dtors_aux 0x00008130 1 28 sym.frame_dummy 0x00008188 1 8 sym.call_frame_dummy 0x00008190 18 46936 -> 444 entry0 0x000081cc 4 204 sym.init_rand 0x000082a0 3 300 sym.rand_cmwc 0x000083d8 11 304 sym.trim 0x00008508 4 108 sym.printchar 0x00008574 20 388 sym.prints 0x000086f8 18 488 sym.printi 0x000088e0 33 1004 sym.print 0x00008cd0 1 64 sym.zprintf 0x00008d10 1 68 sym.szprintf 0x00008d54 1 200 sym.Heliosprintf 0x00008e1c 29 632 sym.fdpopen 0x000090a4 11 384 sym.fdpclose 0x00009228 9 208 sym.fdgets 0x000092f8 5 124 sym.parseHex 0x00009378 22 424 sym.wildString 0x00009520 4 100 sym.getHost 0x00009584 4 88 sym.uppercase 0x000095dc 4 136 sym.makeRandomStr 0x00009664 19 720 sym.recvLine 0x00009938 1 56 sym.get_telstate_host 0x00009970 6 172 sym.read_until_response 0x00009a1c 7 296 sym.read_with_timeout 0x00009b44 3 112 sym.advance_state 0x00009bb4 1 48 sym.reset_telstate 0x00009be4 1 44 sym.contains_success 0x00009c14 1 44 sym.contains_fail 0x00009c44 5 96 sym.contains_response 0x00009ca4 9 216 sym.contains_string 0x00009d7c 14 640 sym.connectTimeout 0x00009ffc 9 400 sym.listFork 0x0000a194 21 396 sym.negotiate 0x0000a320 13 364 sym.matchPrompt 0x0000a490 25 676 sym.readUntil 0x0000a734 37 1008 sym.GetRandomPublicIP 0x0000ab2c 1 92 sym.GetRandomIP 0x0000ab8c 8 344 sym.csum 0x0000ace4 1 272 sym.tcpcsum 0x0000adf4 1 276 sym.makeIPPacket 0x0000af08 4 76 sym.sclose 0x0000af54 8 332 sym.socket_connect 0x0000b0a0 11 5088 -> 736 sym.StartTheLelz 0x0000c480 6 416 sym.sendSTD 0x0000c624 10 356 sym.sendHTTP 0x0000c790 41 1724 sym.sendUDP 0x0000ce4c 36 1620 sym.sendTCP 0x0000d4bc 98 2956 sym.processCmd 0x0000e084 11 448 sym.initConnection 0x0000e250 21 720 sym.getOurIP 0x0000e534 1 24 sym.getBuild 0x0000e550 83 3100 main (以下略) [0x00008190]>
気になる関数名いくつかで検索してみたところ、以下のように同種の検体を解析している記事が見つかりました。「SSHハニーポットへの典型的な攻撃分析」といった内容の記事です。
www.sohu.com ※捜狐(sohu.com)は中国のポータルサイトです。
この記事で解析されている検体には「UpdateBins」という検体を更新するための関数があるようですが、今回ハニーポットで捕まえたものには存在していませんでした。 (リンクは貼りませんが、適当に検索して見つけたリークされたコードによると、UpdateBins関数はC2からUPDATEコマンドを受け取った際に決め打ちしたアドレスからファイルをwgetしてくるコードがハードコードされているだけでした)
記事内でも言及されているように、gafgytはmiraiと同じく様々なところにソースコードらしきものが転がっており(しかもそれぞれ実装言語が違ったり機能が違ったりする)、検体によってはそれらのコードから機能がさらに追加されていることがあります。2014年ごろから存在が確認されているようなので*1、もはや元のコードと違って当たり前なんでしょうね(とはいえそんなに変わっていないようにも見えるんですけど…)。
ちなみに、IoTSecJP Vol.1*2で観察日記を書いた「Remaiten」はこのgafgytとkaitenという別種のマルウェア両方の特徴を持っているものです。
C2の見つけ方
(100%でない&やり方が雑なのは自戒しつつ)gafgytはパッキングされていない限り、stringsコマンドにかけた結果を適当にIPっぽい文字列を抽出できるようgrepしてやればC2を見つけることができます。
$ strings <ファイル> | grep -e '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+:[0-9]\+'
静的解析ができるともう少し書けることがあるのかもしれませんが、今だにアセンブラ読めないのでこのへんで終わります。ジャーキー美味しい。
古いマルウェアを観察するシリーズ(1)Dofloo
お久しぶりです。にほんももんがです。先日参加した技術書典で頒布した「IoTSecJP vol.1」でも書いた通り、Cowrie(ハニーポット)を運用している私ですが、ssh/telnetを狙ってくるマルウェアは古めのものが多くあまり真新しいものを見つけられません。*1
もちろんちょっと前に流行った(今もかな?)GPON狙いのマルウェアなど、時流に乗ったマルウェアも時々いらっしゃったりするのですが、そもそも自分が気づく前にセキュリティリサーチャーの方々が非常に有用で詳細なレポートを出してくださるので、私がブログに書けるようなことがありません。*2
それでもどうにか少しづつマルウェア解析できるようにならないかなあと色々調べたりしているわけですが、最近ドツボにはまってしまい、ひたすらqemuのドキュメントやメーリングリストを読んでいるだけの日々を過ごしています。1日経つと何を調べていたか忘れてしまうので、だいたいは一度読んだことがあるページを開き、はて、どんな内容だったかなと首をひねる毎日です。
PEファイルの解析方法は詳細なものが色々と出ていますが、MIPSやARMのELFの解析方法なんてWriteupくらいしか見当たらず困っています。しかもWirteupなんてだいたいは理解している人々に対して書いているものなので、凡人には意味不明です。
仕方がないので、既にたくさん情報があり、本職の方々には「あー、まだ生きてるんだ〜!」と言われるようなマルウェアを観察しつつ日々を過ごして行きたいと思います。
検体情報
- sha256
- 6f5227c1af466bd47ba6247474165767fb3a36bd9831206b25e18dccac5f5a4a
- Virustotal
First submissionは5/3ですが、ハニーポットには6/1ごろひっかかりました。複数のアンチウイルスソフトがDoflooだとかAesddosだとか言っています。 これらのキーワードで検索するとSymantecさんのブログに行き当たりました。
このマルウェアはDDoS 攻撃の実行だけではなく、バックドアを開けるようで、C&C サーバーとの通信を暗号化する際に AES アルゴリズムを使うのでAesddosなどと呼ばれたりしているようです。
いつごろから出てきたのか調べてみたところ、SANSのホワイトペーパーには「Around mid-2014」って書いてありました(P5)。
https://www.sans.org/reading-room/whitepapers/malicious/analyzing-backdoor-bot-mips-platform-35902
捕まえたものはx86用でしたが、MIPSやARMなどのものもあるようです。
C2はどこなの
Dofloo(読み方わからない)はよくあるkaiten(tsunami)やGafgytなどとは違い、stringsさえ見ればC2わかってまうわ〜ということはありませんが、親切な(たぶん)リサーチャーによって検体からC2情報を抽出するスクリプトが提供されています。
最終更新が2017年の2月頃と既に1年以上経ってしまっているので今でも使えるのかなと思いましたが、少なくとも上記検体からは抽出することができました(IPアドレスとポート)。 このスクリプトで抽出成功するということはC2のアドレスのオフセットやマジックナンバーが変わっていない様なので、きっと攻撃者は面倒くさがりやさんなんですね。
他にも色々と知りたいことはありますが、もうそろそろ飽きてきたのでここで終わります。 このファミリーについてもっと深く知りたい人はMalware Must Dieさんの記事を読むといいんじゃないかと思います。
MMD-0026-2014 - Linux/AES.DDoS: Router Malware Warning | Reversing an ARM arch ELF · MalwareMustDie!
今日もまたこの後はqemuと格闘します。では。
*1:面倒がってパスワードファイルを工夫したりしていないこともおそらく原因です
*2:360netlabさんのブログがすてき:GPON - Page 1 - 360 Netlab Blog - Network Security Research Lab at 360