-
Notifications
You must be signed in to change notification settings - Fork 13
安全产品之流量镜像
网络流量镜像 (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秒钟),对业务有细微的影响;
流量解决的主要是用来发现攻击,也能做到部分防御攻击。流量镜像可以检测到L4的全流量数 据。现在很多做日志分析等不如直接从镜像全流量及时和准确。
流量镜像可以检查到协议层的攻击,比如TCP SYN泛洪、TCP RST泛洪、TCP ACK泛洪、ICMP泛洪、UDP 泛洪、TCP/UDP分片攻击以及应用层的攻击,比如SQL注入、HTTP GET攻击等。
https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/31.png
从上述架构可以看出,笔者的流量镜像不仅仅能检测攻击,还可以模拟攻击,验证黑客是否入侵成功,然后在进行拦截。
按照实现功能的不同,流量镜像系统分为如下几个模块:
数据镜像把N个机房流量进行交换机镜像
攻击分析模块
快速引擎重组
规则引擎过滤
智能扫描引擎
实时扫描模块,对请求进行安全扫描
订阅服务模块,负责实时给用户提供报警
拓扑算法智能分布式引擎,存储 url
管理模块,监控攻击模块所在的机器
这块都是操作,笔者不再多说了,主要说一点就是,你镜像的流量要包含https的话,这个镜像就需要你思考下你公司的网络拓扑了,笔者公司是常见的互联网架构,所有业务都是反向nginx proxy,其中https的解密都放在nginx proxy了,所以笔者的流量是这层镜像,这边镜像又有问题,就是源ip,从哪获得?代理过来的都是内网ip,这个一般都会在http头里带x-forward-ip。为啥笔者这么干啊?因为证书私钥不给我啊?如果有证书私钥直接在交换机解密得了。
因为笔者的机器是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。
交换机这么大的流量,如果你用正则一条一条遍历性能就不要说了。
笔者使用的google cre2,cre2支持正则组的概念,可以把一堆规则放进一个组里,不用每次一个个规则遍历,极大的提高了性能,内存方面,尤其是多线程使用jmalloc比malloc要好很多。
识别出来了攻击,镜像服务器不会处理,直接使用zmq的消息路由模式,转发到对应的处理端。选择zmq也是因为他性能高效,使用简单。图来自网上
https://raw.githubusercontent.com/wiki/xianlimei/liaixian11030/34.png
● 消息先插入数据分析路由;
● 数据分析路由采用轮询算法(最少分配算法);
● 数据分析把消息分配到对应的消息节处理点。
● 消息处理节点处理完消息以后再把消息分配到任务路由中;
● 任务路由采用轮询算法(最少分配算法);
● 任务路由把消息分配到对应的任务处理节点
处理端通过zmq消息队列,获取攻击报文,进行URL去重,去重采用的hash去重,分析出url+请求参数,做一个hash,然后根据消息传递的攻击类型,启动相应的载荷,去模拟攻击。
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^_^.
如有转载,必须声明,谢谢。
2017-12-28 17:45 第一章