This post is also available in: English (英語)
概要
2019年3月4日、攻撃者が使用する最もよく知られたキーロガーの1つであるAgent Teslaは、法律上の問題により、販売を終了しました。このキーロガーの開発者は、Agent Tesla Discordサーバーに投稿したお知らせのメッセージの中で、新しいキーロガーに切り替えるように提案しています。「Agent Teslaのような強力なソフトウェアを探している人には、OriginLoggerを提案します。OriginLoggerはAgent Teslaベースのソフトウェアであり、すべての機能を備えています」OriginLoggerは、Agent Teslaの亜種です。そのため、Agent Teslaに対応するツールや検出の大部分は、OriginLoggerサンプルに対してもトリガーされます。
最近、Agent Teslaとタグ付けされたあるマルウェアの解析を始めたところ、それが実際には別のマルウェアだったことがわかって驚きました。この事実が判明したのは、マルウェアファミリを抽出するツールを作成した後、大量のマルウェアファミリの設定を分析し始めたときでした。
このブログでは、OriginLoggerキーロガーマルウェアについて、設定変数の文字列の難読化を処理する方法、および抽出した設定を調査して判明した、識別の強化とさらなるピボット検索に役立つ情報について説明します。
パロアルトネットワークスのお客様は、Cortex XDRと次世代ファイアウォールを通じて、さらにWildFireと高度な脅威防御を含むクラウド利用のセキュリティサービスを利用して、OriginLoggerおよびその前身であるAgent Teslaの両方からの保護を受けられます。
Unit 42の関連トピック | Agent Tesla |
目次
OriginLoggerビルダー
ドロッパーのおとり(ルアー)
OriginLoggerの設定
OriginLoggerをアーティファクトから特定
悪意のあるインフラ
結論
OriginLoggerビルダー
OriginLoggerについて調査し始めたとき、OriginLoggerに関する公開情報はほとんど見つけられませんでした。現在私がOriginLoggerに関する内容であると認識しているいくつかのAgent Tesla関連の分析ブログ(中にはAgentTeslav3というタグを付けているものもあります)はありますが、それを除けば、パブリックインターネットでは関連情報がかなり不足しています。
調査の過程で、「完全に検出不能(FUD)」なツールの売人らが2018年(Agent Teslaが販売を終了する前)に投稿したYouTube動画を偶然見つけました。彼らは、OriginLoggerツールを宣伝し、マルウェアやエクスプロイトなどを不正に売買する既知のサイトでこのツールを購入するためのリンクを示していました。
さらにWebパネルとマルウェアビルダーのスクリーンショットも表示していました。
私が特に興味を持ったのは、図4に示すビルダーの画像です。ここに示されているデフォルトの文字列(facebook, twitter, gmail, instagram, movie, skype, porn, hack, whatsapp, discord)は、このアプリケーションに固有である可能性がありました。案の定、VirusTotalでコンテンツ検索したところ、2022年5月17日にアップロードされた1つのファイル(SHA256: 595a7ea981a3948c4f387a5a6af54a70a41dd604685c72cbd2a55880c2b702ed)と一致しました。
このファイルをダウンロードして実行しようとすると、依存関係の欠落によりエラーが発生します。ただし、ビルダーのファイル名がOriginLogger.exeであることがわかっているので、検索範囲を広げて、OriginLoggerを実行するために必要なすべてのファイルが含まれるZipアーカイブ(SHA256: b22a0dd33d957f6da3f1cd9687b9b00d0ff2bdf02d28356c1462f3dbfb8708dd)を見つけることができました。
settings.iniファイルにはビルダーが使用する設定が含まれており、図7に示すように前述の検索文字列がSmartWordsに記載されています。
ファイルprofile.originには、顧客がOriginLoggerを購入する際に登録したユーザー名/パスワードが埋め込まれています。
面白いことに、プロファイルファイルで2つの値を入れ替えると、平文のパスワードが表示されます。
ユーザーがログインすると、ビルダーは、OriginLoggerサーバーによる認証でサブスクリプションを検証しようとします。
この時点で、私は2つのバージョンのビルダーを入手していました。1つ目はZipファイルに含まれていたバージョン(b22a0d*)であり、2020年9月6日にコンパイルされています。2つ目はSmartWords文字列を含むバージョン(595a7e*)であり、1つ目のバージョンからほぼ2年後の2022年6月29日にコンパイルされています。
2つ目のバージョンは、TCP/3345からIP 23.106.223[.]46に認証要求を行います。2022年3月3日以降、このIPは、ドメインoriginpro[.]meに解決されます。このドメインは、以下のIPアドレスに解決されます。
23.106.223[.]46
204.16.247[.]26
31.170.160[.]61
2つ目のIP 204.16.247[.]26は、以下に示す他のOriginLogger関連ドメインを解決している点で目立っています。
originproducts[.]xyz
origindproducts[.]pw
originlogger[.]com
1つ目のバージョンのビルダーを調べると、さらに面白いことがわかります。このバージョンは、別のIPアドレスに接続して認証しようとします。
originpro[.]meと異なり、74.118.138[.]76は、どのOriginLoggerドメインにも直接解決されることはありませんが、代わりに0xfd3[.]comに解決されます。このドメインを調べたところ、mail.originlogger[.]comのDNS MXレコードとDNS TXTレコードが両方とも含まれていました。
2022年3月7日ごろから、問題のドメインはIP 23.106.223[.]47に解決され始めましたが、その最終オクテットは、originpro[.]meで使用されているIPの最終オクテット(46)より1だけ大きい値です。
これら2つのIPアドレスは、以下に示す複数のSSL証明書を共有しています。
SHA1 | シリアル番号 (Serial Number) | コモンネーム (Common Name) | 観測されたIP |
2dec9fdf91c3965960fecb28237b911a57a543e2 | 38041735159378560318847695768150611562 | WIN-4K804V6ADVQ | 23.106.223[.]46 23.106.223[.]47 |
7a7e732229287c1d53a360e08201616179217117 | 133152806647474295963986900899009859692 | WIN-4K804V6ADVQ | 23.106.223[.]46 23.106.223[.]47 74.118.138[.]76 204.16.247[.]26 |
3b3cf8039b779d93677273e09961203ffaac2d6f | 89480234209393487842197137895395039274 | WIN-4K804V6ADVQ | 23.106.223[.]46 23.106.223[.]47 74.118.138[.]76 204.16.247[.]26 |
表1 共有されているSSL証明書
IP 23.106.223.Xで始まる両方のサーバーのRDPログイン画面には、Windows Server 2012 R2サーバーと複数のアカウントが示されています。
このドメインをさらに調べたところ、ユーザー0xfd3のGitHubプロファイルが見つかりました。このプロファイルには、図13に示す2つのリポジトリが含まれています。
これらについてはこのブログ記事の後半でコードを調べる際に説明しますが、(ネタバレになりますが)これらもOriginLoggerで使用されています。
ドロッパーのおとり(ルアー)
このマルウェアの詳細に進む前に、分析しようとしているサンプルにつながるドロッパーについて簡単に説明します。Agent TeslaとOriginLoggerはどちらも商品化されたキーロガーなので、きっかけとなるドロッパーはキャンペーンごとに大きく異なり、いずれかに特有であると考えてはいけません。以下に示すのは、OriginLoggerをドロップする攻撃の実例であり、かなり複雑化および難読化できることがわかります。
きっかけとなるおとり文書は、Microsoft Wordファイル(SHA256: ccc8d5aa5d1a682c20b0806948bf06d1b5d11961887df70c8902d2146c6d1481)です。この文書を開くと、ドイツ国民のパスポートとクレジットカードの写真が表示されます。通常のユーザーにとってこれがどれほど魅力的なおとりになるのかはよくわかりませんが、いずれにしても、図14に示すように画像の背後に大量のExcelワークシートが含まれていることがわかります。
各ワークシートは、別々に埋め込まれているExcelワークブックに含まれており、まったく同じものです。
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet1.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet10.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet2.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet3.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet4.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet5.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet6.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet7.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet8.xls
dc8b81e2f3ea59735eb1887128720dab292f73dfc3a96b5bc50824c1201d97cf Microsoft_Excel_97-2003_Worksheet9.xls
各ワークブックには、実行するコマンドを以下の場所に保存するためだけのマクロが1つ存在します。
C:\Users\Public\olapappinuggerman.js
これを実行すると、MSHTA経由でhxxp://www.asianexportglass[.]shop/p/25.htmlのファイルの内容をダウンロードして実行します。このWebサイトのスクリーンショットを図16に示します。
このファイルでは、難読化されたスクリプトが文書の途中にコメントとして埋め込まれています。
スクリプトをアンエスケープすると、図18に示すコードが表示されます。このコードは、BitBucketスニペット(hxxps://bitbucket[.]org/!api/2.0/snippets/12sds/pEEggp/8cb4e7aef7a46445b9885381da074c86ad0d01d6/files/snippet.txt)から次のペイロードをダウンロードして、calsaasdenderswという名前のスケジュール済みタスクにより永続性を確立します。このタスクは83分ごとに動作して、ここでもMSHTAを使用してhxxp://www.coalminners[.]shop/p/25.htmlに埋め込まれているスクリプトを実行します。
BitBucket Webサイトでホストされるこのスニペットには、さらに難読化されたPowerShellコードおよびエンコードされて圧縮された2つのバイナリが含まれています。
この2つのファイルのうち、1つ目のファイル(SHA256: 23fcaad34d06f748452d04b003b78eb701c1ab9bf2dd5503cf75ac0387f4e4f8)は、CSharp-RunPEを使用するC#反射型ローダーです。このツールは、プロセスを空洞化して、その内部に別の実行可能ファイルを注入します。今回のケースでは、キーロガーペイロードが、aspnet_compiler.exeプロセスの内部に配置されます。
Executeメソッドの呼び出し元であるprojFUD.PAクラスに注目してください。Morphisecは、2021年に投稿したRevealing the Snip3 Crypter, a highly evasive RAT loaderというタイトルのブログ記事の中で、サービスとしての暗号化システムを分析し、このアーティファクトを使用する暗号化システム作成者のフィンガープリントを作成しています。
2つのファイルのうち、2つ目のファイル(SHA256: cddca3371378d545e5e4c032951db0e000e2dfc901b5a5e390679adc524e7d9c)は、OriginLoggerペイロードです。
OriginLoggerの設定
前述したように、今回の分析の本来の目的は、キーロガーから設定関連の詳細を自動的に抽出することでした。この目的を達成するために、まず設定関連の文字列がどのように使用されているかを調べました。
マルウェアの実際の機能については、非常に標準的であり、既存のAgent Teslaの亜種の分析が反映されているので、ここでは詳しく説明しません。攻撃者の広告で宣伝されているように、このマルウェアは実証済みの手法を使用して、キーストロークの記録、認証情報の窃取、スクリーンショットの取得、他のペイロードのダウンロード、無数の方法によるユーザーデータのアップロード、および検出を回避する試みといった機能を備えています。
設定関連の詳細の抽出を開始するために、ユーザーが入力したデータがマルウェアにどのように保存されるのかを解明する必要がありましたが、調べてみると単純でした。ビルダーは、動的な文字列値を受け取り、それを巨大なBLOBテキストに連結してからエンコードしてバイト配列に保存します。このバイト配列は実行時にデコードされます。このマルウェアが動作して、スクリーンショットのアップロード先のHTTPアドレスなどの文字列を必要とする関数に到達すると、BLOB内からテキストを取り出す関数にその位置を示すオフセットと文字列長を渡します。
説明のために、メインBLOBテキストに対して使用されるデコードロジックを以下に示します。
各バイトは、そのバイトのバイト配列インデックスでXOR演算され、さらに値170でXOR演算されて、平文として取り出されます。
このBLOBテキストは、ビルダーで生成されるサンプルごとに設定内容に応じて異なり、オフセットとポジショニングも変化します。図21に示されている生のテキストが参考になりますが、スプライシングしないと、境界がどこで終わるのか、またはどこで始まるのかを判定するのは困難です。
マルウェアを分析する際も、いつどこで何が使用されるかがわからないので、役に立ちません。この問題を解決するには、OriginLoggerがどのようにスプライシングを処理しているのかを調べる必要がありました。
以下に示すのは、文字列を取り出す関数、およびそれに続くオフセットと長さを含むいくつかのメソッドです。
この場合、マルウェアのどこかでB()メソッドが呼び出されると、このメソッドが、画像の先頭に示されている難読化された名前のない関数に「2, 2, 27」を渡します。1つ目の整数は、デコードされた文字列の保存先を示す配列インデックスとして使用されます。2つ目の整数(オフセット)と3つ目の整数(長さ)は、テキストを取得するGetString関数に渡されます。このエントリで生成される値<font color="#00b1ba"><b>[は、窃取したデータを表示するためにアップロードするHTMLページを作成する際に使用されます。
文字列解析の仕組みを理解したことにより、文字列の抽出を自動化することができました。まずは、中間言語(IL)のアセンブリ命令を調べることが役に立ちます。
どれだけ検索しても、関数ブロックの構造はずっと同じです。図23のインデックス6~8には3つのldc.i4.X命令があります。Xは、前述のスプライシング関数を呼び出す前にスタックにプッシュされる整数値を示します。この構造全体が、解析を目的としてバイナリ内の対応する関数をすべて照合するために使用できる枠組みを構成しています。
この枠組みを利用して、エンコードされたバイト配列を特定し、XOR値を決定して、デコードされたBLOBをマルウェアと同じ方法でスプライシングするスクリプトを作成しました。これを使用すると、デコードされた文字列をスクロールしながら興味のあるものを探すことができます。何かが見つかったら、オフセットとそれに続く関数名はわかっているので、マルウェアの中でそれらを利用する場所の周辺を調査することができます。
ここから、難読化されたメソッドの名前を、その実際の値を反映するように変更する作業を開始しました。これにより、分析の際に読みやすくなります。
これと同じ文字列の難読化解除は、de4dotとその動的な文字列復号機能を使用して、文字列型をdelegateと指定し、関心のあるトークンを指定することによって達成できます。これは、1つのファイルを分析する場合に極めて有効です。
このブログ記事のOriginLoggerビルダーセクションで、0xfd3ユーザーのGitHubリポジトリについては後で説明しますと書いたことを思い出してください。図26に示すのは、キーロガーの世界でOriginLoggerがAgent Teslaに取って代わった後、2020年3月にアップロードされたChrome Password Recoveryコードです。
図27に示したメソッドの名前を変更したOriginLoggerサンプルのコードを図26と比較してください。
似てませんか? OriginLoggerは、Agent Teslaが中止した開発を継続しているので、この種の類似性がたくさん見つかります。
OriginLoggerをアーティファクトから特定
作成したツールを使用して、1,917個の異なる設定を抽出しました。ここから、使用された流出方法についての洞察を得て、基盤となるインフラストラクチャに基づいてサンプルをクラスタリングすることができます。
この時点で、これまで調べていたのがAgent Teslaではなく、別のキーロガーであるOriginLoggerであることがわかってきました。2つの流出方法が両方ともある方法で「origin」を複数回参照しているのを見つけたことから、全容が明らかになってきました。
たとえば、キーロガーとスクリーンショットのデータをアップロードするためにサンプルに設定されているURLの1つは、hxxps://agusanplantation[.]com/new/new/inc/7a5c36cee88e6b.phpでした。このURLはすでにアクティブではないので、それに関する履歴情報を検索した結果、HTTP POST要求の受信側に何があったのかがわかりました。URLScan.ioでこのドメインをスキャンしたところ、同じディレクトリにあるパネルのログインページが表示されましたが、さらに重要なのは、4か月前にスキャンした時点で、このホストでOriginLogger Webパネル(SHA256: c2a4cf56a675b913d8ee0cb2db3864d66990e940566f57cb97a9161bd262f271)が検出されたという点です。
同様に、流出方法の1つは、Telegramボットを使用します。Telegramボットを利用するには、OriginLoggerにTelegramボットトークンが含まれている必要があります。これにより、OriginLoggerはTelegramボットとやり取りできるようになります。これも、使用されているインフラストラクチャを分析するまたとない手がかりになります。このケースでは、トークンを使用してwhoamiコマンドと同等のクエリをTelegramに対して実行し、ボット作成者が使用している名前を観察することができます。関連する名前を示すいくつかの例を以下に示します。
"id":2046248941,"is_bot":true,"first_name":"origin","username":"mailerdemon_bot"
"id":1731070785,"is_bot":true,"first_name":"@CodeOnce_bot","username":"PWORIGIN_bot"
"id":1644755040,"is_bot":true,"first_name":"ORIGINLOGGER","username":"softypaulbot"
"id":1620445910,"is_bot":true,"first_name":"ORIGINLOGS","username":"badboi450hbot"
"id":2081699912,"is_bot":true,"first_name":"Zara","username":"Zaraoriginbot"
"id":5054839999,"is_bot":true,"first_name":"Origin Poster","username":"origin_post_bot"
悪意のあるインフラ
商品として販売されている他のキーロガーと同様に、OriginLoggerは、世界中でさまざまな人々により悪意のあるさまざまな目的で使用されています。以前、キーロガーの被害者について詳細に調査し、それらのスクリーンショットを分析することによって、攻撃者の潜在的な意図の何を明らかにできるかについて記事を書きました。このブログ記事では、私が収集したOriginLoggerサンプルのコーパスから抽出したデータを観察した結果をまとめます。ほとんどのサンプルに複数の流出手法が設定されており、それぞれについて以下に説明します。
SMTPは、依然としてデータ流出で使用される主要なメカニズムであり、1,909個のサンプルで検出されました。これはおそらく以下の理由によるものです。
- このプロトコルによるトラフィックは、使用されている他のプロトコルよりも、通常のユーザートラフィックにうまく溶け込みます。攻撃者が窃取した電子メールアカウントを取得するのは、比較的簡単です。
- 電子メールプロバイダは通常、大量のストレージ領域を提供します。
窃取したデータの一意の電子メール受信者アドレスは296個あり、それらを送信するために使用された一意の電子メールアカウント認証情報は334個ありました。
FTPは1,888個のサンプルで設定され、56個の一意のFTPサーバーと79個の一意のFTPアカウントが使用されていました。複数のアカウントが、おそらく複数のキャンペーンで使用されたことにより、複数のディレクトリにログを記録していました。56個のうちアクセス可能な11個のサーバー全体で442件の一意の被害者が存在し、中には数百回のログが記録された被害者もいました。
わずかな差で続くのがOriginLoggerパネルへのWebアップロードであり、1,866個のサンプルで設定され、92個の一意のURLに対してアップロードが行われました。これらのURLを分析したところ、アップロードに使用されるPHPファイルは、ファイル名に英数字のパターンが見られ、さらにディレクトリ構造内に配置する方法にもいくつかのパターンが見られました。図29に示すWebパネルのソースコードを見ると、PHPファイル名はランダムバイトのMD5値であり、/inc/ (incoming)ディレクトリに配置されます。
多くのキーロガー購入者は技術的経験が乏しく、キーロガーを配布するだけでいいようにすべてを準備してくれる「フルサービス」ベンダーを使用する傾向があることに注意する必要があります。多くのURIが同じ構造を持っているのは、これが理由だと思われます。たとえば、あらゆる場所でhttp://<ipaddress>/<name>/inc/<md5>.phpという構造が繰り返し使用されており、ディレクトリの最初のレベルには、自動生成された可能性の低い、おそらくアカウントに関連する値が使用されています。
b0ss/inc
rich/inc
divine/inc
ma2on/inc
darl/inc
jboy/inc
newmoney/inc
同様に、以下に示すディレクトリ構造では、incがmawaに変更され、名前の前にwebpanelが付加されています。
webpanel-roth/mawa
webpanel-qwerty/mawa
webpanel-dawn/mawa
webpanel-charles/mawa
webpanel-muti/mawa
webpanel-ghul/mawa
webpanel-reza/mawa
最後の流出方法であるTelegramは、1,732個のサンプルで検出され、181個の一意のTelegramボットで窃取したデータを受信していました。このボットには、whoamiを発行できるだけでなく、窃取した情報のアップロード先のチャンネルに関する情報をクエリすることもできます。以下に、最も多く使用されているチャンネルと現在使用中の詳細情報を示します。
件数 | チャンネルの紹介文 | 所有者 | ボット名 |
41 | Invest in bitcoin now and attain financial freedom | Alaa Ahmed | obomike_bot |
25 | Free Cannabis 🌵🌵 | Cry_ptoSand | sales3w7_bot、oasisx_bot、valiat073_bot |
21 | Atrium Investment Ltd: We Help You ACHIEVE YOUR LIFE GOALS | Doris E. Athey | Tino08Bot |
20 | Self Discipline, Consistency and humanity. | Lucas Grayson | Odion2023bot |
18 | Come Closer | Anthony Forbes | Anthonyforbes2023bot |
14 | Think it, Code It | CodeOnce DeSpartan | PWORIGIN_bot |
12 | Dream cha$er 4L | Lurgard da Great | johnwalkkerBot |
11 | coder..no system is safe.. Private crypt 100$..knowledge is power 💯💯 | ☠️The Devil☠️👹👿( do not disturb )) | Skiddoobot |
10 | PhD Engineering | Alexander Macbill | swft_bot |
表2 最も多く使用されているチャンネル
最後に、あまり利用されない機能として、OriginLoggerが被害システムに感染した後に他のペイロードをダウンロードする機能があります。前述のサンプルのうち、他のマルウェアをダウンロードするように設定されていたのは2つだけでした。
結論
OriginLoggerは、その前身であるAgent Teslaと同様に、多くの重複する類似点とコードを共有するコモディティ化されたキーロガーですが、追跡および理解するためには、この2つを区別することが重要です。商品化されているキーロガーは、これまであまり高度ではない攻撃者向けでした。しかし、この記事で分析した、きっかけとなるおとり文書に示されているように、攻撃者が複数のツールとサービスを使用して難読化し、分析を一層複雑にする能力が低下するわけではありません。商品化されているキーロガーも、他のマルウェアと同様に警戒して取り扱う必要があります。
幸運なことに、この例では前述の2つのキーロガーが似ているので、シグネチャの命名は多少不正確ですが、検出と保護の方法は、世代間で引き継がれます。
パロアルトネットワークスのお客様は、Cortex XDRと次世代ファイアウォールを通して、さらにWildFireと高度な脅威防御を含むクラウド利用のセキュリティサービスを利用して、OriginLoggerおよびその前身であるAgent Teslaの両方からの保護を受けることができます。