前言
互联网安全在时下炙手可热,万豪酒店,华住酒店等等账户信息的泄露,无不敲响互联网安全警钟,互联网安全其本质是黑客和开发者之间的攻防战争,既然是战争就有相通性,就可以借鉴战争的一些基本思想来实施防御。苏联元帅米·尼·图哈切夫斯基在对第一次世界大战以及国内战争经验的基础上,提出一种名为:大纵深作战理论的思想,该思想的核心是:多点布防,以点带面,多面成体,纵深打击及防御。在攻击和防御上均有典型应用,那我们今天就大纵深作战理论来谈一谈如何在互联网安全中进行有效实践。
纵深防御整体框架
整个防御分解到如下几层实施处理:展现层,网络层,代理层,接入层,逻辑层和存储层,每层都有对应的方法和策略,下面具体逐层讲解:
展现层
展现层分为app客户端以及web网页端,app客户端主要有DEX加壳保护,内存防dump,资源文件保护,防二次打包以及防调试保护等等,现在移动互联网化,所以防御战场很多转向移动app端处理,特别是金融和游戏领域显得尤为重要。另外一种就是web网页端,虽然现在网页版比较少,但是基于可动态调整的H5版本化也逐渐流行,所以这一块的防护也是不容忽视,主要是js的混淆加密,以及页面混淆加密机制。
网络层
网络层是中间人攻击的主要手段,所以信息的脱敏变得尤为重要,数据的加密传输,HTTPS的加密传输协议甚至自定义加密传输协议(特别适用于app客户端)就显得比不可少,数据脱敏可以采取非对称加密,但是非对称加密有一个比较大的问题,cpu资源耗损较大,如果能在数据传输阶段就直接采用不可逆加密使最好的,例如密码加密传输可以直接采用MD5加签传输,即使在网络层获取也无从得知明文,或者说得知明文的代价很大。
网络层还有一种就是类似云防御机制的WAF系统,通过流量导入,对接口请求的参数进行整体过滤防御,例如xss攻击,sql注入,恶意文件后门传输等可以做到有效防御,WAF可以采取流量复制也可以采取流量清洗的模式,只要前端WAF网络层的性能可观,原则上可以选择流量清洗的模式,因为流量复制的一个比较大的问题就是无法实施阻断,只能事后通知,及时性上面会稍显不足。WAF的处理机制通常是规则运营,同时随着机器学习的广泛应用,在安全领域机器学习也扮演了越来越重要的角色,例如基于cnn+词向量的处理方式以及基于rnn的接口属性检测的sql+xss检测方式,基于集成学习算法例如随机森林+opcode的webshell检测,但是由于webshell的样本有限以及webshell的多样性,其实这种模式还有待进一步优化和改进,当然还可以考虑基于沙箱检测的模式、统计学检测,通过信息熵、最长单词、重合指数、压缩比等检测,如下是我们系统waf的一些检测效果截图:
waf检测统计图:
基于php的opcode检测试验效果图:
基于word2vec+cnn的sql及xss检测试验效果图:
代理层
代理层主要是指类似nginx的代理层,这一层是流量进入系统的最后一个环节,所以nginx代理层的作用也非常重要,主要防护措施可以有:白名单限制,refer域名限制,以及流量控制等等。例如某个不法IP在一段时间之内访问频次过高,就直接将此ip下发到防火墙一层,直接通过网络层把非法IP封杀过滤掉,例如有些电商的秒杀系统就有此做法。
接入层
以上所有的层都是停留在非系统核心层,也就是说之前其实都没有到达业务处理的重要关口,那么接下来要说的接入层其实就可以说是系统业务处理的第一层关卡了,在这一层业务逻辑以及用户行为的一些数据都可以获取到,那这一层就什么好的防御措施和方法呢?
接入层基于以上阐述的特点:请求数据和行为数据均可以获取,我们需要一个急于行为以及业务数据的智能风险识别系统来进行防护,这个系统有这样的特点:基于历史数据进行智能模型建模,线上实时行为数据采集通过模型计算出本次访问的风险系数,业务系统可以依据风险系数进行有效防御。这个系统要做好有价值的一个关键因素是数据,通过大量的线上数据喂给算法进行学习,算法会依据数据吐出一个模型框架,这个模型框架的准确度关系到实时风控的有效性。一个好的风控系统除了有大量有价值的数据之外,其次就是算法,算法的有效性直接决定了模型的有效性。刚才所阐述的都是风控系统里面的识别层,一个完整的风控系统还应该具备另外一个模块层,那就是防御层,它需要实现有效的阻断防御工具,例如:12306的看图选物,阿里的拖动条就是典型的防御工具。另外一点接口加签是一个在接入层常用的做法,特别是app客户端访问的接口。除了行为验证及接口加签,接入层还有基于机器学习的定制模型做法,例如基于活动、登录、注册、回复等等的定制化模型处理(常见LR、集成学习随机森林,adaboost、GBDT、图、聚类算法、cnn或者时下流行的GCN等等都可以使用),定制化模型的场景关键在于数据,而且这个数据还不只是基于本应用覆盖的用户体系,全域用户基础画像体系+风险情报数据结合效果才可能在效果上更胜一筹,场景化定制需要和业务深入分析场景需求,提前预判出可能的恶意场景,进而制定相应的算法模型,之后再上线灰度演练,满足了制定指标之后才可实际上线,如下是我们在接入层上的一些防御效果图:
业务定制化场景检测效果图:
行为拖动验证:
逻辑层
接入层之后就是逻辑层,逻辑层负责进行数据运算的,所以在这一层主要还是一点,就是数据的脱敏,以及加密算法的选择。例如密码,在逻辑层密码不应该显示打印,而且在对密码加密的算法选择上需要精细考量,为什么呢?加密算法是一个cpu耗损型运算,而密码又是一个极其敏感的数据,简单加密很有可能惨遭破解,那如何平衡之间的关系就显得很重要了。建议密码存储不能做简单的一次hash运行算,可以通过倒置,混淆,重复叠加多次hash运算来实现。另外对于逻辑层还需要主意逻辑漏洞的防护,对客户端传递的一切参数秉承不信任的做法,例如举一个简单的例子查询账户信息,首先就需要校验账户是否在session中存在,而不能传递什么账户就返回什么信息。逻辑层是负责业务逻辑处理的关键模块,所以数据的流转和接收基本都在这一层完成,所以一个完善的安全逻辑处理就需要在这一层做好各个系统层调用关系记录,区分权限访问(这一逻辑可以在业务微服务框架里面实现,避免业务层被嵌入安全处理逻辑,侵入性太强),最理想的情况是可以做到任何一条数据的血缘追踪。
存储层
最后一层就是存储层了,存储层原则上是终极核心层,如果像出现多年前某旅行网站数据库dba直接删除的情况出现,可能从技术层面上是回天无力的了,但是业务层面可以做防空,例如权限管控,这里所要说的其实是另外一个处理方式,就是在存储层做”蜜罐”处理,”蜜罐”是安全防御领域里面的一个象形词,它的基本做法是多复制几个表,在表的取名上近似相像,如果有人操作这些表,就通过监控机制直接告警,使得问题尽早的暴露出来,达到一个早期防御的功效。
总结
以上是从技术层面上来阐述互联网环境下大纵深安全防御做法,其实还有业务层面也可借鉴这一点,例如一个账户有注册,登陆,登陆之后还有支付,论坛,商场等等业务,那我们可以这样处理,先在注册层面进行防护,之后进入登陆,登陆也做一层防护,如果还有不乏分子,那我们就可以在后端业务方再做防护,例如支付设置密码,或者其它重要业务设置二次验证查看等等。
本文主要是在全链路安全防御里面提供一种思想和可能的方法简介,希望能起到抛砖引玉的作用,大家共同讨论。
没有回复内容