旧工作本里的SAST

上周六收拾储物间最上层的纸箱,灰尘扬得我打了三个喷嚏。纸箱里装的全是我爸退休前从单位带回来的旧东西:掉漆的保温杯,印着2015年年会logo的帆布袋,还有一本封皮磨得发白的硬皮工作本。

翻开第一页,他用钢笔写的字还没褪:2013年部门分工,我负责对接SAST静态扫描工具落地。

从储物间翻出来的硬皮本

本子的纸张因为放了太多年,摸起来有点发脆。第一页夹着半张打印纸,是当时第一次做全量代码扫描的结果摘要,折痕处已经快要断了。

我对着那半张纸数了数,当时扫出来的漏洞总共3217个。

我爸后来跟我提过那天的事。扫描跑了整整一个通宵,他在公司的折叠床上躺到两点就醒了,爬起来盯着屏幕上的进度条走,从47%跳到48%花了快四十分钟。等早上八点结果出来,他抱着报告敲开开发部的门,被开发组的老周笑话了快半个钟头。

2010年代软件测试工程师手绘SAST代码扫描流程草稿
2010年代软件测试工程师手绘SAST代码扫描流程草稿

那会国内的互联网公司刚有点安全意识,之前大家写代码的逻辑很简单:功能跑通,性能达标,赶紧上线赚流量。谁会对着几百兆的代码逐行找藏着的漏洞?老周当时翻了两页报告,手指点着屏幕上的一堆SQL注入提示笑,说我写的代码我门儿清,你这工具就是瞎叫。

我爸那会也没底气。毕竟那会用的SAST工具全是国外引进的,连中文注释都识别不了,经常把注释里写的“这里未来要加SQL查询”当成可执行代码报漏洞。他抱着报告回自己工位,对着3000多条提示一条条筛,筛了整整三天,最后筛出来127个真的可能出问题的点。

真的出问题是在两周之后。

梅雨季的雨下得连下了一周,老周负责的用户登录模块本来准备周三上线,我爸拿着筛出来的报告找他,说这里有个输入校验的漏洞,别人要是填一串特殊字符,能直接把数据库里的用户信息拖走。老周一开始还嫌麻烦,直到自己在测试环境里试了一遍,额头上的汗直接滴在键盘上。

那天他从测试室冲出来,在茶水间堵住我爸,递了一瓶冰到瓶身结水珠的统一冰红茶,啥场面话都没说。

跑一整夜的扫描任务

硬皮本的中间几页,记满了当时踩过的坑。

有一页用红笔圈了个大大的数:全量扫描耗时17小时22分,误报率78%。后面画了个皱着眉头的哭脸。

那会的扫描工具根本不支持增量扫描。不管你改了几行代码,只要提交一次,就得把整个仓库的代码从头扫到尾。有时候赶上版本迭代的高峰期,大家把代码堆到晚上十点统一提交,扫描任务就得从夜里十点一直跑到第二天下午三点。

2010年代企业级SAST静态代码扫描任务运行进度界面
2010年代企业级SAST静态代码扫描任务运行进度界面

我爸那会的作息全跟着扫描任务走。他把扫描任务的启动时间定在每天晚上六点半,刚好赶上下班点,等大家都走了,服务器空下来,扫描的速度能快一点。他自己就留在办公室,泡一杯速溶咖啡,等进度条慢慢爬。

楼下的皮肚面老板都认识他。说经常半夜十二点半,看到他穿着公司的文化衫晃下来,点一碗加辣的皮肚面,多放猪肝,吃的时候眼睛还盯着手机上的远程监控,就怕扫描任务中途崩了。

2018年我爸退休的时候,整个部门已经没人记得要通宵等扫描结果了。

他退休前最后一次跟着做全量代码扫描,任务从启动到出结果,只花了38分钟。当时的SAST工具已经能精准跳过测试代码、第三方开源库的目录,误报率降到了9%不到。更厉害的是,工具直接嵌到了大家写代码的IDE里,只要你在编辑器里敲了一行有风险的代码,旁边直接飘个红圈提示,跟我们写文档时的错别字提示一模一样。

送他退休的聚餐上,刚工作两年的小年轻举着可乐说,现在谁还等扫完才看问题啊,写的时候就改完了。

我爸那天回家,坐在沙发上愣了好久。他说感觉自己熬的那些夜,好像突然就变得没什么意义了。

没被标注的笔记页

没被标注的笔记页
没被标注的笔记页

硬皮本的最后几页,没有记工作上的事。

是他退休两年之后写的。那会社区要做一个老年兴趣班的报名小网页,找了几个退休的老程序员凑时间做,我爸负责写最基础的用户信息提交模块。

他在笔记里写,一开始根本没想到自己写的几行代码也能有安全问题。还是之前的老同事提醒他,现在有个人免费版的SAST工具,不用搭复杂的服务器,拖个代码文件夹进去就能扫。

他照着教程装了工具,把自己写的代码拖进去。

等了不到十秒钟,扫出来一个XSS漏洞:他写的用户输入框没做特殊字符过滤,要是有人在报名备注里塞一段恶意脚本,后面打开这个页面的人,都会被自动跳转到垃圾网站。

他在那页笔记的最后写:原来这东西不是只有大公司的机房里才能跑。普通人写的几行代码,也能被扫出问题。

那天他对着教程改了两个小时的代码,改完之后又扫了一遍,看到屏幕上跳出来“未发现高危漏洞”的提示,特意把扫描报告导出来,存在了2013年公司发的那个旧U盘里。U盘的壳已经裂了一道缝,印的公司logo磨得快看不清了。

说实话,我之前对SAST的全部认知,就是招聘网站上那些要求里的冷僻缩写。直到翻到这本旧工作本,才突然意识到,这些听起来离普通人很远的技术,其实早就顺着加班的夜晚、递出去的冰红茶、楼下的皮肚面、旧U盘的裂缝,渗到日常的缝隙里了。

现在我自己做个小的个人项目,也会在编辑器里装个免费的SAST插件。每次看到插件实时提示哪里有风险,进度条几秒钟就走完的时候,就会想起我爸盯着屏幕熬到凌晨的那些夜晚。

那些写在技术白皮书里的性能提升数字,那些从78%降到9%的误报率,从来都不是冷冰冰的参数。是有人在办公室的折叠床上醒过来,盯着进度条从47%跳到48%的那些时刻,是有人因为扫出一个差点拖库的漏洞,给同事递了一瓶冰红茶的时刻,是退休的老人对着教程,给自己写的报名网页修漏洞的时刻。

技术从来都不是飘在半空中的东西。它就藏在那些磨白的封皮、发脆的草稿纸、沾着咖啡渍的餐票里。

没人会把这些细节写进正式的技术发展史里。但它们是真实存在的。

作者|fawen

排版|fawen

审核|见微

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:旧工作本里的SAST
文章链接:https://m.lfdjt.com/info_23_31030.html