Ubuntu

如何安全地使用 tcpdump(-Z 選項與文件功能/setcap)?

  • January 23, 2021

我正在評估如何以盡可能少的權限以更安全的方式使用 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 也會很聰明。

引用自:https://unix.stackexchange.com/questions/628662