草庐IT

安全配置错误规避指南

sealio 2023-03-28 原文

在2019 年,安全研究人员发现 Atlassian JIRA 中存在安全配置错误,这是一款全球超过 100,000 家组织和政府机构使用的项目管理软件。JIRA 配置错误允许任何人通过简单的搜索查询访问敏感信息,包括企业员工姓名、电子邮件地址和有关内部机密项目的机密详细信息。安全配置错误已成为十分常见的问题,也导致成千上万的企业组织容易遭受严重的网络攻击和数据泄露。
 
那么什么是安全配置错误呢?企业应当如何发现、修复和避免安全配置错误?阅读本文,带你一探究竟。
 

什么是安全配置错误?

当基本安全设置未实施或实施时出现错误时,就会出现安全配置错误。此类错误会造成危险的安全漏洞,使应用程序及其数据(以及企业组织本身)容易受到网络攻击或破坏。这些错误可能发生在应用程序堆栈的任何级别,包括:

  • Web 或应用程序服务器
  • 数据库
  • 网络服务
  • 自定义代码
  • 开发平台和框架
  • 虚拟机
  • 云容器

什么会导致安全配置错误?

大多数配置错误的发生是因为系统管理员未能更改设备或应用程序的默认配置(或“开箱即用”的帐户设置)。保留临时配置也可能导致错误配置和漏洞,而及时更改这些设置可以最大限度地减少攻击的可能性。这里我们将列举几个安全配置错误的常见原因。
 

未修补的漏洞

恶意攻击者利用未打补丁或过时的软件来未经授权访问企业系统的功能或数据。有时,未修复的漏洞可能会导致整个系统遭到攻击和破坏。
 

未使用的页面和不必要的服务/功能

未使用的页面和不必要的功能或服务还允许攻击者未经授权访问企业应用程序或设备。如果任其发展,这些问题可能会导致严重的问题,例如命令注入和暴力攻击等。
 

访问控制不足

恶意攻击者可以使用默认密码、未使用的用户帐户或管理员未更新或删除的未使用访问权限来进入网络基础设施。过于宽松的访问规则具有极大的安全隐患,包括恶意软件攻击和数据泄露。
 

未受保护的文件和目录

不受强大安全控制保护的文件和目录容易受到网络攻击。攻击者可以识别使用易于猜测的名称和位置的平台和应用程序,以获取有价值的系统信息并策划有针对性的攻击。可预测的文件名和位置还可以暴露管理界面,并允许对手获得特权访问、配置详细信息或业务逻辑,甚至添加、删除或修改应用程序功能。
 

薄弱的代码和易受攻击的 XML 文件

Java web.xml 文件中可能会出现许多安全配置错误。可能未配置自定义错误页面或 SSL,或者代码可能缺少基于 Web 的访问控制。代码错误可能允许攻击者通过非 SSL 访问部分 Web 应用程序并发起会话劫持攻击。使用 URL 参数进行会话跟踪或不设置会话超时也可能导致这些攻击。同样,没有 HttpOnly 标志的 cookie 会增加跨站点脚本 (XSS) 攻击的可能性。
 

禁用杀毒软件

有时,如果杀毒软件覆盖了特定操作(例如运行安装程序),用户会暂时禁用防病毒软件。如果在完成安装后忘记重新激活防病毒软件,就会使企业容易受到攻击和数据泄露。
 

硬件管理不足

攻击者使用路由器、交换机和端点等设备,通过利用不安全的端口、过于宽松的网络流量规则以及未充分修补和维护的硬件来访问企业应用程序和数据。
 

安全配置错误的影响

配置错误会造成安全漏洞,给恶意攻击者可趁之机。这里我们列举出了几类安全配置错误的影响。
 

敏感数据暴露

配置错误几乎总是会导致对敏感信息的未授权访问。据统计有近 73% 的企业至少有一个严重的安全错误配置,可能会暴露敏感数据、系统或服务。
 

目录遍历攻击

Web 应用程序中的目录列表允许威胁行为者浏览和自由访问文件结构并发现其安全漏洞。他们可以利用这些漏洞修改应用程序的某些部分,甚至对其进行逆向工程。
 

对移动应用程序的攻击

根据 OWASP,配置错误对于移动应用程序来说是个严重的问题,因为业务没有部署在企业控制下的专有服务器上。代码被部署在移动设备上,而攻击者可以物理访问、修改或进行逆向工程。
 

远程攻击

一些严重的错误配置允许攻击者远程访问服务器并禁用网络和信息安全控制,例如防火墙和 VPN。未使用的开放管理端口还会将应用程序暴露给远程攻击。
 

云配置错误

云配置错误不断增加,给企业带来众多安全挑战。云端多达70%的安全问题是由于配置错误造成的,从而导致未经授权的应用程序访问。同时还可能导致关键任务信息的泄露、业务损失、监管罚款和其他处罚,以及巨大的财务和声誉损害。
 

企业如何避免安全配置错误

安全配置错误是一个普遍存在的问题,可能发生在任何网络、系统、设备或应用程序中。我们建议企业通过遵循以下最佳实践来规避或将发生的可能性降到最低。
 

重视警告提示

配置错误通常会产生管理员和开发人员应注意的警告提示和信号。包括多次登录尝试的通知、自行安装软件的设备以及用户的网络搜索被重定向到意想不到的网站。
 

定期修补所有设备和软件

定期的安全补丁和更新对于查找和修复配置错误至关重要。管理员可以定期修补正确配置的虚拟机,并将其部署到整个环境中。
 

加强远程访问控制

具有入侵检测系统、权限区域、防火墙和虚拟专用网络 (VPN) 的分层远程安全方法可以限制远程用户造成的漏洞。一般来说,本地数据中心和云环境中的所有文件和目录都必须根据需要具有强大的访问控制。
 

网络安全培训

缺乏网络安全知识会导致不安全的行为和人为错误,从而增加安全风险。员工需要接受有关高强度密码的必要性、影子 IT 的危险以及处理敏感数据规则的培训。强大的安全文化对于提高对安全威胁、可疑活动和适当的威胁响应的认识也至关重要。
 

遵循安全编码实践

安全编码实践对于防止错误配置问题至关重要。开发人员必须确保在代码中进行正确的输入/输出数据验证,配置自定义错误页面和 SSL,设置会话超时,绝不绕过身份验证和授权,并避免使用 URL 参数进行会话跟踪。在将自定义静态代码集成到生产环境之前,通过安全扫描器运行自定义静态代码也是一种很好的做法。
 

其他方式

避免安全配置错误的其他一些方法还有:

  • 定期监控 Web 应用程序安全和漏洞
  • 定义和监控应用程序和程序的非默认安全设置
  • 删除未使用的应用程序、程序和功能
  • 更改所有默认帐户、用户名和密码
  • 加密静态数据和传输中数据
     

参考链接:
https://logicbomb.medium.com/one-misconfig-jira-to-leak-them-all-including-nasa-and-hundreds-of-fortune-500-companies-a70957ef03c7
 
https://www.threatstack.com/blog/73-of-companies-have-critical-aws-security-misconfigurations
 
https://www.trendmicro.com/en_us/research/21/a/the-top-worry-in-cloud-security-for-2021.html

有关安全配置错误规避指南的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. 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

  3. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  4. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  5. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  6. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  7. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  8. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  9. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  10. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

随机推荐