攻撃者がファイル機能のみを使用できる場合、Linuxで強化されたchrootをエスケープする方法は?

攻撃者がファイル機能のみを使用できる場合、Linuxで強化されたchrootをエスケープする方法は?

システムにはchroot環境があり/var/myroot、攻撃者はchrootからroot(EUID 0)で実行されるプロセスで任意の機械語実行権限を取得します。ただし、攻撃者が制御するプロセスではすべての機能が有効になっていません(ファイルシステム機能のみ)。攻撃者はchrootを脱出し、/etc/passwdchrootの外側に行を追加しようとします。彼はどうしたのでしょうか?

次のセキュリティ対策が講じられました。

  • 防止するためchdir("..") chroot エスケープ技術、chroot環境に入るために使用ピボット_ルート(2)代わりにchroot(2)。よりjchroot.cどうすればいいですか?
  • chroot の最初のプロセスが開始されると、chroot の外側を指すファイル記述子は開かれません。
  • chrootの各プロセスは最大CAP_CHROOT、、、、、、機能を持ち、他CAP_FOWNERのプロセスを取得できません。つまり、攻撃者は権限チェックなどを迂回して任意のファイルシステムの読み書きを行うことができるが、プロセスに任意の信号を送信したり()ネットワークから任意のパケットを送信したり()システムを再起動したり()することは不可能です。メモリのバイト()などCAP_FSETIDCAP_CHOWNCAP_DAC_OVERRIDECAP_DAC_READ_SEARCHCAP_SETGIDCAP_SETUIDCAP_KILLCAP_NET_RAWCAP_SYS_BOOTCAP_SYS_RAWIO
  • unshare(CLONE_NEWUSER)以前はいいえ呼び出されると、chroot プロセスの UID 0 は chroot 外の UID 0 と同じです。
  • unshare(CLONE_NEWPID)攻撃者がchrootの外で実行されているプロセスを見ることができないように呼び出されます。
  • unshare(CLONE_NEWNS)chrootが設定され、次のファイルシステムが表示されたときに呼び出されます。
    • /var/chrootと表示され、 で/再インストールされます。 (攻撃者が書き込めないように使用し、ファイル関数で攻撃者が新機能を得ることができないように使用する。)MS_NODEVMS_NOSUIDMS_NODEV/dev/sdaMS_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 ファイルシステムがマウントされていません。
    • /devtmpfsファイルシステムは、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 の外側を指すファイル記述子がないため動作しません。

ベストアンサー1

おすすめ記事