動的ライブラリ「L」をロードするプロセス「A」があるとします。
Q: "L" 内の関数への "exec" 関数へのアクセスを無効にする方法はありますか?
これにはAppArmorを使用します。アプリケーションが実行できる操作を具体的に減らすことができます。どのファイルを読み書きできるか、どの OS 機能を呼び出すことができるか、どのネットワーク サービスを使用できるかなどです。
セットアップは少し難しいですが、アプリの実行に必要なすべての操作を記録するツールを使用できます。実行後、出力を確認し、少し変更してから使用できます。
ダイナミックライブラリは呼び出し元のアプリケーションと同じプロセススペースを共有するため、それは絶対に簡単ではありません(そして、アプリケーションに対しても拒否しない限り、不可能だと思います)。ライブラリを別のアプリケーションでラップできる場合は、AppArmorまたはSELinuxが役立つ場合がありますが、一般的には、信頼できないライブラリをアプリケーションにロードするのはなぜですか?
Chromiumがサンドボックスをどのように処理するかを調べることも役立つ場合があります。
Linux を使用している場合は、次の操作を実行できます。
必要なことを実行する (または実行しない) exec() と system() の独自のバージョンを実装し、LD_PRELOAD を実行するか、RTLD_DEEPBIND を dlopen() に渡します。これにより、リンカはあなたのバージョンのこれらのメソッドは、libc によって提供されるバージョンよりも優先されます。
必要な効果を得る可能性のあるいくつかのトリックがあります(たとえば、MMUを使用してexec()関数を含むCライブラリのセクションを実行不可としてマップします)。
ただし、ダイナミックライブラリは同じプロセススペース内で実行されているため、ライブラリで元に戻すことができなかったライブラリに対して、ダイナミックライブラリを永続的に無効にすることができます。