草庐IT

运行时应用自我保护(RASP):应用安全的自我修养

sealio 2023-03-28 原文

应用程序已经成为网络黑客想要渗透到企业内部的绝佳目标。 因为他们知道如果能发现并利用应用程序的漏洞,他们就有超过三分之一的机会成功入侵。 更重要的是,发现应用程序漏洞的可能性也很大。 Contrast Security 调查显示, 90%的应用程序在开发和质量保证阶段没有进行漏洞测试,甚至相当一部分应用程序在生产过程中没有受到保护。

 

由于企业中运行着许多有漏洞的应用程序,安全团队面临的挑战是如何保护这些应用程序免受攻击。 其中一种方法是让应用程序通过实时识别和阻止攻击来保护自己,这就是被称为运行时应用自我保护(Runtime Application Self-Protection)的技术。

 

 什么是 RASP?

 

运行时应用自我保护(RASP)这一概念由 Gartner 于2012年提出,这是一项新兴的安全技术,让企业得以阻止黑客入侵企业应用和数据。 RASP 技术通常内置在一个应用程序或应用程序运行时环境中,能够控制应用程序的执行,并检测漏洞以防止实时攻击。

 

当应用程序开始运行时,RASP 可以通过分析应用程序的行为和该行为的上下文,保护其不受恶意输入或行为的影响。 RASP 通过使应用程序持续检测自身的行为,可以立即识别和缓解攻击,且无需人工干预。

 

无论 RASP 驻留在 server 的什么地方,它都将安全性整合到运行中的应用程序中。 它会拦截从应用程序到系统的所有调用,确保它们是安全的,并直接在应用程序内验证数据请求。 Web 和非 Web 应用都可以受到 RASP 的保护。 该技术不影响应用程序的设计,因为 RASP 的检测和保护功能可以在应用程序所运行的 server 上运行。

 

 为什么 RASP 如此重要?

 

入侵防护系统(IPS)和网络应用防火墙(WAF)等技术通常用于运行时的应用程序保护,但它们在检查网络流量和内容时在线工作。 当它们分析进出应用程序的流量和用户会话时,它们无法看到流量和数据在应用内部是如何处理的。 由于它们的保护措施往往缺乏会话终止所需的准确性,因此会消耗大量的安全团队带宽,通常只用于告警和日志收集。 现在需要的是一种新型的应用保护技术——RASP,它可以驻留在要保护的应用的运行时环境中。

 

 应用所面临的安全挑战

 

在保护 Web 应用和 API 时,通常会面临以下4种常见的安全挑战:

 

1、 真实的攻击难以识别。 每个应用程序有其自己独特的漏洞,并且只能被特殊的攻击所利用。 对于某个应用来说完全无害的 HTTP 请求,对于另一个应用而言可能会造成毁灭性打击。 同时,“在线(on the wire)”的数据可能与它在应用中所显示的不同(被称为“阻抗不匹配”问题)。

 

2、 代应用程序(特别是 API)使用复杂的格式,如 JSON、XML、序列化对象和自定义二进制格式。 这些请求使用除了 HTTP 之外的各种协议,包括 WebSocket,它是由浏览器中的JavaScript、富客户端、移动应用和许多其他源产生的。

 

3、 传统的技术防御没有效果。 WAF 通过在 HTTP 流量到达应用服务器之前对其进行分析,完全独立于应用而运作。 尽管绝大部分的大型组织都有 WAF,但其中许多企业并没有专业的团队对其进行必要的调整和维护,使其只处于“日志模式”。

 

4、 软件正在快速发展,容器、IaaS、PaaS、虚拟机和弹性环境都在经历爆炸性增长。 这些技术使得应用程序和 API 可以快速部署,但同时会将代码暴露给新的漏洞。 DevOps 也迅速加快了整合、部署和交付的速度,因此确保在快速发展阶段的软件安全的过程变得更加复杂。

 

幸运的是,运行时应用自我保护(RASP)可以解决其中的许多问题。

 

 RASP的工作原理

 

当 APP 中发生安全事件时,RASP 将会控制该应用并解决问题。 在诊断模式中,RASP 只是发布有问题的告警。 在保护模式下,它会试图阻止问题指令。 例如,它可以阻止对数据库执行看起来似乎时 SQL 注入攻击的指令。

 

RASP 可以采取的其他行动包括终止用户的会话、停止应用程序的执行,或向用户或安全人员发出告警。

 

开发人员可以通过几种方式实现 RASP。 他们可以通过包含在应用程序源代码中的函数调用来访问该技术,或者他们可以将一个完整的应用程序放在一个 wrapper 中,从而只需要按下一个按钮就可以保护应用程序。 第一种方法更为精确,因为开发人员可以决定他们想要保护 APP 的哪个部分,例如登录、数据库查询和管理功能。

 

无论使用哪种方法,最终的结果都是将 Web 应用防火墙与应用程序的运行时环境绑定在一起。 这种与应用程序的密切联系意味着 RASP 可以更精细地调整以满足应用程序的安全需求。

 

RASP 的主要优势

 

RASP 之所以独一无二是因为它在软件内部工作,而不是作为一个网络设备运行。 这使得 RASP 可以利用所有从运行中的应用和 API 中获取的上下文信息,包括代码本身、框架配置、应用程序 server 配置、代码库和框架、运行时数据流、运行时控制流、后端连接等。 更多的上下文信息意味着更广泛的保护范围和更好的精确性。

 

RASP 成本更低

  • RASP 解决方案可以快速高效地阻止攻击直到底层漏洞得到解决

  • 与 WAF 相比,它们的部署成本和运维更低

  • 它们部署在已有的 server 上,避免了额外的支出

  • RASP 技术会观察应用程序实际执行的操作,因此不需要相同类型的调整、模型构建、验证或人力资源

 

RASP 精确性意味着应用程序受到更好的保护

保护应用程序免受攻击的影响通常意味着试图在网络层面上阻止它们。 但当涉及到应用行为的理解时,传统方法本质上是不准确的,因为它们处于应用之外。 同时,基于网络的应用安全产品会生成很多假阳性并且需要不断地调整。 在过去的25年里,网络保护已经越来越接近应用——从防火墙到入侵防御系统,再到 WAF。 有了 RASP,安全可以直接进入应用内部。

  • RASP 插桩提供了传统方法不可能达到的精确水平

  • 它使应用安全能够真正地处于应用中

  • 更高的准确性使企业能够自信地用更少的资源保护更多的数据和应用

 

RASP 可以在云和 DevOps 中使用

  • RASP 能在敏捷开发、云应用和 web 服务中良好运行

  • 与需要不断调整的 WAF 解决方案不同,它通过提供无需返工的保护加速敏捷开发

  • RASP 应用更快且更准确

  • 无论是在云端还是本地,RASP 都能随着应用程序的扩大或缩小而无缝移动

  • 支持RASP的应用程序不知道攻击是通过API还是用户界面到达的

 

RASP 提供前所未有的监控

  • RASP 通过插桩整个应用程序来简化应用安全监控

  • 当应用程序的相关部分被访问或其他条件被满足时(如登录、交易、权限更改、数据操作等),可以创建 RASP 策略来生成日志事件

  • 策略也可以根据需要添加和删除

  • 有了RASP,所有这些应用记录都可以在不修改应用源代码或重新部署的情况下实现。

 

RASP 擅长提供应用层攻击的可见性

  • RASP 持续提供关于谁攻击你的信息以及它们所使用的技术,并告诉你哪些应用程序或数据资产被盯上了。

  • 除了完整的 HTTP 请求细节外,RASP 还提供应用细节,包括与漏洞相关的代码行具体位置、确切的后端连接细节(如 SQL 查询)、交易信息和当前登录的用户。

  • 使用 RASP 可以为软件开发团队提供即时的可见性,帮助确定工作的优先级,并对安全防御采取行动。

 

由于 RASP 不是一个硬件盒子,它可以很容易地部署在所有环境中,并迅速阻止黑客攻击,最终应用程序可以实时防御攻击。

 

自我保护的应用程序将成为现实

 

当攻击者突破外围防御之后,RASP 仍可以保护系统。 它能洞察应用逻辑、配置和数据事件流,这意味着 RASP 可以高度准确地挫败攻击。 它可以区分实际的攻击和合法的信息请求,这减少了误报,使网络防御者可以把更多的时间用于解决真正的问题,而不是往死胡同里钻。

 

此外,其自我保护应用程序数据的能力意味着 数据从诞生的那一刻起到销毁都受到保护。 这对需要满足合规性要求的企业特别有用,因为自我保护的数据对网络黑客来说是无解的。 甚至在某些情况下,如果被盗数据使其在被盗时无法阅读,监管机构就不要求企业报告该次数据泄露。

 

与 WAF 一样,RASP 也不会修复应用程序的源代码,但它确实与应用程序的底层代码库集成,并在源代码级别保护应用程序易受攻击的区域。

 

由于 RASP 仍处于初期阶段,其不足之处会在之后的发展中慢慢被克服,并有希望成为应用安全的未来。 正如 Veracode 的首席创新官 Joseph Feiman 在担任 Gartner 的研究副总裁时指出的那样: “现代安全无法测试和保护所有应用。 因此,应用必须能够进行自我安全保护——自我测试、自我诊断和自我保护。 这应该是 CISO 的首要任务”。

 

参考链接:

Maverick Research: Stop Protecting Your Apps; It's Time for Apps to Protect Themselves:

https://www.gartner.com/en/documents/2856020

 

有关运行时应用自我保护(RASP):应用安全的自我修养的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  4. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  5. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  10. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

随机推荐