Reading Between the Code Lines: On the Use of Self-Admitted Technical Debt for Security Analysis
本文表明,将自我承认的技术债(SATD)注释与静态分析工具(SATs)相结合,通过填补覆盖范围空白、减少被忽视漏洞类别的漏报,并为从业者提供有关安全弱点的更深层次上下文洞察,有效地补充了自动化安全分析。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你是一名试图在一个庞大且混乱的城市(软件代码)中破案的侦探。你有两个主要工具来协助你:一个高科技机器人扫描仪,以及一本由建造这座城市的人留下的笔记。
这篇论文探讨了这两个工具如何协同工作,以寻找安全漏洞(脆弱性)。
这两种工具
1. 机器人扫描仪(静态分析工具或 SATs)
把它想象成一个在代码中穿行的机器人,寻找已知的错误模式。这就像机场的金属探测器。它非常清楚枪支或刀具的长相,所以如果它看到了匹配的形状,就会发出鸣响。
- 问题所在: 这个机器人擅长发现明显的、静态的问题(比如硬编码的密码或脆弱的锁)。但它有一个重大缺陷:它经常会对无害物体发出虚假警报(误报),并且会完全错过那些只在事物移动或进行复杂交互时才会发生的犯罪(比如两个人试图在同一时刻争夺同一个物品)。
2. 开发者的笔记(自我承认的技术债或 SATD)
这是程序员留在代码中的注释、评论和“待办事项”列表。有时,程序员会写下一条注释,例如:“我知道这部分有风险,因为我们当时没时间把它做安全,但以后我们会修复它。”
- 价值所在: 这些笔记就像是一份自白。程序员在承认:“这里有一个弱点,而且这里就是它存在的原因以及具体原因。”它们通常包含关于“上下文”的细节——为什么会出错、可能会导致什么破坏,以及如何修复。
实验:将两者结合
研究人员想要看看,如果将机器人扫描仪与开发者的笔记结合起来,是否能组成一个更优秀的侦探团队。
测试过程:
他们选取了一个包含 135 个已被开发者笔记“承认”的已知安全问题的数据库。
- 他们对这段代码运行了三种不同的机器人扫描仪。
- 他们手动阅读了开发者的笔记,以了解具体承认了哪些问题。
结果:
- 机器人的覆盖范围: 扫描仪抓住了 135 个问题中的 114 个。这听起来不错,但它们只发现了 24 种问题类型。
- 笔记的覆盖范围: 通过手动阅读笔记,发现了 33 种问题类型。
- 重合度: 令人震惊的是,机器人和笔记仅在 4 种 问题类型上达成了一致。
- 缺失的环节: 机器人完全漏掉了 21 个被承认的问题。这些通常是“动态”问题——例如竞态条件(Race Conditions,即两个进程在争夺同一个资源)或资源泄漏(Resource Leaks,即忘记关门)。机器人看不见这些问题,因为它们取决于代码是如何“运行”的,而不仅仅是代码“看起来”如何。
人类视角:开发者怎么说
研究人员还询问了 72 位安全专家(现实世界中的“侦探”)关于他们的习惯。
- 机器人缺乏上下文意识: 开发者表示,机器人扫描仪往往过于笼统。它只会说“这里有个问题”,但不会解释为什么这很危险,或者如何修复。
- 笔记是关键: 开发者告诉研究人员,当他们看到代码中承认存在技术债的笔记时,这有助于他们理解根本原因(为什么出错)、影响(情况会有多糟)以及修复方案(如何解决)。
- 黄金平衡点: 开发者认为,对于机器人错过的那些棘手问题(如竞态条件),笔记尤其有用。这就像机器人看到了一个锁着的门,但笔记却说:“锁坏了是因为风暴中钥匙丢了”,这给了侦探真正的故事。
核心结论
论文得出结论:机器人扫描仪和开发者笔记是互补的,而非冗余的。
- 机器人速度快,擅长发现明显的、静态的陷阱。
- 笔记对于捕捉那些棘手的、移动的目标,以及理解错误背后的“为什么”和“如何做”至关重要。
类比:
如果你试图找出路上所有的坑洼:
- 机器人是一个激光扫描仪,可以瞬间识别出形状标准的明显坑洼。
- 笔记是路政人员的日志,上面写着:“我们用胶带补了这个地方,因为没材料了;下雨时它可能会失效。”
机器人会漏掉那个用胶带补的地方,因为它看起来不像一个标准的坑洼。但日志会告诉你该去哪里看,以及为什么它很危险。同时使用两者,你才能获得完整的图景。
这对实践意味着什么
论文建议,安全工具不应仅仅依赖机器人扫描仪。它们应该被设计成能够阅读并理解这些开发者笔记(即“自我承认的技术债”),以填补空白、减少误报,并帮助人类理解真实的风险。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。