某些应用程序(未知)使用 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 天的审计规则,我的磁盘将充满审计日志。或者,如果审计日志正在轮换,我可能会错过日志文件中已轮换和清除的所需日志数据。如果auditctl
在写入时(而不是在解析日志时)有按目标 IP 过滤功能,它可能是最佳候选者。也许我遗漏了什么,它有过滤功能?
我想到另一个选择是制作一些 bash 脚本,它:
- 开始审计
connect
- 像这样启动监控过程:
( tail -f -n0 /var/log/audit/audit.log & ) | grep -q "7.7.7.7"
- 一旦监视器检测到此情况,停止审计
auditctl -d...
问题是,此事件可能在 3-5 天后发生,届时所有磁盘都将满。
- 网络状态
$ sudo netstat -tupnc | grep 7.7.7.7
似乎netstat
使用-c
选项 (continuos) 会每 1 秒重复读取一次。由于请求非常短,它可能会错过此请求。
- 党卫军
ss
似乎没有显示发起出站连接的进程。
- lsof
lsof -i TCP:80,443 -r 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) 禁用写入本地日志文件
在文件中/etc/audit/auditd.conf
:
write_logs = no
并重新启动auditd:
$ sudo systemctl restart auditd
7.5)添加审计规则来捕获连接(connect
系统调用):
$ sudo auditctl -a exit,always -F arch=b64 -F saddr_fam=2 -S connect -k sckt
7.6)轮换日志以清除auditd
日志中以前的数据
$ 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 端应用过滤,并将有趣的记录输出到单独的日志文件中。