腾讯代码安全检查Xcheck
0x00 Xcheck介绍
Xcheck是一个由腾讯公司CSIG质量部代码安全检查团队自研的静态应用安全测试(SAST,Static application security testing)工具,致力于挖掘代码中隐藏的安全风险,提升代码安全质量。
Xcheck现已支持Golang、Java、Nodejs、PHP、Python 五种语言的安全检查,其他语言支持还在开发中。覆盖漏洞包括SQL注入、代码注入、命令注入、跨站脚本、反序列化漏洞、路径穿越等多种漏洞。
在框架支持上,xcheck内置覆盖了常见的web框架,也可根据易编写易扩展的自定义规则模块自行编写规则对第三方框架进行覆盖支持。
语言 |
框架 |
---|---|
Golang |
Gin,Beego,Iris,net/http,fastrouter,httprouter,go-restful,mux |
Java |
Spring,HttpServlet,WebService,jax-rs |
Nodejs |
Koa,Express |
PHP |
Thinkphp,Laravel,CodeIgniter,Yii,Yaf |
Python |
Django,Flask,Tornado,Webpy,Bottle,BaseHTTPServer |
0x01 Xcheck的优势
Xcheck在基于成熟的污点分析技术与对抽象语法树的精准剖解上,通过巧妙优雅的实现来达到对污点的传递和跟踪的目的,更精准地发现隐藏在代码中的安全风险。同时赋予了Xcheck两大优势:快!低误报!
在4核16g的linux云主机上,Xcheck对项目的检查速度在 1w+/s ,部分项目可以达到 2w+/s。以28w行的wordpress项目为例,xcheck检查时间为18s。
经过团队对xcheck投喂大量的项目进行误报优化,现xcheck各语言的误报率低于10%。
以python为例,xcheck对github部分python开源项目检测结果如下:
传统的 SAST 需要比较长的扫描分析时间, 实时性比较差 ,一个稍大的项目扫描好几个小时,在版本迭代快速的web应用开发中严重拖慢流水线,同时 误报率也比较高 ,同一个漏洞报n次的情况更是常有发生, 需要投入大量的安全团队的资源来去除这些误报,因此 无法敏捷地融入到 DevOps 中 。但Xcheck基于这两大优势,可完美融入DevSecOps,加速流水线又快又安全地建设。
0x02 部分检测案例
1. Apache Kylin 远程命令执行漏洞(CVE-2020-13925)
2020年7月份,京东安全团队发现了一个Apachec Kylin 远程命令执行漏洞,这里使用Xcheck对Kylin2.6.3的源码进行检查。耗时31s,检测出3个RCE漏洞,2.6.3版本不存在checkParameterWhiteList过滤函数,检测结果如下图。
其中一条触发路由: