仙石浩明さんの日記で面白い記事を見つけました。されたディレクトリから脱出してみるというものです。cccとすると、aaa,bbbにはアクセスできなくなります。chroot牢獄というらしいのですが、なんとその牢獄から脱獄してaaa,bbbに行けちゃうっていうことです。実際さってみると、いとも簡単に脱獄できました。これを実装からみてみようと思います。外れているかもしれません。タスク構造他にはルートディレクトリ情報のrootとカレントディレクトリ情報のpwdのメンバーを有しています。cccとしたといたします。fs->rootはccc、fs->pwdはcccとなっています。pwd;};パスのルックアップにおいて、絶対パスでしてされれば、ルートをfs->rootで設定されているパスを起点に、相対パスで指定されればfs->pwdを基点にして探査していきます。..とすると、fs->pwdから親へ辿ってそれを返すことになります。通常はfs->root配下にfs->pwdは存在することになりますが、chrootでfs->root配下以外にfs->pwdを設定することで、chroot牢獄をエスケープしようというわけです。カーネルのchrootシステムコールはfs->rootを書き換えるだけです。従ってCでchrootシステムコールをコールしてcd..とする一連のプログラムを作成すればいいわけです。そのようなプロセスをchrootされているルート(ccc)から起動すると、子プロセスはfs->pwdを引き継ぎます。すると、fs->rootがddd、fs->pwdがcccとなるプロセスを作成することが可能となります。..毎に、それがfs->rootでないかチェックします。fs->rootであればそこでお終いです。..としてfs->rootにマッチすることはありません。従って最終的に本来のルートにたどり着いたのちbashを起動することで、まさにchroot脱獄です。fs->rootはdddのままですので、このシェル上で絶対パスを指定すると、牢獄に逆戻り。ことになってしまいま・・・す?p/sfs->pwdがコンポーネントした保持していないのに、なぜフルパスで表示されるのだろうか?と思って調べると、どうやら__d_pathをコールすることでfs->pwdから親へと遡って表示させているようでした。それゆえにchroot脱獄を可能としているようです。ノースAdsense広告情報が設定されていません。