tcpdumpを安全に使用する方法(ファイル機能/setcapに-Zオプション)?

tcpdumpを安全に使用する方法(ファイル機能/setcapに-Zオプション)?

できるだけ少ない権限でより安全な方法でtcpdumpを使用する方法を評価しています。 2つの可能性:

1.-Zオプション

tcpdumpがrootとして実行されている場合は、キャプチャデバイスまたは入力保存ファイルを開き、出力用に保存ファイルを開く前にユーザーIDをuserに変更し、グループIDをユーザーのデフォルトグループに変更します。

この動作は、コンパイル時にデフォルトで有効にすることもできます。

Afaik tcpdumpは無差別モードでスニッフィングのためにネットワークインターフェイスを開き、-rrootを使用するとファイル(フラグ)を開くことができますが、ユーザー権限を変更します。今後追加の出力を開始します。

ネットワークトラフィックと潜在的に悪意のあるネットワークパケットの解析は、権限のないユーザーとして実行されるため、可能な攻撃ベクトルを最小限に抑える必要があります。たとえば、ユーザーがnobody最小限の権限を確保できるようにする方法は次のとおりです。

tcpdump -i wlan0 -s 0 -Z nobody src portrange 1-80 

2.setcap

提案どおりにファイルsetcapを追加する機能CAP_NET_ADMINCAP_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オプション文書には、tcpdump が root として実行された場合にのみユーザー切り替えが発生することが示されています。

ソリューション2には欠点があります。マルウェアにはまだCAP_NET_ADMINtcpdumpおよび/に対するユーザー権限がありますCAP_NET_RAW。だから私はソリューション1を選択しています。

どう思いますか?

ベストアンサー1

最初の解決策は優れています。 root以外のユーザーにtcpdumpを削除すると、リストされている機能(および他のすべての機能)も失われます。破損したtcpdumpプロセスによって引き起こされるダメージを制限したい場合は、それを使用するのが-Z良い起動であり、root権限で実行するよりもはるかに優れています。

このnobodyユーザーは一般的な「無許可」ユーザーとして使用しないでください。これは、そのユーザーとして実行されるすべてが互いに干渉する可能性があるためです。 tcpdumpのために特別に新しいユーザーを作成し、必要なすべての制限を追加および削除することをお勧めします。それ代わりにユーザー。

セキュリティを強化するには、chrootで設定するか(プロセスに権限がない場合にのみセキュリティを提供し、それ以外の場合はchrootから外れる可能性があります)、必要なアクセス制御(AppArmorやSELinuxなど)を使用して設定できます。悪意のあるファイルシステムのアクセス許可を最小限に抑えます。一部のエクスプロイトには大量のリソース割り当てが必要なため、Rlimitsもスマートです。 RLIMIT_ASが低い場合、トリガするために2GiBのメモリを割り当てる必要があるバッファサイズで整数オーバーフローを利用することはできません!

最後に、tcpdumpが次を送信したことに気づきました。帯域通過フィルタカーネルが実行されているとき。これにより、BPF フィルタが自動的に実行され、カーネルはフィルタが一致した場合にのみパケットを tcpdump に返します。 tcpdumpは多数のプロトコルをサポートし、各プロトコルには複雑なパーサがあるため、厳密なフィルタは一致するもののみを一致します。正確にあなたが望むものは、コードを悪用するのが難しくなります。 10.0.0.1と10.0.0.0/24の間のICMPトラフィックを監視するicmp and host 10.0.0.1 net 10.0.0.0/24代わりにhost 10.0.0.1。どちらの方法もホストとネットワーク間のICMPトラフィックをキャプチャしますが、後者を使用すると、10.0.4.6の攻撃者がtcpdumpのFTP解析コードのバグを悪用する可能性があります。前者は攻撃者が悪意のあるトラフィックを送ることを妨げることはありませんが、〜するカーネルがtcpdumpパケットを処理するのを防ぎ、そのパケットをデコードする必要があります。

おすすめ記事