私は自分のサーバー上で任意の(潜在的に危険な)バイナリを実行したいと思います。したがって、RLIMIT_CPU
の適切な値を設定し、other_mainを呼び出す前にSECCOMP
フラグをトグルする独自の小さなメイン関数でリンクできるように、 "main"シンボルの名前を "other_main"に変更するのにobjcopy
を使用しました。これまでのところ、私はこのソリューションに満足しています。SECCOMP:malloc、realloc、freeをエミュレートするには?
サードパーティのプログラムコードにmallocの呼び出しが含まれている可能性があります。これは、プログラムを即座に終了させる可能性があります(sbrkは許可されません)。したがって、malloc/realloc/calloc/freeで使用するSECCOMP
を設定する前に、適切なサイズの配列(例:20MB)を事前に割り当てたいと思います。残念ながら、私は最後のステップをアーカイブする方法を知らない。私は4つの機能をすべて自分で実装する必要がありますか? stdlibに自分自身の関数を挿入するにはどうすればいいですか?たとえば、printfがmallocを内部的に呼び出すとどうなりますか?
シンボルの名前を変更するのは本当に機能していますか?私は本当にOSが剥奪されたバイナリで何をするのだろうかと思う。 –
シンボルの名前の変更はここでうまくいきます。 objcopyは本当に強力です。あなたは明らかにバイナリを削除することは許されていませんが、それは私にとっては問題ではありません。私自身でバイナリをコンパイルするためです。信頼できないCコードだけです。 – tux21b
OSのライブラリとは異なるCライブラリ(Newlibなど)をユーザに提供できますか?もしそうなら、自分の 'sbrk'(あなたのサンドボックスから出ることはできません)を書くのはとても簡単でしょうし、malloc/realloc/calloc/freeと友人はすべて動作します。 –