科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道IDS的标准化

IDS的标准化

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

XML DTD(文档类型定义)可用来声明文档所用的标记,它包括元素(文档包括的不同信息部分)、属性(信息的特征)和内容模型(各部分信息之间的关系)。

作者:51cto 2007年10月21日

关键字: 基本数据类型 轻量级目录访问协议 NIDES 比特位 深度优先

  • 评论
  • 分享微博
  • 分享邮件

  为了提高IDS产品、组件及与其他安全产品之间的互操作性,美国国防高级研究计划署(DARPA)和互联网工程任务组(IETF)的入侵检测工作组(IDWG)发起制订了一系列建议草案,从体系结构、API、通信机制、语言格式等方面规范IDS的标准。

  DARPA提出的建议是公共入侵检测框架(CIDF),最早由加州大学戴维斯分校安全实验室主持起草工作。1999年6月,IDWG就入侵检测也出台了一系列草案。但是,这两个组织提出的草案或建议目前还正处于逐步完善之中,尚未被采纳为广泛接受的国际标准。不过,它们仍是入侵检测领域最有影响力的建议,成为标准只是时间问题。

  入侵检测工作组(IDWG)

  IDWG的任务是:定义数据格式和交换规程,用于入侵检测与响应(IDR)系统之间或与需要交互的管理系统之间的信息共享。IDWG提出的建议草案包括三部分内容:入侵检测消息交换格式(IDMEF)、入侵检测交换协议(IDXP)以及隧道轮廓(Tunnel Profile)。

  一、IDMEF

  IDMEF描述了表示入侵检测系统输出信息的数据模型,并解释了使用此模型的基本原理。该数据模型用XML实现,并设计了一个XML文档类型定义。自动入侵检测系统可以使用IDMEF提供的标准数据格式对可疑事件发出警报,提高商业、开放资源和研究系统之间的互操作性。IDMEF最适用于入侵检测分析器(或称为“探测器”)和接收警报的管理器(或称为“控制台”)之间的数据信道。

  1.IDMEF的数据模型

  IDMEF数据模型以面向对象的形式表示探测器传递给控制台的警报数据,设计数据模型的目标是为警报提供确定的标准表达方式,并描述简单警报和复杂警报之间的关系。

  IDMEF数据模型各个主要部分之间的关系如图1所示。

  

  

  

  所有IDMEF消息的最高层类是IDMEF-Message,每一种类型的消息都是该类的子类。IDMEF目前定义了两种类型的消息:Alert(警报)和Heartbeat(心跳),这两种消息又分别包括各自的子类,以表示更详细的消息。

  需要注意的是,IDMEF数据模型并没有对警报的分类和鉴别进行说明。例如,对一个端口的扫描,一个分析器可能将其确定为一个多目标的单一攻击,而另一个分析器可能将其确定为来自同一个源的多次攻击。只有一个分析器决定了发送的警报类型,数据模型才能规定怎样对这个警报进行格式化。

  IDMEF数据模型是用统一建模语言(UML)描述的。UML用一个简单的框架表示实体以及它们之间的关系,并将实体定义为类。IDMEF包括的主要类有IDMEF-Message类、Alert类、Heartbeat类、Core类、Time类和Support类,这些类还可以再细分为许多子类。

  2.使用XML描述IDMEF文档标记

  IDWG最早曾提出两个建议实现IDMEF:用SMI(管理信息结构)描述一个SNMP MIB和使用DTD(文档类型定义)描述XML文档。IDWG 在1999年9月和2000年2月分别对这两个建议进行了评估,认为XML最能符合IDMEF的要求,于是,在2000年2月的会议上决定采用XML方案。

  XML是SGML(标准通用标记语言)的简化版本,是ISO 8879标准对文本标记说明进行定义的一种语法。作为一种表示和交换网络文档及数据的语言,XML能够有效地解决HTML面临的许多问题,所以获得了业界的普遍青睐。1998年10月,WWW联盟(W3C)将XML作为一项建议公布于众。此后不久,WWW联盟又发布了一份建议,定义了XML文档中的名字空间。

  XML是一种元语言——即一个描述其他语言的语言,它允许应用程序定义自己的标记,还可以为不同类型的文档和应用程序定义定制化的标记语言。

  XML DTD(文档类型定义)可用来声明文档所用的标记,它包括元素(文档包括的不同信息部分)、属性(信息的特征)和内容模型(各部分信息之间的关系)。

  二、IDXP

  IDXP(入侵检测交换协议)是一个用于入侵检测实体之间交换数据的应用层协议,能够实现IDMEF消息、非结构文本和二进制数据之间的交换,并提供面向连接协议之上的双方认证、完整性和保密性等安全特征。IDXP是BEEP的一部分,后者是一个用于面向连接的异步交互通用应用协议,IDXP的许多特色功能(如认证、保密性等)都是由BEEP框架提供的。IDXP模型如下:

  1.建立连接

  使用IDXP传送数据的入侵检测实体被称为IDXP的对等体,对等体只能成对地出现,在BEEP会话上进行通信的对等体可以使用一个或多个BEEP信道传输数据。

  对等体可以是管理器,也可以是分析器。分析器和管理器之间是多对多的关系,即一个分析器可以与多个管理器通信,同样,一个管理器也可以与多个分析器通信;管理器与管理器之间也是多对多的关系,所以,一个管理器可以通过多个中间管理器接收来自多个分析器的大量警报。但是,IDXP规定,分析器之间不可以建立交换。

  入侵检测实体之间的IDXP通信在BEEP信道上完成。两个希望建立IDXP通信的入侵检测实体在打开BEEP信道之前,首先要进行一次BEEP会话,然后就有关的安全特性问题进行协商,协商好BEEP安全轮廓之后,互致问候,然后开始IDXP交换。

  图2是两个入侵检测实体“Alice”和“Bob”之间建立IDXP通信的过程:

  

  

  

  注意:IDXP对等实体之间可能有多个代理,这些代理可能是防火墙,也可能是将公司每个部门分析器的数据转发给总管理器的代理。隧道轮廓描述了使用代理时的IDXP交换。

  2.传输数据

  一对入侵检测实体进行BEEP会话时,可以使用IDXP轮廓打开一个或多个BEEP信道,这样就可以使用额外的信道建立额外的BEEP会话。但是,大多数情况下,额外信道都应在已有的BEEP会话上打开,而不是用IDXP轮廓打开一个包含额外信道的新BEEP会话。

  在每个信道上,对等体都以客户机/服务器模式进行通信,BEEP会话发起者为客户机,而收听者则为服务器。

  图3描述了一个分析器将数据传送给一个管理器的简单过程。

  

  

  

  在一次BEEP会话时,使用多个BEEP信道有利于对在IDXP对等体之间传输的数据进行分类和优先权设置。例如,一个管理器M1在向另一个管理器M2传送警报数据时,可以用不同的信道传送不同类型的警报数据,在每个信道上管理器M1的作用都相当于一个客户器,而M2则对不同信道上的数据作出相应的处理,如图4所示。

  

  

  

  3.断开连接

  在有些情况下,一个IDXP对等体可以选择关闭某个IDXP信道。在关闭一个信道时,对等体在0信道上发送一个“关闭”元素,指明要关闭哪一个信道。一个IDXP对等体也可以通过在0信道上发送一个指明要“关闭”0信道的元素,来关闭整个BEEP会话。

  在上面这个模型中, IDXP对等实体之间采用了一个BEEP安全轮廓实现端到端的安全,而无需通过中间的代理建立安全信任,因此,只有IDXP对等体之间是相互信任的,而代理是不可信的。

  公共入侵检测框架(CIDF)

  CIDF所做的工作主要包括四部分:IDS的体系结构、通信机制、描述语言和应用编程接口API。

  一.CIDF的体系结构

  CIDF在IDES和NIDES的基础上提出了一个通用模型,将入侵检测系统分为四个基本组件:事件产生器、事件分析器、响应单元和事件数据库。结构如图5所示。

  在这个模型中,事件产生器、事件分析器和响应单元通常以应用程序的形式出现,而事件数据库则往往是文件或数据流的形式,很多IDS厂商都以数据收集部分、数据分析部分和控制台部分三个术语来分别代替事件产生器、事件分析器和响应单元。

  CIDF将IDS需要分析的数据统称为事件,它可以是网络中的数据包,也可以是从系统日志或其他途径得到的信息。

  以上四个组件只是逻辑实体,一个组件可能是某台计算机上的一个进程甚至线程,也可能是多个计算机上的多个进程,它们以GIDO(统一入侵检测对象)格式进行数据交换。GIDO是对事件进行编码的标准通用格式(由CIDF描述语言CISL定义),GIDO数据流在图5中以虚线表示,它可以是发生在系统中的审计事件,也可以是对审计事件的分析结果。

  

  

  1.事件产生器

  事件产生器的任务是从入侵检测系统之外的计算环境中收集事件,并将这些事件转换成CIDF的GIDO格式传送给其他组件。例如,事件产生器可以是读取C2级审计踪迹并将其转换为GIDO格式的过滤器,也可以是被动地监视网络并根据网络数据流产生事件的另一种过滤器,还可以是SQL数据库中产生描述事务的事件的应用代码。

  2.事件分析器

  事件分析器分析从其他组件收到的GIDO, 并将产生的新GIDO再传送给其他组件。分析器可以是一个轮廓描述工具,统计性地检查现在的事件是否可能与以前某个事件来自同一个时间序列; 也可以是一个特征检测工具,用于在一个事件序列中检查是否有已知的滥用攻击特征;此外,事件分析器还可以是一个相关器,观察事件之间的关系,将有联系的事件放到一起,以利于以后的进一步分析。

  3.事件数据库

  用来存储GIDO,以备系统需要的时候使用。

  4.响应单元

  响应单元处理收到的GIDO,并据此采取相应的措施,如杀死相关进程、将连接复位、修改文件权限等。

  由于CIDF有一个标准格式GIDO,所以这些组件也适用于其他环境,只需要将典型的环境特征转换成GIDO格式,这样就提高了组件之间的消息共享和互通。

  二、CIDF的通信机制

  为了保证各个组件之间安全、高效的通信,CIDF将通信机制构造成一个三层模型:GIDO层、消息层和协商传输层。

  要实现有目的的通信,各组件就必须能正确理解相互之间传递的各种数据的语义,GIDO层的任务就是提高组件之间的互操作性,所以GIDO就如何表示各种各样的事件做了详细的定义。

  消息层确保被加密认证消息在防火墙或NAT等设备之间传输过程中的可靠性。消息层只负责将数据从发送方传递到接收方,而不携带任何有语义的信息;同样,GIDO层也只考虑所传递信息的语义,而不关心这些消息怎样被传递。

  单一的传输协议无法满足CIDF各种各样的应用需求,只有当两个特定的组件对信道使用达成一致认识时,才能进行通信。协商传输层规定GIDO在各个组件之间的传输机制。

  CIDF的通信机制主要讨论消息的封装和传递,主要分为四个方面:

  1. 配对服务

  配对服务采用了一个大型目录服务LDAP(轻量级目录访问协议),每个组件都要到此目录服务进行注册,并通告其他组件它所使用或产生的GIDO类型。在此基础上,组件才能被归入它所属的类别中,组件之间才能互相通信。

  配对服务还支持一些安全选项(如公钥证书、完整性机制等),为各个组件之间安全通信、共享信息提供了一种统一的标准机制,大大提高了组件的互操作性,降低了开发多组件入侵检测与响应系统的难度。

  2. 路由

  组件之间要通信时,有时需经过非透明的防火墙,发送方先将数据包传递给防火墙的关联代理,然后再由此代理将数据包转发到目的地。CIDF采用了两种路由:源路由和绝对路由。

  3. 消息层

  消息层要实现的功能包括:

  (1)提供一个开放的体系结构。

  (2)使消息独立于操作系统、编程语言和网络协议。

  (3)简化向CIDF中增添新组件的过程。

  (4)支持鉴定与保密等安全需求。

  (5)同步(封锁进程与非封锁进程)。

  4. 消息层处理

  消息层处理规定了消息层消息的处理方式,它包括四个规程:标准规程、可靠传输规程、保密规程和鉴定规程。

  三、CIDF语言

  CIDF的总体目标是实现软件的复用和IDR(入侵检测与响应)组件之间的互操作性。首先,IDR组件基础结构必须是安全、健壮、可伸缩的,CIDF的工作重点是定义了一种应用层的语言CISL(公共入侵规范语言),用来描述IDR组件之间传送的信息,以及制定一套对这些信息进行编码的协议。CISL可以表示CIDF中的各种信息,如原始事件信息(审计踪迹记录和网络数据流信息)、分析结果(系统异常和攻击特征描述)、响应提示(停止某些特定的活动或修改组件的安全参数)等。

  CISL使用了一种被称为S表达式的通用语言构建方法,S表达式可以对标记和数据进行简单的递归编组,即对标记加上数据,然后封装在括号内完成编组,这跟LISP有些类似。S表达式的最开头是语义标识符(简称为SID),用于显示编组列表的语义。例如下面的S表达式:

  (HostName ‘first.example.com’)

  该编组列表的SID是HostName,它说明后面的字符串“first.example.com”将被解释为一个主机的名字。

  有时侯,只有使用很复杂的S表达式才能描述出某些事件的详细情况,这就需要使用大量的SID。SID在CISL中起着非常重要的作用,用来表示时间、定位、动作、角色、属性等,只有使用大量的SID,才能构造出合适的句子。CISL使用范例对各种事件和分析结果进行编码,把编码的句子进行适当的封装,就得到了GIDO。

  GIDO的构建与编码是CISL的重点。

  四、CIDF的API接口

  CIDF的API负责GIDO的编码、解码和传递,它提供的调用功能使得程序员可以在不了解编码和传递过程具体细节的情况下,以一种很简单的方式构建和传递GIDO。

  GIDO的生成分为两个步骤:第一,构造表示GIDO的树型结构;第二,将此结构编成字节码。

  在构造树形结构时,SID被分为两组:一组把S表达式作为参数(即动词、副词、角色、连接词等),另一组把单个数据或一个数据阵列作为参数(即原子),这样就可以把一个完整的句子表示成一棵树,每个SID表示成一个节点,最高层的SID是树根。因为每个S表达式都包含一定的数据,所以,树的每个分支末端都有表示原子SID的叶子。

  由于编码规则是定义好的,所以对树进行编码只是一个深度优先遍历和对各个节点依次编码的过程。在这种情况下,我们可以先对V编码,然后对R1子树编码,再对R2子树编码。如果上面的句子是一个连接句的一部分,那么,每个成分句都可以从中完好地提取出来。也就是说,如果句子事先已经编码,在插入到一个连接句时无须再进行编码。

  将字节码进行解码跟上面的过程正好相反,在SID码的第一个字节里有一个比特位显示其需要的参数:是基本数据类型,还是S表达式序列。然后语法分析器再对后面的字节进行解释。CIDF的API并不能根据树构建逻辑GIDO,但提供了将树以普通GIDO的S表达式格式进行打印的功能。

  CIDF的API为实现者和应用开发者都提供了很多的方便,它分为两类:GIDO编码/解码API和消息层API。

    • 评论
    • 分享微博
    • 分享邮件
          邮件订阅

          如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

          重磅专题
          往期文章
          最新文章