探しているのは、プログラムがシステム(具体的にはカーネル)と対話する方法を示すツールです。プログラムは、syscallsを使用してシステムと対話します。syscallの例は次のとおりです。
open
-ファイルを開くために使用されます。
read
そして write
-ファイル記述子の読み取り/書き込みに使用されます。
connect
-ソケットをピアに接続するために使用されます。
- 他にもたくさんあります(を参照
man syscalls
)。
重要なのは、syscallはを使用してトレースできることptrace(2)
です。つまり、基本的には、周辺に構築されたツールを探していますptrace
。そのようなツールの1つはですstrace(1)
。これは、コマンドを引数として取り、出力するターミナルアプリケーションです。
- プログラムが呼び出しているシステム呼び出し。
- syscallsを作成するために使用される引数。
- syscallの結果。
出力はC形式です。次に例を示します。
$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY) = 3
/* ... */
read(3, "hello\n", 32768) = 6
write(1, "hello\n", 6) = 6
read(3, "", 32768) = 0
/* ... */
そこにcat test
、という名前のファイルを開いて、test
その内容を読み取っています(hello
)をて、標準出力に配置しているます。
strace
は多くの出力を生成する可能性があるので、そのmanページ(man strace
)、特に-e
興味のあるsyscallだけを表示できる出力のドキュメントを必ずお読みください。
残念ながら、私はグラフィカルな方法や使いやすい方法を知りません。それらを探したい場合ptrace
は、検索キーワードの1つである必要があります。
分離については、そこに多くの技術があります。Chroots、Linuxコンテナ(現在開発中、不完全)、ソフトウェア仮想化、準仮想化が最も使用されています。ただし、これは議論するには大きすぎるトピックです。詳細を知りたい場合は、新しい質問を開くことをお勧めします。
sandbox somebinary
、架空のsandbox
プログラムがすべてのファイルのsomebinary
読み取りまたは書き込みをログに記録すると想像してください。接続されているIP /ポート、データ転送など。これは便利なことです。このようなものが存在するかどうかも知りたいです(実際、そのようなツールがVMで実行されているプログラムを監視しなければ、無意味です。とにかくそれが何をするかを言うことはできません)。良い質問。