1. 极安网首页
  2. 网络安全技术

源码安全漏洞的防守之道

源码安全漏洞的防守之道-极安网

01、把好入口关,输入严校验

这里的输入是相对的,取决于你要关注的系统,取决于“安全防线”的位置(也称之为“安全边界”)。防线内部视为可信的系统,当做自己人;防线外部自然就是不可信的,当做外人。那么对于咱们要保护程序的来说,往往会有哪些类型的外部输入呢,下图给出了常见的一些外部输入类型:

对于外部的输入,你是否有预期逻辑限制,输入的全集是怎样的,合理输入的区间位于何处,需要妥当思考。举个例子,对于一个函数接口,如果需要处理一个外部输入的数据,那么往往会考虑到输入数据的长度、数据的数值范围和数据的字符集(如果是当成字符来处理的话)范围等等。

如果输入数据还需要做进一步处理(比如URL解码后,仍有危险字符构造注入),或者与预置数据拼接(比如拼接路径,使用“../”拼接跨越父级目录),那么需要进行再次确认,确保处理后的数据送到函数入参前是预期符合要求的参数。

另外前面也说到,“安全防线”的位置不是一成不变的,如果我们某台机器已证实被入侵,则来自它的输入也变为了不可信输入,其他机器也需要与之“划清界限”,对其输入再做校验。当前流行的“零信任安全”就假定了任何输入都不安全,接收输入前必须进行认证校验。输入校验是需要成本的,完全的“零信任”具有挑战,可以选择将力气着重花在主要矛盾的主要方面。

02、保护解析器,防数据变代码

前文也有提到,解析器往往是安全攻击的重灾区,解析器本身是为了提升固定格式或协议文件的解析效率,越复杂的解析器越可能出现较多的安全缺陷。为了保护解析器,需要知道我们用到了哪些解析器,是否是安全版本的解析器,使用解析器处理了哪种数据等等。

有些解析器是需要按照说明书进行合理配置的,而不是一上来就直接使用。安全配置解析器不意味着一定要限制解析器的功能,而是要避免开启开发者未预料到的功能。如果开发者对于要处理的数据协议本身都不了解,那很有可能会被攻击者钻了空子,比如xml协议的使用,有开发者可能对xml实体扩展的功能都不了解,而xml解析器如果开了实体扩展解析的功能,这样就极有可能导致xml解析接收到过量的实体扩展解析,损耗计算资源,导致拒绝服务。

常见的解析器安全配置和入参限制如下所示:

简而言之,三个要点:安全的版本,安全的配置,安全的入参。

03、控权限窗口,防权限滥用

权限管控是“控过程”中一块很重要的关注点,不同权限处理问题带来的影响也往往是不同的。现在用的比较普遍的权限访问控制是RBAC(即基于角色的访问控制),常见的越权攻击也分为水平越权(角色不变)和垂直越权(角色转变),如下图所示:

鉴权的过程需要由服务器端完成,而非客户端,完成鉴权后,给对应用户一个“票据”,也就是会话Id,用户通过会话Id来进行对应权限的任务执行。针对单体的权限管控,也是从时间(权限的有效时间)与空间(权限的影响范围)角度来进行约束。

权限的使用原则应遵循最小化原则(空间+时间最小化),即“该用多少才用多少,该用多久采用多久”,而非“能用多少就用多少,能用多久就用多久”。

根用户权限和超级用户权限,需要进行约束,非系统级或弱系统级的服务尽量不用或少用。

本文转载:,不代表 极安网 立场,转载请注明出处:https://secvery.com/3269.html