服务器安全审计:90%风险潜伏日志盲区
|
V2EX上刚刷到那个“日志审计覆盖率98%”的通报,我直接笑出声——上周三凌晨两点十七分,我在IDC机房蹲着调syslog-ng转发链路,天花板漏水滴在防火墙告警面板上,啪嗒、啪嗒,像倒计时。李工蹲旁边啃冷包子,酱汁蹭到RS485接口盒盖子上,他没擦,说“等这波流量压完再动”。我说你先擦,他说“擦了手滑,按错reset键更麻烦”。我原以为只是配置漏了几个auditd规则,结果查完才发现——他们连rsyslog.conf里$ActionFileDefaultTemplate那行注释都没解注,日志早八百年就全丢进/dev/null了。 优胜劣汰是真的。不是嘴上说说。上个月我们接手一个“已通过等保三级”的金融客户环境,扫描一跑,17台核心中间件全开了debug日志,但审计平台只收了3台的auth.log,剩下14台——全是/var/log/messages里混着su失败记录、ssh密钥重载、crond临时启停……这些全被filter条件里那句“if $msg contains 'Failed password' and $syslogfacility-text == 'auth'”直接拦腰砍断。为什么?因为人家用的是pam_faillock,日志打出来是“pam_faillock[12834]: Authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.2.3.7”,字段对不上,条件就失效。我敢打包票:这个正则匹配逻辑,他们上线前连grep -E都懒得跑一遍。可没人管——反正报表上写着“接入率100%”,运维那边点确认,安全组那边盖章,合规那边抄送归档。淘汰?不淘汰才怪。
文章配图,仅供参考 当时空调坏了,机柜顶上的温控探头报警灯一直在闪红光,频率是每五秒一次。王总监站在门口打视频会议,左手攥着热饮杯,右手捏着手机壳边沿反复搓,指腹磨得发亮;他说“我们按最佳实践走”,我说“best practice不是写在wiki里的,是写在rsyslog里没被注释掉的那行template定义里”。他愣了两秒,说“你稍等”,然后把手机塞给助理,弯腰去摸自己裤兜——掏出一包没开封的薄荷糖,撕开,含了一颗,又把糖纸折成小方块,扔进机柜底部那个积灰的废纸篓。我没接话。有些话,说了反而像挑衅。还有个事儿我到现在没想明白:他们用ELK做审计分析,kibana里所有“异常登录”看板,底层查询语句都用了@timestamp > now-30m。但实际日志从设备发出,经fluentd聚合、kafka缓冲、logstash解析、ES写入……端到端延迟平均二百零三毫秒。也就是说——那三十分钟里,最后四百一十二次失败登录,根本不在“异常”看板里。不是漏了,是压根没算进去。我说这个的时候,对方架构师正在切苹果,咔嚓一声,果核被他随手弹进窗台花盆——那盆绿萝已经枯了半边。他点点头,“嗯,可以加个buffer窗口”。我说“加多少?”他说“十五分钟?”我说“现在加,你们去年Q4所有‘未发现横向移动’结论都得重跑”。他切第二片苹果,没接茬。 我桌上有份未归档的旧工单,编号#AUD-2023-0748,内容是帮某省政务云补审计缺口。查到⭐️⭐️⭐️⭐️发现所有API网关日志都打了,但审计平台配置文件里,唯一指定的日志路径是“/var/log/nginx/access.log”,而他们真正用的是openresty,access日志被重定向到了/data/logs/nginx/api_access_$(date +%Y%m%d).log——路径带日期滚动,没通配符,没glob,没systemd-journal转发兜底。那单子我批注写了三行:“路径硬编码”、“日志轮转机制失联”、“监控项名和实际采集目标完全不对应”。结果复核人回了一句:“建议客户自查文档”。我删了草稿,填了“已闭环”。闭环?闭着眼闭的。 后来我在测试环境搭了个最小可行审计流:只抓sshd的failed auth、sudo执行、以及crontab修改事件。就这三个动作。跑了七天。结果发现——其中两天的sudo日志根本没进来。不是丢了,是systemd-journald默认max_file_size设的是8M,而那两天恰好有运维批量跑ansible,journald把旧buffer冲掉了。journalctl --since “two days ago” 能看到,syslog-ng收不到。因为syslog-ng用的是/imjournal模块,它只读当前active journal文件。这个坑,连redhat官方文档都藏着掖着,得翻到“imjournal: Limitations”章节最底下第三段才提一句。我问过三个做过审计方案的人,两个说“应该没问题”,一个说“我们没开imjournal,用的tail -F”。我没再问下去。 现在每天早上六点四十分,运维自动发一份“昨日审计有效性报告”到邮箱。PDF第一页是饼图:蓝色区块写着“覆盖完整”,占92%。我知道那八个百分点去哪儿了——是那十四台没解注template的rsyslog,是openresty轮转日志路径,是journald buffer冲刷,是pam_faillock字段不匹配……它们凑不出一个完整故事,但足够让报表显得体面。所以我不动。不是认了,是等。等下一个漏报引发P1故障,等渗透同学从nginx error日志里翻出被忽略的XXE payload痕迹,等客户法务拿着审计缺失条款来谈SLA违约赔偿。那时候,再开口——就不用解释什么是日志盲区了。 对了,昨天我改完配置,顺手把机柜顶上漏水点拍了照,发给了物业群。水渍边上,贴着张泛黄的便签,字迹是油性笔写的:“2019年8月检修记录 — 更换滴水阀,状态良好”。下面一行小字:“已坏,未换”。我截了图,没发群里,存在本地相册,命名为“盲区.jpg”。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


90%高危漏洞藏在日志盲区:开源站长的服务器安全审计实战
多媒体服务器安全审计:90%漏洞源于3个忽视配置
合规风控官私藏的12个零风险技术网站清单
