IDE安全扫描插件技术实现

1 阅读7分钟

文章正文markdown格式数据

从实习项目到发表研究论文及在亚马逊担任职务

Linghui Luo是一名驻柏林的某中心应用科学家,她正致力于研究更快速、更简便的方法来确保代码的稳定性和安全性。

云与系统

从实习项目到发表研究论文及在亚马逊担任职务

Linghui Luo的研究如何帮助确保代码经过检查并准备好部署。

作者:Staff writer,2023年8月21日,阅读时长6分钟

为大多数开发者构建高质量软件通常遵循一个熟悉的流程:在集成开发环境(IDE)中的计算机上编写代码,然后,为了检查是否存在安全漏洞,将代码上传到中央存储库并运行安全扫描。扫描结果会显示在Web浏览器的仪表板上,与IDE分离。

Linghui Luo在2020年于某中心实习的五个月期间,被要求重新思考这个工作流程。在此过程中,她提出了一种对代码运行安全扫描的新方法原型。该原型成为2021年一篇研究论文的基础,并最终演变为新推出的面向两个IDE(某中心SageMaker Studio和Jupyter notebooks)的Amazon CodeGuru Security插件。

Luo于2022年初全职加入某中心担任应用科学家,不久后她在德国帕德博恩大学海因茨·尼克斯多夫研究所获得计算机科学博士学位。她现居柏林,继续研究更快速、更简便的方法来确保代码的稳定性和安全性。她的GitHub个人简介第一行最好地概括了这一点:“安全分析工具的使用应成为安全软件开发中的行业惯例。然而,我们首先需要创建可用的分析工具。”

简化安全扫描

Luo的工作使开发者更容易使用Amazon CodeGuru Security,该工具可以识别关键问题、安全漏洞和难以发现的错误。CodeGuru Security是一个静态分析工具,意味着它无需运行代码即可评估每一行代码,从而有机会在工作进行时提前预防问题。

但她不仅关注软件——她还研究使用该软件的开发者。研究结果证实了某中心的一项关键实践:从客户需求出发反向工作。CodeGuru Security在云端运行,这对于静态分析工具来说是理想的环境,尤其是那些执行安全测试所需的深度分析的工具。在云端,用户可以集中追踪和存储问题,并且每次扫描的运行效率都高于在单台机器上运行。

相关内容:将代码分析工具带到Jupyter notebooks

当开发者使用流行的持续集成工作流时,每次推送代码时都会收到安全建议。这些建议会显示在开发者的Web浏览器中。

如果开发者能够直接连接CodeGuru Security,从IDE内部运行云中的静态分析,会怎么样?这是某中心应用科学家Martin Schäf为Luo的实习提出的挑战。

“一开始,大多数人会认为这是一个软件工程问题,但实际上并非如此,”Luo说。“我们采取的基本上是以用户为中心的方法。”

从用户出发

Luo首先采访了某中心的开发者,以确定他们对基于IDE的静态分析工具的期望。分析应该在何时进行?自动化程度应该多高?他们认为应该花费多长时间?

这个问题可能并不像听起来那么简单。虽然有些工具已经可以在IDE内部进行静态分析,但通常是“轻量级”扫描,只能捕捉明显的问题,最多耗时约10秒。而另一方面,静态应用程序安全测试会更深入地检查代码。即使有云资源,这也需要几分钟——过去这种测试要慢得多,需要数小时。成功的集成需要管理用户对时间等方面的期望。

相关内容:从DynamoDB十年中学到的经验教训

根据与开发者的访谈,Luo为流行的IDE Visual Studio开发了一个CodeGuru Security扩展原型。然后她进行了可用性测试,以验证她构建的东西是否符合开发者的需求。

Luo说,这个项目拓宽了她的视野,让她理解了如何为开发者构建更有用的工具。对她来说可能微不足道的操作(例如需要将代码从IDE中取出并上传到其他地方进行分析)被证明是开发者的痛点,他们希望静态分析集成能尽可能无缝。

“作为一名一直在大学的博士生,我对开发者想要什么有一些假设,”Luo说。“但与他们交谈后,我发现他们想要的完全不同。”这次经历让她认识到在开发工具之前与用户交谈的重要性。

验证来自notebook的代码

用于Jupyter和SageMaker Studio的新CodeGuru插件旨在帮助用户防止错误潜入notebook中开发的代码。数据科学家喜欢notebook,因为他们可以在代码行后附加文本和相关图像。

但该平台可能会导致可重现性问题。假设你在一个notebook中有四行代码,每行位于不同的代码单元格中。用户可以任意顺序运行这些代码单元格;但当代码被共享时,另一个用户可能会以不同的顺序运行它们。这是一个问题,因为以不同顺序运行代码单元格可能会产生不同的结果。Luo在最近与某中心同事合著的一篇关于该问题的论文中提供了这个例子。

[图片说明:左侧:代码单元格以非线性顺序执行;右侧:代码单元格以线性顺序执行]

Luo解释说,notebook非常适合数据探索和展示,但代码常常未经检查就被传递和部署。“如果你无法重现结果,你怎么能确保你的代码正确运行?”Luo说。CodeGuru插件可以标记此类潜在缺陷并提出改进建议。

当然,只有当开发者实际部署安全建议时,该建议才真正有用。Luo团队正在进行的研究探索如何通过衡量开发者的某些操作来评估静态分析规则的质量。

显著影响

Luo在中国读高中时就对计算机产生了兴趣。她说,大学直接选择计算机科学是一个“自然的选择”。她对计算机安全的兴趣源于读硕士时的一次亲身经历。她注意到她正在使用的一个应用程序允许用户在没有任何验证的情况下更改账户绑定的手机号码。该应用程序与她的银行账户关联,她对其不安全程度感到震惊。这一认识促使她在博士学习期间专注于软件安全。

“我在某中心的团队是一个很好的平台,使我能够将科学成果投入生产,并在短时间内产生显著影响。”

—— Linghui Luo

Luo在某中心实习期间的主动性以及她团队的开放性,使她能够充分利用在那里的时间。实习结束时,她已经收到了全职加入团队的邀请。Luo的招聘经理Schäf指出,Luo从头到尾主导了SageMaker插件的科学工作。

“在某中心,我们以客户为中心,这就是为什么拥有像她这样遵循良好科学流程的科学家如此重要,以帮助我们的工程师理解哪些解决方案能为客户带来最大价值,”他说。“她迅速将想法转化为原型,使我们能够验证什么对客户有益,什么没有。”

Luo在获得博士学位后曾考虑留在学术界,她曾收到一个德国研究机构的终身教职邀请。但最终,她认定某中心才是她的归属。

“这真的是一个艰难的决定,”她说。“但我一直想做更具应用性的科学。我在某中心的团队是一个很好的平台,使我能够将科学成果投入生产,并在短时间内产生显著影响。”

关于作者 Staff writerFINISHED