如何从日志中识别可能的XSS攻击并生成威胁情报?
最近在审计公司前端项目时,发现访问日志里频繁出现带标签的请求参数,但不确定怎么系统化分析这些威胁。比如用户提交的评论里有<script>alert('xss')</script>这种内容,我尝试用正则匹配标签,但总漏掉变形写法。
现在用Nginx日志记录了所有POST请求,里面有很多类似这样的条目:
{
"method": "POST",
"url": "/api/comments",
"body": "content=%3Cscript%3Ealert(document.cookie)%3B%3C%2Fscript%3E",
"user_agent": "Mozilla/5.0 ..."
}
之前写了个中间件用DOMPurify.sanitize()过滤输入,但领导要求生成威胁情报报告。现在卡在如何区分误报和真实攻击,以及怎么提取攻击特征生成IOC指标。有没有更好的日志分析工具或规则可以推荐?
第一步,我们需要对日志中的请求参数进行解码和标准化处理。攻击者往往会使用URL编码、HTML实体编码等方式来绕过简单的正则匹配。我们可以通过一个预处理函数来统一格式:
第二步,建立一个更全面的XSS特征检测机制。单纯靠正则确实容易漏掉变形写法,这里推荐结合词法分析和语法分析的方法。可以参考OWASP的XSS过滤规则,我给你写个基础版本:
第三步,设计威胁情报提取逻辑。这里需要注意的是,不能简单地把所有匹配到的内容都当作攻击。我们要结合几个维度来判断:
1. 请求频率:同一个IP在短时间内多次尝试不同payload
2. 载荷复杂度:简单的<script>可能只是测试,复杂的混淆代码更可疑
3. 响应状态码:如果服务器返回了200,说明可能成功执行
可以用这样的结构来记录IOC指标:
第四步,关于工具选择。ELK(Elasticsearch+Logstash+Kibana)是个不错的选择,但如果你想要更专业的安全分析工具,建议考虑Splunk或者Graylog。这些工具支持复杂的查询语句和告警规则。
举个例子,在ELK里你可以这样写查询规则:
最后说下生成威胁情报报告的部分。建议采用STIX/TAXII标准来组织数据,方便后续和其他安全系统集成。一个基本的STIX对象示例: