草庐IT

IAST 初探:博采众长、精准定位、DevOps友好

sealio 2023-03-28 原文

之前的文章中,我们了解了 SASTDAST,本文将介绍将两者优势相结合的安全测试技术——IAST。

 

交互式应用安全测试(IAST)是一个自动识别和诊断应用程序和 API 漏洞的技术,它结合了 SAST 和 DAST 的优势,可以从应用内部持续监测漏洞。 在整个开发生命周期中,IAST通过你在开发和测试中使用的工具实时提供告警。

 

IAST 的显著特性是它借助插桩(Instrumentation)直接从运行的代码中收集安全信息和遥测,以识别和诊断应用程序和 API 中的漏洞。 但这并不意味着你需要等到生产阶段才开始进行 IAST,而是在你写下第一行代码的时候就开始在 IDE 中使用它。

 

由于 IAST 可以直接访问代码本身,它可以对每一行代码执行 SAST。 此外,因为 IAST 可以访问 HTTP 流量,它可以对每个请求和响应进行类似 DAST 的分析。 因此,IAST 结合了 SAST 和 DAST 工具的安全功能。

 

IAST 包含以下两个主要功能:

  • 自有代码安全测试: IAST 可以自动分析应用程序和 API 的自有代码,找出之前没被发现的漏洞。 IAST 能够识别各种各样类型的漏洞,不仅包含十大安全漏洞列表(OWASP Top 10)中的漏洞,还能识别出其他更复杂的漏洞。

  • 开源安全测试: IAST 还可以通过两种方式来测试开源代码库和框架的安全性。 首先,IAST 可以识别困扰开源软件的已知漏洞(通常以 CVE 的形式发布)。 其次,IAST 还可以识别开源软件中未知的(“新的”或者“潜在的”)漏洞。

 IAST 为敏捷环境提供哪些优势?

1、测试左移

IAST 在 SDLC 早期的测试左移中发挥神奇的作用。它将测试转移到 SDLC 的早期部分,使得问题被尽早发现,减少补救成本。

 

由于该安全技术有助于快速跟踪问题报告和修复期之间的窗口期,所以可以有效减少开发过程中的延误。

 

安全和开发团队都需要在开发阶段使用 SAST 和 SCA 工具,而 IAST 实在测试阶段使用的安全工具。每当 IAST 发现安全问题,都会被反馈给开发人员,让他们在开发阶段修复这些漏洞。

 

2、 暴露漏洞的来源

IAST 可以简单地分析应用程序内部,因为它可以访问应用程序的数据流、库、框架和源代码。 分析应用程序内部结构的特性有助于开发人员快速识别漏洞并快速修复。

 

3、 准确性

IAST 的关键特性之一是以极低的误报率检测可验证的、不可验证的和可能的安全问题。 在发出告警的正确率方面,它比 SAST 和 DAST 优秀得多,而 DAST 和 SAST 在检测的漏洞数量方面也无法与之相比。

 

每个组织都希望有一个安全工具能在应用程序的所有内部流程方面为他们提供准确的报告,而不是提供虚假报告。

 

虽然 DAST 返回低误报并不难,但很难定位到与漏洞相关的代码行。 但 IAST 和 SAST 可以提供详细信息,例如带有漏洞的代码位置,以帮助安全和开发团队进行修复。

 

4、 对 SDLC 的所有阶段都很有价值

IAST 安全工具对于整个软件开发阶段都十分有用。 它不只是聚焦于某个特定阶段,还可以帮助开发人员在开发过程中实时修复问题。 此外,它在测试阶段也非常重要。 IAST 还有助在生产过程中检测漏洞,并将结果发回给开发团队进行修复。

 

5、 与 DevOps 工具无缝集成

IAST 是 DevOps 友好的安全工具,它也可以集成到开发和测试在使用的其他工具中。 DevOps 团队需要易于配置和实施的工具,并且与构建和测试工具无缝集成。 IAST 非常容易部署,且易集成到 CI/CD 流水线中。

 

6、 快速且清晰的反馈

IAST 可以实时检测漏洞并提供及时的反馈。 代码运行和扫描之后,开发者会收到及时反馈并且告诉其如何进行补救。

 

反馈不仅快速而且清晰,并且提供了可执行的操作(如漏洞类型、发现漏洞的代码行)。

 

QA 团队也可以从 IAST 识别安全漏洞的方式中受益,因为反馈结果是清晰的和可执行的。 安全专家也可以借助这一工具而省去查找漏洞位置的时间和精力。

 

7、 静态和动态的结合

IAST 一个重要的方面是静态能力(分析静态代码的能力)和动态能力(分析运行中代码的能力)。 这两种能力的结合使 IAST 在其高精确度和追踪代码行漏洞方面发挥了最大的作用,使得漏洞的修复变得十分轻松。

 

IAST 工具类型  

 

SAST/IAST 工具 (被动型 IAST)

被动型 IAST 的工作方式与 RASP (运行时应用自我保护)工具类似。 它通过使用编入代码的传感器来分析应用程序的行为。

 

这类工具保留了静态分析的最大弊端: 缺乏对第三方组件的关注。 因此,如果使用一个被动式 IAST 解决方案,必须使用另一个工具——软件成分分析(SCA),或者全然信任第三方组件,后者显然是不现实的。

 

被动式 IAST 工具另一个缺点是它们只能在被单元测试或第三方爬虫激活的功能中发现漏洞。 这意味着,这类工具不能保证整个应用程序都被检测,这可能导致很多漏洞被遗漏。

 

作为 SAST 产品的扩展而开发的 IAST 工具仍然是被动式扫描程序,它不会进行任何攻击或主动抓取。 与纯粹的 SAST 工具相比,它无疑是一种改进,但并不能满足对 Web 漏洞扫描程序的需求。

 

DAST/IAST 工具 (主动型 IAST)

具有 IAST 功能的 DAST 工具专注于引入 SAST 的一个优势: 准确定位问题的源头。 这样开发人员就无需花费时间来查找导致漏洞的那行代码。 因此,主动型 IAST 解决方案的价值点在于它们提供更准确的结果,并降低误报率。

 

不过,动态分析工具是在运行的应用程序上实时工作,所以它们无法直接访问源代码。 但它们可以访问编译器和解释器。 假如使用的编程语言是 PHP,一个主动型 IAST 工具可以直接定位到导致漏洞的具体代码行。 如果是预编译的语言,它可以在字节码中准确定位问题,从而加快在应用程序代码中发现问题的速度。

 

总而言之,不能指望带有 IAST agent 的 DAST 解决方案完全取代专门的源代码扫描程序,但它引入了 SAST 的一些优势,甚至提升了动态测试的效率。 

IAST 在软件开发周期中的重要性

 

IAST 最大的优势之一是它在开发过程中的可用性,尤其是在基于敏捷方法的开发过程中。 构建自己网络应用程序的企业需要尽快了解潜在的安全问题,以避免在生产中发现漏洞所带来的成本和风险。 这就是为什么目前应用安全和软件开发的主要趋势之一是用 DevSecOps 取代 DevOps。

 

就其性质而言,SAST 工具是作为 CI 的一部分来使用的。 DAST 工具经常被误认为不适合自动化,但实际上,领先的 DAST 解决方案被许多企业成功地用于 CI/CD 流水线中。 尽管在软件开发周期中引入 IAST agent 会变得更复杂,但这一切是值得的。

 

被动型 IAST 和主动型 IAST 都同样适用于 SDLC。 然而,被动型 IAST 安全测试的误报率更高,更依赖测试团队的技术水平(需要单元测试来执行爬虫的功能),并且不会检测开发中使用的第三方元素。 另一方面,检测更彻底的主动型 IAST 可能需要更多的计算资源。

 

IAST 需要一个成熟的测试环境、现代软件开发环境以及标准的架构,以获得最佳性能。

IAST 常见使用阶段

 

IAST 在 SDLC 的所有阶段都非常有用,我们将介绍其中3个较为常见的用例。

 

 

IAST 在开发阶段的介入

开发团队常常从 IAST 中受益颇多,因为它有助于检测应用程序中的漏洞,而这通常是在 SDLC 期间完成,而不是在应用部署到生产环境中时进行。 这降低了漏洞的补救成本。 同时也请注意它也可以在预生产和生产环境中运行并且在 DevOps 环境中完全支持 CI/CD。

 

IAST 在测试阶段的介入

它不需要等待任何扫描完成后再报告应用程序中的漏洞。 它是一个可以被纳入质量保证环境和CI/CD的工具,它可以在部署前阶段用于测试,并且对DevOps友好。

 

IAST 在生产阶段的介入

它还为运维团队提供了在生产阶段所需的所有必要支持。 这是因为并不是所有的漏洞都能在部署到生产之前得到修复。

 

因此,有了这个工具,即使在生产环境中你也能保证应用程序的安全,因为它为你提供关于补丁的信息,以优先修复非常严重的问题,并帮助监控整个系统的稳定性。

总  结   

 

交互式应用安全测试(IAST)是近几年来的新型技术,它仍然在寻找自己的立足点以被安全和开发者社区接受。 每一种测试技术都有其独特的优势,有时使用其中一种而舍弃另一种可能并不完全正确。 因此,如果您的团队有足够的预算,十分建议您同时使用 SAST、DAST 和 IAST,因为它们能检测出99.9%的漏洞。

 

在本文中,您已经了解到 IAST 的特点。 如果企业需要避免未来以更高的成本修复漏洞,那么每个组织都需要拥有 IAST 工具。

 

有关IAST 初探:博采众长、精准定位、DevOps友好的更多相关文章

  1. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  2. IDC最新MarketScape报告:DevOps市场需求广泛 - 2

    日前,全球著名咨询机构IDC最新MarketScape报告《中国DevOps平台市场厂商评估,2022》正式发布,此报告中对中国主流DevOps云厂商分别从现有能力和未来战略维度两个层面对厂商进行评估,IDC对具有代表性的8家提供商进行了深度研究,他们分别是(按照拼音字母顺序):AWS、阿里云、百度、博云、华为云、京东云、微软、腾讯云(CODING)。华为云、阿里云和腾讯云CODING均在战略和能力两大维度表现强势,成功入席领导者(Leaders)位置。IDC MarketScape:中国DevOps平台市场厂商评估,2022华为云软件开发生产线DevCloud在市场份额和发展战略两大维度均排

  3. 打通源码,高效定位代码问题|云效工程师指北 - 2

    大家好,我叫胡飞虎,花名虎仔,目前负责云效旗下产品Codeup代码托管的设计与开发。代码作为企业最核心的数据资产,除了被构建、部署之外还有更大的价值。为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。随着微服务架构的流行,一个业务流程需要多个微服务共同完成。一旦出现问题,运维人员在面对数量多、调用链路复杂的情况下,很难快速锁定导致问题发生的罪魁祸首:代码。为了提高排查效率,目前常见的解决方案是:链路跟踪+日志分析工具相结合。即通过链路跟踪

  4. ruby - 在 Mac 上定位 "irbrc"文件 - 2

    我看到很多很酷的东西可以添加到我的Ruby控制台中。例如,一个好的列表是“My.irbrcforconsole/irb”。我用谷歌搜索,但我只找到了网络日志,上面写着人们在他们的.irbrc中添加了什么gem。没有人说在哪里可以找到它。我找不到“irbrc”。我打开了我的主文件夹,如果我输入IRB,它会转到Ruby控制台,但我找不到这个文件。谁能帮我找到它? 最佳答案 这是一个irbrc点文件,因此您需要在您的主目录中ls-a才能找到它。如果它不在那里,只需创建一个.irbrc文件。我的很简单,但这就是我的内容:require'ru

  5. Ruby:如何生成具有 Excel 友好编码的 CSV 文件 - 2

    我正在生成CSV文件,这些文件生成后需要在Excel中打开和查看。Excel似乎需要与UTF-8不同的编码。这是我的配置和生成代码:csv_config={col_sep:";",row_sep:"\n",encoding:Encoding::UTF_8}csv_string=CSV.generate(csv_config)do|csv|csv在Excel中打开时,特殊字符显示不正确:TextaTextbTextæTextøTextÃ¥知道如何确保正确编码吗? 最佳答案 如果Excel具有BOM,则它可以理解UTF-8CSV。可

  6. ruby-on-rails - 知道@vendor.name 后如何使 Ruby on Rails 中的 URL 对 SEO 友好? - 2

    我的应用程序在RoR中我有一个名为showsummary的操作/View,其中ID已传递到URL,并且Controller使用它来实例化@vendor,其中@vendor.name是公司的名称。我希望URL是showsummary/1/而不是在URL中包含/vendor-name。我该怎么做? 最佳答案 所有这些解决方案都使用find_by_name,这肯定需要在该列上有一个索引并且要求它们是唯一的。我们使用的一个更好的解决方案是在供应商名称前加上其ID,但牺牲了一点美观。这意味着您不必在名称列上有索引和/或要求唯一性。供应商.rb

  7. ruby-on-rails - capybara :查找(元素)使用选择器来定位复杂的属性名称 - 2

    使用cucumber和capybara测试Rails应用。假设我无法更改标记,我可以使用capybara在充满类似td和select的页面中选择以下选择吗?LanguagesCommunication这似乎失败了(我假设是因为嵌套的“[”和“]”)。find("select[name=attributes[ruby][category]]")转义也不行。想法? 最佳答案 您可以尝试find('select',:name=>'attributes[ruby][category]')或find_field('attributes[rub

  8. ruby-on-rails - 具有友好 ID 的 ActiveAdmin - 2

    我在带有slug的Rails4应用程序中使用friendly_id。现在我正在使用active_admingem.问题:当我单击来自事件管理员的Group资源的显示链接时,它抛出以下异常:ActiveRecord::RecordNotFoundat/admin/groups/username20-s-group-1我想,我需要重写一些active_admin默认函数吗? 最佳答案 有些情况下,当应用程序退出一些资源时,为了保持它的DRY有一个很好的解决方案,需要为整个应用程序编写几行代码-只需覆盖activeadmin的资源Cont

  9. 基于对象属性定位的 Ruby 数组方法? - 2

    假设我有一个Ruby类,Flight。Flight上有一个attr_accessor:key。如果有一个此类的实例数组:flights=[flight1,flight2,flight3],我有一个“目标键”,比如说“2jf345”,我想根据它找到一个航类键,来自该数组-我应该使用哪种代码?这是我要使用的代码:航类[flights.map{|s|s.key}.index(target_key)]但是对于Ruby,似乎应该有更简单的方法。此外,上面的代码为我返回了一个错误-`[]':noimplicitconversionfromniltointeger(TypeError)。我认为这意味

  10. ruby - 是否有比 Net::HTTP 更用户友好的替代方案来与 REST API 交互? - 2

    Net::HTTP对于标准用例来说可能相当麻烦! 最佳答案 如果你只需要处理REST,rest-client图书馆很棒。如果您使用的API不是完全RESTful-或者即使它们是-HTTParty真的很值得一试。它简化了RESTAPI以及非RESTfulWebAPI的使用。查看此代码(从上面的链接复制):require'rubygems'require'httparty'classRepresentativeincludeHTTPartyformat:xmldefself.find_by_zip(zip)get('http://who

随机推荐