
システムにはchroot環境があり/var/myroot
、攻撃者はchrootからroot(EUID 0)で実行されるプロセスで任意の機械語実行権限を取得します。ただし、攻撃者が制御するプロセスではすべての機能が有効になっていません(ファイルシステム機能のみ)。攻撃者はchrootを脱出し、/etc/passwd
chrootの外側に行を追加しようとします。彼はどうしたのでしょうか?
次のセキュリティ対策が講じられました。
- 防止するためchdir("..") chroot エスケープ技術、chroot環境に入るために使用ピボット_ルート(2)代わりにchroot(2)。よりjchroot.cどうすればいいですか?
- chroot の最初のプロセスが開始されると、chroot の外側を指すファイル記述子は開かれません。
- chrootの各プロセスは最大
CAP_CHROOT
、、、、、、機能を持ち、他CAP_FOWNER
のプロセスを取得できません。つまり、攻撃者は権限チェックなどを迂回して任意のファイルシステムの読み書きを行うことができるが、プロセスに任意の信号を送信したり()ネットワークから任意のパケットを送信したり()システムを再起動したり()することは不可能です。メモリのバイト()などCAP_FSETID
CAP_CHOWN
CAP_DAC_OVERRIDE
CAP_DAC_READ_SEARCH
CAP_SETGID
CAP_SETUID
CAP_KILL
CAP_NET_RAW
CAP_SYS_BOOT
CAP_SYS_RAWIO
unshare(CLONE_NEWUSER)
以前はいいえ呼び出されると、chroot プロセスの UID 0 は chroot 外の UID 0 と同じです。unshare(CLONE_NEWPID)
攻撃者がchrootの外で実行されているプロセスを見ることができないように呼び出されます。unshare(CLONE_NEWNS)
chrootが設定され、次のファイルシステムが表示されたときに呼び出されます。/var/chroot
と表示され、 で/
再インストールされます。 (攻撃者が書き込めないように使用し、ファイル関数で攻撃者が新機能を得ることができないように使用する。)MS_NODEV
MS_NOSUID
MS_NODEV
/dev/sda
MS_NOSUID
- procファイルシステムが表示され、次のパスが削除されます(空のファイルを配置する
/proc
ためにバインドマウントを使用して):、、、、、、、および次の/proc/kcore
パスは読み取り/proc/latency_stats
専用に設定されます。、、、、、、、。/proc/timer_list
/proc/timer_stats
/proc/sched_debug
/proc/scsi
/proc/asound
/proc/bus
/proc/fs
/proc/irq
/proc/sys
/proc/sysrq-trigger
- sysfs ファイルシステムがマウントされていません。
- devpts ファイルシステムがマウントされていません。
/dev
tmpfsファイルシステムは、MS_NODEV
一部のデバイスなしでマウントされ、事前に埋め込まれています。- chrootでは他のファイルシステムを見ることはできません。
- ブロックデバイスノードはchrootでは使用できません(
CAP_MKNOD
攻撃者が作成できないように使用できません)。 - 次
/dev/null
の文字デバイスノードのみが使用できます/dev/zero
。/dev/full
/dev/random
/dev/urandom
/dev/tty
/dev/ptmx
/dev/pts/ptmx
/dev/pts/X
- 攻撃者がchrootを
ioctl(..., TIOCSTI, ...)
呼び出し(入力された入力シミュレーション)/dev/pts/X
して終了すると、chrootの外側のインタラクティブシェルはこれらのシミュレートされたバイトを読み取ることができるため、次のものをシミュレートすると便利ですsudo sh -c 'echo pwned::0:0:pwned:/:/bin/bash >>/etc/passwd'
。これが成功しないように、chrootで生成されたプロセスの親プロセスは、シェルに戻る前にすべての端末入力をフラッシュします。
ちなみに私のユースケースは次のとおりです:私はDebianシステムを持っています/var/myroot
(おそらくブート防止プログラム)、悪意のあるパッケージにスクリプトをインストールすることで、ホストシステムを攻撃にさらさずに信頼できないパッケージをインストールできるようにします。残念ながら、sudo chroot /var/myroot apt-get install MALICIOUS-PACKAGE
十分に安全ではありません。たとえば、パッケージのインストールスクリプトはブロックデバイスノードを作成し、そこでファイルを見つけ/dev/sda1
て/etc/passwd
変更してchrootからエスケープすることができるためです。私は今十分に安全な他のオプションが何であるかを調べています。上記のようにchrootを強化することが一つの候補です。 (この質問では他の候補を見つけることはありません。)この質問ではどれだけ安全であるかを知りたいです。
参考までにコマンドラインツールがあります。chw00tchrootから脱出してください。技術情報:
- -0 はここでは動作しません。なぜならピボット_ルート(2)使用されました。
- -1 は、使用可能な chroot の外側を指すファイル記述子がないため、効果がありません。
- -2 動作することもできます。適用されることを確認する必要があります。ピボット_ルート(2)。
- -3は動作しません。なぜなら共有のキャンセル(CLONE_NEWPID)呼び出されます。
- -4 はブロックデバイスが使用できないため動作しません。
- -5が機能する可能性があります。動作していることを確認する必要があります。ピボット_ルート(2)。
- -6は動作しません。なぜなら共有のキャンセル(CLONE_NEWPID)呼び出されます。
- -7 は、使用可能な chroot の外側を指すファイル記述子がないため動作しません。