Panda Bankerの将来のDGA

dennis

投稿者:Dennis Schwarz
投稿アーカイブ:Botnets、Interesting Research、Malware、Reverse Engineering、Uncategorized

「マルウェアズー」でPanda Bankerが発見されて以来、2つの新バージョンである2.2.6と2.2.7が出現しました。最新バージョンの暗号化された文字列をふるいにかけると、2つの文字列が目立ちました。

1つ目の文字列をコードからトレースすると、ドメイン生成アルゴリズム(DGA)に誘導されます。これは、ハードコードされたプライマリC2がダウンした場合のバックアップメカニズムのように見えます。古い検体を検索すると、バージョン2.2.1以降にこれらの文字列とDGAが実在していることが明らかになりました。本稿では、参考としてこの検体(バージョン2.2.7)を用いてDGAについて詳しく考察していきます。

ドメイン生成アルゴリズム(DGA)

Panda BankerのDGAは3つの情報を必要とします。

過去の投稿では、基本構成の場所特定と復号化、およびRSA公開キーの抽出について説明しました。この検体の公開キーは以下のとおりです。

base_config_key

この293バイトのBLOBは、RC4の鍵スケジューリングアルゴリズム(KSA)に取り込まれて258バイトのS文字列を生成します。

rc4_s

DGAの次の情報は、UNIXのタイム・スタンプの日付です。Panda Bankerでは、ゼロに設定されたwHour、wMinute、wSecond、wMillisecondsフィールドを持つSYSTEMTIME、および一部のFILETIMEを使用して、これを算出します。UNIXエポックからの経過秒数には、S文字列の最初のDWORDを用いてXORが適用されます。

new_key

次に、変更されたこのS文字列にハッシュ関数SHA-256が適用されます。このようにして得られた要約の最初の5バイトを16進数に変換すると、生成されたドメインの頭の部分になります。例えば、2016年9月15日(1473897600)だと、この検体の頭の部分は以下のようになります。

944ff45890

dgaconfigsは3つ目の情報で、基本構成に含まれています。

dgaconfigs

各構成は[“\x00”]で分けられており、抽出すると以下のようになります。

各構成を前述の頭の部分と組み合わせると、ドメイン生成が完成します。

このアルゴリズムへのPython実装の概念実証は、当社のGithubでも公開予定です。

DGAの特徴

この分類体系を用いると、このDGAは時間依存的、決定論的、かつハッシュベースのDGAまたはTDD-Hであるといえます。

将来のDGA

DGA機能が一部のバージョンのPanda Bankerで利用されている一方で、コードにバグがあるためPanda Bankerがそれを利用することは不可能です。不正確にフォーマットされたURLは解析機能を無効にして、Panda Bankerが本拠地からドメインに通信するのを妨げます。

上述の通り、Panda Bankerは非常に速いペースで進化を続けているため、このバグが特定され、修正されるのも時間の問題でしょう。しかしそれまでは、このように監視することで、防御側は先手をうって、脅威を監視して軽減できる、またとない機会を得ます。