「Dirty Pipe」と呼ばれるLinuxの重大な脆弱性により、最も権限の低いユーザーでさえ悪意ある操作を実行できる可能性がある。
Ionosの研究者Max Kellermannが明らかにした。新たな脆弱性を今週初めに明らかにしたのである。この名称は、2016年に発見され、OSのバージョンにかかわらずあらゆるAndroid Phoneで攻撃者がroot権限を取得できた「Dirty Cow」脆弱性を想起させるが、Dirty Pipeは前身よりさらに悪用しやすい可能性がある。
KellermannはLinuxカーネルのバグを悪用することに成功した。このバグにより、「nobody」アカウントのような最も権限の低いユーザーを含むあらゆるユーザーが、rootユーザーのアカウントにSSHキーを追加し、完全な権限でサーバーにリモートアクセスするといった悪意ある操作を実行できる。
あわせて読みたい:主要な脆弱性管理ツール
LinuxのNobodyアカウントとは
Unixシステムには従来、NFS(ネットワークファイルシステム)で特定の操作を行うための専用ユーザーとしてnobodyが用意されてきた。
この擬似ユーザーは最も権限の低いアカウントで、パスワードを持たず、文字どおりファイルを1つも所有しない。実際、基本原則であるPoLP(最小権限の原則)のゼロトラストというセキュリティ原則は、ユーザーが必要とする情報とリソースだけにアクセスできるようにすることを求めている。
最も権限の低いアカウントがroot権限を取得できる脆弱性は、Linuxのような広く普及したOSにとって重大な失態である。
Dirty Pipeの仕組み
この脆弱性に関するCommon Vulnerabilities and Exposures(CVE)レポートであるCVE-2022-0847では、攻撃者がこのバグをどのように悪用できるかを説明している。「Pipe」という用語は、Linuxカーネル内部の「パイプライン」と呼ばれるメカニズムを指す。
Kellermannは、攻撃者がキャッシュ内にある任意のファイルの内容を上書きできる可能性のある、カーネルコード内の未初期化変数を発見した。もちろん一定の条件はあるが、攻撃者に書き込み権限は必要なく、読み取りアクセスだけで十分だ。このバグはシステムバイナリやbtrfsファイルにも影響する。
実際、カーネルはキャッシュ内のページに対して恒久的に読み書きのアクセス権を持つ。カーネルは常に最大の権限で動作するため、このレベルでは検証が行われない。ハードウェアにアクセスできる、システムの中核部分なのである。
カーネルはフラグとパイプを使ってプロセス間でデータを受け渡す。KellermannはLinuxカーネルのセキュリティチーム向けに概念実証(下図)を作成し、パイプを作って任意のデータで満たした。これによりPIPE_BUF_FLAG_CAN_MERGEフラグが有効になり、最終的にキャッシュされたファイルページを上書きできた。
ただし、書き込みがページ境界を越えられないという制限があることにも気づいた。それでも、書き込み権限なしにファイルを変更することは可能で、その変更はシステム上のすべてのユーザーに影響を及ぼし得る。
Dirty Pipeでは、正規のプロセスが持つ権限なしにファイルへデータを書き込め、時間的な制約も一切ない。

こちらも参照:オープンソースの主要なペネトレーションテストツール10選
攻撃者がDirty Pipeでできること
Dirty PipeはDirty Cowより悪用しやすく、rootレベルまで権限を昇格できるため、深刻度の高い欠陥である。ハッカーは、一般的なライブラリを改変したり、任意のコードを実行したりするなど、追加の作業に利用すると考えられる。
上書きは一時的にも恒久的にも可能で、攻撃者は本来不変であるはずのシステムのバイナリを変更できる。悪意あるアプリケーションは、ユーザーの同意なしに自身の権限を高いレベルまで引き上げられる可能性がある。
この脆弱性は、ラテラルムーブメント、任意コード実行、ウイルスの拡散にうってつけである。
このような低レベルの侵害は、特にゼロクリック攻撃にとって魅力的だ。「単純な」ファイル破損に関する最初のサポートチケットが発行されてから、最終的に一般公開されるまで、ほぼ1年が経過した。

Dirty Pipeの脆弱性を見つけて修正する方法
この重大なバグはLinuxで修正された。執筆時点で比較的新しいバージョンであるLinux 5.8でバグが導入されたため、幸いにも本番サーバーへの影響はそれほど多くないと期待される。
5.8版を実行しているユーザーは速やかに更新し、より新しいバージョンを実行しているユーザーも、5.16.11少なくとも最新の状態にしておく必要がある。欠陥のあるカーネルコードへの既知の緩和策は、更新以外に存在しない。
Googleは2月末に新しいカーネルコードでAndroidにパッチを適用したが、最新のPixel(このバグはGoogle Pixel 6で実証されている)やSamsung(Galaxy 2022など)を含むAndroidデバイスは影響を受ける。Androidエコシステムは、同じLinuxカーネルを基盤とするさまざまな代替システムが存在するなど、非常に分断されているため、多くのデバイスがこの脆弱性を抱えたまま動作している可能性がある。
Androidユーザーには、「設定」>「デバイス情報」>「Androidバージョン」でOSのバージョンを確認することを強く推奨する。
次に読む:最適なパッチ管理ソフトウェア





