Skip to content

安全产品之流量镜像

xianlimei edited this page Jan 4, 2018 · 7 revisions

4、安全产品之流量镜像

4.1 什么是流量镜像

网络流量镜像 (Switched Port Analyzer)一般可以用于网络监控、分析。IP网中的用户流量采集方式有多种方式,例如Port Montoring、WCCP协议(Web Cache Communication Protocol)的流量重定向、分光器流量采集、四层交换机的流量重定向等,在具体应用时,可根据网络结构、网络流量、设备特点等情况决定采用合适的流量采集方式。

方式一:端口镜像(Port Monitoring)

通过在网络的核心层或汇聚层交换机上设置端口镜像,将交换机上联端口的出境流量复制(镜像)一份到Openet BSMP前置机上,即可采集到所有用户访问网络的请求。目前,绝大部分中高端交换机均支持端口镜像功能,如Cisco Catalyst 序列、3Com CoreBuilder序列、华为的S8000序列、Foundry的BigIron 4000/8000序列、Extreme的BD6800/AP3800序列等。这种方式的优缺点如下。

优点:

1、成本低廉,不需要增加任何网络设备;

2、启动端口镜像会话(Session)时,对交换机的性能基本无影响;

3、可从交换机上采集到所有用户访问请求数据;

4、故障保护,当采集系统或前置机出现故障时,对现有的网络和业务没有任何影响。

缺点:

1、占用交换机端口:采集系统需要和交换机直连,将占用交换机一定数量的GE和FE端口;

2、需要修改交换机配置:需要修改交换机的配置,将合适的流量复制到镜像端口,但在修改配置时不会对交换机性能和业务有影响;

方式二:分光器(Optical Splitter)

对于某些节点,宽带接入服务器通过光口GE链路直接与核心路由器(一般为Cisco GSR)相连,宽带接入服务器及GSR均不支持端口镜像,这时采用分光器进行流量采集是最合适的方法。当某些节点的核心交换机、汇聚层交换机没有足够的GE端口,不适合采用端口镜像进行流量采集时,或希望在出口采集网络流量,就可以采分光器进行流量采集。分光器是一种无源光器件,通过在物理层上进行光复制来进行用户访问请求数据的采集,其优缺点如下。

优点:

1、性能优异:可支持GE甚至在2.5Gbps POS链路上通过分光器进行流量采集;

2、故障保护:当采集系统故障时,对现有网络及业务无任何影响;

3、无需修改现有网络设备的任何配置,不改变网络结构,可采集到所有的网络流量,和网络无缝集成;

4、可靠性高:分光器是一种无源光器件,可以看作是一种特制的光纤,可靠性高;

5、不占用网络设备端口,投入成本低。

缺点:

需要将设备的上联光纤改为分光器,这涉及到一次简单的网络割接,这将导致网络瞬时中断(不超过5秒钟),对业务有细微的影响;

4.2 流量镜像的应用场景

流量解决的主要是用来发现攻击,也能做到部分防御攻击。流量镜像可以检测到L4的全流量数 据。现在很多做日志分析等不如直接从镜像全流量及时和准确。

流量镜像可以检查到协议层的攻击,比如TCP SYN泛洪、TCP RST泛洪、TCP ACK泛洪、ICMP泛洪、UDP 泛洪、TCP/UDP分片攻击以及应用层的攻击,比如SQL注入、HTTP GET攻击等。

4.3 流量镜像系统的架构与实现

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/31.png

从上述架构可以看出,笔者的流量镜像不仅仅能检测攻击,还可以模拟攻击,验证黑客是否入侵成功,然后在进行拦截。

按照实现功能的不同,流量镜像系统分为如下几个模块:

 数据镜像把N个机房流量进行交换机镜像

 攻击分析模块

 快速引擎重组

 规则引擎过滤

 智能扫描引擎

 实时扫描模块,对请求进行安全扫描

 订阅服务模块,负责实时给用户提供报警

 拓扑算法智能分布式引擎,存储 url

 管理模块,监控攻击模块所在的机器

4.3.1 流量镜像系统实现

4.3.1.1 流量镜像

这块都是操作,笔者不再多说了,主要说一点就是,你镜像的流量要包含https的话,这个镜像就需要你思考下你公司的网络拓扑了,笔者公司是常见的互联网架构,所有业务都是反向nginx proxy,其中https的解密都放在nginx proxy了,所以笔者的流量是这层镜像,这边镜像又有问题,就是源ip,从哪获得?代理过来的都是内网ip,这个一般都会在http头里带x-forward-ip。为啥笔者这么干啊?因为证书私钥不给我啊?如果有证书私钥直接在交换机解密得了。

4.3.1.2 报文重组

因为笔者的机器是intel的40万兆网卡,交换机流量很大,不方便具体透漏多少,所以对流量丢包率要求很高,所以采用pfring 这种dna(零拷贝技术),具体技术细节可以参考https://www.ntop.org/products/packet-capture/pf_ring/,笔者也只是应用,没有完全看他的实现代码,下图是pfring的一个简单原理图,来自网上

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/32.png

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/33.png

● read()调用引发从用户模式到内核模式的上下文切换(第一次切换),在内部,发出sys_read(或者同等内容)从设备中读取数据,直接内存读取(direct memory access,DMA)执行了拷贝(第一次拷贝),它从磁盘中读取内容,然后将他们存储到一个内核地址空间缓冲区中;

● 数据从读缓冲区拷贝到用户缓冲区(第二次拷贝),read()调用返回。该调用返回引发内核模式到用户模式的切换(第二次切换)。现在数据被存储在用户空间缓冲区中;

● (send()套接字调用引发用户模式到内核模式的上下文切换(第三次切换),数据再次被放置到内核地址空间缓冲区中(第三次拷贝)。这次放置的缓冲区与目标套接字关联;

● (send()系统调用返回,从内核模式切换到用户模式(第四次切换),DMA引擎将数据从内核缓冲区传输到协议引擎(第四次拷贝)。

● DMA允许外围设备和贮存之间直接传输IO数据,DMA依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。数据传输可以以两种方式触发:一种所软件请求数据,另一种所硬件异步传输。以read为例,它即采用第一种方式,其步骤如下:

● 进程调用read时,驱动程序分配一个DMA缓冲区,随后指示硬件传送它的数据,进程进入睡眠;

● 硬件将数据写入DMA缓冲区并在完成时产生一个中断;

● 中断处理程序获取输入数据,应答中断,最后唤醒进程,可以读取数据了。

由此可见,在传统的数据传输中,系统方面总共进行了4次数据拷贝,4次上线文切换,这些都会对服务器性能造成很大影响,因此我们直接把网卡数据直接copy到应用层,这样完全不需要copy。

4.3.1.3 规则过滤

交换机这么大的流量,如果你用正则一条一条遍历性能就不要说了。

笔者使用的google cre2,cre2支持正则组的概念,可以把一堆规则放进一个组里,不用每次一个个规则遍历,极大的提高了性能,内存方面,尤其是多线程使用jmalloc比malloc要好很多。

4.3.1.4 识别攻击

识别出来了攻击,镜像服务器不会处理,直接使用zmq的消息路由模式,转发到对应的处理端。选择zmq也是因为他性能高效,使用简单。图来自网上

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/34.png

● 消息先插入数据分析路由;

● 数据分析路由采用轮询算法(最少分配算法);

● 数据分析把消息分配到对应的消息节处理点。

● 消息处理节点处理完消息以后再把消息分配到任务路由中;

● 任务路由采用轮询算法(最少分配算法);

● 任务路由把消息分配到对应的任务处理节点

4.3.1.5 模拟攻击

处理端通过zmq消息队列,获取攻击报文,进行URL去重,去重采用的hash去重,分析出url+请求参数,做一个hash,然后根据消息传递的攻击类型,启动相应的载荷,去模拟攻击。

4.3.1.6 攻击插件

sql注入:sqlmapapi,sqlmapapi 这东西搞得确实不错,就是性能差点,扫描sql注入神器,为了实现可以自动化扫描,笔者对其做了相应的修改。

xss:使用的是arachni。

命令注入:使用的是Commix。

目录遍历: 笔者自研的,主机安全里也介绍了思路。

csrf:结合腾讯的CsrfScanner思路,笔者也搞了一个类似的,还是要感谢这些朋友分享。

上传漏洞:笔者自研的,目前只是判断上传的时候有没有文件后缀名做校验,上传后的文件是否可以被用作钓鱼,还比较糙。

从上面也可以看到,笔者大部分插件都是使用开源的工具,笔者精力有限,没法一个一个去开发,而且开发的也不一定有这些开源的好。在笔者实际工作经验中,虽然不能发现所有的安全问题,但是能覆盖70%以上的安全问题。

4.4 流量镜像系统WBE UI设计

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/35.png

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/36.png

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/37.png

https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/38.png

4.5 流量镜像代码 还是那句话,等笔者更新github^_^.