GNU/Linux >> Linux の 問題 >  >> Linux

Linux アプリケーションの syscall アクセスを制限する

アプリケーションは静的にリンクされていますか?

そうでない場合は、いくつかのシンボルをオーバーライドできます。たとえば、socket を再定義しましょう。 :

int socket(int domain, int type, int protocol)
{
        write(1,"Error\n",6);
        return -1;
}

次に、共有ライブラリを構築します:

gcc -fPIC -shared test.c -o libtest.so

走ろう:

nc -l -p 6000

わかりました。

そして今:

$ LD_PRELOAD=./libtest.so nc -l -p 6000
Error
Can't get socket

変数 LD_PRELOAD=./libtest.so で実行するとどうなりますか ? C ライブラリで定義されているシンボルを libtest.so で定義されているシンボルでオーバーライドします。


systrace はまさに必要なことを行っているようです。ウィキペディアのページから:

<ブロック引用>

アプリケーションは、ポリシーで許可されていると指定されたシステム コールのみを実行できます。明示的に許可されていないシステム コールをアプリケーションが実行しようとすると、アラームが発生します。


これは、サンドボックス化 (具体的には、ルールベースの実行) の適用例の 1 つです。一般的な実装の 1 つは SELinux です。

プロセスに許可したいことに対応するポリシーを作成する必要があります。


Linux
  1. Linuxシステム管理者向けのWebアプリケーションファイアウォールの概要

  2. LinuxでMimeタイプのアプリケーションを見つける方法は?

  3. Linux – Rhel6.5のスクリーンキャプチャアプリケーション?

  1. Linux アプリケーションのプロファイリング

  2. LinuxでJNIアプリケーションの動的ライブラリをコンパイルするには?

  3. Linux の 32 ビット コードでは、int 0x80 と syscall のどちらが優れていますか?

  1. Linux –カレンダーに使用するアプリケーションはどれですか?

  2. Gnome Pie – Linux用の循環アプリケーションランチャー(メニュー)

  3. Linux の Windows サブシステム上の Ubuntu で INT 0x80 を使用してアセンブリ コンパイルされた実行可能ファイルが出力を生成しない