基于网络的入侵检测技术
时间 2021-08-15
标签
入侵检测
网络
安全
网络入侵检测
分层协议模型与TCP/IP协议
TCP/IP协议分层结构
数据报文的分层封装
以太网帧格式
ARP/RARP报文格式
IP数据报头格式
ICMP回应请求与应答报文格式
UDP报文格式
TCP报文格式
网络数据包的截获
- 是基于网络的入侵检测技术的工作基石。
- 通过捕获整个网络的所有信息流量,根据信息源主机、目标主机、服务协议端口等信息简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进行分析。
- 一方面,要保证采用的捕获机制能捕获到所有网络上的数据包,尤其是检测到被分片的数据包
- 另一方面,数据捕获机制捕获数据包的效率也很重要,将直接影响整个网络入侵裣测系统的运行速度。
局域网和网络设备的工作原理
网络设备
- 集线器:共享模式、总线方式,物理上是广播网络,其下同一网段的所有机器的网卡都能接收到数据;两个机器之间传输数据时,其它端口被占用
- 交换机:记住每个主机的MAC地址,维护一个物理端口与MAC地址的对应表,两个机器之间传输数据时,别的端口没有占用,可以继续通讯
网卡工作原理
- 接收数据时,先接收数据包头的目的MAC地址;如果该接收就在接收后产生中断信号通知CPU:如果认为不该接收,就丢弃不管,计算机并不知道。
- CPU接到中断信号后产生中断,0S就根据网卡驱动程序中网卡中断程序地址,调用驱动程序接收数据,驱动程序接收数据之后,放入堆栈让0S处理。
局域网工作过程
- 数据在网络上是以很小的帧为单位传输的
- 帧经过封装,通过网卡发送到传输介质上,到达目标主机。在目标主机处执行相反的过程
- 目标主机网卡捕获帧后,通知0S,对帧进行存储。Sniffer在这个传输和接收过程中,能获取数据
- 正常情况下,一个合法的网络接口只能响应两种数据帧:帧的目标地址与之匹配的硬件地址;帧的目标地址是广播地址;网卡向CPU产生硬中断;
- 如果局域网中某台机器的网卡处于混杂(Promi scuous)模式,则可以捕获所有的报文和帧,这样的机器就是sniffer
sniffer
- 定义:利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具
- 工作原理
- 网卡设置成混杂模式,就能接收到网络上所有的数据
- 对收到的每一个帧都产生一个硬件中断,以便提醒0S处理报文包
- 工作在网络环境中的底层,拦截所有正在网络上传送的数据,并通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局
- Sniffer在功能和设计方面有很多不同,有些只能分析一种协议,有些能够分析几种协议
- 一般情况下,大多数的 sniffer至少能分析:标准以太网、TCP/IP协议和IPX
Sniffer的应用
- 分析网络的流量,以便找出所关心的网络中潜在的问题(如网络的某一段运行得不好,报文的发送比较慢)
- 网络数据监听工具。可以捕获网络上的报文数据,这些数据可以是普通的报文,也可以是用户名和密码,甚至是一些商用机密数据
- 大多数用户不知道 sniffer的存在,因而也没有防备之心
Sniffer的危害
- 能捕获口令,可以记录到明文传送的 user id和password
- 捕获到专用的或机密信息。用户姓名、信用卡号码、机密和敏感信息
- 窥探低级的协议信息,用来获取更高级的访问权限。如会话双方的IP地址、路由信息等
以太网环境下的数据截获
以太网数据传输通过广播传输媒体实现。但是在系统正常工作时,应用程序只能接收到以本主机为目标主机的数据包,其他数据包将被丢弃不作处理。要截获到流经网卡的不属于自己主机的数据,必须绕过系统正常工作的处理机制,直接访问网络底层
- 在UNIX系统中可以用 Libpcap包捕获函数库直接与内核驱动交互操作,实现对网络数据包的捕获。
- 在Win32平台上可以使用 Winpcap,通过VxD虛拟设备驱动程序实现网络数据捕获的功能
网络数据包的截获
- 根据网络类型的不同,网络数据截获可以通过以下方法实现
- 利用以太网络的广播特性(共享)
- 通过设置路由器的监听端口或者是镜像端口来实现
- 将捕获程序放在网关或代理服务器上,可以捕获整个局域网的数据包
包捕获机制
- 从广义的角度上看,一个数据包捕获机制包含个主要部分。
- 最底层针对特定操作系统的包捕获机制
- 最高层针对用户程序的接口
- 数据包过滤机制
- 不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。
- 数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序
- 而数据包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤缓冲等相关处理,最后直接传递到应用程序。
- 数据包捕获之后,还要过滤一包过滤机制
- 数据包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。
- 常见的包捕获机制
Unix平台下的数据包截获技术-Libpcap
- Libpcap的英文意思是 Packet Capture library,即数据包捕获函数库。
- 它是劳伦斯伯克利国家实验室网络研究组开发的UNIX平台上的一个包捕获函数库,可到http://www.tcpdump.org的download中下载,大多数网络监控软件都以它为基础。
- 它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架
- Libpcap库函数支持数据包过滤机制,即著名的伯克利数据包过滤器(BPF),它是一种用于UNIX的内核数据包过滤体制
BPF的基本原理
Windows的数据包截获技术-Winpcap
-
Win32平台不提供直接的网络底层访问接口,必须通过虚拟设备驱动程序(wxD)实现网络数据包的截获功能。
-
对应于 Libpcap库的 Windows版本是 Winpcap库。
-
Winpcap(windows packet capture)是 windows平台下一个免费,公共的网络访问系统。
-
开发 wInpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
-
http://www.winpcap.org
-
包含NPF驱动细节的 Winpcap结构图
-
主要功能
- 在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。也就是说,winpcap不能阻塞、过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包
-
子功能
- 捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;
- 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
- 在网络上发送原始的数据报;
- 收集网络通信过程中的统计信息。
交换网络环境下的数据截获
在实际的网络环境中,许多网络采取了交换运行环境(例如交换机、路由器等),此时传输媒体不再具备广播特性,所以不能够单凭设置网络接口的混杂模式来截获所有的数据包。
常用的方法昰利用交换机或者路由器上设置的监听端口或者镜像端口。
- 实际工作中,采用镜像端口的方法常碰到两个问题
- 随着交换带宽的不断增长,并非所有的网络流量都会反映在镜像端口上。
- 并非所有的交换设备都提供类似的镜像端口。很多的IDS系统会选择挂接在流量通常最大的上下行端口上,用来截获进出内外网的数据流量。
检测引擎的设计
- 检测引擎的设计是基于网络入侵检测的核心问题。
- 检测引擎的分类
- 从具体的实现机制看,可分为
- 嵌入式规则检测引擎,更易于使用,为大多商用系统所采用
- 可编程的检测引擎,更灵活,用户需具备更多的专业知识
- 从具体采用的检测技术看,可分为
嵌入式规则检测引擎设计
- 嵌入式规则检测引擎的设计中,存在两点关键问题:检测规则和引擎架构设计。
Snort
Snort是什么
- Snort是一个轻量级的入侵检测系统,它具有截取网络数据报文,进行网络数据实时分析、报警,以及日志的能力
- snort的报文截取代码是基于 libpcap库的,继承了 libpcap库的平台兼容性。
- snort使用一种灵活的规则语言来描述网络数据报文,因此可以对新的攻击作出快速地翻译。snort具有实时报警能力。
- 它支持插件体系,可以通过其定义的接口,很方便地加入新的功能
- 简单的说,Snort是数据包的嗅探器,也是数据包记录器,还是NIDS。提供数据包嗅探和记录功能只是 Snort的部分功能,Snort的特点就是其入侵检测功能一根据入侵规则匹配数据包中的内容。
Snort系统需求
- Snort对硬件没有特殊的要求,对Sηort来说,硬件系统的处理器频率越高越好。
- 不同网络使用的网卡和硬盘空间大小会制约 Snort捕捉数据包和存储数据包的功能。
- Snort的产品定位为简单NIDS。现在能运行x86平台的Linux、FreeBSD、NetBSD、OpenBSD和 Windows等操作系统上。另外,Sparc Solaris、PowerPc Mac0SⅩ MKLinux和PA-RISC HP-UX等操作系统都支持 Snort。
- Snort可以在任何流行的平台上运行。
Snort的功能架构
Snort的三种工作模式
Snort指令
-
./snort -v
-
./snort -vd
-
./snort -vde
- 在屏幕上显示网络数据包的报头内容,以及数据链接层的信息
-
检测规则
- 规则选项
- Snort检测规则设计中的核心部分
- 基本选项类型示例
Snort的检测引擎的架构
- Snort检测引擎的架构(Snort的体系结构)
- 数据包解码器
- 检测引擎
- 日志报警
- 解码器:对各种协议栈上的数据包进行解析、预处理,以便提交给检测引擎进行规则
Snort的协议解析器
-
工作原理
- 围绕着网络协议栈中的各层协议定义展开的,包括从数据链路层协议向上到TcP层协议的定义。
- 协议解析引擎中的每个子例程使用事先定义好的表示网络协议报文格式的数据结构,从原始网络流量数据中解析出协议信息。
- 子例程按照网络协议栈自下而上的顺序调用,从数据链路层到IP层,直到传输层协议结束。
-
实现机制
- 主要数据结构为 Packet。它是 Snort系统中控制系统正常工作信息的关键数据结构,其中包括存放了当前数据包进行协议解析后的结果信息。
- 在协议解析的过程中,利用各种指针实现对数据结构Packet的管理和访问,使其指向数据包中不同位置以便后继的规则检测引擎执行下一步的分析工作。
- 由于(C语言中)指针具有较高的实现效率,从而提高snort的执行速度
Snort的规则检测引擎
- 3个模块,分别是规则链表构造模块、预处理器模块和规则匹配模块
- 规则链表构造模块
- 读入规则配置文件,逐条解析检测规则,并最终形成内存中的二维规则链表结构
-
预处理模块
- 对当前截获的数据包进行预处理操作,以方便后继规则匹配模块对数据包的处理操作。
- 提供了两种对于后继规则匹配工作非常重要的功能。
- 数据包分片重组及数据流重组功能
- 协议规范化/解码功能
-
规则解析流程:
- 先读取规则文件,然后依次读取每一条规则对规则进行解析,并用相应的规则语法表示;在内存中对规则进行组织,建立规则语法树。
-
规则匹配模块
- 对于每个当前数据包,遍历整个规则链表结构,并调用对应的插件检测模块进行各种处理。
- 一旦规则匹配模块搜索到一个与解析后的数据包匹配的规则,则触发定义好的规则动作并返回。
Snort的日志/警报系统
- 规则匹配模块所触发的规则动作,由日志/警报系统完成。
- 各种响应功能,也是通过各种插件模块来实现的
- 3种日志模式和5种警报模式
- 关闭、以可读格式记录数据包和以 Tcpdump二进制格式记录数据包。
- Alert_syslog:警报信息可以发送到系统日志文件(Syslog)
- Alert_fast:将报警信息快速的打印在指定文件的一行里。它是一种快速的报警方法,因为不需要打印数据包头的所有信息。
- Alert_full:打印数据包头所有信息的报警。
- Alert_smb:这个插件将把 WinPopup报警信息发送给NETB0S命名的机器上的一个文件。不鼓励使用这个插件
- Alert_unixsock:打开一个UNIX套接字,并且把报警信息发送到那里。
可编程的检测引擎设计
-
允许用户采用特定的编程语言或者脚本语言,实现具体的检测模块
-
要点在于用于实现入侵检测功能的脚本语言的定义及其与引擎架构的接口设计
-
NFR的IDA/NID为例
-
IDA引擎组件:event-driven,负责截获数据包,各种类型的系统事件,都能驱动该引擎组件进行某种类型的动作,如数据包抵达、时间事件等;
-
后端组件
- Backend:响应引擎组件的需求,实现相应的处理方式,如收集TCP网络协议流量的信息
- 每一个 backend包括三个部分:过渡器、配置文件和记录器
-
N-code语言
- 类G,包括函数声明、控制语句等
- 支持表达网络数据包的数据结构,如 array
- 支持“数据包变量”类型:指向系统当前截获并正在处理的数据包
- 如 ethernet、packet、ip、icmp、tcp、udp等
- 支持运行符,如算术和逻辑
- 支持函数和过渡器声明
特征分析与协议分析技术
- 对于网络入侵检测而言,存在着两种基本的技术类型,分别称为“特征(signature)分析”和“协议(protocol)分析”技术。
特征分析
- 特征分析技术最早应用在早期的网络入侵检测系统中
- 基本工作原理是建立在字符串匹配的简单概念之上。
- 最初的基于特征分析的入侵检测系统是非常原始的,它在工作时完全不考虑网络数据包中所包含的协议格式化信息,而是将输入数据包视为一个无序无结构的随机数据流,企图仅仅依靠简单的字符串匹配操作完成所有的检测任务。
协议分析技术
- 早期的协议分析技术将输入数据包视为具有严格定义格式的数据流,并将输入数据包按照各层协议报文封装的反向顺序,层层解析出来。
- 然后,再根据各层网络协议的定义,对各层协议的解析结果进行逐次分析。
- 协议分析技术是利用预先定义好的关于协议字段的期望值或合理值的详细知识,来判断是否出现了恶意的网络流量。
特征分析和协议分析技术各自的优缺点。