信号分析
对收集到的有关系统、网络、数据及用户活动的状态和行为等信息,一般通过三种技术手段进行分析:模式匹配、统计分析和完整性分析。其中前两种方法用于实时的入侵检测,而完整性分析则用于事后分析。
模式匹配
模式匹配就是将收集到的信息与已知的网络入侵和系统已有模式数据库进行比较,从而发现违背安全策略的行为。该过程可以很简单(如通过字符串匹配以寻找一个简单的条目或指令),也可以很复杂(如利用正规的数学表达式来表示安全状态的变化)。一般来讲,一种进攻模式可以用一个过程(如执行一条指令)或一个输出(如获得权限)来表示。该方法的一大优点是只需收集相关的数据集合,显著减少系统负担,且技术已相当成熟。它与病毒防火墙采用的方法一样,检测准确率和效率都相当高。但是,该方法存在的弱点是需要不断的升级以对付不断出现的黑客攻击手法,不能检测到从未出现过的黑客攻击手段。
统计分析
统计分析方法首先给系统对象(如用户、文件、目录和设备等)创建一个统计描述,统计正常使用时的一些测量属性(如访问次数、操作失败次数和延时等)。在比较这一点上与模式匹配有些相象之处。测量属性的平均值将被用来与网络、系统的行为进行比较,任何观察值在正常值范围之外时,就认为有入侵发生。例如,本来都默认用GUEST帐号登录的,突然用ADMINI帐号登录。这样做的优点是可检测到未知的入侵和更为复杂的入侵,缺点是误报、漏报率高,且不适应用户正常行为的突然改变。具体的统计分析方法如基于专家系统的、基于模型推理的和基于神经网络的分析方法,目前正处于研究热点和迅速发展之中。
完整性分析
完整性分析主要关注某个文件或对象是否被更改,这经常包括文件和目录的内容及属性,它在发现被更改的、被特咯伊化的应用程序方面特别有效。完整性分析利用强有力的加密机制,称为消息摘要函数(例如MD5),它能识别哪怕是微小的变化。其优点是不管模式匹配方法和统计分析方法能否发现入侵,只要是成功的攻击导致了文件或其它对象的任何改变,它都能够发现。缺点是一般以批处理方式实现,用于事后分析而不用于实时响应。尽管如此,完整性检测方法还应该是网络安全产品的必要手段之一。例如,可以在每一天的某个特定时间内开启完整性分析模块,对网络系统进行全面地扫描检查。
专家系统
用专家系统对入侵进行检测,经常是针对有特征入侵行为,是较为智能的方法。专家系统主要是运用规则进行分析,规则即知识,不同的系统与设置具有不同的规则,且规则之间往往无通用性。专家系统的建立依赖于知识库的完备性,知识库的完备性又取决于审计记录的完备性与实时性。入侵的特征抽取与表达,是入侵检测专家系统的关键。在系统实现中,将有关入侵的知识转化为if-then结构(也可以是复合结构),条件部分为入侵特征,then部分是系统防范措施。运用专家系统防范有特征入侵行为的有效性完全取决于专家系统知识库的完备性。
实现一例
以下是在WINDOWS2000,VB6.0环境下测试通过的对本机的木马探测及常规扫描进行监听的简单程序。
Dim tmpstr As String ’存放捕获的数据
Dim NOW_OUT As Integer '总共出去连接的有几个Winsock
Private Sub Command1_Click()
ListPorts.AddItem txtADDPORT.Text ’把文本框中的端口增加到列表框中
End Sub
Private Sub Command2_Click()
On Error Resume Next ’如出错就在下一个端口重新开始监听
If Command2.Caption = "监听" Then
For i = 0 To ListPorts.ListCount ? 1 ’如果命令框为‘监听’,则初始化要监听的端口数量I
Load Winsock1(i + 1) ' 加载监听端口的winsock1数组控件
Winsock1(i + 1).LocalPort = ListPorts.List(i) '使每一个WINSOCK数组变量对应一个端口
Winsock1(i + 1).Listen '监听
Next i
Command2.Caption = "停止"
Else
For i = 1 To Winsock1.Count - 1
Unload Winsock1(i)
Next i ’假如caption 为停止,则卸载WINSOCK1数组控件
For i2 = 1 To Winsock2.Count - 1
Unload Winsock2(i2)
Next i2
Command2.Caption = "监听"
End If
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
txtLOG.Text = "日志:" & vbCrLf
NOW_OUT = 1
End Sub ’在窗体载入时初始化日志文件和连接变量
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load Winsock2(NOW_OUT) '加载建立连接的Winsock2数组控件
Winsock2(NOW_OUT).Accept requestID '建立连接
Winsock1(Index).Close
Winsock1(Index).Listen 'Winsock1继续监听
NOW_OUT = NOW_OUT + 1 '连接的控件累加
myAddLog "来自" & Winsock1(Index).RemoteHostIP & "连接到本地端口:" & Winsock1(Index).LocalPort '显示捕获的连接
End Sub ’在WINSOCK2建立连接的同时,WINSOCK1进行监听远程扫描本地端口
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Winsock2(Index).GetData tmpstr '通过Getdata函数捕获数据
myAddLog "来自" & Winsock2(Index).RemoteHostIP & "的数据:" & tmpstr '显示捕获的数据
End Sub ’用WINSOCK2获取数据并加入到日志
Sub myAddLog(tmptext As String) '加入日志
tmptext = tmptext & vbCrLf
txtLOG.SelStart = Len(txtLOG.Text)
txtLOG.SelText = tmptext
End Sub ’自动增加日志内容,并高亮显示当前所捕捉到的数据
程序说明:这是一个简单的监听程序,并不具有分析的功能,因此,它不是一个入侵检测系统,而是入侵检测系统的前半部分――数据收集。它是通过winsock(系统本身提供的组件)本身的功能,简单的实现对本地断口的监听和对到达本地的数据进行捕获。
总结
入侵检测作为一种积极主动地安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护,在网络系统受到危害之前拦截和响应入侵。入侵检测系统面临的最主要挑战有两个:一个是虚警率太高,一个是检测速度太慢。现有的入侵检测系统还有其他技术上的致命弱点。因此,可以这样说,入侵检测产品仍具有较大的发展空间,从技术途径来讲,除了完善常规的、传统的技术(模式识别和完整性检测)外,应重点加强统计分析的相关技术研究。
但无论如何,入侵检测不是对所有的入侵都能够及时发现的,即使拥有当前最强大的入侵检测系统,如果不及时修补网络中的安全漏洞的话,安全也无从谈起。