使用已知易受攻击组件及未验证的重定向和转发

组件,比如库、框架、或者其他的软件模块,通常运行在最高权限。如果一个有弱点的组件受到了利用,就可能被攻击者控制服务器或者造成严重数据损失。使用已知易受攻击组件的应用会造成应用整体安全性的降低,并且造成一定范围的攻击和影响。

使用已知易受攻击组件

(1)我存在含有已知漏洞组件的漏洞

理论上,应该是很容易确定你当前是否在使用含有漏洞的组件或者库。不幸的是,商业或开源软件的漏洞报告并不能以标准的、可查找的方式指定受影响组件的确切版本信息。更有甚者,并不是所有的库都使用易于理解的版本编号系统。最糟糕的是,不是所有的漏洞都报告给一个方便查询的漏洞中心,尽管像CVE或NVD这样的网站正变得更易于搜索。判断你是否易于受到这类攻击,要求你不但要不停地搜索这些数据库,还要关注大量的邮件列表和可能包含漏洞发布的公告信息。如果你使用的组件之一存在漏洞,你应该仔细评估该漏洞是否给你的业务也带来了缺陷。此评估可以通过检查你的代码使用该组件的部分,以及该缺陷可能导致的你关心的结果来完成。

(2)我如何防止

大多数组件项目并不为其老版本提供漏洞补丁。相反,它们仅仅在下个版本中修正此问题。所以升级到新版本是很重要的。软件项目应该有如下的流程:

1)持续的清点整理客户端和服务器端所使用的组件和与组件存在依赖关系的组件的版本等信息

2)连续监控如NVD等披露的的组件中的漏洞是否出现在你的应用中。使用软件结合分析工具自动化进行这个过程。

3)分析库文件以确保在进行更改之前在运行时实际调用了它, 因为绝大多数组件都不会被加载或调用。

4)决定是升级组件(如果需要,重写应用程序以匹配)还是部署一个分析HTTP流量,数据流或代码执行的虚拟补丁,并防止漏洞被利用。

5)基于开源的区块链项目需要关注组件的安全性。必须建立一个机制淘汰或者升级不安全的组件。

(3)攻击案例

组件几乎总是以应用程序的全部特权运行,因此任何组件的缺陷都可能导致严重的影响。这种缺陷可能是偶然的(例如,编码错误) 或有意的(例如组件中的后门)。

一些攻击使用含有已知漏洞的组件的例子是:

Apache CXF认证绕过——未能提供身份令牌的情况下,攻击者可以以最高权限调用任意的Web服务。Apache CXF 是一个服务框架,不要与Apache应用服务器混淆。

Spring远程代码执行——滥用Spring中语言表达式的实现允许攻击者执行任意代码,从而有效接管服务器。

每个使用上述两个任意一个库的应用程序,都是易于受到攻击的。因为两个组件都会被应用用户直接访问。其他的漏洞库,在应用程序中使用的越深入,可能越难被利用。

Web应用经常会将用户重定向到其他的页面或者站点,并且使用使用不可信的数据来确定目标页面,如果不进行正确的验证,攻击可以让受害者重定向到钓鱼或者挂马的网站,或者利用重定向访问未授权页面。

未验证的重定向和转发

(1) 我容易受到攻击么

测试你的API漏洞应该类似于测试其他应用程序的漏洞。所有不同类型的注入、认证、访问控制、加密、配置和其他问题,可以在传统应用程序中出现的也存在于API中。然而,由于API由程序(而不是人类)使用,所以经常缺少UI,并且还使用复杂的协议和复杂的数据结构。这些因素可以使安全测试变得困难。 使用广泛使用的格式可以帮助,例如Swagger( OpenAPI)、JSON和XML。一些框架,如GWT和一些RPC实现使用自定义格式。 一些应用程序和API创建自己的协议和数据格式,如WebSockets。API的广泛性和复杂性使得难以进行有效的自动化安全测试,这可能导致虚假的安全感。最终,知道你的API是否安全意味着需要仔细选择一种攻击策略来测试所有重要的防御。

(2)我如何防止

保护API的关键在于确保你充分了解威胁模型以及防御方式:

1)确保你已经保护客户端和你的API之间的通信。

2)确保你的API具有强大的身份验证方案,并且所有凭据,密钥和令牌已被保护。

3)确保你的请求使用的任何数据格式,解析器都被配置并强化到可以防止此类攻击。

4)实现访问控制方案,保护API不被不正确地调用,包括未经授权的功能和数据引用.

5)防止所有形式的注入,即便它们适用于普通应用,但是这些攻击对API同样可行。

6)区块链的项目大部分支持RestAPI, 防止API的不合理调用,建立API调用的访问控制和加密是一个有效的方法。

(3) 案例

案例 #1:想象一下,一个移动端银行应用程序连接到银行的XML API, 用于获取帐户信息和执行交易。 攻击者逆向应用程序,并发现用户帐号作为认证请求的一部分与用户名和密码一起传递到服务器。 攻击者发送合法凭据,但是发送另一个用户的帐号,可以获得对其他用户帐号的完全访问权限。

案例 #2:想象一下由网络启动公共API,用于自动发送短信。API接受包含“transactionid”字段的JSON消息。API将此“transactionid”值解析为字符串,并将其连接到SQL查询中,而不需要转义或参数化它。你可以看到API与任何其他类型的应用程序一样容易受到SQL注入。在任何一种情况下,供应商可能不提供使用这些服务的Web UI,从而使安全测试更加困难。

以上描述了区块链Web或者移动端开发所需要注意的OWAPS Top 10。由于区块链技术的特殊性,仅仅关注和避免OWPAS Top10的漏洞是不够的。下面我们需要介绍其他必须的安全控制。

下一章我们将介绍智能合约的简单介绍

感谢机械工业出版社华章分社的投稿,本文来自于华章出版的著作《区块链安全技术指南》。

作者简介:

黄连金

硅谷Dynamic Fintech Group管理合伙人

吴思进

33复杂美创始人及CEO

曹锋

PCHAIN发起人,中物联区块链协会首席科学家

季宙栋

Onchain分布科技首席战略官,本体联合创始人,

马臣云

北京信任度科技CEO、信息安全专家、产品管理专家

李恩典

美国分布式商业应用公司董事与中国区总裁

徐浩铭

CyberVein数脉链项目技术负责人

翁俊杰

IBM 10余年开发及解决方案经验,批Fabric应用开发者,NEO核心开发者之一

扫描上方微信

备注“入群”,小助手拉你进群

活动多多,交流多多

矩阵财经出品

转载请注明:矩阵财经(矩阵数字经济智库)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G074LQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券