This post is also available in: English (英語)
概要
この数週間、私はLuminosityLinkリモート アクセス型トロイの木馬(RAT)に埋め込まれている設定を調査するのに時間を割いていました。ご存じない読者のために説明しますと、LuminosityLinkは価格40ドルのマルウェア ファミリですがシステム管理ユーティリティだと銘打っています。しかしこのマルウェアを実行した場合、他の悪意ある多数の機能とともに、極めて攻撃的なキーロガーが活用されます。そしてこれらの機能を利用すれば攻撃者は被害者のコンピューターを完全に支配することができます。
私にLuminosityLinkのサンプルの設定を採取するよう依頼があり、単にサンドボックス環境内でマルウェアを実行してメモリから設定を抜き出すこともできたのですが、静的なバイナリに対して同じ操作を行うことができるか調べることにしました。
その結果、設定がバイナリ内でどのように暗号化されているかについて、設定の構文解析方法とともに理解することができました。未変更のLuminosityLinkマルウェア サンプルに対してこの操作を行うスクリプトを作成しましたので、このブログ記事内でご紹介します。さらに、Palo Alto Networksが時間をかけて収集した約18,000個のLuminosityLinkサンプルを調べましたが、このスクリプトを使って14,700個のサンプルの設定を抽出することができました。(このデータは本記事の付録セクションにあります。)
LuminosityLinkの概要
2015年5月に姿を見せた当初、LuminosityLinkは下記のグラフが示すとおり知名度が上昇しました。現在まで、Palo Alto Networksはお客様をLuminosityLinkに感染させようとする約50,000回の攻撃について追跡調査してきました。このツールは、業種問わず日本の企業に対しても、メールで送りつけて開かせようとするケースが確認されています。誰でも購入可能なことに加え、改造版が出回っており無料でも利用できることなどから、複数の攻撃者が利用していることが考えられます。
LuminosityLinkは現在40ドルで販売されており、作成者から直接購入することが可能です。このパッケージを使えば、攻撃者はConfuserEx 0.4.0を使って難読化した特注バイナリを作成することができるだけでなく、LuminosityLinkサーバを提供することもできます。ConfuserExは基底にある.NETコードを難読化するオープンソース プロジェクトであり、リバース エンジニアリング作業者が逆コンパイルすることを極めて困難にしています。これは、後ほど暗号化処理をリバース エンジニアリングする方法の決定を検討する際に重要です。
先ほど述べたとおり、次のスクリーンショットで分かるように多数の設定オプションが含まれています。
いったん実行すると、攻撃者に豊富なオプションが与えられますが、そのオプションにはキー ロギング、リモート デスクトップ、パスワード窃盗、デバイス上でのシェルとの対話などがあります。
設定のリバース エンジニアリング
LuminosityLinkの設定を完全に構文解析する際、設定を静的に抽出することが第1ステップとなります。まず、私はまだ手をつけていなLuminosityLinkサンプルをdnSpyという名前のプログラムで開き、設定が保存されていそうな場所について手がかりを探しました。(少し話題からそれますが、dnSpyを強く推奨します。それは、与えられた.NETバイナリを逆コンパイルするという優れた仕事をしてくれるだけでなく、組み込みデバッガも付いてくるからです。このデバッガは私たちが直面しているような問題に取り組むのに役立ちます。)
私はサンプルのバイナリを最初に開く際、サンプルがConfuserExを使って難読化されているのを知っていたため、あまり多くのことを期待していませんでした。しかし、サンプルのリソースを調べてみると、有望そうな文字列のいくつかに目が留まりました。
このように、マルウェアには、その後、Base64エンコード済みデータとして現れるものを含む多数のリソースが含まれています。“SMARTLOGS”、“XML”、および“CONFIG”はすべて、現時点では不明の豊富なデータを含んでいます。残念ながら、これらの文字列をデコードした結果はガベージです。その下で他のいくつかの形式の暗号化が使用されていることを意味している可能性があります。
下層のコードの調査を継続すると、それらは難読化されていますが、さまざまなクラスが何を実行しているか総体的に把握できます。インポートした名前空間、APIコール、および特定の文字列の難読化解除を使用して、プログラム内で何が実行されているか手掛かりを得ることができます。特に、‘System.Security.Cryptography’という名前空間を使用するfd()クラスを調べると、早期に参照されたリソース文字列に対して使用された疑いのある暗号化が判明するという調査上の確かなメリットがありました。
さらにこのクラスを調査すると、次のクラスと関数への参照が見つかります。
- MD5CryptoServiceProvider
- ComputeHash
- FromBase64String
- RijndaelManaged
この時点で、私は、これらの文字列がどのように処理されているか確認するために自分のデバッガに戻りました。前述したさまざまなコールにブレークポイントを設定しました。特に、RijndaelManagedクラスへのブレークポイントは素晴らしい結果を生み出します。
AES-128暗号化が使用されていることを確認するだけでなく、“SMARTLOGS”リソース文字列が使用されていることも確認できます。また、キーとして使用されている文字列も識別できます。この特定の例が“\\ecnOnuR\\noisreVtnerruC\\swodniW\\tfosorciM\\erawtfoS”です。さらなる調査によって、この文字列はMD5アルゴリズムを使用してハッシュされていることが明らかになりました。このハッシュの最初の15バイトが、16バイトのハッシュ全体に連結され、それにnullバイトが続きます。この復号化プロセスは、次のようにPythonで再現できます。
上記のコードを使用して、これが正しいことをさらに確認できます。以下の例では、データ変数に、“SMARTLOGS”リソース内で見つかったbase64エンコード済み文字列が設定され、key_string変数に前述の反転されたレジストリキーが設定されています。
試行錯誤を繰り返し、上記の設定で目撃された各変数のマッピングに成功できました。最後の変数では、‘1’を除く各文字が特定の設定オプションにマッピングされるため、かなり興味深いことがわかりました。次のマッピングが判別されました。
- i : クライアントのインストール/起動を有効にする
- d : クライアント持続性モジュール: Luminosityのクライアント バイナリを保護する
- s : サイレント モード(クライアントPC上のLuminosityウィンドウを隠す)
- a : アンチマルウェアへの事前対処: 悪意のあるファイルを除去し、クライアントPCを高速化する
- n : パワー セーバ: スリープ モードを妨げ、アクティビティが15分間ない状態が経過した後モニターをオフにする
- m : 実行後にファイルを削除する(メルト)
- v: マシンのアンチウイルス/デバッグ
- h : ファイルとディレクトリを隠す
- b : バックアップを開始する
この知識を使用して、上記の設定を解析し、次の結果を得ることができました。
規模を拡大したLuminosityLink設定の解析
この知識を使用して、所定のサンプルの設定を解析するためのスクリプトを作成しました。スクリプトは、長さが50文字を超えており、base64エンコード済みに見える文字列を検索し、ブルート フォース アプローチを採ります。エレガントではありませんが、ジョブは完全に成功します。スクリプトは、本ブログ記事の付録セクションでダウンロードできます。
サンプルのPalo Alto Networksのリポジトリを確認すると、LuminosityLinkのタグが付いたファイルが約18,000個見つかりました。これらの18,000個のサンプルに対して、当社の静的設定抽出および解析スクリプトを適用し、約4,500個の設定の抽出に成功しました。残りのサンプルは、組み込みのConfuserEx隠蔽ルーチンより複雑な方法でパック処理されていたため、未加工の設定文字列は存在しませんでした。
これらのサンプルは、オープン ソースのCuckoo Sandboxのローカル インスタンスを使用して実行されていました(ここでプロセス ダンプが抽出されました)。同じスクリプトをこれらのプロセス ダンプに適用した結果、さらに10,200個の設定を取得し、合計14,700個の解析済みLuminosityLink設定を入手できました。
サンプルを処理した結果、作成者が使用するキーがさらに発見されました。以下の3つの追加文字列は、LuminosityLinkサンプルのキーを生成するために使用されました。
- This conf’ig contains nothing useful.(この設定には便利なものは含まれていません。)Quit acting as if you’re cool by decrypting it.(これを解読して自分がクールであるかのように振る舞うのはやめてください。)
- Resources.SMARTLOGS
- Specify a Password(パスワードを指定してください)
LuminosityLinkの作成者はユーモアのセンスがないわけではないようです。また、過去のサンプルを解析すると、今年の2月から6月のある時点で設定が変更されたことがわかりました。サンプルが古いほど、設定で使用できるオプションが少なくなっていました。提供されたスクリプトがこれらの相違点および使用されるさまざまなキーを示しています。
14,700個の設定から収集されたデータを使用すると、以下の高レベルの統計が引き出されました。
上位のC2最上位ドメイン/IPアドレス
- [3308] ddns[.]net
- [2537] duckdns[.]org
- [904] no-ip[.]biz
- [670] chickenkiller[.]com
- [378] no-ip[.]org
- [377] mooo[.]com
- [242] fishdns[.]com
- [174] no-ip[.]info
- [165] ignorelist[.]com
- [157] freedns[.]su
上位のビルドID
- [4829] HOME
- [83] Client
- [82] crtx1
- [71] M4CHINATION
- [65] CSGO
- [65] NEW
- [59] Slave
- [47] CAPO
- [44] Youtube
- [42] PROJECT.D
上位の実行可能ファイル名
- [1973] sysmon.exe
- [1831] client.exe
- [1254] helper.exe
- [1207] repair.exe
- [1087] winlogon.exe
- [509] svchost.exe
- [315] Luminosity.exe
- [83] WinCOMHost.exe
- [82] chrome.exe
- [61] windowsbootapp.exe
上位のポート
- [1866] 6318
- [1055] 1400
- [493] 1604
- [412] 1337
- [214] 3175
- [182] 22028
- [162] 9045
- [119] 2122
- [115] 100
- [113] 9999
CSVファイル フォーマットで提供された解析済み設定データは、この脅威に対する防御が作成されることに期待を込めてセキュリティ コミュニティに自由に提供されています。
結論
LuminosityLinkは、システム管理ユーティリティとして市販されていますが、多くの犯罪で使用される恐ろしいキーロガーであり、バックドアです。これまで、Palo Alto Networksは、LuminosityLinkの感染の試みを50,000回以上発見し、18,000個の固有サンプルを封じ込めました。このマルウェアは安価で、一般の人が簡単に入手できるため、組織と個人の両者に同様に危険な脅威になっています。
LuminosityLinkサンプルをリバース エンジニアリングすることによって、組み込み設定を静的に抽出して解析できました。その結果、通信を行うためにマルウェアが設定されているホストおよびポートに関する貴重な情報を提供しています。また、実行可能ファイル内に設定された防御に関する情報およびインストール情報も提供しています。
Palo Alto Networksのお客様は、次の方法で脅威から保護されています。
AutoFocusタグを使用してこのマルウェア ファミリを追跡できます。
- すべてのLuminosityLinkサンプルはWildFireで悪意があるものとして適切にマークされます。
- 特定されたすべてのドメインは悪意があるものとしてフラグを立てられます。
- ネットワーク トラフィックは適切に識別され、脅威 ID #14460(LumonosityLinkRAT.Genコマンド アンド コントロール トラフィック)としてブロックされます。