注意:この記事は「KOSENセキュリティーコンテスト2020」で出された「寄生虫のようなマルウェア」について調べて、再び解いてみたという記事です。予めご了承ください
初めに
この記事は、そこで出された「寄生虫のようなマルウェア」という問題を解く鍵となったHelminthというマルウェアについて、調べて再び解いてみました。なぜ、再びなのかというと、DNSクエリは取り出したのですが、デコード時にチームメイトとエスパーでFLAGを通してしまったからです。
また間違い等ありましたら、教えていただければ幸いです。
寄生虫のようなマルウェア
問題の内容は次のようです。
Helminthは、マルウェアでよく使われるTXTレコードではなくAレコードを使うようです。(詳しくは参考文献の方を参照していただければと思います。)
HelminthはAレコードの制約で、載せられる情報は8bitまでなので、それに収めるためにASCIIコード(7bit)が用いられていて、ドメイン名に載せる情報の表現がASCIIコードになってるみたいです。
通信内容を取り出す
まずtsharkを使って、127.0.0.1のDNSクエリを取り出します。
パケットの中身を見るとs.comの通信で行われていることがわかるので、次のように実行します。(Google CTFとTrendmicro CTF - 生産性のない話より拝借しました。)
tshark -r helminth.pcapng -T fields -e dns.resp.name | grep s.com | awk -F . '{print $1}'
これを実行すると、余計なものも出てくるのでそれは削除します。
00L01000JQ30D0A433A5C55736572735C7368753E747970652022433A5C
00L01001YRE50726F6772616D2046696C65735C526F6F6B69655C435446
00L01002QSF5C464C41472E74787422200D0A464C41477B48656C6D696E
00L010034YQ74685F6E69686F6E676F5F64655F6B697365696368755F72
00L01004K33617369796F21777777777D0D0A
通信の詳細
次に通信は以下の形式になるようなのでDATAの部分だけ取り出します。
00[botid][cmdid][partid][(random)][DATA].domain
cmdid ← 実行コマンド応答時の cmdid
partid ← 実行結果を分割したときの通し番号(001,00Aとか)
DATA ← 実行結果(ASCIIコード 16進数表現)
botidはASCIIコードの10進数表現をIPアドレスとして埋め込んでいるようなので、最初のIPアドレスが76.0.0.0なのでLです。
また、randomの部分の文字数は3文字のようなので、それも取り除きます。
0D0A433A5C55736572735C7368753E747970652022433A5C
50726F6772616D2046696C65735C526F6F6B69655C435446
5C464C41472E74787422200D0A464C41477B48656C6D696E
74685F6E69686F6E676F5F64655F6B697365696368755F72
617369796F21777777777D0D0A
この文字列をcyberchiefに突っ込んでASCIIコードなので16進数でデコードします。

FLAGはFLAG{Helminth_nihongo_de_kiseichu_rasiyo!wwww}でした。
手順
- DNSクエリを取り出す
- 
00[botid][cmdid][partid][(random)][DATA].domainの形式に従って、DATAの部分を取り出す
- 
botidは、一番最初のサーバーからの返答で判断し、randomの部分は3文字であるので削除する
- 上記の手順を踏んだら、任意の方法でデコードする
最後に
私にとって、マルウェアの通信を解析するのが初めてでした。その中で、しっかりどういう形で送信されているのか、特徴を知った上で改めてFLAGを得ることができました。
参考文献
[1] 標的型攻撃で使われたマルウェアを解析して C2 サーバを作った。そのマルウェアは DNSトンネリングを行う珍しいものだった。




