注意:この記事は「KOSENセキュリティーコンテスト2020」で出された「寄生虫のようなマルウェア」について調べて、再び解いてみたという記事です。予めご了承ください
初めに
この記事は、そこで出された「寄生虫のようなマルウェア」という問題を解く鍵となったHelminth
というマルウェアについて、調べて再び解いてみました。なぜ、再びなのかというと、DNSクエリは取り出したのですが、デコード時にチームメイトとエスパーでFLAGを通してしまったからです。(私のKOSENセキュコンのwriteupはこちら)
また間違い等ありましたら、教えていただければ幸いです。
寄生虫のようなマルウェア
問題の内容は次のようです。
Helminth
は、マルウェアでよく使われるTXTレコード
ではなくAレコード
を使うようです。(詳しくは参考文献の方を参照していただければと思います。)
Helminth
はAレコード
の制約で、載せられる情報は8bit
までなので、それに収めるためにASCIIコード(7bit)
が用いられていて、ドメイン名に載せる情報の表現がASCIIコードになってるみたいです。
通信内容を取り出す
まずtshark
を使って、127.0.0.1のDNSクエリ
を取り出します。
パケットの中身を見るとs.com
の通信で行われていることがわかるので、次のように実行します。(参考文献にある記事よりインスパイアさせていただきました。)
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トンネリングを行う珍しいものだった。
[2] Google CTFとTrendmicro CTF - 生産性のない話