1日1解析 part1
1日1解析 part1
Malwareの解析がしたくなったのとアセンブリを読む練習のために気になったやつを書いていこうと思います。
今回のサンプル
https://app.any.run/tasks/8ecca9e4-c541-4317-9001-1f5052060d24/
表層解析
importされた文字列を見てみると、気になる文字列がいくつか見える。
さらにsectionをみてみると以下のようになっている。
.symtab
というセクションが存在する。これはGolangで書かれた実行ファイルにみられる特徴なのでこのmalwareはgolangで書かれていることがわかる。
静的解析
アセンブリをみても訳がわからなかったので簡単なbinaryを読んでわかった気になることにする。
IDA Proにはgoのタイプ情報を解析するスクリプトがあるが、そんなリッチなものは持っていないのでゴリ押しで解くことになる。(何かいい方法があれば教えてください)
Hello World
を表示するバイナリを作成して逆アセンブラにかけてみる。
package main import "fmt" func main() { fmt.Println("Hello World") }
文字列一覧をみてみると文字列Hello World
が表示されていないことがわかった。
普段は文字列やimportされているLibraryなどから解析を進めるようにしていたので困った。
と思ったが、以下の内容が引っかかった。
frame.sp=
に代入?されている文字列の一部にHello World
が見える。
他の文字列でも試してみることに
package main import "fmt" func main() { fmt.Println("SAMBA RYTHM") }
これの結果は以下のようになった。
文字列がA
から順に連なっているのがわかる。
What do you mean? ooh...
動的解析
動かしながらアセンブリを読んでいくことに。
人によっては
「どうして静的解析を頑張ってから動的解析しないの?練習にならないよ?」と思うかもしれませんが、
動かしてみる
管理者権限で実行する。
すると、いくつかのファイルが暗号化され、閲覧できなくなる。
さらにデスクトップとC:¥
にファイルが追加されていた。
textの内容を要約すると
- 文書、データベース、写真を暗号化した
- 複合してほしいならツールを売るからメールしてくれ
- メールに3つのファイルを3MBまで添付してくれたら無料で複合する
ということらしい。
Malwareの流れ
ProcMonを見てみると大雑把に以下のような流れで動いていることがわかる。
- registoryを編集
- 各ファイルを暗号化
- 脅迫文を作成
C&Cサーバとの接続とかは特にしていないっぽいですね。
お手上げ
よくわからなかったのでGo のbuild idを検索対象に含めただけの簡単なyara ruleだけ作ってあとは調べることに。
Yara rule
rule EkansRansome { meta: Description = "Ekans Ransomeware rule" strings: $a = "Go build ID: \"X6lNEpDhc_qgQl56x4du/fgVJOqLlPCCIekQhFnHL/rkxe6tXCg56Ez88otHrz/Y-lXW-OhiIbzg3-ioGRz\"" condition: all of them }
すると下記のブログでSnakeという名前のマルウェアを解析している記事が見つかった。
読んでいる限りだとEKANSとほぼ同じっぽい。
せっかくなので作ったyaraをかけてやるがどちらもチェックに引っかかった。
がhash値をとってみると違うので微妙に変更点とかがあるっぽい...
感想
ファイルを暗号化するってことがわかった段階で、複合するプログラム書こうと思ったのですがそもそも全く解析できなかったので難。
こういうタイプのマルウェアは日本で有名なやつがあったのでそれで練習したいと思いました。。。。
精進します