【ITニュース解説】NFS Root Squashing Privilege Escalation (Linux Priv Escalation)

2025年09月06日に「Medium」が公開したITニュース「NFS Root Squashing Privilege Escalation (Linux Priv Escalation)」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

NFSのRoot Squashing機能に脆弱性が見つかり、Linuxシステム上で攻撃者が不正に権限を昇格させられる。これにより、システムのセキュリティ対策を見直す必要がある。

ITニュース解説

ネットワークファイルシステム(NFS)は、LinuxやUnix系のシステムで広く利用されている非常に便利な機能だ。これは、ネットワークを通じて、別のコンピューター(サーバー)のファイルやディレクトリを、まるで自分のコンピューター(クライアント)のローカルディスクにあるかのように利用できるようにする技術だ。例えば、複数のサーバーで同じデータや設定ファイルを共有したい場合にNFSを使うと、それぞれのサーバーにファイルをコピーしたり個別に更新したりする手間がなくなり、一箇所を更新するだけで全てのサーバーに反映されるため、運用管理が大幅に効率化される。この利便性から、NFSは多くの企業システムやデータセンターで不可欠な存在となっている。

Linuxシステムにおける「root」ユーザーは、特別な存在である。rootユーザーは、システム上で最強の権限を持つアカウントで、システムのあらゆる設定変更、ファイルの作成・削除、プログラムのインストール、他のユーザーの管理など、どんな操作でも自由に行うことができる。これは、Windowsの「Administrator」アカウントやMacの「システム管理者」アカウントに相当する。この強力な権限があるため、rootユーザーのセキュリティは極めて重要だ。もし悪意のある第三者がroot権限を奪取すれば、システム全体が乗っ取られ、重大な情報漏洩やシステム破壊につながる可能性があるため、通常の運用ではrootユーザーの使用は極力避け、必要な場合にのみ限定的に利用するのが一般的なセキュリティ対策となる。

NFSの利便性の一方で、セキュリティ上のリスクも存在する。特に問題となるのが、リモートのrootユーザーがNFS共有にアクセスする際の挙動だ。もしクライアント側のrootユーザーが、NFSサーバー上のファイルに対して、サーバー側のrootユーザーと全く同じ権限を行使できてしまうと、サーバーのセキュリティが著しく損なわれる恐れがある。 この問題を解決するために、NFSには「Root Squashing(ルートスクワッシング)」というセキュリティ機能が組み込まれている。これは、NFSサーバー側の設定で、リモートのクライアントからrootユーザーとしてアクセスがあった場合、そのrootユーザーの権限を、サーバー側の通常の、ほとんど権限を持たないユーザー(通常は「nfsnobody」という特殊なユーザー)の権限に「格下げ」するというものだ。この機能の目的は、クライアント側のrootユーザーが、NFSサーバー上のファイルを勝手に変更したり、システムに損害を与えたりするのを防ぐことにある。Root Squashingは、多くのNFSサーバーでデフォルトで有効になっている、非常に重要なセキュリティ対策の一つと言える。

「Privilege Escalation(権限昇格)」とは、サイバーセキュリティの分野で用いられる言葉で、低い権限しか持たないユーザーが、システムの脆弱性や設定ミスを悪用して、本来持っていないはずの高い権限(例えばroot権限)を獲得する攻撃手法を指す。権限昇格に成功した攻撃者は、システムに対する完全な制御権を手に入れ、情報の窃取、システムの破壊、他のシステムへの攻撃の踏み台にするなど、あらゆる悪意のある行為が可能になるため、情報セキュリティにおける最も深刻な脅威の一つと考えられている。

今回のニュース記事で焦点となっているのは、「NFS Root Squashing Privilege Escalation」という、NFSのRoot Squashing機能が持つ意図しない振る舞いを悪用した権限昇格の手口だ。この攻撃は、Root Squashingが有効になっているNFS共有において、特定の条件が重なった場合に発生する可能性がある。 この攻撃の根本にあるのは、NFSサーバーがクライアントから送られてくるファイルの所有者情報(UID: ユーザーID、GID: グループID)を、ある程度「信頼してしまう」という点だ。通常、Root Squashingが有効なNFS共有では、クライアント側のrootユーザーがファイルを作成しようとすると、サーバー側ではそのファイルの所有者がnfsnobodyに変更される。しかし、以下のようなシナリオで、このセキュリティ対策が回避されてしまう場合がある。

まず、前提条件として、NFS共有が設定されており、誰でも書き込み可能な状態(rwオプションが付与されているなど)であることが必要だ。また、Root Squashingが有効になっている(NFS設定でroot_squashが明示されているか、デフォルト設定のまま)ことが条件となる。NFSサーバーは、クライアントがファイルを作成・アップロードする際に「これはUID 0(root)のユーザーが作成したファイルです」という情報を鵜呑みにしてしまう特性がある。

攻撃者は、自身のクライアントマシン上で、root権限(UID 0)で実行されるように設定された実行ファイルを作成する。このファイルには、「SetUID(セットユーアイディー)」ビットという特殊なパーミッションを設定する。SetUIDビットが設定された実行ファイルは、そのファイルを実行したユーザーの権限ではなく、「そのファイルの所有者の権限」で実行されるという特性を持つ。例えば、所有者がrootでSetUIDビットが付いたプログラムを実行すると、どんな一般ユーザーが実行してもroot権限で動作する。攻撃者は、作成した実行ファイルの所有者を、自身のクライアントマシン上でroot(UID 0)に設定し、さらにchmod u+sコマンドでSetUIDビットを付与する。

次に、攻撃者はこのSetUID rootの実行ファイルをNFS共有にアップロードする。ここで重要なのは、NFSサーバーはクライアントから送られてきたファイルの所有者情報(UID 0)をそのまま受け入れてしまうという点だ。本来、Root Squashingが有効なため、サーバー側ではこのファイルの所有者をnfsnobodyに「スクワッシュ」するべきだ。しかし、NFSサーバーはファイル作成時にクライアントから送信されたUID/GID情報を信頼し、ファイルシステム上にroot所有のファイルとして記録してしまう。これは、Root Squashingの動作が、NFS経由でのアクセス要求に対して適用されるものであり、ファイルシステム上での所有権の記録とは少し異なる振る舞いをすることがあるためだ。結果として、NFS共有上には所有者がrootで、SetUIDビットが付与されたファイルが誕生してしまうことになる。

最後に、攻撃者はNFS共有をマウントした自身のクライアント上で、先ほどアップロードしたSetUID rootの実行ファイルを自身で実行する。SetUIDビットの特性により、この実行ファイルはroot権限で動作する。これにより、攻撃者はNFSサーバー上でrootシェルを取得するなど、root権限での操作が可能になる。NFSサーバー側から見れば、攻撃者は低い権限でアクセスしているはずなのに、NFS共有上の特定のファイルを通じて、システム全体を制御できるroot権限を奪取されてしまうというわけだ。

このようなNFS権限昇格攻撃からシステムを守るためには、NFSサーバーの適切な設定とセキュリティ意識が不可欠だ。 まず、NFSエクスポートオプションを厳格に設定する必要がある。no_root_squashオプションはRoot Squashingを無効にするため、極力使用しないべきだ。もし特定のrootアクセスが必要な場合でも、信頼できるホストからのアクセスに限定し、リスクを十分に評価するべきだ。また、rw(読み書き可能)オプションも不必要に設定せず、NFS共有は、必要な場合を除きro(読み取り専用)で設定することが推奨される。書き込み権限が必要な場合でも、信頼できるホストや特定のユーザーに限定することが重要だ。さらに、exportsファイルの設定で、NFS共有へのアクセスを許可するクライアントのIPアドレスやネットワーク範囲を厳密に指定することで、アクセス元を制限できる。例えば、192.168.1.0/24(rw,sync,root_squash) のように設定し、信頼できる内部ネットワークからのアクセスのみに限定する。NFS共有に実行可能ファイルが含まれないことが確実であれば、noexecオプションを付与することも有効な対策となり、NFS共有上のファイルの実行が制限される。

次に、最小権限の原則を徹底する必要がある。NFS共有は必要な最小限の権限とアクセス範囲で設定し、不要な共有は行わない。ファイルやディレクトリのパーミッションも適切に管理し、意図しない書き込みや実行を防止することが求められる。 可能であれば、よりセキュアな認証方式を導入することも検討すべきだ。NFSv4では、Kerberosなどの強力な認証メカニズムを統合できる。これにより、単なるIPアドレスベースの認証よりもはるかに高いセキュリティレベルを確保できる。 最後に、システムの監視とパッチ適用も欠かせない。NFSサーバーのアクセスログを定期的に監視し、不審なアクティビティがないかを確認する。NFSサーバーソフトウェアやLinuxカーネルの脆弱性が発見された場合は、速やかにパッチを適用し、システムを常に最新の状態に保つことが重要だ。

NFS Root Squashing Privilege Escalationは、NFSの便利さとセキュリティ機能の間の微妙な隙間を突く巧妙な攻撃手法だ。Root Squashing機能は、リモートのrootユーザーによるサーバーへの不正なアクセスを防ぐための重要なセキュリティ機能だが、NFSがクライアントから送られるファイルの所有者情報を信頼してしまうという特性と、SetUIDビットの悪用が組み合わさることで、権限昇格に悪用される可能性がある。システムエンジニアを目指す初心者にとって、NFSのような便利なネットワークサービスの仕組みを理解するとともに、そのセキュリティ上の潜在的なリスクと、それに対する適切な対策を学ぶことは非常に重要だ。適切な設定とセキュリティ原則の遵守によって、システムの安全性を高め、この種の攻撃から身を守ることができる。