
如何用Snyk代码防止木马源攻击
Frank Fischer 2021年11月17日
本月早些时候,剑桥大学的一组研究人员发表了一篇学术论文,并附有一个网站,介绍了一种可能出现在源代码中的新型潜在漏洞。他们称其为木马源。
该漏洞的基本思想是,在代码中使用unicode字符,虽然为变量名称或注释增加了漂亮的选项(例如,在注释中使用emojis来表达你的感受),但不幸的是,它允许潜在的恶意语义在代码中隐藏在普通(人类)视线中。例如,攻击者可能会使代码看起来好像包含有效的认证逻辑,而实际上(或对编译器/解释器来说)它执行的是完全不同的动作。或者看起来是活跃的代码,实际上只是注释,因此在运行时被忽略。而且,它通过使用单码字符来欺骗人类的眼睛来完成这一切。
如果你对这个漏洞的复杂性感兴趣,我们建议你去看看原始网站或论文。如果你想看看这个漏洞在JavaScript中的表现,我的同事Liran Tal写了一篇博客文章,介绍如何用ESLint有效地检测和缓解JavaScript代码库中的木马源攻击。
在这篇文章中,我们将使用Snyk Code来发现和修复源代码中的木马源码。开始吧!
"Snyk Code可以修复木马源码吗?"
这是我们在网站发布当天收到的问题(说明Snyk的客户往往消息灵通,联系紧密)。让我转述一下我们的内部讨论。在询问了团队后,第一反应是:(1)这似乎是一个可行的供应链攻击,但对于你的原始代码来说就不那么可行了,因为它需要源代码访问,(2)这种攻击在句法层面上起作用。
**注意:**正如你在Liran的文章中所看到的,Trojan Source是一种在语法层面上的攻击,因此ESLint可以帮助JavaScript开发者。不幸的是,其他生态系统,如Java、Ruby、C#等,可能没有新的工具来缓解这种威胁载体,因此,Snyk Code成为你工具箱中更重要的工具。
鉴于我们在社区中看到的反应,并且由于我们的客户要求,我们同意增加规则来解决木马源问题。由于这不是一个高严重性的问题(只是由于最近的媒体报道,可见度很高),我们没有加快修复,而是将其作为一项任务加入到当前的冲刺中。但我们并不想止步于此。在我们添加这条规则的同时,还有一类相关的可混淆的UTF漏洞,我们也为其添加了覆盖范围。最后,我们确保该规则集涵盖了Snyk Code中所有支持的语言。
值得注意的是,我们只花了10天时间就开发并发布了Snyk Code中所有支持语言的木马源码(及相关)规则--这还没有使用加速程序,只是在当前的冲刺阶段。这是Snyk Code敏捷性的一个完美例子:在10天内对所有支持语言的数十万个项目进行决策、编码、测试、优化和发布。这也证明了Snyk Code ML增强型引擎的强大功能,在几个开发小时内,我们不仅覆盖了Trojan Source,甚至还处理了一些相关问题。
Snyk Code发现Trojan Source和其他危险的变种
特洛伊木马Source很可能会以开源供应链攻击的形式出现,但它也可以通过直接在应用程序代码中复制粘贴来执行(如在Liran的博客中看到)。因此,Snyk代码包括扫描你的代码库中的Trojan Source类型的问题。
**注意:**Snyk也是一个保障开源供应链安全的强大工具,使你能够轻松地监测和修复围绕依赖关系和许可证合规性 安全的问题。
如上所述,团队花了几天时间来开发木马源码的检测,但Snyk Code可以检测到比其他大多数工具所提供的更多的攻击变种。例如,Snyk Code不仅可以检测双向控制字符,还可以检测方法和变量名称中使用的可混淆的UTF字符,这有可能隐藏代码的真实语义。这意味着,今天,Snyk Code比我们所知的任何其他检查器都能检测到Trojan Source所描述的更多问题。
**注意:**Snyk Code支持Java、JavaScript、TypeScript、PHP、Python,以及公开测试版的C#、Ruby和Go。Trojan Source可以攻击其他语言(如Bash脚本),但Snyk Code不能扫描不支持的语言。
Snyk Code是Trojan Source的致命弱点
正如你在上面看到的,Snyk Code提供了一个强大的引擎,能够进行各种各样的扫描。一般来说,它使用独特的人类引导算法从全球开发者社区的知识中学习。在上面,我们可以对市场变化和不断发展的问题做出快速反应,如木马源。因此,Snyk Code不仅可以发现特洛伊木马源码,还可以发现相关的漏洞,再加上现有的知识库,提供行业领先的准确性。通过使用原始源代码来解释这些问题,并提供额外的帮助,直至开源项目如何解决类似问题的例子,以帮助开发人员理解和修复。
所有这些,以无与伦比的速度,从你最喜欢的IDE中舒适地进行。哦,而且你可以免费使用它,这似乎有足够的理由让你试一试!
让攻击者无法进入你的应用程序
使用Snyk查找并修复你的代码和依赖关系中的漏洞。
SnykCon 2021已经结束了!
重温你喜欢的所有讲座,并查看你无法参加的现场讲座。