掲載日:2021/07/07

Snakeキーロガーの様々なスキン:インフォスティーラー(情報窃取型マルウェア)のコード再利用を分析する

※ 本ブログは、2021年6月28日にHP WOLF SECURITY BLOGにポストされたSnake Keylogger’s Many Skins: Analysing Code Reuse Among Infostealersの日本語訳です。

 

Snakeは、2020年11月下旬に初めて発見されたモジュール型の.NETキーロガーおよびクレデンシャルスティーラーです。それ以降、ほぼ毎日のようにこのマルウェアを拡散するキャンペーンが確認されています。Snakeの名前は、ログファイルで見つかった文字列と、文字列難読化コードに由来しています。このマルウェアのビルダーを使用することで、脅威アクターは必要な機能を選択・設定し、新たなペイロードを生成することができます。このため、実際に報告されるサンプルの機能はさまざまです。この記事では、Snakeの機能、感染チェーン、他の4つの汎用キーロガーとのコードの類似性について説明します。

 公表されているSnake キーロガーの検知数の推移 図1 - 公表されているSnake キーロガーの検知数の推移

 

 

感染チェーン

2021年にSnakeを配信したキャンペーンでは、マルウェアの配布に悪質なスパムが使用されており、RTFまたはアーカイブの添付ファイルが使用されていました。

 

配信

Snakeの展開に使用された最初のタイプのダウンローダーは、よく知られているMicrosoft Office Equation Editorのエクスプロイト(CVE-2017-11882)を含むRTFドキュメントでした。このドキュメントは、ファイル拡張子を.DOCに変更し、正当な業務連絡を装った電子メールに添付されていました。受信者が脆弱なバージョンのMicrosoft Officeを実行している場合、このエクスプロイトは、リモートサーバーから実行ファイルをダウンロードして実行します。このファイルは、Snake キーロガーのパック版です。

HP Wolf Securityが隔離したCVE-2017-11882を悪用した悪意のあるRTF添付ファイル 図2 - HP Wolf Securityが隔離したCVE-2017-11882を悪用した悪意のあるRTF添付ファイル

 

2つ目の方法では、攻撃者は、パックされたSnake実行ファイルを含むアーカイブファイルを添付したスパムを送信します。受信者がアーカイブファイルを開くと、そこにはパックされたSnakeのコピーが含まれており、ユーザーは実行ファイルをダブルクリックして実行する必要があります。IMG、ZIP、TAR、Z、GZ、ISO、CAB、7z、RARの添付ファイルとしてSnakeが配布されていることがわかりました。

 HP Wolf Securityが隔離したSnake キーロガーを配信する悪意のあるIMG添付ファイル 図3 - HP Wolf Securityが隔離したSnake キーロガーを配信する悪意のあるIMG添付ファイル

 

アンパックと実行

エンドポイント・セキュリティ・ツールによる検知の可能性を減らすために、分析したSnakeのサンプルはパックされていました。実行後すぐに、マルウェアは図4のプロセスに従って自らをアンパックします。

Snakeのアンパックと実行のプロセス 図4 - Snakeのアンパックと実行のプロセス

 

まず、マルウェアは、一般的なブロック暗号DESで暗号化されたファイルを、.NETファイルのリソースセクションに復号してロードします。

NETリソースとキーを引数とする復号化メソッドの呼び出し 図5 - .NETリソースとキーを引数とする復号化メソッドの呼び出し

 

ファイルを復号化するためのキーは、ソースコードの文字列のSHA256ハッシュの最初の8バイトです。UTF-16でエンコードされているので、ファイルを復号化するためのハッシュを計算する際には、正しいエンコードを選択する必要があります。図5は、PerSec関数の第2引数として、キー(Unicode文字列)を渡しているところです。DESはブロック暗号なので、復号処理が複数のブロックの暗号文を処理する方法がわかるように、動作モードを指定する必要があります。Snakeのパッカーでは、電子符号表(ECB)モードを使用しているため、初期化ベクターは必要なく、暗号文とキーのみが必要となります。

DESの復号処理 図6 - DESの復号処理

 

復号化されたファイルは、CaptIt.dllというダイナミックリンクライブラリ(DLL)で、これがロードされます。このファイルには2つの暗号化されたファイルがリソースとして含まれており、実行時にアンパックされ実行されます。1つはSnakeキーロガーのペイロードで、もう1つはマルウェアの存在を隠すために使用される実行ファイルです。CaptIt.dllは、これらのファイルを復号化する前に、パックされた元の実行ファイルをユーザーのスタートアップフォルダ(C:Users<Username>AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)にコピーするので、デバイスが再起動されるたびに実行されます。

DLLの復号化と文字列の復号化の呼び出し 図7 - DLLの復号化と文字列の復号化の呼び出し

 

今回は、ECB モードの AES が、CapIt.dll 内の DLL ファイルの復号に使用されます。ここでも、文字列のSHA256ハッシュがキーとして使われています。

AESの復号処理 図8 - AESの復号処理

 

この関数は,DLLの復号化に加えて,アンパックされたばかりのDLLのメソッド名に対応する文字列を復号化します。新しいスレッドで開始されるこのメソッドは、ファイルパスとペイロード名の2つの引数を想定しています(図9)。

DLLのロードと実行 図9 - DLLのロードと実行

 

CapIt.dllの2つ目の暗号化されたリソースは、CaptIt.dllと同じ方法で復号化されます。ECBモードのDESを使用し、引数としてメソッドに渡されたキーを使用します。

リソースとキーを引数とするDES復号化メソッドの呼び出し 図10 - リソースとキーを引数とするDES復号化メソッドの呼び出し

 

Snakeのペイロードは、プロセスハロウイング技術として知られるRunPEを使用して、正規のプロセスの中に隠されています。まず、第1引数として渡されたファイルパスを使って、サスペンドモードで新しいプロセスを開始します。続いて、Windows API の GetThreadContext、ZwUnmapViewOfSection、VirtualAllocEx、WriteProcessMemory、SetThreadContext、ResumeThread が呼び出されます。これらは、新たに作成されたプロセスのコンテキストをマルウェアに置き換えてから起動します。この関数のC#による実装がGitHubにありました。この時点で、Snakeのペイロードがアンパックされ、攻撃者が設定したモジュールの実行が開始されます。

 

コードの難読化

Snakeは.NETで書かれているため、ネイティブコードにコンパイルされるのではなく、プロジェクトに関するメタデータを含むMicrosoft Intermediate Languageにコンパイルされます。dnSpyなどのツールを使えば、元のソースコードとほぼ同じ構造を持つ逆コンパイル版のソースコードを復元することができ、解析が容易になります。しかし、.NETマルウェアを使用する多くの脅威アクターは、コードを難読化することで逆コンパイルを防ごうとします。2021年3月には、MalwareBazaarに報告されたSnakeのサンプルが5つのツールを使って難読化されていることがわかりました。

 

  • ConfuserEx / Beds Protector
  • DeepSea 4.1
  • Babel .NET
  • NET
  • Obfuscar

 

これらの難読化技術は、シンボルの名前を変えたり、コードの制御フローを複雑にしたり、文字列やリソースを暗号化したりすることで、ソースコードの解析を困難にします。幸いなことに、多くの場合de4dotプロジェクトやDeObfuscar-Staticプロジェクトのように、これらの難読化を逆手に取った対抗策が存在します。

 

SNAKEの機能

Snakeはモジュラー方式を採用しているため、マルウェアをビルドする際にどのような機能を有効にするかによって、採取されたサンプルの挙動が異なります。ビルダーツールを使って機能を設定・作成している可能性が高いです。ビルダーは、選択した機能のみをペイロードに追加するのではなく、すべての機能を統合し、選択した機能のみを有効にするようです。図11はSnakeの機能をMITRE ATT&CKのテクニックにマッピングしたものです。

 Snakeが使うMITRE ATT&CKのテクニック 図11 - Snakeが使うMITRE ATT&CKのテクニック

 

当然のことながら、Snakeキーロガーの機能のほとんどは、「認証情報へのアクセス」、「収集」、「持ち出し」の戦術カテゴリーに分類されます。以下は、Snakeの機能の説明です。

 

永続化

アンパックと実行のセクションで説明したように、マルウェアは自分自身をスタートアップフォルダーにコピーし、デバイスの再起動後に再び起動されるようになっています。さらに永続化の機能として、Snakeキーロガーには実行レジストリキーを作成するオプションがあります。これも同様の効果があり、コンピューターのスタート時にマルウェアが起動します。

 

防衛回避

Snakeは2つの防衛回避テクニックを使用しています。1つ目は、リストされたセキュリティツールのプロセスを終了させる機能です。これには、アンチウイルスプロセスや、マルウェアの分析によく使われるツールが含まれます。OllyDbgの場合、プロセス名のスペルが間違っていたため、Snakeはプロセスの終了に失敗しました。さらに、最近のアンチウィルス・プログラムは、自分自身を再起動するか、マルウェアが適切な権限なしにプロセスへのハンドルを開くのを防ぐためにカーネル・ドライバを使用しているので、このテクニックでは終了できません。2つ目のテクニックは、Snakeが感染したシステムから自身を取り除き、自身のプロセスを終了させる自己終了機能です。

 

認証情報へのアクセス

Snakeの機能のほとんどは、認証情報や設定など、感染したコンピュータからの機密情報の収集に関するものです。Snakeは、ウェブブラウザのデータベース、電子メールクライアント、DiscordやPidginなどのチャットクライアント、WiFiネットワークの保存されたパスワードなどのログイン認証情報を解析します。Snakeは、Google Chrome、Mozilla Firefox、Microsoft Edgeだけでなく、あまり知られていないいくつかのWebブラウザからも認証情報を抽出することができます。また、Microsoft Outlook、Mozilla Thunderbird、Foxmail、Postboxなど、さまざまな電子メールクライアントからも認証情報を盗み出すことができます。すべての認証情報窃取モジュールの完全なリストは、Appendixに記載されています。

 

探索

認証情報を取得する前に、Snakeは一連のホストおよびネットワークチェックを行い、被害者の環境内のサンドボックスで実行されているかどうかを判断します。ホスト探索機能では、オペレーティングシステムのバージョン、コンピュータ名、ハードディスクのサイズ、時刻と日付の設定、インストールされているRAMなどをチェックします。あるサンプルでは、チェックをパスするために、ホストに3.75GB以上のRAMが搭載されていることと、ホスト名がブロックリストの名前と一致しないことが必要でした。さらに、ネットワーク探索機能は、オンライン・サービスのcheckip.dyndns[.]orgを使ってクライアントのパブリックIPアドレスを解決します。パブリックIPがマルウェア分析サービスで使用されているアドレスのブロックリストと一致した場合、Snakeは認証情報の窃盗を実行しません。パブリックIPアドレスを使用し、Snakeはfreegeoip[.]appサービスを使用したおおよそのジオロケーションの解決を行います。SnakeのUser-Agent(Appendixを参照)を持つドメインは、Snakeの存在を検知するために使用できます。

 

収集

また、Snakeは機密情報を含む可能性のある設定ファイルを収集します。Snakeがターゲットにしているプログラムの一つにFileZillaがあります。FileZillaはFTPクライアントとして使用されるため、以前アクセスしたサーバーの設定を保存します。また、Snakeは感染したシステムのWindowsプロダクトキーを探します。もう1つの機能は、Snakeのクリップボードスティーラーで、最初の実行時に1回ではなく、定期的に実行される点が他のスティーラー機能と異なります。このモジュールは、クリップボードの内容を保存します。クリップボードには、パスワードマネージャーからコピーされたときに一時的に保存されるパスワードなどの機密情報が含まれている可能性があります。またSnakeは、感染したシステムのスクリーンショットを定期的に撮影します。これらの画像は、攻撃者に送信されるまで、ユーザーのドキュメントフォルダー内の "Snake keylogger" というフォルダーに保存されます。後に、画像は削除されます。Snakeのキーロガー機能は、SetWindowsHookExA APIを呼び出すことでバックグラウンドで永続的に実行され、それによってキーボードフックチェーンに自身を追加します。キーが押されるたびに、コールバック関数が呼び出され、入力を保存してフックチェーンの次のリンクに呼び出しを渡します。収集された入力は、複数用意されている持ち出し機能のいずれかを使って、定期的に攻撃者に送り返されます。興味深いことに、2020年2月末以降に発見されたSnakeキーロガーのサンプルでは、キーロガーモジュールが起動していませんでした。これが攻撃者側のミスなのか、それとも意図的に選択したものなのかは明らかではありません。

 

持ち出し

Snakeには、設定可能な持ち出し経路がいくつかあります。FTPプロトコルを使用してデータをサーバーにアップロードするオプション、Eメールでデータを添付ファイルとして送信するオプション、POSTリクエストを介してTelegramでデータを公開するオプションがあります。攻撃者は、ビルダーを使用してマルウェアを構成する際に、これらの持ち出しテクニックのうちどのテクニックを選択するかを決定します。そのため、必要な認証情報、設定、トークンなどは、マルウェアに直接保存されます。我々が観測したサンプルでは、攻撃者はTelegramまたはEメールを介してデータを持ち出すことを好んでいました。

 

影響

このマルウェアは、エンドポイントの防御を回避するためにセキュリティプログラムを終了させる機能に加えて、Chromeウェブブラウザーを終了させる機能も備えています。Webブラウザの終了は、予防や検知のために行われるものではないため、別の理由があるはずです。1つの可能性として、SnakeはChromeが起動していない場合にのみ、Chromeに保存された認証情報にアクセスすることができます。Matiexと呼ばれる別のキーロガーにもこの欠陥があり、2つのファミリーがコードを共有しているのではないかと疑われています。

あるハッキングフォーラムでのMatiexのレビューからの抜粋 図12 - あるハッキングフォーラムでのMatiexのレビューからの抜粋

 

 

SNAKEとMATIEXキーロガーの関連

2020年11月、あるマルウェア研究者がSnakeとMatiexの間にコード上のつながりがある可能性についてコメントしました。ハッキングフォーラムの広告によると、Matiexの開発者は、マルウェア・アズ・ア・サービスで一般的なサブスクリプションモデルを使用して、マルウェア・クライアントを設定、生成するために使用するキーロガービルダーを販売していました。

ハッキングフォーラムで宣伝されているMatiexのサブスクリプションモデル 図13 - ハッキングフォーラムで宣伝されているMatiexのサブスクリプションモデル

 

この2つのマルウェアファミリーのソースコードを比較すると、多くの類似点が見つかりました。2つのマルウェアファミリーは、同じアンチウイルスやセキュリティツールのプロセスのリストを終了させる関数を持っています。

プロセス終了関数の比較 図14 - プロセス終了関数の比較

 

さらに、どちらも同じコマンドを使って自分自身をアンインストールする手続きを持っています。

自己破壊関数の比較 図15 - 自己破壊関数の比較

 

また、記録されたキーストロークをPOSTリクエストでアップロードする関数も同じです。

 キーストロークの持ち出し関数の比較 図16 - キーストロークの持ち出し関数の比較

 

どちらのファミリーも、Telegramによりデータを持ち出すオプションを持っています。関数の内容は同じですが、名前が違います。

Telegramによる持ち出し関数の比較 図17 - Telegramによる持ち出し関数の比較

 

両者のGeoIP関数の違いは、名前だけです。

GeoIPオリエンテーション関数の比較 図18 - GeoIPオリエンテーション関数の比較

 

ロギング関数中に、キーロガーの名前が明示されています。しかし、コードは変数名も含めてほぼ同じです。

 ロギング関数の比較 図19 - ロギング関数の比較

 

TheInfoは、感染したシステムの情報を含む変数です。MatiexはSnakeよりもはるかに多くの情報を収集し、それを攻撃者に送信します。一方、SnakeにはAntiBot関数があり、感染したシステムにブロックリストに登録されたIPアドレスやホスト名があった場合、マルウェアを終了させます。

収集した情報を示す変数の比較 図20 - 収集した情報を示す変数の比較

 

両ファミリー間で使用される変数名の多くは似ています。例えば、持ち出しチャネルは、両ファミリーの文字列変数によって類似の定義がなされています。さらに、キーロガークラスは同じ名前で、どちらも同じ初期値を持つ変数HSHCheckerを持っています。

SnakeとMatiexの類似した初期化変数 図21 - SnakeとMatiexの類似した初期化変数

 

上記のようなコードの類似性と対応するマルウェアの分析結果から、MatiexとSnakeは同じコードベースを共有しており、Snakeは前者から派生したものである可能性が高いと考えられます。このファミリーには、いくつかの細かい違いもあります。

 

  • Matiex は、除外 IP アドレスとホスト名のリスト、インストールされた RAM の量をチェックしません。
  • Matiex は、オーディオ録音を行うことができます。
  • Matiex は、インスタントメッセージングサービスである Discord を介してデータを持ち出すことができます。

 

問題は、いつ、どのようにしてMatiexのソースコードがSnakeに再利用されたのかということです。2021年2月、アンダーグラウンドなフォーラムで、Matiexのソースコードが売りに出されました。1つの可能性として、誰かがMatiexのソースコードを購入し、それをSnakeにリブランドしたと考えられます。しかしながら、Snakeが最初に目撃されたのは、ソースコードが売りに出される数ヶ月前だったので、Snakeの開発者は別の方法でMatiexのソースコードを入手したのでしょう。

 

MATIEXと他のキーロガーの関連

今回の調査では、Matiexに類似したサービスとして宣伝されている他の.NETキーロガーを発見しました。404、Cheetah、Phoenixの各キーロガーのコードを分析すると、これらもMatiexと非常によく似ていることがわかりました。図22は、各ファミリーがサービスとして販売された時期と、そのソースコードが販売された時期を示しています。

ハッキングフォーラムでの販売活動のタイムライン 図22 - ハッキングフォーラムでの販売活動のタイムライン

 

異なるキーロガーのコードの類似性を見て、私たちは驚かされました。404とPhoenixキーロガーは、キーストロークを記録する関数がわずかに異なり、Pastebin APIを使用してデータを持ち出すことができますが、それ以外は他のファミリーと極めて似ています。Cheetahは、SnakeやMatiexと同じキーロガー関数を使用していますが、パスワードを抽出するためのモジュールが少ないのが特徴です。データはSnakeと同じようにTelegram、FTP、SMTPを介して持ち出します。

Snakeに関連するキーロガーの機能概要 図23 - Snakeに関連するキーロガーの機能概要

 

 

結論

Snakeを分析すると、確かに包括的なキーロガーでデータスティーラーであることがわかりました。我々の分析によると、過去2年間に活動した5つのキーロガー・ファミリーは、同じコードベースから派生したものである可能性が高いと考えられます。また、これは網羅的なリストではないため、同様のコードを持つ他のキーロガーが流通している可能性もあります。このように、既存のマルウェアファミリーのソースコードを日和見的にコピーする「リミックス」行動は、サイバー犯罪者がいかに簡単に独自のMalware as a Serviceビジネスを構築できるかを示すものであり、企業の防御力がマルウェア開発者の先を行くことの重要性を示しています。

 

侵害の痕跡(IoC)

Snakeの認証情報窃盗モジュール:

Outlook Chrome Cent Yandex FireFox
Foxmail Coowon xVast Nichrome WaterFox
Kinzaa CocCoc Chedot Amigo Thunderbird
Sputnik Uran Superbird Kometa SeaMonkey
Falkon QQ 360_English Xpom IceDragon
SalamWeb orbitum 360_China Elements CyberFox
CoolNovo Slimjet Comodo Microsoft Slim
QIPSurf Iridium Brave Opera IceCat
BlackHawk Vivaldi Torch FileZilla PostBox
7Star Iron UC Pidgin PaleMoon
Sleipnir Chromium Blisk Liebao TheWiFi_Orginal
Citrio Ghost Epic avast WindowsProductKey_Orginal
Chrome_Canary Discord

除外IPアドレス:

  • 1.254.1[.]255
  • 34.122.197[.]93
  • 89.187.165[.]47
  • 89.208.29[.]133
  • 92.118.13[.]18
  • 91.132.136[.]174
  • 95.26.248[.]29
  • 95.26.253[.]176
  • 170.55.59[.]2
  • 185.220.101[.]5
  • 192.64.6[.]217
  • 195.74.76[.]237
  • 195.239.51[.]117
 
除外ホスト名:
  • John
  • admin
  • Admin
  • ADMIN
  • USER
  • User
  • user
  • JOHN
  • JOHN-PC
  • WALKER-PC
  • John-PC
  • WALKER
 
ユーザーエージェント
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR1.0.3705;)
 
接続するドメイン
  • dyndns[.]org
  • freegeoip[.]app
 

関連記事