tcpdump를 안전하게 사용하는 방법(파일 기능/setcap에 -Z 옵션)?

tcpdump를 안전하게 사용하는 방법(파일 기능/setcap에 -Z 옵션)?

가능한 한 적은 권한으로 보다 안전한 방식으로 tcpdump를 사용하는 방법을 평가 중입니다. 두 가지 가능성:

1.-Z옵션

tcpdump가 루트로 실행 중인 경우 캡처 장치 또는 입력 저장 파일을 연 후 출력을 위해 저장 파일을 열기 전에 사용자 ID를 user로 변경하고 그룹 ID를 사용자의 기본 그룹으로 변경합니다.

이 동작은 컴파일 타임에 기본적으로 활성화될 수도 있습니다.

Afaik tcpdump는 무차별 모드에서 스니핑을 위해 네트워크 인터페이스를 열고 -r루트를 사용하면 파일(플래그)을 열 수 있지만 사용자 권한을 변경합니다.앞으로추가 출력을 시작합니다.

네트워크 트래픽과 잠재적으로 악의적인 네트워크 패킷의 구문 분석은 권한이 없는 사용자로 수행되므로 가능한 공격 벡터가 최소화되어야 합니다. 예를 들어 사용자가 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가 루트로 실행될 때만 사용자 전환이 발생한다고 명시되어 있습니다.

솔루션 2에는 단점이 있습니다. 악성 코드에는 여전히 CAP_NET_ADMINtcpdump 및 / 에 대한 사용자 권한이 있습니다 CAP_NET_RAW. 그래서 저는 솔루션 1을 선택하고 있습니다.

어떻게 생각하나요?

답변1

첫 번째 솔루션이 우수합니다. 루트가 아닌 사용자에게 tcpdump를 삭제하면 나열된 기능(및 기타 모든 기능)도 손실됩니다. 손상된 tcpdump 프로세스로 인한 피해를 제한하려는 경우 이를 사용하는 -Z것이 좋은 시작 이며 루트 권한으로 실행하는 것보다 훨씬 낫습니다.

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 패킷을 처리하는 것을 방지하고 해당 패킷을 디코딩해야 합니다.

관련 정보