如何安全地使用 tcpdump(-Z 選項與文件功能/setcap)?
我正在評估如何以盡可能少的權限以更安全的方式使用 tcpdump。兩種可能:
1.
-Z
選項如果 tcpdump 以 root 身份執行,則在打開擷取設備或輸入保存文件之後,但在打開任何保存文件進行輸出之前,將使用者 ID 更改為 user 並將組 ID 更改為使用者的主要組。
此行為也可以在編譯時預設啟用。
Afaik tcpdump 以混雜模式打開要被嗅探的網路介面,並以 root 身份打開一個可能的文件(標誌),但在開始任何進一步的輸出之前
-r
更改使用者權限。這應該最大限度地減少可能的攻擊向量,因為解析網路流量和可能的惡意網路數據包是作為非特權使用者完成的。例如,如何讓使用者
nobody
確保最低權限:tcpdump -i wlan0 -s 0 -Z nobody src portrange 1-80
2.
setcap
按照此處和此處的建議,用於
setcap
將文件功能添加到:CAP_NET_ADMIN``CAP_NET_RAW``/usr/sbin/tcpdump
sudo su groupadd pcap usermod -a -G pcap $USER chgrp pcap /usr/sbin/tcpdump chmod 750 /usr/sbin/tcpdump setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
比較
上述解決方案似乎是互斥的:
-Z
選項 docs state,如果 tcpdump 以 root 身份執行,則僅完成使用者切換。我在解決方案 2 中看到的缺點:惡意程式碼仍然擁有 tcpdump 和
CAP_NET_ADMIN
/的使用者權限CAP_NET_RAW
。所以我贊成解決方案1。你怎麼看?
您的第一個解決方案非常出色。當 tcpdump 下降到非 root 使用者時,它也會失去您列出的功能(以及所有其他功能)。如果您想限制任何受損的 tcpdump 程序造成的損害,那麼使用
-Z
是一個很好的開始,並且比以 root 身份執行特權要好得多。請注意,該
nobody
使用者不應用作一般的“非特權”使用者。這是因為以該使用者身份執行的所有內容都將能夠相互干擾。最好為 tcpdump 創建一個具有您想要的所有限制的新使用者,然後將其交給該使用者。如果您想要進一步的安全性,您可以在 chroot 中設置它(請注意,這僅在程序沒有特權的情況下提供安全性,否則它可以從 chroot 中逃脫),或者強制訪問控制,例如 AppArmor 或 SELinux,以最大限度地減少流氓文件系統使用權。Rlimits 也會很聰明。