はじめに
CTF初めて2カ月の初心者がTryHackMeのNetworkService2のNFSをやるなかで学んだことを共有します。
NFS
Network File System.ファイル共有プロトコル。プラットフォーム間の互換性があり、Linux、MACos、WindowsなどOSを跨ぐファイル移動時につかわれている。
マウントすることでNFSサーバーの共有ディレクトリーをローカルファイルのように扱うことができる。NFSサーバーからファイルをDownloadせずとも直接実行、編集することができる。
類似ファイル共有プロトコルとの違いと強み
FTP.ファイルをダウンロードしないと編集できない。 SMB.名前解決などファイル共有以外の機能もあり、ヘッダーが大きくなってしまう。root_squash
NFSにおいてはNFSクライアントのrootユーザーがNFSサーバー上で「nobody」として扱われる設定です。もしNFSサーバーが root_squash を無効にしている場合(no_root_squash 設定がされている場合)、クライアント側の root ユーザーがそのままサーバーの root 権限で操作できることになります。no_root_squash時の攻撃例!
SUIDを設定したbashファイルを使った攻撃①クライアント側でroot権限で実行されるSUIDのbashファイル"bash"作成。
②NFSを使って"bash"をNFSサーバーに保存する。
③SSHなどを使ってuserとしてNFSサーバーに接続して、"bash"を実行
④"bash"のSUIDがNFSサーバーのrootだと誤認し、NFSサーバーのルート権限で実行してしまう。
⑤root権限でやりたい放題。
もし、root_squashが設定されていれば、④でNFSクライアントのrootユーザーが設定したSUIDはnobodyとして認識される。その結果"bash"はnobodyの権限で実行されるため権限昇格はされない。