리눅스 감사가 도움이 될 수 있습니다. 최소한 데이터 그램 네트워크 연결을 만드는 사용자와 프로세스를 찾습니다. UDP 패킷은 데이터 그램입니다.
먼저, auditd플랫폼에 프레임 워크를 설치하고 auditctl -l규칙이 정의되어 있지 않은 경우에도 무언가 를 리턴 하는지 확인하십시오 .
그런 다음 규칙을 추가하여 시스템 호출을보고 socket()나중에 쉽게 찾을 수 있도록 태그를 지정하십시오 ( -k). 나는 당신이 64 비트 아키텍처에 있다고 가정해야하지만 그렇지 않은 경우 b32대신 대신 할 수 있습니다 b64.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
이를 구축하려면 매뉴얼 페이지와 헤더 파일을 선택해야하지만 캡처하는 것은 기본적으로이 시스템 호출입니다. socket(PF_INET, SOCK_DGRAM|X, Y)세 번째 매개 변수는 지정되지 않지만 자주 0입니다. PF_INET2이고, SOCK_DGRAM2 TCP 연결을 사용하는 것입니다 SOCK_STREAM설정할 것이다 a1=1. ( SOCK_DGRAM두 번째 매개 변수에서 SOCK_NONBLOCKor 와 OR을 사용 SOCK_CLOEXEC하여 &=비교할 수 있습니다.) -k SOCKET나중에 감사 추적을 검색 할 때 사용하려는 키워드입니다. 그것은 무엇이든 될 수 있지만 간단하게 유지하고 싶습니다.
잠시 후 감사 추적을 검토하십시오. 선택적으로, 네트에서 호스트를 핑 (ping)하여 몇 개의 패킷을 강제로 만들 수 있습니다. 이로 인해 DNS 조회가 발생하고 UDP를 사용하여 감사 경보를 차단해야합니다.
ausearch -i -ts today -k SOCKET
그리고 아래 섹션과 유사한 출력이 나타납니다. 중요한 부분을 강조하기 위해 약어로 사용하고 있습니다
type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET
위 출력에서 ping명령으로 인해 소켓이 열린 것을 알 수 있습니다. 그때 실행할 수 있습니다 strace -p 14510여전히 실행중인 경우, 과정에. ppid(상위 프로세스 ID)도 경우에 나열된는 스크립트가 스폰 문제 아이 많은 그.
이제 UDP 트래픽이 많으면 충분하지 않으며 OProfile 또는 SystemTap 을 사용해야합니다 . 두 가지 모두 현재 내 전문 지식을 벗어납니다.
이것은 일반적인 경우에 범위를 좁히는 데 도움이됩니다.
작업이 완료되면, 당신이 그것을 만드는 데 사용 된 동일한 회선을 사용하여 감사 규칙을 제거 만 교체 -a와 함께 -d.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET