Web安全解决思路

由于最近参加了病毒和Web Threat 的基础培训,对一些常规的恶意软件或者网页的原理和行为有了粗浅的认识。经过这次培训,心里有个想法就是:恶意软件和网页的作者是进攻者,安全厂商是被动防护者,而且一暗一明,攻守之势一直没有太大的改变,结果就是无尽的病毒,无穷的pattern 无力 的防御。张明正有言:策略是致胜的关键。我觉得我们安全厂商是不是应该在策略上作出些根本的改变呢?我冥思苦想,夜不能寐,心里隐隐约约形成了一个大致的想法,可能非常的幼稚,以致贻笑大方,也可能 英雄 所见略同,引君莞尔一笑。我是个行外人士,不过东坡居士有诗云:不识庐山真面目,只缘身在此山中。这就是说:外行真的有可能解决内行不能解决的问题,因为金锤子类的反模式会干扰人的创新能力。在此声明没有参考已有的解决方案,闲话少说,下面我就开门见山,直捣黄龙了。

 

我总的解决思路就是孔夫子的一句话稍微变一下:忽其言而察其行。就是说我先忽视你网页的 :源代码,而是重点观察你的行,给网页放肆执行的机会,然后详细的观察它造成的后果。

 

假设有个大型企业,里面有个用户想访问一个网页,企业本地安全代理 会到本地缓存查询,如果在黑名单里,马上拒绝,否则去趋势的云端查询,如果得知是不安全的,安全代理 马上拒绝。如果到这里还没有被拒绝, 安全代理 会根绝用户的操作系统的类型从虚拟机或者就是实体机阵列中(因为有些病毒会监测是否为虚拟机,若安全等级要求高,则建议采取实体机)动态选取一个空闲的而且OS 类型跟用户一样的机器,而且这些机器的OS 没有安装任何的patch ,安全策略选择最低,所有浏览器的安全等级也选择最低,没有安装任何AV ,反正就是人见人欺的那种,而且一些系统本身的routineprefetch 能关的都给关掉。但是这些操作系统的内核是被修改过的,分为虚模式和实模式2 种。虚模式状态下,文件或者注册表新增,修改,删除,读取看起来是正常返回的,但是其实会被导向到一个远端的文件系统(NASHadoop 等)的。 具体操作如下:

        新增:     远端文件系统上会新增文件或者注册表条目,而且记录创建发起的进程信息,时间戳。在本地文件和远端文件映射表中记录一个条目,映射表也存在远端。

        修改:远端文件系统上会远端文件系统上会新增文件记录原文件或原注册表项,修改后的文件,修改发起的进程信息,时间戳

        删除: 远端文件系统上的文件或者注册表项不会被真正删除,会记录删除标志,删除发起进程信息,时间戳

        读取: 先查看映射表,如果读取的文件或注册表项在映射表中存在的并且没有删除标志,则读取远端的文件,如果读取的文件或注册表项在映射表中存在的并且如果读取的文件或注册表项在映射表中存在的并且有删除标志,则报告IO 错误,否则读取本地文件或者注册表。

 

在实模式下,则上述操作都操作本地文件。

 

在简要描叙了模拟运行机器OS2 种模式后,下面轮到网页真正运行了。安全代理 会根据用户的OS 类型和Agent 类型,选择一台模拟机并且打开相应的浏览器在虚模式下运行,所以这时候网页运行产生的结果都会在远端的文件系统中被记录。同时这台模拟机通过网关发送或者接受数据的记录也会被拦截记录。安全代理 会通过RPC 或者固定端口向模拟机请求进程信息和service 信息,模拟机处理这些请求时是以实模式运行的。网页运行触发的行为类型:比如说下载PE 文件,创建新进程,创建service ,新增autorun 项,发送本机系统信息等,每项行为都有加权分,加权分相加的总分越高,说明网页越危险。网页执行触发的行为分析模块会分析网页的行为,会计算出一个加权总分。根据加权总分,给出安全,可疑,危险,致命等警告等级,危险和致命的网页将直接拒绝用户访问,同时更新客户本地的黑名单cache 并将可疑,危险,致命的网页URL 以及模拟运行中生成文件和网络活动信息报告给云端。当然行为加权分会根据云端的统计数据会作出相应的调整。云端的Crawler 会马上爬取这些恶意的网页,并结合客户端传送过来的模拟执行过程中产生的资料,工程师分析恶意代码的原理,找出系统漏洞并给OS 厂商或者浏览器软件厂商patch 建议。

 

当然恶意网页可能会在页面的script 中故意推迟恶意行为,对于这种情况,如果页面加载完成后,浏览器的javascript 引擎中还有活动或者挂起的javascript 线程存在时,这时候SA 模块就要对Script 进行分析给出判定。

 

如果判定了一个网页是恶意网页,则先切断模拟机跟远端文件系统的连接,然后reboot 系统

 

 

主要的Concern

 

性能:由于模拟机执行恶意网页后需要reboot 这点比较影响效率,但是由于恶意网页会首先在本地cache 和云端查询被过滤,恶意网页被任意客户仅模拟执行一次,整个趋势的用户都能得到防护。

 

流程图如下:


 

 

补充:

速度的问题可以用下面的办法改进:

速度的问题可以通过白名单的来解决,因为其实大家访问的网页其实大部分都是相同的,只要任何一个地方验证是没有问题的网页,本地白名单 cache 会加入,趋势的云端白名单也会更新,下次只要有人来访问相同的 url ,先会在本地的白名单检查,再到趋势云端的白名单检查,只要有个地方过了,直接让用户访问。当然白名单会定时过期,过期了就要重新运行检查。黑名单也会过期,黑名单过期时间应该比较长,当然用户也可以选择 reassess ,这样黑名单中的 url 会在模拟机中再运行一遍,得到结果后,更新本地和趋势云端的黑名单或者白名单(根据检查结果)。当然其实可以更进一步的改进,趋势云端的黑白名单的条目过时了,自己会reassess 过期黑白名单,也会收集各个企业的 安全代理的运行期状态, 它会把这些需要重新检测的 url 根据企业中的 安全代理的忙碌程度,分派 reassess 的任务到那里,然后根据结果更新黑白名单。充分运用所有的计算资源。当然分配reassess 任务时候,只分配给该企业曾经访问过的url具有相同域的URLreassess 检测。

猜你喜欢

转载自tangay.iteye.com/blog/835901