일부 애플리케이션(알 수 없음)은 HTTPS 프로토콜을 사용하여 알려진 호스트/포트/url(WAF 허니팟이며 호스트/url/포트가 알려져 있음)에 산발적으로 비정규적이고 드문 짧은 아웃바운드 HTTP(S) 요청을 만듭니다. 요청은 3~5일에 한 번씩 발생할 수 있습니다. 말 그대로 3~5일에 한 번씩 짧은 요청을 하는 것입니다. 목표는 어떤 애플리케이션(바이너리 경로, PID 등)이 이러한 요청을 하는지 정의하는 것입니다. 서버에는 nginx
, php
, mariadb
, 등을 포함한 많은 소프트웨어가 설치되어 있습니다 redis
.docker
단순화를 위해 허니팟 IP는 여기서 7.7.7.7을 갖습니다.
내가 소파에서 시도한 것:
- 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 또는 실행 파일을 감지하는 것을 허용하지 않는 것 같습니다 .
- 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일 후에 발생할 수 있다는 것입니다.
- netstat
$ sudo netstat -tupnc | grep 7.7.7.7
netstat
옵션(continuos)을 사용하면 -c
1초마다 읽기를 반복하는 것 같습니다 . 요청이 매우 짧기 때문에 이 요청을 놓칠 수 있습니다.
- 봄 여름 시즌
ss
아웃바운드 연결이 시작된 프로세스가 표시되지 않는 것 같습니다.
- 이소프
lsof -i TCP:80,443 -r 1
아웃바운드 연결은 매우 짧고 빠르므로 1초마다 lsof를 실행하여 기록되지 않을 수 있습니다.
Wireshark Wireshark에는 IP별 필터링 기능이 좋지만 연결 발신자 프로세스 이름이나 PID를 표시하지 않는 것 같습니다.
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) 연결을 포착하기 위한 감사 규칙이 추가되었습니다( connect
syscalls):
$ sudo auditctl -a exit,always -F arch=b64 -F saddr_fam=2 -S connect -k sckt
auditd
7.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 측에 필터링을 적용하고 흥미로운 기록을 별도의 로그 파일로 출력할 수 있습니다.