syslog-ng로 auditd를 시도하여 아웃바운드 HTTP 호출을 수행하는 프로세스를 찾습니다.

syslog-ng로 auditd를 시도하여 아웃바운드 HTTP 호출을 수행하는 프로세스를 찾습니다.

일부 애플리케이션(알 수 없음)은 HTTPS 프로토콜을 사용하여 알려진 호스트/포트/url(WAF 허니팟이며 호스트/url/포트가 알려져 있음)에 산발적으로 비정규적이고 드문 짧은 아웃바운드 HTTP(S) 요청을 만듭니다. 요청은 3~5일에 한 번씩 발생할 수 있습니다. 말 그대로 3~5일에 한 번씩 짧은 요청을 하는 것입니다. 목표는 어떤 애플리케이션(바이너리 경로, PID 등)이 이러한 요청을 하는지 정의하는 것입니다. 서버에는 nginx, php, mariadb, 등을 포함한 많은 소프트웨어가 설치되어 있습니다 redis.docker

단순화를 위해 허니팟 IP는 여기서 7.7.7.7을 갖습니다.

내가 소파에서 시도한 것:

  1. tcpdump
$ sudo tcpdump -i any dst host 7.7.7.7 and "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0" &> /tmp/out_7.7.7.7_$(date "+%Y.%m.%d-%H.%M.%S").log &

tcpdump아웃바운드 http 요청을 만드는 프로세스 ID 또는 실행 파일을 감지하는 것을 허용하지 않는 것 같습니다 .

  1. auditctl/auditd
sudo auditctl -a exit,always -F arch=b64 -S connect -k connectLog

auditctl/auditd경로와 pid를 출력할 수 있지만 필터링 기능이 부족한 것 같습니다. 3~5일 동안 감사 규칙을 시작하면 내 디스크가 감사 로그로 가득 차게 됩니다. 또는 감사 로그가 순환되는 경우 이미 순환되어 지워진 로그 파일에서 필수 로그 데이터를 놓칠 수 있습니다. 대상 IP별로 쓰기 시(구문 분석 로그가 아닌) 필터링 기능이 있는 경우 auditctl아마도 가장 적합한 후보일 것입니다. 혹시 뭔가 빠졌는데 필터링 기능이 있는 걸까요?

내가 알아낸 또 다른 옵션은 다음과 같은 bash 스크립트를 만드는 것입니다.

  • 감사를 시작했습니다connect
  • 다음과 같이 모니터링 프로세스를 시작했습니다. ( tail -f -n0 /var/log/audit/audit.log & ) | grep -q "7.7.7.7"
  • 모니터가 이를 감지하면 감사를 중지합니다.auditctl -d...

문제는 이 이벤트가 모든 디스크가 가득 차는 3~5일 후에 발생할 수 있다는 것입니다.

  1. netstat
$ sudo netstat -tupnc | grep 7.7.7.7

netstat옵션(continuos)을 사용하면 -c1초마다 읽기를 반복하는 것 같습니다 . 요청이 매우 짧기 때문에 이 요청을 놓칠 수 있습니다.

  1. 봄 여름 시즌

ss아웃바운드 연결이 시작된 프로세스가 표시되지 않는 것 같습니다.

  1. 이소프
lsof -i TCP:80,443 -r 1

아웃바운드 연결은 매우 짧고 빠르므로 1초마다 lsof를 실행하여 기록되지 않을 수 있습니다.

  1. Wireshark Wireshark에는 IP별 필터링 기능이 좋지만 연결 발신자 프로세스 이름이나 PID를 표시하지 않는 것 같습니다.

  2. syslog-ng현재 저는 TCP/네트워크를 통해 로그를 수신할 때 필터링 기능이 있는 솔루션을 수신자와 auditd로그 이벤트 발신자로 결합하는 솔루션에 갇혀 있습니다 . syslog-ng포트 2222에서 시작하여 네트워크에서 데이터를 수신하고 일부 문자열로 필터링하는 데 성공했습니다 (테스트됨 curl). 하지만 auditd네트워크로 전송되는 로그를 관리할 수 없습니다 .

내가 한 것:

7.1) 설치 audisp-remote-plugin:

$ sudo apt install audispd-plugins

7.2) 활성화됨 audisp-remote plugin:

파일 내 /etc/audit/plugins.d/au-remote.conf: 설정active = yes

7.3) 구성된 audisp-remote플러그인:

파일에 /etc/audit/auditsp-remote.conf:

remote_server = 127.0.0.1
port = 2222

7.4) 로컬 log_file에 쓰기가 비활성화되었습니다.

파일에 /etc/audit/auditd.conf:

write_logs = no

감사를 다시 시작했습니다.

$ sudo systemctl restart auditd

7.5) 연결을 포착하기 위한 감사 규칙이 추가되었습니다( connectsyscalls):

$ sudo auditctl -a exit,always -F arch=b64 -F saddr_fam=2 -S connect -k sckt

auditd7.6) 로그 의 이전 데이터를 정리하기 위한 로그 순환

$ service auditd rotate

7.7) 테스트 HTTP 호출 수행:

$ curl -v https://7.7.7.7/api/v1/t

7.8) syslog-ng로그를 확인했지만 예상한 기록이 없습니다.

이를 수행하는 가장 적절하고 쉽고 간단한 최선의 접근 방식을 아는 사람이 있다면 도움을 주시면 감사하겠습니다!

답변1

파일 소스를 사용하여 syslog-ng에 감사 로그를 수집한 다음 감사 로그에 대해 상대적으로 짧은 보존 시간을 사용할 수 있습니다.

이를 통해 syslog-ng 측에 필터링을 적용하고 흥미로운 기록을 별도의 로그 파일로 출력할 수 있습니다.

관련 정보