XGuardでCopy Failを阻止する方法
May 6, 2026
*本記事は Karamba Security 社の以下のブログ記事(2026年5月6日時点)の参考訳です。
How XGuard Stops Copy Fail
*ブログの内容は更新されている可能性があります。また、記事内のリンク先は別途記載がない限りは英語ページになります。
CVE-2026-31431からエッジおよびIoTシステムを保護するには
Copy Failとは
2026年4月29日、2017年から存在していたLinuxカーネルの暗号サブシステムにおけるロジック上の欠陥「Copy Fail」が、Theori/Xintのセキュリティリサーチャーによって報告されました。この欠陥は、標準ライブラリのみを使用したわずか732バイトのPythonスクリプトだけで、事実上すべての主要なLinuxディストリビューションにおける非特権ユーザーからroot権限への昇格や、コンテナからの完全な脱出を可能にしてしまうものです。
Copy Failが特に危険なのは、ディスク上のファイル自体を変更せずに、カーネルメモリ上だけで攻撃が成立する点です。ディスク上の`su`バイナリ自体は改変されないまま、RAM上にキャッシュされた内容だけが密かに上書きされるため、従来のファイル整合性監視では検知できません。Copy Failは報告から数日以内にCISAのKnown Exploited Vulnerabilities(KEV)カタログに追加されており、すでに実際の悪用事例も確認されています。
攻撃チェーンの概要
この攻撃の目的は、特別な権限なしにLinuxシステムのroot権限を取得することです。
- 攻撃に使われるPythonスクリプトは、2017年からLinuxカーネルに存在していた欠陥を悪用します。この欠陥はシステム上のどのプロセスからでも悪用可能です。
- 標的となるのは、ディスク上のファイルではなく、カーネルのメモリキャッシュです。外部ライブラリのインストールやコンパイルは不要で、実行にroot権限も必要ありません。
- このスクリプトは悪意のあるシェルコードを、実行時にroot権限で動作する標準的なシステムバイナリである`su`のキャッシュページに直接注入します。
- `su`は実行時に、システムはディスクではなく、キャッシュを読み込むため、本来のプログラムの代わりに攻撃者のシェルコードが実行されます。`su`はroot権限を持つため、シェルコードもroot権限で実行されます。
ディスクには一切変更が加えられず、見た目には異常がありません。しかし、実際にはわずか数秒でroot権限が奪取されてしまいます。
ここで重要なのは、この攻撃が、標準ライブラリ(`os`、`socket`、`zlib`)のみを使用する732バイトのPythonスクリプトを配置するだけで成立する点です。
攻撃の詳細については、こちらをご参照ください。
XGuardによる防御の仕組み
XGuardは、Binary Allow-ListとDeep Python Inspectionという2つの主要な制御機能により、Copy Failを阻止します。いずれも、攻撃がカーネルに到達する前の段階で食い止める仕組みです。
防御策1 - Allow-List:攻撃用スクリプトを起動時にブロック
XGuardは、ビルド時にデバイスの既知の正常なソフトウェアベースラインをもとに暗号署名付きのBinary Allow-Listを作成して、デバイス上のすべての実行ファイル、共有オブジェクト、カーネルオブジェクト、スクリプトに適用します。Copy Failを悪用するPythonスクリプトは、本番環境のエッジデバイスやIoTデバイス上に本来存在するべきではないため、このAllow-Listには含まれません。
そのため、攻撃用スクリプトが呼び出されると、XGuardは即座にその実行を拒否し、攻撃の進行を阻止します。`su`のキャッシュページが改変されることもなく、攻撃チェーンは初期段階で遮断されます。
この保護は、攻撃手法に依存しません。XGuardは、CVE-2026-31431を事前に把握している必要も、そのシグネチャを持っている必要も、パッチの提供を待つ必要もありません。承認済みベースラインに含まれないスクリプトはすべて拒否されるため、ゼロデイ/Nデイを問わず、カーネルに到達する前の段階で防御できます。
防御策2 - Deep Python Inspection:Pythonを悪用した回避手法をブロック
XGuardのAllow-Listの存在を把握している高度な攻撃者は、すでに信頼されているPythonプロセスを経由してCopy Failのペイロードを送り込もうとするかもしれません。しかし、XGuardのDeep Python Inspectionは、トップレベルのスクリプトだけでなく、すべてのモジュールのインポートや動的に読み込まれるファイルをPython Allow-Listポリシーに照らして検証し、Pythonの対話モードでの利用も制限します。これにより、以下のような回避手法にも対応できます。
シナリオA - 悪意のあるモジュールのインポート
攻撃者が、Allow-Listに登録された正規のPythonアプリケーションにあらかじめ備わっているインポートのメカニズムを悪用しようとしたとします。親スクリプト自体は信頼できるものです。しかし、実行時に呼び出されるインポートされるモジュールは改ざんされており、その中には732バイトの攻撃用ペイロードが丸ごと含まれています。このモジュールは、Python Allow-Listには登録されていません。
これに対し、XGuardのDeep Python Inspectionは、インポート対象のモジュールが特定された時点で、そのコードが実行される前にAllow-Listとの照合を行います。Copy Failのペイロードは、事前承認済みのAllow-List登録スクリプトに含まれていないため、インポートはブロックされ、攻撃用のコードも実行されることはありません。
シナリオB - 対話型Pythonシェル
Python対応アプリケーション、または対話型Pythonターミナルが利用可能なアプリケーションにアクセスできる攻撃者が、それを起点に攻撃用スクリプトをインタプリタに直接入力し、攻撃を実行しようとしたとします。
IoTデバイスやエッジデバイスでは、通常の動作としてPythonを対話モードで実行することは想定されていません。そのため、XGuardのDeep Python Inspectionは、Pythonの対話モードでの操作をブロックし、Copy Failが対話モードで実行されることを防ぐことができます。
防御可能な範囲

まとめ
権限昇格攻撃は、低権限プロセスでのコードのローカル実行が起点となります。そのため、許可されていないファイルやスクリプトの実行をブロックすることで、根本から食い止めることができます。
Copy Failは、システムにほとんど手を加えることなく従来型のセキュリティメカニズムを回避できるため、極めてリスクの高い脅威です。しかし、XGuard Allow-ListとDeep Python Inspectionを組み合わせることで、この問題への本質的な対処が可能になります。攻撃用スクリプトを使う方法であっても、Pythonを使ってペイロードを送り込む方法であっても、最終的には、デバイス上で事前承認されていない実行ファイルやスクリプトのコードを実行する必要があります。XGuardは、「許可されていないコードは実行させない」というシンプルな仕組みのため、攻撃内容そのものを認識する必要がありません。
緊急パッチの適用に運用上のコストがかかる、または適用自体が現実的ではないエッジ/IoT環境では、決定論的な堅牢化というアプローチが有効になります。つまり、CVEの新旧を問わず、カーネルが関与する前にキルチェーンを断ち切り、自動化された攻撃が高速に繰り返し行われるような状況でも防御を維持できます。
出典:Theori/Xint、copy.fail、2026年4月29日 — Karamba Security、XGuard Feature Overview、2026年3月
■ お問い合わせ先 ■
Karamba Security社のソリューションについてのお問い合わせは、
株式会社東陽テクニカ ソフトウェア・ソリューション部まで
phone 03-3245-1248(直通) mail ss_sales@toyo.co.jp
