攻撃者は Python でコンパイルされたバイトコードを使用して検出を回避します
ルシアン・コンスタンティン
CSO シニアライター、CSO |
PyPI (Python Package Index) などのオープンソース パッケージ リポジトリをターゲットとする攻撃者は、悪意のあるコードをセキュリティ スキャナー、手動レビュー、その他の形式のセキュリティ分析から隠すための新しい手法を考案しました。 ある事件では、研究者らは、Python ランタイムによって解釈されるソース コード ファイルではなく、直接実行できる Python バイトコード (PYC) ファイル内にマルウェア コードが隠されていることを発見しました。
「これは、Pythonのバイトコードファイルが直接実行できるという事実を利用した最初のサプライチェーン攻撃である可能性があり、Python Package Indexへの悪意のある投稿が急増する中で発生した」とセキュリティ企業ReversingLabsの研究者らは報告書で述べている。 「もしそうなら、この種の攻撃は、Python ソース コード (PY) ファイルのみをスキャンするほとんどのセキュリティ ツールでは見逃される可能性が高いため、今後さらに別のサプライ チェーン リスクが生じることになります。」
JavaScript の npm、Python の PyPI、Ruby の RubyGems など、パブリック リポジトリにあるパッケージの大部分は、アーカイブにパッケージ化されたオープンソース コード ファイルで構成されています。 これらは解凍して読み取るのが簡単であるため、これらのリポジトリのセキュリティ スキャナは、このタイプのパッケージ化を処理できるように構築されています。
攻撃者は検出を回避するためにセキュリティ会社と絶え間なく戦っており、平文コードに関して最も一般的な回避手法は難読化です。 これは、エンコード、デコード、評価などのプログラミング言語自体の機能を使用して、コードを読み取れなくても機能できるようにすることで構成されます。 たとえば、悪意のあるコードを Base64 でエンコードすることは一般的に使用される手法ですが、セキュリティ ツールはそのようなエンコードに対処できます。
PyPI エコシステムでは、W4SP Stealer マルウェアの背後にあるサイバー犯罪者が、base64 エンコード、LZMA 圧縮、縮小化 (コードからスペースやコメントを削除して、コードをよりコンパクトにするだけでなく、読みにくくすること) などの手法を採用していることで知られています。 このグループは、pyminifier、Kramer、Hyperion などのサードパーティのオープンソース ツールを使用してこれを実現しています。 W4SP 攻撃のバリエーションの 1 つでは、ファイル内の難読化された悪意のあるコードがデフォルトの画面境界線の端を越えて移動され、ソース コード ファイルを手動でレビューする人には見えないようになっていました。
ただし、PYC ファイルは異なります。 これらは、平文の PY スクリプトのように人間が判読できるものではありません。 PYC ファイルは、Python インタープリターが Python スクリプトをインポートまたは実行するときに生成されます。 これらはすでに解釈 (コンパイル) されたコードであるため、元のスクリプトを再解釈することなく、後で Python インタープリターによって直接実行できます。 これにより実行時間が短縮されるため、パフォーマンスが向上します。また、このようなファイルの最も一般的な用途は Python モジュールの配布です。
PyPI マルウェアのほとんどのインスタンスでは、悪意のある難読化コードは外部 URL にアクセスしてマルウェア (通常は情報を盗むもの) をダウンロードすることを目的としており、これもセキュリティ ツールが不審な動作を検出する機会となります。 この最新のインシデントでは、fshec2 と呼ばれるパッケージに悪意のある PYC ファイルが含まれていることが判明しましたが、悪意のあるペイロード全体がファイル内に隠蔽されている可能性があり、セキュリティ ツールが逆コンパイルするように設計されていない場合、そのペイロードを検出することは非常に困難です。
「fshec2 パッケージで発見されたようなローダー スクリプトには最小限の Python コードが含まれており、コンパイルされた Python モジュールのロードという単純なアクションを実行します」と ReversingLabs の研究者らは述べています。 「これはたまたま悪意のあるモジュールであるだけです。PyPI パッケージを分析するために PyPI セキュリティ チームが提供するデフォルトのツールである Inspector は、現時点ではバイナリ ファイルを分析して悪意のある動作を特定する方法を提供しません。内容を分析するには .PYC ファイルを逆コンパイルする必要がありました。」
ReversingLabs によって発見された fshec2 パッケージは、おそらく検出を回避することを意図した追加の動作を示しました。 通常、モジュールは import ディレクティブを使用して Python スクリプトからインポートされます。 ただし、この場合の悪意のある PYC モジュールは、インポート機能を実装し、インポートされたライブラリがインポート時に動的に変更される場合などの特定の場合にのみ使用される別個のパッケージである importlib を使用してロードされました。 この場合、悪意のある PYC は変更されていないため、通常の import ディレクティブの使用を回避する (おそらく検出回避のため) 以外に importlib を使用する技術的な理由はありません。
fshec2 悪意のあるペイロードは、マシン上で実行されると、ユーザー名、ディレクトリ リスト、ホスト名などのシステムに関する情報を収集し、Linux 上で cron ジョブを設定するか、Windows 上でスケジュールされたタスクを設定して、リモート サーバーから取得したコマンドを実行します。 このコマンドを使用すると、マルウェアの自己更新が可能になり、攻撃者は新しいバージョンや追加のペイロードを Python スクリプトの形式で配布できるようになります。
ReversingLabs の研究者はコマンド アンド コントロール サーバーを分析し、一部の情報を確認できるような設定ミスを発見しました。 たとえば、被害者のマシンには増分 ID が与えられており、マルウェアが実際に複数の被害者によって実行されたことを確認できたことがわかりました。
研究者らは、「こうした間違いの多さから、この攻撃は国家支援者の仕業ではなく、APT(Advanced Persistent Threat)ではないという結論に至る可能性がある」と述べた。 「私のチームはその仮定を証明するのに十分な証拠を集めていませんでしたが、ファイル ID をインクリメントすることでファイル名を収集することで、場合によっては攻撃が成功したと判断できます。私たちの研究者はまだ、誰が、何をターゲットにしているのかを明らかにすることはできません。」しかし、開発者が悪意のある PyPI パッケージをインストールし、その結果としてマシン名、ユーザー名、ディレクトリのリストが収集されたことは確認できています。」
サーバー上で見つかったファイル名の一部は、攻撃者が一部のマシンにキーロギング機能を導入したことを示唆しています。
「歴史的に、npm は不運なリーダーであり、PyPI も、どのオープンソース プラットフォームがマルウェア作成者から最も注目を集めるかを競うレースに出場しました」と研究者らは述べています。 「しかし、過去 6 か月で、ReversingLabs などは、PyPI に公開されるマルウェアの量が著しく増加していることを観察しました。実際、5 月には、PyPI での新しいユーザー アカウントとプロジェクトの作成が、次の理由により一時的に数時間停止されました。」大量の悪意のある活動に影響を及ぼします。」
ReversingLabs は、パッケージを削除した PyPI セキュリティ チームに新しい攻撃ベクトルを報告し、この攻撃手法はこれまで見たことがないと述べました。 これは、他の同様のパッケージがリポジトリに侵入する可能性を排除するものではありません。
こうした最新のソフトウェア サプライ チェーンの脅威に対処するには、組織には静的コード分析ソリューション以上のものが必要です。 機密性の高い開発システムを監視して、不審なプロセスの作成、ファイルの実行、不正な URL アクセス、情報収集コマンド、get_path や importlib などの悪用しやすい関数の使用も監視できるツールが必要です。
Lucian Constantin は、CSO のシニア ライターで、情報セキュリティ、プライバシー、データ保護を担当しています。
著作権 © 2023 IDG コミュニケーションズ株式会社
コンパイルされたコードとソース コード 資格情報の盗用が主な目的であるようです 次にこれを読んでください