できるだけ少ない権限でより安全な方法でtcpdumpを使用する方法を評価しています。 2つの可能性:
1.-Z
オプション
tcpdumpがrootとして実行されている場合は、キャプチャデバイスまたは入力保存ファイルを開き、出力用に保存ファイルを開く前にユーザーIDをuserに変更し、グループIDをユーザーのデフォルトグループに変更します。
この動作は、コンパイル時にデフォルトで有効にすることもできます。
Afaik tcpdumpは無差別モードでスニッフィングのためにネットワークインターフェイスを開き、-r
rootを使用するとファイル(フラグ)を開くことができますが、ユーザー権限を変更します。今後追加の出力を開始します。
ネットワークトラフィックと潜在的に悪意のあるネットワークパケットの解析は、権限のないユーザーとして実行されるため、可能な攻撃ベクトルを最小限に抑える必要があります。たとえば、ユーザーが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
オプション文書には、tcpdump が root として実行された場合にのみユーザー切り替えが発生することが示されています。
ソリューション2には欠点があります。マルウェアにはまだCAP_NET_ADMIN
tcpdumpおよび/に対するユーザー権限があります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パケットを処理するのを防ぎ、そのパケットをデコードする必要があります。