草庐IT

如何通过零信任架构实现 API 安全?

老李讲安全 2023-03-28 原文
​有数据显示,大多数企业在面对API攻击时都没做好准备:

  • API攻击在过去681个月中增加了12%
  • 95%的受访者在过去一年内均有经历过API安全事件
  • 34%的受访者表示缺乏API安全策略
  • 62%的受访者承认,由于API安全问题,推迟了新应用程序的上线
根据Google Cloud最近关于API安全的报告显示,API安全威胁主要来自:

  • API配置错误(40%)
  • 过时的API、数据和组件(35%)
  • 垃圾邮件、滥用、机器人(34%)

一、网络安全:API是新端点

当攻击和违规行为变得越来越复杂,企业通过现有的安全和API管理工具,例如,Web应用程序防火墙(WAF)和 API网关,来防范安全事件还是不够的。

尤其是基于身份验证和授权后,攻击和违规行为在API数据有效负载中也就更加深刻。因此,当企业在关注身份验证和授权安全的同时,也需查看应用程序和API数据有效负载层,方法之一就是将API安全性视为传统端点安全的类比。

二、纵深防御(DiD)

纵深防御(DiD,Defense in Depth)是指在信息系统上实施多层安全控制/防护措施,可分为

  1. 边界防御(反恶意软件签名)
  2. 入侵检测/防御(IDS/IPS/EDR)

1、边界防御

作为防护的第一线,边界防御在端点安全方面,使用签名和IP拒绝列表来防御已知攻击方法。

在API安全方面,WAF给出了很好的功能标准:

  • IP允许和拒绝列表
  • WAF规则引擎
  • 速率限制
  • 故障注入/模糊

2、入侵检测

安全可见是预防攻击的关键要素,当攻击者突破边界后,企业需要识别哪些文件/进程/流量可能与恶意攻击有关。

在端点软件中,可以基于主机的IDS/IPS来检查通过前门的所有请求,也可使用APT检测和机器学习等检测方法,直观评估针对性攻击。

实现行为分析的典型方法有:

  • 蜜罐
  • 端点检测和响应(EDR)
  • 威胁情报(文件和进程)
现今,API安全解决方案还可提供上述组合技术。例如,蜜罐中收集的项目可以发送到威胁情报源中,以供WAF或Web应用程序和API保护 (WAAP)使用。

二、当API安全遇上零信任

由于API调用大多是临时、跨云运行、以多语言方式编写、使用不同协议的,因此其创建了一个复杂的环境。一旦API配置错误,或面对未清除的边界,企业需要的就不仅仅是纵深防御(DiD)。

零信任从本质上为攻击者设置障碍,使其无法在环境中横向移动。基于“持续验证,永不信任”的防护理念,零信任对所有终端、服务器、API、微服务、数据存储和内部服务进行严格统一的验证步骤,同时对来自内部或外部的访问请求,手机或PC,API调用或HTTP请求,普通员工或CEO,均采用“不信任”。

三、理想的零信任API安全

如果要在API中采用复杂的异构环境,零信任API安全解决方案必须能够部署为多种格式,支持不同的设置,如:

  • Docker容器
  • 独立的反向代理
  • Web/应用程序服务器代理
  • 嵌入Kubernetes入口控制器
在云和现有应用程序架构的支持下,自动化和可扩展性将得到照顾。

1、不更改现有架构

为了保持协调,“代理”(或微实施点)必须能够部署在现有应用程序之上,而无需更改架构,同时确保最小延迟和最大控制。

2、本地处理

要真正采用零信任,安全处理应在本地完成,因为:

  • 敏感数据不会离开受保护的环境
  • 无需与第三方共享证书和私钥
  • 不依赖第三方正常运行时间来处理流量

3、业务流程

在理想情况下,需要可以注入到应用程序环境中的解决方案,同时业务流程可以管理并进行以下操作:

  • 代理注册/注销
  • 政策更新
  • 配置更新
  • 软件更新
  • 日志记录
  • 数据同步
总之,零信任API安全应采用各种形式融入现今的应用环境,且最好的解决方案应该能够提供业务流程和所有安全功能。

四、零信任安全防护系统的建设

零信任安全防护系统,是一款基于 “永不信任、持续验证”安全理念,采用S I M技术的架构体系,整合软件定义边界技术(SDP)、身份认证及访问管理控制技术(IAM)和微隔离技术(MSG)等技术的安全防护系统,确保政企业务访问过程身份安全、设备安全、链路安全和应用安全,为政企应用提供统一、安全、高效的访问入口,打造了"安全+可信+合规"三位一体政企网络的纵深安全防御体系。

五、结语

API是当下应用程序的中枢神经系统,它可以将关键信息和数据在应用程序内部,或应用程序之间进行移动。因此,API安全应该被优先考虑。

采用零信任框架将保护重点从单一措施转移到不同核心(用户、设备、网络、应用程序和数据),可以帮助企业持续监控并确保API访问的每一部分都处于最低权限。​

有关如何通过零信任架构实现 API 安全?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

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

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

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  8. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

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

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

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐