SOOS:软件开发中的五大漏洞

几乎所有软件都有一些安全风险,无论是测试不足,忽略最佳实践,使用具有已知漏洞的开源代码,还是不良技术的任意组合。不幸的是,这些缺陷仍然存在,并且每天都在应用程序和操作系统中以越来越高的频率出现。

各地软件专业人员的目标是创建可靠、安全的软件,以防止网络犯罪分子的入侵、系统资源的低效使用、无意中访问敏感数据或意外结果。每个利用的机会都可以并且将被急切等待机会的网络犯罪分子所利用。了解最常见的漏洞,以及如何避免这些漏洞,从而获得更安全的应用程序。

什么是SDLC(软件开发生命周期)?


软件开发生命周期是一个行业标准流程,旨在以最低的成本安全、可重复地创建可靠、高质量的软件。它是一个结构化的计划,由一系列阶段或具有可交付成果和验收标准的阶段组成。该计划旨在始终如一地遵守质量和安全要求,同时满足客户期望,最大限度地降低风险并缩短生产时间。

SDLC阶段包括:

  1. 需求分析
  2. 规划
  3. 软件设计,如建筑设计
  4. 软件开发
  5. 测试
  6. 部署

此标准化框架概述了每个阶段所需的任务和可交付成果,并促进了项目规划、任务估算和调度。它还为所有利益相关者提供可见性和可追溯性。使用可重复的大纲可降低项目风险,提高开发速度,帮助客户互动,促进项目管理并节省生产成本。最重要的是,它允许开发人员在最终测试或生产部署之前很久就解决安全问题。


前 5 大软件漏洞是什么?

三个并发特征定义了软件中易受攻击的缺陷:

  • 它存在。
  • 网络犯罪分子可以访问它。
  • 它可以被利用。

不仅仅是资源有限的小公司在生产中存在这些风险。以下是2022年排名前10位的科技公司报告的漏洞数量:

  • Debian Linux – Debian OS: 5,870
  • Android – Google OS: 4,073
  • Ubuntu Linux – Canonical OS: 3,130
  • Mac Os X – Apple OS: 2,965
  • Fedora – Fedoraproject OS: 2,805
  • Linux Kernel – Linux OS: 2,763
  • Windows 10 – Microsoft OS: 2,590
  • iPhone 操作系统 – 苹果操作系统: 2,573
  • Chrome – 谷歌应用程序: 2,346
  • Windows Server – 2016 Microsoft OS: 2,334

正如此列表所示,尽管有编码标准、最佳实践和安全测试,但潜在的危险缺陷仍然在任何地方的代码中出现。修补是一种常见且经常的做法,试图修复利用风险。但是,对于IT经理来说,知道要优先考虑哪些更新几乎是压倒性的。在一项调查中,72%的受访者表示很难知道哪些补丁最重要。

简而言之,任何提供利用机会的东西都是至关重要的。不幸的是,这是一个非常长的清单。为了帮助您确定优先级,我们缩小了最危险的软件漏洞的范围,并对每个漏洞进行了解释。


1.SQL 入侵

将敏感数据从黑客手中夺走是全球企业最关心的问题。SQL注入或SQLi是对数据安全的持续威胁,允许网络犯罪分子劫持应用程序中的查询以访问数据库。此访问权限使他们能够窃取、更改或删除敏感的客户或企业信息。它还可以为他们提供一种执行拒绝服务攻击或破坏基础架构的方法。

SQLi的显着例子包括:

  • 7-Eleven经历了一次SQL入侵攻击,导致1.3亿客户信用卡号码被盗。
  • APT小组在GhostShell攻击中针对53所大学,其中发布了36,000份教职员工和学生的个人记录。
  • RedHack集体也是APT组织的一部分,它入侵了土耳其政府,以消除对政府机构的所有债务。
  • 臭名昭著的黑客组织Anonymous在其首席执行官威胁要公布匿名成员的名字后关闭了HBGary网站。

SQLi攻击的影响可能是毁灭性的,并且可能在一段时间内不会被注意到,这为不良行为者提供了进入组织的后门。SQL入侵可能会关闭网站,对品牌声誉造成不可挽回的损害,并导致大量的监管罚款。阻止 SQLi 入侵的风险是使用参数化查询的问题。为了提高效率,查询字符串应始终是硬编码的,并且不应使用任何变量数据。


2. 操作系统命令注入

另一个危险的Web安全漏洞称为shell注入或OS命令入侵。此代码允许网络犯罪分子直接在应用程序服务器上执行命令。HTML可以通过cookie输入,或者表单字段允许攻击者动态更改网页。它还可能允许他们利用信任关系来攻击组织基础结构的其他部分。

通过使用更安全的 API,可以防止操作系统命令注入。通过应用程序层代码和用户可控制的数据调用操作系统命令,开辟了操作服务器级命令的可能性。所有用户输入的数据都应具有有限的长度,并通过可接受输入值的白名单进行验证。确保 API 仅使用命令行参数按名称执行非常具体的进程,以便在发生违规时限制攻击者的选项。


3. 缓冲区溢出

缓冲区仅保存有限数量的数据。这意味着固定内存块中的任何额外数据都会溢出到目标缓冲区附近的地址中。结果是数据被覆盖。当黑客利用这种类型的漏洞时,他们可以修改内部应用程序变量或使进程崩溃。

但是,不仅网络犯罪行为会导致溢出。当数据未正确验证时,可能会无意中发生这种情况。使用充分的边界检查可以消除发送到内存缓冲区的额外数据,或标记数据以引起注意。


4. 不受控制的格式字符串

当输入字符串作为应用程序命令计算时,它可以更改其预期行为。这种类型的操作称为格式字符串攻击。这种类型的漏洞与缓冲区和整数溢出有关,因为它们会更改应用程序的解释或行为,以允许它访问其他内存空间。

当黑客使用字符串库格式化字符利用不受控制的格式字符串时,他们可以执行威胁系统稳定性和安全性的代码。折衷方案可能包括读取堆栈或引入分段错误。防止此类风险的最佳做法包括禁止用户控制的输入来格式化函数和验证输入。


5. 整数溢出

整数溢出也称为环绕,是指算术运算允许整数值超过分配的存储,从而允许它溢出有限的内存空间。编译器通常会忽略任何生成的错误,或者在发生整数溢出时完全中止程序。但是,该行为可能会将应用程序开放给攻击者,攻击者将利用缓冲区溢出来执行恶意代码。他们还可以升级特权,以赋予他们更多的伤害能力。

遗憾的是,由于未定义行为的可变性,很难检测和调试整数溢出。为了避免整数溢出攻击,最佳做法包括用户输入数据验证以及限制每个整数类型的最小值和最大值。软件还应处理所有越界值异常。


如何避免软件开发中的漏洞


每年数据泄露、勒索软件攻击和其他恶意网络攻击的不断增加意味着组织必须对攻击保持警惕。开发人员应始终优先考虑安全编码实践,执行各种应用程序测试,并实现强大的安全工具和框架。虽然没有办法消除所有网络安全风险,但安全的软件开发生命周期实践可能会使攻击者更难以利用任何漏洞。


定义软件开发的安全要求

要求是某些东西可以做的最低限度的必要操作,以便被接受。换句话说,电子商务网站至少需要显示待售商品,允许客户将其添加到购物车中,并为他们提供一种在结帐前输入付款方式和交付详细信息的方法。软件保护的安全要求可确保发生预期的行为,并减少意外使用。它们包括功能性、非功能性和派生需求。


实现角色和职责

角色和职责旨在定义各种角色,并将管理员和用户的能力限制为仅执行其职位的预期功能所需的操作。必须有人负责管理应用程序,执行代码扫描和应用基本的安全补丁,等同于典型用户不应该拥有的增强权限。此安全措施可防止无意中损坏系统、数据丢失和故意恶意操作。


实现支持工具链

自动化可降低人为错误的风险,并在整个软件开发过程中标准化安全程序。将风险降至最低还意味着确定每个工具链中包含哪些开发工具以及将集成哪些安全工具。应通过跟踪日志来监视工具本身是否存在潜在的安全漏洞。其他协议应包括安全操作的审核跟踪、审核范围和计划以及审核的执行方式。


定义软件安全检查标准

正如应用程序具有功能要求和验收标准一样,安全标准可确保软件符合安全要求。它们支持声明的风险承受能力,并定义安全测试的可接受结果。这些标准来自过去的漏洞、法规和行业标准的组合。软件安全标准应涉及应用程序软件和内部系统接口以及各种用户权限,以防止升级和利用。


确保软件版本完整性

您可以采取几个步骤来保护软件版本的完整性,包括:

  • 确保所有代码都存储在安全的代码存储库中
  • 在可执行文件上实现代码签名
  • 利用加密哈希实现文件完整性
  • 限制对代码存储库的访问
  • 向软件消费者提供验证信息
  • 为软件存储库中的所有内容存储软件物料清单
  • 使用版本控制并审核所有更改,包括实现更改的源或开发人员


存档和保护每个软件版本

当消费者购买新软件时,他们需要确保安装新软件是安全的,并且来自合法来源。为了保护软件,加密哈希应发布在严格安全的网站上,以获取发布文件。还应定期查看代码证书、续订日期和签名过程。仅使用信誉良好且已建立的签名机构。

最后,每个版本都应该被复制和存档。从应用程序代码到包文件、第三方库、发行说明和完整性验证数据的所有内容都应包含在存档中。发布文件存储库应通过受限访问进行保护。


定期扫描软件中的漏洞

常见的行业做法是每季度执行一次漏洞扫描,以识别软件中的安全漏洞。但是,网络犯罪分子可以24x7x365全天候工作。每个企业都必须评估自己的风险承受能力水平,以决定执行扫描的频率。许多公司采用例行的每月或每周扫描计划,以更快地发现漏洞。


简化软件开发管理

确保软件和系统的安全性是一项永无止境的任务。预防、检测和修复软件漏洞从开发人员开始,但几乎涉及 IT 组织的每个部分,以实现充分的覆盖。还需要经常进行评估,以确保管道上没有引入新的威胁。这意味着要实施适当的扫描和测试工具,以掌握新出现的风险。SOOS在每次扫描时都会跟踪超过100,000个已知漏洞。我们理解安全不是一种选择;这是必要的。我们的费用为每月99美元。您没有扫描限制,并且每个功能都可以在无限的项目中为无限的用户提供。它还可以轻松集成到 CI/CD 管道中。要了解有关SOOS用于软件漏洞扫描的软件成分分析服务的更多信息,请继续关注SaaSpace发布的资讯。