您现在的位置是:知识 >>正文
代码审计的三种方式
知识99516人已围观
简介去年帮一个朋友看他的小项目,一个基于Spring Boot的商城后台。他跟我说"应该没啥问题",结果我打开IDEA,翻了不到二十分钟,就在一个导出订单的接口里发现了SQL拼接。参数直接从`HttpSe ...
去年帮一个朋友看他的代码的种小项目,一个基于Spring Boot的审计商城后台。他跟我说"应该没啥问题",代码的种结果我打开IDEA,审计翻了不到二十分钟,代码的种就在一个导出订单的审计接口里发现了SQL拼接。参数直接从`HttpServletRequest`里取,代码的种连个`PreparedStatement`都没用。审计这就是代码的种代码审计最原始的形态——靠眼睛看,靠经验猜。审计
人工审计这事,代码的种说白了就是审计"人肉模式匹配"。你脑子里得存着一堆危险函数的代码的种黑名单:Java里的`Runtime.exec`、PHP里的审计`eval`、Python里的代码的种`pickle.loads`。看到用户输入流进这些地方,警报就得响。但人有个毛病,看代码超过两小时就开始走神。我自己的经验是,一次深度审计别超过90分钟,否则第十次看到`getParameter`的时候,你会觉得它人畜无害。
工具审计是另一条路。SonarQube、Fortify、Semgrep,这些我都用过。SonarQube配好规则跑一遍,报告能出几百页。问题是误报太多。有一次它标了一个"资源未关闭"的严重问题,我点进去一看,是个`StringBuilder`。工具不懂业务上下文,它只知道语法树上的模式。但工具的好处是快,而且不会累。半夜三点让它跑,第二天早上看结果,适合做第一轮粗筛。
真正有意思的是第三种——动态审计。你得把应用跑起来,用Burp Suite或者自己写脚本去戳。静态看代码看不出问题的场景太多了。比如一个反序列化漏洞,静态分析可能只看到`readObject`,但到底能不能被利用,得实际发个payload试试。我之前遇到一个XXE,代码里明明禁用了外部实体,但用的是老版本DOM4J,实际请求发出去,OOB带外数据还是出来了。静态看一百遍不如动态跑一遍。
三种方式不是互斥的。我自己的流程通常是:Semgrep跑一遍拿个底稿,然后人工过一遍关键路径,最后动态验证可疑点。工具负责广度,人负责深度,动态负责确认。但很多人只做第一步,拿着工具报告就去交差,漏掉的东西比找到的多。
说个具体的。上个月审一个Go写的API网关。静态看,所有数据库操作都用了ORM,没毛病。但我注意到一个中间件里,`X-Forwarded-For`头被直接拼进了日志。日志本身不执行,但日志会被Filebeat采集,发到Elasticsearch。如果攻击者构造一个包含换行符的IP,就能往ES里注入伪造的日志条目。这个点,静态工具不会报,因为它不是传统意义上的"漏洞"。动态测试也难发现,因为得知道整个日志管道。只有人工审计,结合对架构的理解,才能看出来。
代码审计到最后,拼的不是工具多牛,是你对"数据从哪来、到哪去、中间经过了什么"的理解。工具能帮你画地图,但走路的还是你自己。别指望一键出报告,那东西只能用来应付合规检查。真要有用,还得自己一行一行看,一个请求一个请求发。
Tags:
上一篇:电脑配置检测工具
下一篇:架设web服务器步骤
相关文章
防止非法宗教渗透深入做好摸排
知识昨天下午,我路过城南老街,看见两个穿灰外套的中年男人站在巷口,手里捏着一叠彩色宣传单,正跟一位推着婴儿车的年轻妈妈搭话。我放慢脚步,听见他们说“免费给孩子祈福”“周末有亲子活动”。年轻妈妈摆摆手走开了 ...
【知识】
阅读更多企业网络安全整改报告和整改措施
知识去年11月,我们一台财务用的文件服务器被加密了。攻击者没用什么高级漏洞,就是通过一个离职半年还没删的VPN账号,用弱密码撞库进来的。凌晨三点,服务器上的共享盘全被锁死,屏幕上跳出一行俄文勒索信息。这事 ...
【知识】
阅读更多集合的概念如何渗透思政
知识讲集合,绕不开一个“属于”与“不属于”。元素要么在集合里,要么不在,没有中间地带。这个非此即彼的判断,放到思政课里,就是最基本的立场问题。我给学生讲集合时,常拿一张班级名单举例:名单上的人就是集合的元 ...
【知识】
阅读更多