バイナリ実行可能ファイルを実行する前にインターネットアクセス(たとえば、自宅に電話する)を試していることを確認するための信頼できる方法はありますか?
多くのバイナリがglibcのioctl/socket/connectを使ってインターネットにアクセスしているようです。これはobjdump
、これらの機能を調べると、それに関連するいくつかの情報が明らかになる可能性があることを意味します。しかし、十分ですか?これらのglibc機能を使用せずにインターネットにアクセスする方法はありますか?これをどのように検出できますか?
ベストアンサー1
プログラムはさまざまな方法でインターネットにアクセスできます。例えば次のようなものを使用してくださいライブラリカール。これらの使用を検出しldd
、バイナリでどのシンボルが使用されているかを再確認し、マニュアルをobjdump
読んでさまざまな機能の機能を特定できます。
しかし、悪意のあるバイナリを調べたい場合は、これだけでは不十分です。バイナリは、ソケットを開くなどのシステムコールを使用してカーネルを直接呼び出すことも、ライブラリをロードして使用を検出するのをdlopen(3)
より困難にすることもできます。
ネットワークアクセスなしでバイナリを実行するには、unshare
ネットワークネームスペースで実行できます。
unshare -n binary
ただし、これはrootとして実行する必要があるため、他のユーザーに戻りたい場合がありますsu
(悪意のあるバイナリの場合は自分のユーザーではない可能性があります)。
unshare -n su sacrificialuser -c binary
指摘したとおりザイルズ、これは任意の目的で実行可能ファイルの代わりにネットワークにアクセスするcronjob設定を含むバイナリ実行の他の可能な副作用からユーザーを保護しません。
または、バイナリからすべてのネットワークトラフィックを削除(および記録)するルールをiptables
設定するか、より良い方法で仮想マシンを設定し、その中でバイナリを実行して仮想マシンを停止することもできます。nftables