Internet
如何檢查二進製文件是否可能在不執行的情況下訪問網際網路?
是否有可靠的方法來檢查二進制執行檔在執行之前是否可能嘗試訪問網際網路(例如,打電話回家)?
我猜許多二進製文件使用 glibc 的 ioctl / socket / connect 來訪問網際網路。意思是,
objdump
對這些功能進行檢查和檢查可能會揭示這方面的一些資訊。但這是否足夠?有沒有不使用這些 glibc 函式來訪問網際網路的方法?我怎樣才能檢測到這些?
程序可以通過多種方式訪問 Internet,例如使用libcurl等庫。您可以檢測那些 using
ldd
並再次檢查二進制 using 中正在使用哪些符號objdump
,並閱讀文件以了解各種功能的作用。但是,如果您要檢查惡意二進製文件,那也不夠:二進製文件可以使用系統呼叫直接呼叫核心以打開套接字等,或者它可以載入庫
dlopen(3)
以使其更難檢測到它們的使用.如果你想在沒有網路訪問的情況下執行二進製文件,你可以
unshare
從網路命名空間:unshare -n binary
不過,您需要以 root 身份執行此操作,因此您可能希望
su
返回給其他使用者(如果它是惡意二進製文件,也可能不是您自己的使用者):unshare -n su sacrificialuser -c binary
正如Gilles所指出的,這並不能保護您免受執行二進製文件可能產生的其他副作用,包括設置一個 cronjob 代表執行檔出於任何目的訪問網路。
或者,您可以設置
iptables
或nftables
規則從二進製文件中刪除(並記錄)所有網路流量;或者更好的是,設置一個 VM 並在其中執行二進製文件(然後停止 VM)。