安全|关于云原生应用,这些安全风险了解一下( 五 )


3.2.1.2业务逻辑异常带来的风险
相比于前一类异常,此类异常一般较为隐蔽。攻击者采用某些方法使API调用的逻辑顺序出现异常,包括关键调用步骤缺失、颠倒等。例如在图1所示的电商系统中,攻击者可以利用漏洞绕过支付的步骤直接提交订单。这样就会出现业务逻辑关键步骤缺失的情况,进而会为业务系统带来损失,例如验证码绕过异常就属于业务逻辑异常的一种。
3.2.2 API滥用的风险
针对此类风险,通常指的是攻击者对业务系统的薅羊毛操作,风险成因则是由于业务频率异常所致,这里以电商系统举例说明。
业务频率异常主要指针对一个或一组API的频繁调用。业务系统往往通过图形验证码的方式来避免机器人刷单的操作。例如在图1所示的电商系统中,攻击者可以绕过验证码所对应的服务,直接对订单进行操作,进而实现机器刷单,对电商进行薅羊毛。
四. 云计算模式变革带来的新风险
作为一种新的云计算模式,Serverless具备许多特性,典型的主要有输入源的不确定性、服务器托管云服务商、供应商锁定等,这些特性可能会给Serverless带来新的风险。
此外,由于Serverless最终呈现的还是多个函数组成的应用,且被Serverless提供的服务端运行,因此Serverless风险还应包括Serverless应用的风险及Serverless平台的风险。
最后Serverless因购买、部署成本低、函数访问域名相对可信等将会使Serverless面临被滥用的风险。
4.1 Serverless特征带来的风险
4.1.1 输入源不确定带来的风险
Serverless函数是由一系列事件触发的,如云存储事件(S3、Blobs和其他云存储)、流数据处理(如:AWS Kinesis)、通知(如:SMS、电子邮件、IoT)等,鉴于此特性,我们不应该把来自API调用的输入作为唯一攻击面。此外,我们不再控制源到资源间的这条线,如果函数被邮件或数据库触发,将无处可设置防火墙或任何其他控制措施来验证事件源[4]。可见输入源的不确定性将可能导致一定的风险。
在传统应用程序开发中,开发者根据自身实践经验,在数量有限的可能性中可判定出恶意输入来源,但Serverless模式下函数调用是由事件源触发,输入来源的不确定性限制了开发者的判定。例如当函数订阅一个事件源后,该函数在该类型的事件发生时被触发,这些事件可能来源于FaaS平台,也可能来源于未知的事件源,对于来源未知的事件源可以被标注为不受信任。在实际应用场景中,如果开发者没有良好的习惯对事件源进行分类,则会经常导致将不受信任的事件错认为是FaaS平台事件,进而将其视为受信任的输入来处理,最终带来了风险。
具体地,输入来源的不确定性会为Serverless应用带来注入的风险,与传统应用相同的是,注入攻击过程与并无太大区别,不同的是攻击向量的变化,传统应用中用于注入攻击的向量通常指攻击者可以控制或操纵应用输入的任何位置,但Serverless应用由于输入的不确定性因而带来了更大的攻击面。
4.1.2 服务托管云服务厂商带来的风险
传统应用中,例如Web应用常部署在本地/远程服务器上,关于服务端的操作系统漏洞修补、网络拓扑的安全、应用在服务端的访问日志及监控等均需要特定的运维人员去处理,而Serverless的服务器托管云服务商的特点将导致开发者无法感知到服务器的存在,实际上开发者也无须对服务器进行操作,只需关注应用本身的安全即可,服务器的安全则交由云厂商管理Serverless的这一特征实际上降低了安全风险。
4.1.3 供应商锁定带来的风险
“供应商锁定”是指用户依赖特定供应商提供的产品及服务,并且在不产生实质性转换成本或运营影响的情况下无法使用其他供应商的云服务,在Serverless中,“供应商锁定”是目前存在的一大问题,例如用户选择AWS作为应用的运行环境,由于一些原因,该应用需迁移至Microsoft Azure平台,但“供应商锁定”的问题导致无法轻易的将之前运行的应用及使用的相应资源如S3存储桶等平滑迁移至Microsoft Azure平台中,进而导致企业面临应用转换成本的风险。