This post is also available in: English (英語)
概要
弊社の専任チームは、ここ数か月に渡ってKeyBaseという名前のキーロガー マルウェア ファミリを追跡してきました。これは2015年2月に確認されたものです。このマルウェアにはさまざまな機能が備わっており、その作成者から50ドルで購入可能です。これは、数多くの業種の組織に対する攻撃で採用されており、主にフィッシング メールを通じて配信されます。
パロアルトネットワークスのAutoFocus脅威インテリジェンス サービスは、過去4か月間の約1,500回のユニークなセッションにおいて、合計で295件のユニークなサンプルを特定しました。これらの攻撃は、主にハイテク産業、高等教育機関、および小売業界を標的としたものでした。
マルウェアの拡散とその標的
KeyBaseが最初に確認されたのは、2015年2月中旬です。その少し前には、KeyBaseキーロガーのホームページおよびオンライン ストアとして、ドメイン「keybase[.]in」が登録されています。
ドメイン名: KEYBASE.IN
作成日: 2015年2月4日、08:27:44 UTC
最終更新日: 2015年4月5日、19:20:38 UTC
有効期限日: 2016年2月4日、08:27:44 UTC
これは、ハンドル名「Support™」のユーザーが最初に投稿した内容に沿った活動です。このユーザーは、2015年2月7日にhackforums.netフォーラムで、KeyBaseに関する発表を行いました。このフォーラム投稿は、当該マルウェアが次の機能を備えていることを喧伝していました。
- 高度なキーロガー
- 完全に検出不能なスキャン時間と実行時間(後でこの項目は削除された)
- ユーザーフレンドリーなWebパネル
- ユニコードのサポート
- パスワード リカバリ

図1: hackforums.net上のKeyBaseに関する投稿
2015年2月以降、以下で明らかなように、KeyBaseを含んだ約1,500回のセッションが、WildFireによってキャプチャされてきました。

図2: AutoFocusにおけるKeyBaseの時系列
AutoFocusを使うと、攻撃対象となっている業種を迅速に特定することもできます。

図3: AutoFocusが特定した、攻撃対象となっている業種
攻撃対象となっている企業は、全世界の多くの国々に及んでいます。

図4: AutoFocusが特定した、攻撃対象となっている国々
このマルウェアは、主に一般的な「餌」を使用するフィッシング メールを通じて配信されます。添付ファイル名のいくつかの例を以下に示します。
- Purchase Order.exe
- New Order.exe
- Document 27895.scr
- Payment document.exe
- PO #7478.exe
- Overdue Invoices.exe
KeyBaseの配信メールの例を以下に示します。

図5: KeyBaseフィッシング メール
全体的に、Unit 42は、KeyBaseを使用した数多くの個別の活動を確認してきました。このソフトウェアは誰でも気軽に購入できるものなので、意外なことではありません。次の図で明らかなように、約50台の個別のコマンド アンド コントロール(C2)サーバが特定されており、1台のC2サーバには最大50件のユニークなサンプルが接続しています。

図6: KeyBaseの活動を示した図
マルウェアの概要
KeyBase自体は、.NET Frameworkを使用してC#で記述されています。これらの事実を踏まえて、弊社は基盤となるコードを逆コンパイルして、キーロガーの重要な機能と特徴を特定することができました。

図7: KeyBaseロゴ
KeyBaseの機能には、以下のものがあります。
- 起動時におけるWebサイトの表示
- スクリーンショット
- ダウンロード/実行
- 永続化
- キル タイマー
マルウェアの初期実行時には、一連のスレッドが生成されます。

図8: KeyBaseのメイン関数
攻撃者が作成時に指定したオプションによっては、新しいスレッドで生成された各関数が無効になる可能性があります。ある機能を有効にしない場合、関数は以下のようになります。

図9: KeyBaseの無効な関数

図10: KeyBaseビルダー
作成者は、コード内で使用されているさまざまな文字列に対して、複数の簡単な隠蔽テクニックを採用しています。この例として、文字列に追加された単一文字の置換や、文字列に対する逆操作の実行が挙げられます。

図11: Replaceを使用した文字列の隠蔽

図12: Reverseを使用した文字列の隠蔽
さらに、作成者はEncryptionクラスを利用しています。このクラスは、コード内で検出された複数の文字列を復号化するために使用されます。

図13: KeyBaseのEncryptionクラス
この逆コンパイルされたコードについての言及は、hackforums.netの古い投稿で見つけることができました。ここでは、ユーザー「Ethereal」がサンプル コードを提供しています。

図14: hackforums.netにおけるEncryptionコードに関する投稿
複数のMicrosoft Windows APIをロードする際に、DecryptText関数が使用されていることがわかります。

図15: KeyBaseにおける隠蔽されたAPI関数
これらの文字列を復号化するために、次のPythonコードを使用できます。

永続化
KeyBaseで永続化を有効にする場合は、起動フォルダへのマルウェアのコピー、起動時におけるRunレジストリ キーの設定という2つのテクニックを使用して実装可能です。KeyBaseが自身を起動フォルダにコピーすると、その名前がImportant.exeになります。これは作成者が静的に設定したものなので、現在のバージョンのユーザーが変更することはできません。次のRunレジストリ キーで使用されているキーはユーザーが設定したもので、これは常に32バイトの16進数値になります。
HKCU\Software\Microsoft\Windows\CurrentVersion\Run [32バイトのキー]:[実行可能ファイルへのパス]
キーロギング
KeyBaseにおけるキーロギングは、「KeyHook」という適切な名前が付けられた別のクラスによって主に実現されます。このクラスは、github上で公開されているリポジトリと同じ名前ですが、実際にはカスタム コーディングされているようです。このクラスはカスタム作成されているとはいえ、その手法は、Microsoft WindowsのSetWindowsHookExAを使って被害者のキーボードにフックするという、非常に一般的なものです。

図16: SetWindowsHookExAを通じたキーボードへのフッキング
作成者は、期待されているとおりの方法で、適切なキーボード イベントの処理を進めます。

図17: キーボード イベントの処理
このクラスには、ユニコード文字を処理する機能と、フォアグラウンド ウィンドウの名前を取得する機能もあります。これにより、どのキーが押されているかだけでなく、押されたキーの送信先であるアプリケーションまでもがマルウェアで特定できるようになります。
コマンド アンド コントロール(C2)
リモート サーバとのすべての通信は、HTTP経由で行われます。その際に、データが暗号化されたり、隠蔽されることはありません。初期実行後は、以下のように、リモート サーバへの初期チェックインが、KeyBaseによって実行されます。

図18: KeyBaseの初期通知におけるHTTP GET要求
いくつかのHTTPヘッダーは、この要求に含まれていません。これは、この活動を悪意のあるものとしてフラグ付けするための簡単な手法の採用を可能にします。また、要求に含まれるハードコードされたGET変数を使って比較的簡単に活動を検出できることは、留意すべき重要なポイントです。被害者のマシン名や現在の時間はその都度変化しますが、残りの要求は静的なまま変わりません。
KeyBaseでは、次のデータがそのC2サーバに送り返されることもあります。
- キーストローク
- クリップボード
- スクリーンショット
このデータのいくつかの例を以下に示します。

図19: KeyBaseによるクリップボード データのアップロード

図20: KeyBaseによるキーストローク データのアップロード
C2サーバとのこの通信では、生のクリップボードとキーストロークのログ データが、KeyBaseの各種GETパラメータを使って追加されます。このデータはURIエンコードされていますが、それ以外の箇所はクリアテキストになります。
最後に、Keybaseでは、スクリーンショットをアップロードするために特定のURIも使用されます。「/image/upload.php」パスは、マルウェア内にハードコードされます。C2サーバに送り返されるすべてのイメージは、「/image/Images/」パス内に配置されます。アップロードされたデータは、以下のように、暗号化されていない状態で再送信されます。

図21: KeyBaseによるスクリーンショット イメージのアップロード
Webパネル
Webパネル自体には、革新的な特徴はありません。.以下のように、シンプルな赤/グレーのカラー スキームを使用しています。

図22: KeyBaseのWebパネル
このパネルにより、感染マシン、キーストローク、スクリーンショット、クリップボード データ、およびパスワード データをすばやく表示することができます。残念ながら、KeyBaseの作成者は、ページ送りを活用していないようです。ページ送りを使用すると、攻撃者が大量のデータを表示する際にパフォーマンスが低下します。
興味深い発見
調査の過程において、Unit 42は、「/image/Images/」パスの表示には認証が不要であることを発見しました。特に、1台のC2サーバの動作は特筆すべきものでした。オペレーターが、自身のローカル マシンでKeyBaseをテストしているようだったからです。実際、このオペレーターのマシンのスクリーンショットは自身のサーバにアップロードされ、一般ユーザーが閲覧できる状態にありました。以下のスクリーンショットでは、KeyBase v1.0フォルダをはっきりと確認できます。このフォルダには、ほぼ確実にKeyBaseインストールが含まれています。オペレーターのデスクトップを見てみると、HawkEye KeyloggerやKnight Loggerなどの他のキーロガーも存在することがわかります。さらに注目すべきポイントとして、広く使用されているAegisCrypterという暗号化ソフトウェアが確認できることです。最後に、「The Hobbit」と「Fury」のコピーがデスクトップ上に表示されていることからも、このユーザーが海賊行為を行っていることがわかります。

図23: KeyBaseオペレーターのデスクトップ スクリーンショット
アップロードされたイメージの調査を進めるにつれて、このユーザーがリモート デスクトップ経由でWindows Web Server 2008 R2インスタンスにログインしていることも判明しました。この攻撃者は、Turbo-Mailer 2.7.10インスタンスを使用して、この場所からスパム活動を行っているようです。しかし、この特定の時点で、自分のユーザー名/パスワードを忘れてしまったようです。

図24: KeyBaseオペレーターによるフィッシング メールの送信
アップロードされたスクリーンショットをさらに詳しく調べた結果、ユーザーが自分のFacebookアカウントにログインしたことが明らかになりました。ユーザーの名前は「China Onyeali」のようで、自分の最近の活動について話していることがわかります。具体的には、rghost[.]net上にホストされている、次のファイルを含んだ.rarファイルへのリンクがあります。また、オペレーターが別のチャット ウィンドウでHawkEyeキーロガーについて話していることもわかります。このオペレーターのFacebookページによると、このユーザーはナイジェリアのムビエリに住んでいるようです。弊社は昨年の7月の419詐欺の進化に関する報告で、ナイジェリアの人物が市販のツールを使って企業を攻撃していることを明らかにしました。このユーザーの存在は、Facebookのセキュリティ チームに通知されました。

図25: KeyBaseオペレーターによるFacebookへのログイン
その他の興味深い発見
バックエンドのC2コードを調査する際に、その他の興味深い発見もありました。特に、upload.phpファイルの検証と分析が行われました。このファイルでは、サーバへのファイル アップロードが処理されるからです。以下で明らかなように、リモート サーバにアップロードされるファイル タイプに対する検証は行われません。

図26: PHPスクリプトのアップロードを示したKeyBaseスクリーンショット
これは、セキュリティ上の観点から問題になります。PHPスクリプトを/image/Images/ディレクトリにアップロードするだけで、第三者による不正アクセスが可能になるからです。次のPHPコードを使用すると、Webパネルのユーザー名とパスワードを含んだKeyBaseのconfig.phpスクリプトを読み取ることができます。

さらに、次のPythonコードを使用して、このファイルのアップロードとその結果の読み取りを行えます。

結論
全体的に、このKeyBaseマルウェアは、かなり基本的なものであるといえます。これには、より一般的なマルウェア ファミリが備えているいくつかの機能がなく、C2 Webパネルには、第三者による不正アクセスを可能にするセキュリティの脆弱性が含まれています。KeyBaseの作成者は、使いやすいユーザーフレンドリーなインターフェイスを提供していますが、いくつかのオプションはマルウェア自体にハードコードされています。その例として、KeyBaseが永続性を保持するためにコピーするファイルの名前と、コマンド アンド コントロール フェーズで使用される各URIパスが挙げられます。
このマルウェアは巧妙さの点でいくつかの問題を抱えていますが、Unit 42は、ハイテク産業、高等教育機関、および小売業界を標的とする一般的な攻撃において、その使用頻度が大幅かつ継続的に増加していることを観察しています。パロアルトネットワークスのお客様は、WildFireによって保護されます。WildFireは、KeyBaseを有害なものとして検出できます。読者は、前述の兆候に基づいて保護を展開できます。
サンプル ハッシュと、その関連するドメインおよびIPアドレスの一覧については、次のリンクを参照してください。