① pcre 的匹配算法是什么pcre和snort相比,是不是pcre的匹配速度要快
pcre是正则标准,是一个库,而snort是使用了这个库,他们怎么可以做比较呢
② 求强人帮帮忙翻译下中文摘要(不要粘贴加复制的)
Network intrusion detection technology research and application
With the rapid development of network technology, computer network faces a severe network security situation, such as hacker attacks, internal illegal operation, etc. However, the intrusion detection technology in network security but is everyone's attention, this is because it can quickly and effectively detect various invasion of behavior, and make corresponding measures to ensure the security of the system. As a network and information security areas of an important security technology, it is aimed at network security against phenomenon of a kind of solution, and in the future with the very broad development prospects. At present the computer network to high speed, high broadband technology development, the network intrusion detection technology is also facing a technical bottleneck, how to improve the network intrusion detection detection efficiency, is our present problems to solve. Therefore, the network intrusion detection technology research on network security is very necessary.
This paper firstly summarized the network intrusion detection technology for years the research present situation and the development tendency, and analyzed every hot technology is superior, puts forward the pattern matching method in intrusion detection technology application, to improve the detection efficiency and puts forward an improved AC-BM algorithm. Then the analysis of the present stage of popular network intrusion detection system (Snort), and puts forward several improvement method. At last, according to the intrusion detection system, the misstatement appear omission phenomenon, and put forward a kind of defense technology, so as to make up for the deficiency of the intrusion detection system
③ 我的电脑不能用microsoft word 打开.doc文件怎么办
SNORT源码分析(转自SMTH)
Snort作为一个轻量级的网络入侵检测系统,在实际中应用可能会有些力不从心,但如果想了解研究IDS的工作原理,仔细研究一下它的源码到是非常不错.
首先对snort做一个概括的评论。
从工作原理而言,snort是一个NIDS。[注:基于网络的入侵检测系统(NIDS)在网络的一点被动地检查原始的网络传输数据。通过分析检查的数据包,NIDS匹配入侵行为的特征或者从网络活动的角度检测异常行为。] 网络传输数据的采集利用了工具包libpcap。snort对libpcap采集来的数据进行分析,从而判断是否存在可疑的网络活动。
从检测模式而言,snort基本上是误用检测(misuse detection)。[注:该方法对已知攻击的特征模式进行匹配,包括利用工作在网卡混杂模式下的嗅探器被动地进行协议分析,以及对一系列数据包解释分析特征。顺便说一句,另一种检测是异常检测(anomaly detection)。]具体实现上,仅仅是对数据进行最直接最简单的搜索匹配,并没有涉及更复杂的入侵检测办法。
尽管snort在实现上没有什么高深的检测策略,但是它给我们提供了一个非常
优秀的公开源代码的入侵检测系统范例。我们可以通过对其代码的分析,搞清IDS 究竟是如何工作的,并在此基础上添加自己的想法。
snort的编程风格非常优秀,代码阅读起来并不困难,整个程序结构清晰,函
数调用关系也不算复杂。但是,snort的源文件不少,函数总数也很多,所以不太
容易讲清楚。因此,最好把代码完整看一两遍,能更清楚点。
*****************************************************
*****************************************************
下面看看snort的整体结构。展开snort压缩包,有约50个c程序和头文件,另有约30个其它文件(工程、数据或者说明文件)。[注:这里用的是snort-1.6-beta7。snort-1.6.3不在手边,就用老一点的版本了,差别不大。]下面对源代码文件分组说明。
snort.c(.h)是主程序所在的文件,实现了main函数和一系列辅助函数。
decode.c(.h)把数据包层层剥开,确定该包属于何种协议,有什么特征。并
标记到全局结构变量pv中。
log.c(.h)实现日志和报警功能。snort有多种日志格式,一种是按tcpmp二进制的格式存储,另一种按snort编码的ascii格式存储在日志目录下,日志目录的名字根据"外"主机的ip地址命名。报警有不同的级别和方式,可以记录到syslog中,或者记录到用户指定的文件,另外还可以通过unix socket发送报警消息,以及利用SMB向Windows系统发送winpopup消息。
mstring.c(.h)实现字符串匹配算法。在snort中,采用的是Boyer-Moore算法。算法书上一般都有。
plugbase.c(.h)实现了初始化检测以及登记检测规则的一组函数。snort中的检测规则以链表的形式存储,每条规则通过登记(Register)过程添加到链表中。
response.c(.h)进行响应,即向攻击方主动发送数据包。这里实现了两种响应。一种是发送ICMP的主机不可到达的假信息,另一种针对TCP,发送RST包,断开连接。
rule.c(.h)实现了规则设置和入侵检测所需要的函数。规则设置主要的作用是
把一个规则文件转化为实际运作中的规则链表。检测函数根据规则实施攻击特征的检测。
sp_*_check.c(.h)是不同类型的检测规则的具体实现。很容易就可以从文件名得知所实现的规则。例如,sp_dsize_check针对的是包的数据大小,sp_icmp_type_check针对icmp包的类型,sp_tcp_flag_check针对tcp包的标志位。不再详述。
spo_*.c(.h)实现输出(output)规则。spo_alert_syslog把事件记录到syslog中;spo_log_tcpmp利用libpcap中的日志函数,进行日志记录。
spp_*.c(.h)实现预处理(preprocess)规则。包括http解码(即把http请求中的%XX这样的字符用对应的ascii字符代替,避免忽略了恶意的请求)、最小片断检查(避免恶意利用tcp协议中重组的功能)和端口扫描检测。
********************************************************************************************************** 下面描述main函数的工作流程。先来说明两个结构的定义。
在snort.h中,定义了两个结构:PV和PacketCount。PV用来记录命令行参数,snort根据这些命令行参数来确定其工作方式。PV类型的全局变量pv用来实际记录具体工作方式。结构定义可以参看snort.h,在下边的main函数中,会多次遇到pv中各个域的设定,到时再一个一个解释。
结构PacketCount用来统计流量,每处理一个数据包,该结构类型的全局变量pc把对应的域加1。相当于一个计数器。
接下来解释main函数。
初始化设定一些缺省值;然后解析命令行参数,根据命令行参数,填充结构变量pv;根据pv的值(也就是解析命令行的结果)确定工作方式,需要注意:
如果是运行在Daemon方式,通过GoDaemon函数,创建守护进程,重定向标准输入输出,实现daamon状态,并结束父进程。
snort可以实时采集网络数据,也可以从文件读取数据进行分析。这两种情况并没有本质区别。如果是读取文件进行分析(并非直接从网卡实时采集来的),以该文件名作为libpcap的函数OpenPcap的参数,打开采集过程;如果是从网卡实时采集,就把网卡接口作为OpenPcap的参数,利用libpcap的函数打开该网卡接口。在unix中,设备也被看作是文件,所以这和读取文件分析没有多大的差别。
接着,指定数据包的拆包函数。不同的数据链路网络,拆包的函数也不同。利用函数SetPktProcessor,根据全局变量datalink的值,来设定不同的拆包函数。例如,以太网,拆包函数为DecodeEthPkt;令牌环网,拆包函数为DecodeTRPkt,等等。这些Decode*函数,在decode.c中实现。
如果使用了检测规则,那么下面就要初始化这些检测规则,并解析规则文件,转化成规则链表。规则有三大类:预处理(preprocessor),插件(plugin),输出插件(outputplugin)。这里plugin就是具体的检测规则,而outputplugin是定义日志和报警方式的规则。
然后根据报警模式,设定报警函数;根据日志模式,设定日志函数;如果指定了能够进行响应,就打开raw socket,准备用于响应。
最后进入读取数据包的循环,pcap_loop对每个采集来的数据包都用ProcessPacket函数进行处理,如果出现错误或者到达指定的处理包数(pv.pkt_cnt定义),就退出该函数。这里ProcessPacket是关键程序,
最后,关闭采集过程。
*****************************************************
现在看看snort如何实现对数据包的分析和检测入侵的。
在main函数的最后部分有如下语句,比较重要:
/* Read all packets on the device. Continue until cnt packets read */
if(pcap_loop(pd, pv.pkt_cnt, (pcap_handler)ProcessPacket, NULL) < 0)
{
......
}
这里pcap_loop函数有4个参数,分别解释:
pd是一个全局变量,表示文件描述符,在前面OpenPcap的调用中已经被正确地赋值。前面说过,snort可以实时采集网络数据,也可以从文件读取数据进行分析。在不同情况打开文件(或设备)时,pd分别用来处理文件,或者网卡设备接口。
pd是struct pcap类型的指针,该结构包括实际的文件描述符,缓冲区,等等域,用来处理从相应的文件获取信息。
OpenPcap函数中对pd赋值的语句分别为:
/* get the device file descriptor,打开网卡接口 */
pd = pcap_open_live(pv.interface, snaplen,
pv.promisc_flag ? PROMISC : 0, READ_TIMEOUT, errorbuf);
或者
/* open the file,打开文件 */
pd = pcap_open_offline(intf, errorbuf);
于是,这个参数表明从哪里取得待分析的数据。
第2个参数是pv.pkt_cnt,表示总共要捕捉的包的数量。在main函数初始化时,缺省设置为-1,成为永真循环,一直捕捉直到程序退出:
/* initialize the packet counter to loop forever */
pv.pkt_cnt = -1;
或者在命令行中设置要捕捉的包的数量。前面ParseCmdLine(解析命令行)函数的调用中,遇到参数n,重新设定pv.pkt_cnt的值。ParseCmdLine中相关语句如下:
case 'n': /* grab x packets and exit */
pv.pkt_cnt = atoi(optarg);
第3个参数是回调函数,该回调函数处理捕捉到的数据包。这里为函数
ProcessPacket,下面将详细解释该函数。
第4个参数是字符串指针,表示用户,这里设置为空。
在说明处理包的函数ProcessPacket之前,有必要解释一下pcap_loop的实现。我们看到main函数只在if条件判断中调用了一次pacp_loop,那么循环一定是在pcap_loop中做的了。察看pcap.c文件中pcap_loop的实现部分,我们发现的确如此:
int
pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
{
register int n;
for (; { //for循环
if (p->sf.rfile != NULL)
n = pcap_offline_read(p, cnt, callback, user);
else {
/*
* XXX keep reading until we get something
* (or an error occurs)
*/
do { //do循环
n = pcap_read(p, cnt, callback, user);
} while (n == 0);
}
if (n <= 0)
return (n); //遇到错误,返回
if (cnt > 0) {
cnt -= n;
if (cnt <= 0)
return (0); //到达指定数量,返回
}
//只有以上两种返回情况
}
}
现在看看ProcessPacket的实现了,这个回调函数用来处理数据包。该函数是是pcap_handler类型的,pcap.h中类型的定义如下:
typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
const u_char *);
第1个参数这里没有什么用;
第2个参数为pcap_pkthdr结构指针,记录时间戳、包长、捕捉的长度;
第3个参数字符串指针为数据包。
函数如下:
void ProcessPacket(char *user, struct pcap_pkthdr *pkthdr, u_char *pkt)
{
Packet p; //Packet结构在decode.h中定义,用来记录数据包的各种信息
/* call the packet decoder,调用拆包函数,这里grinder是一个全局
函数指针,已经在main的SetPktProcessor调用中设置为正确的拆包函数 */
(*grinder)(&p, pkthdr, pkt);
/* print the packet to the screen,如果选择了详细显示方式,
那么把包的数据,显示到标准输出 */
if(pv.verbose_flag)
{
...... //省略
}
/* check or log the packet as necessary
如果工作在使用检测规则的方式,就调用Preprocess进行检测,
否则,仅仅进行日志,记录该包的信息*/
if(!pv.use_rules)
{
... //进行日志,省略
}
else
{
Preprocess(&p);
}
//清除缓冲区
ClearDumpBuf();
}
这里Preprocess函数进行实际检测。
****************************************************************************
Proprocess函数很短,首先调用预处理规则处理数据包p,然后调用检测
函数Detect进行规则匹配实现检测,如果实现匹配,那么调用函数CallOutput
Plugins根据输出规则进行报警或日志。函数如下:
void Preprocess(Packet *p)
{
PreprocessFuncNode *idx;
do_detect = 1;
idx = PreprocessList; //指向预处理规则链表头
while(idx != NULL) //调用预处理函数处理包p
{
idx->func(p);
idx = idx->next;
}
if(!p->frag_flag && do_detect)
{
if(Detect(p)) //调用检测函数
{
CallOutputPlugins(p); //如果匹配,根据规则输出
}
}
}
尽管这个函数很简洁,但是在第1行我们看到定义了ProprocessFuncNode
结构类型的指针,所以下面,我们不得不开始涉及到snort的各种复杂
的数据结构。前面的分析,我一直按照程序运行的调用顺序,忽略了许多函
数(其实有不少非常重要),以期描述出snort执行的主线,避免因为程序中
大量的调用关系而产生混乱。到现在,我们还没有接触到snort核心的数据结构
和算法。有不少关键的问题需要解决:规则是如何静态描述的?运行时这些
规则按照什么结构动态存储?每条规则的处理函数如何被调用?snort给了
我们提供了非常好的方法。
snort一个非常成功的思想是利用了plugin机制,规则处理函数并非固定在
源程序中,而是根据每次运行时的参数设定,从规则文件中读入规则,再把每个
规则所需要的处理函数挂接到链表上。实际检测时,遍历这些链表,调用链表上
相应的函数来分析。
snort主要的数据结构是链表,几乎都是链表来链表去。我们下面做个总的
介绍。
我们有必要先回过头来,看一看main函数中对规则初始化时涉及到的一些
数据结构。
在main函数初始化规则的时候,先建立了几个链表,全局变量定义如下
(plugbase.c中):
KeywordXlateList *KeywordList;
PreprocessKeywordList *PreprocessKeywords;
PreprocessFuncNode *PreprocessList;
OutputKeywordList *OutputKeywords;
OutputFuncNode *OutputList;
这几种结构的具体定义省略。这一初始化的过程把snort中预定义的关键
字和处理函数按类别连接在不同的链表上。然后,在解析规则文件的时候,
如果一条规则的选项中包含了某个关键字,就会从上边初始化好的对应的链表
中查找,把必要的信息和处理函数添加到表示这条规则的节点(用RuleTreeNode
类型来表示,下面详述)的特定域(OptTreeNode类型)中。
同时,main函数中初始化规则的最后,对指定的规则文件进行解析。在最
高的层次上,有3个全局变量保存规则(rules.c):
ListHead Alert; /* Alert Block Header */
ListHead Log; /* Log Block Header */
ListHead Pass; /* Pass Block Header */
这几个变量是ListHead类型的,正如名称所说,指示链表头。Alert中登记
了需要报警的规则,Log中登记了需要进行日志的规则,Pass中登记的规则在处
理过程忽略(不进行任何处理)。ListHead定义如下:
typedef struct _ListHead
{
RuleTreeNode *TcpList;
RuleTreeNode *UdpList;
RuleTreeNode *IcmpList;
} ListHead;
可以看到,每个ListHead结构中有三个指针,分别指向处理Tcp/Udp/Icmp包规则的链表头。这里又出现了新的结构RuleTreeNode,为了说明链表的层次关系,下面列出RuleTreeNode的定义,但是忽略了大部分域:
typedef struct _RuleTreeNode
{
RuleFpList *rule_func;
...... //忽略
struct _RuleTreeNode *right;
OptTreeNode *down; /* list of rule options to associate with this
rule node */
} RuleTreeNode;
RuleTreeNode中包含上述3个指针域,分别又能形成3个链表。RuleTreeNode*类型的right指向下一个RuleTreeNode,相当于普通链表中的next域,只不过这里用right来命名。这样就形成了规则链表。
RuleFpList类的指针rule_func记录的是该规则的处理函数的链表。一条规则有时候需要调用多个处理函数来分析。所以,有必要做成链表。我们看看下面的定义,除了next域,还有一个函数指针:
typedef struct _RuleFpList
{
/* rule check function pointer */
int (*RuleHeadFunc)(Packet *, struct _RuleTreeNode *, struct _RuleFpList *);
/* pointer to the next rule function node */
struct _RuleFpList *next;
} RuleFpList;
第3个指针域是OptTreeNode类的指针down,该行后面的注释说的很清楚,这是与这个规则节点相联系的规则选项的链表。很不幸,OptTreeNode的结构也相当复杂,而且又引出了几个新的链表。忽略一些域,OptTreeNode定义如下:
typedef struct _OptTreeNode
{
/* plugin/detection functions go here */
OptFpList *opt_func;
/* the ds_list is absolutely essential for the plugin system to work,
it allows the plugin authors to associate "dynamic" data structures
with the rule system, letting them link anything they can come up
with to the rules list */
void *ds_list[512]; /* list of plugin data struct pointers */
.......//省略了一些域
struct _OptTreeNode *next;
} OptTreeNode;
next指向链表的下一个节点,无需多说。OptFpList类型的指针opt_func指向
选项函数链表,同前面说的RuleFpList没什么大差别。值得注意的是指针数组
ds_list,用来记录该条规则中涉及到的预定义处理过程。每个元素的类型是void*.在实际表示规则的时候,ds_list被强制转换成不同的预定义类型。
--------------------------------------------------------------------------------------
Proprocess函数很短,首先调用预处理规则处理数据包p,然后调用检测
函数Detect进行规则匹配实现检测,如果实现匹配,那么调用函数CallOutput
Plugins根据输出规则进行报警或日志。函数如下:
void Preprocess(Packet *p)
{
PreprocessFuncNode *idx;
do_detect = 1;
idx = PreprocessList; //指向预处理规则链表头
while(idx != NULL) //调用预处理函数处理包p
{
idx->func(p);
idx = idx->next;
}
if(!p->frag_flag && do_detect)
{
if(Detect(p)) //调用检测函数
{
CallOutputPlugins(p); //如果匹配,根据规则输出
}
}
}
尽管这个函数很简洁,但是在第1行我们看到定义了ProprocessFuncNode
结构类型的指针,所以下面,我们不得不开始涉及到snort的各种复杂
的数据结构。前面的分析,我一直按照程序运行的调用顺序,忽略了许多函
数(其实有不少非常重要),以期描述出snort执行的主线,避免因为程序中
大量的调用关系而产生混乱。到现在,我们还没有接触到snort核心的数据结构
和算法。有不少关键的问题需要解决:规则是如何静态描述的?运行时这些
规则按照什么结构动态存储?每条规则的处理函数如何被调用?snort给了
我们提供了非常好的方法。
snort一个非常成功的思想是利用了plugin机制,规则处理函数并非固定在
源程序中,而是根据每次运行时的参数设定,从规则文件中读入规则,再把每个
规则所需要的处理函数挂接到链表上。实际检测时,遍历这些链表,调用链表上
相应的函数来分析。
snort主要的数据结构是链表,几乎都是链表来链表去。我们下面做个总的
介绍。
我们有必要先回过头来,看一看main函数中对规则初始化时涉及到的一些
数据结构。
在main函数初始化规则的时候,先建立了几个链表,全局变量定义如下
(plugbase.c中):
KeywordXlateList *KeywordList;
PreprocessKeywordList *PreprocessKeywords;
PreprocessFuncNode *PreprocessList;
OutputKeywordList *OutputKeywords;
OutputFuncNode *OutputList;
这几种结构的具体定义省略。这一初始化的过程把snort中预定义的关键
字和处理函数按类别连接在不同的链表上。然后,在解析规则文件的时候,
如果一条规则的选项中包含了某个关键字,就会从上边初始化好的对应的链表
中查找,把必要的信息和处理函数添加到表示这条规则的节点(用RuleTreeNode
类型来表示,下面详述)的特定域(OptTreeNode类型)中。
同时,main函数中初始化规则的最后,对指定的规则文件进行解析。在最
高的层次上,有3个全局变量保存规则(rules.c):
ListHead Alert; /* Alert Block Header */
ListHead Log; /* Log Block Header */
ListHead Pass; /* Pass Block Header */
这几个变量是ListHead类型的,正如名称所说,指示链表头。Alert中登记
了需要报警的规则,Log中登记了需要进行日志的规则,Pass中登记的规则在处
理过程忽略(不进行任何处理)。ListHead定义如下:
typedef struct _ListHead
{
RuleTreeNode *TcpList;
RuleTreeNode *UdpList;
RuleTreeNode *IcmpList;
} ListHead;
可以看到,每个ListHead结构中有三个指针,分别指向处理Tcp/Udp/Icmp包规则的链表头。这里又出现了新的结构RuleTreeNode,为了说明链表的层次关系,下面列出RuleTreeNode的定义,但是忽略了大部分域:
typedef struct _RuleTreeNode
{
RuleFpList *rule_func;
...... //忽略
struct _RuleTreeNode *right;
OptTreeNode *down; /* list of rule options to associate with this
rule node */
} RuleTreeNode;
RuleTreeNode中包含上述3个指针域,分别又能形成3个链表。RuleTreeNode*
类型的right指向下一个RuleTreeNode,相当于普通链表中的next域,只不过这里用right来命名。这样就形成了规则链表。
RuleFpList类的指针rule_func记录的是该规则的处理函数的链表。一条规则有时候需要调用多个处理函数来分析。所以,有必要做成链表。我们看看下面的
定义,除了next域,还有一个函数指针:
typedef struct _RuleFpList
{
/* rule check function pointer */
int (*RuleHeadFunc)(Packet *, struct _RuleTreeNode *, struct _RuleFpList *);
/* pointer to the next rule function node */
struct _RuleFpList *next;
} RuleFpList;
第3个指针域是OptTreeNode类的指针down,该行后面的注释说的很清楚,这是与这个规则节点相联系的规则选项的链表。很不幸,OptTreeNode的结构也相当复杂,而且又引出了几个新的链表。忽略一些域,OptTreeNode定义如下:
typedef struct _OptTreeNode
{
/* plugin/detection functions go here */
OptFpList *opt_func;
/* the ds_list is absolutely essential for the plugin system to work,
it allows the plugin authors to associate "dynamic" data structures
with the rule system, letting them link anything they can come up
with to the rules list */
void *ds_list[512]; /* list of plugin data struct pointers */
.......//省略了一些域
struct _OptTreeNode *next;
} OptTreeNode;
next指向链表的下一个节点,无需多说。OptFpList类型的指针opt_func指向选项函数链表,同前面说的RuleFpList没什么大差别。值得注意的是指针数组
ds_list,用来记录该条规则中涉及到的预定义处理过程。每个元素的类型是void*。在实际表示规则的时候,ds_list被强制转换成不同的预定义类型。
④ IDS 驱动程序是什么
智能驱动系统IDS
IDS从诞生之日起,便不断为提高自身的性能以适应迅速增长的网络流量而努力。中国的千兆IDS是启明星辰公司首家推出并通过权威部门的测试认证的,这是其“六年磨一剑”的体现,是一种技术上的大突破。但是这是需要一个过程的,没有大规模应用的基础,没有广泛的经验积累,没有持续的技术研究,也不可能“忽如一夜春风来,千树万树梨花开”。那么广泛宣传的千兆IDS必然存在着鱼目混珠,我们来看看这其中的亮点和谎言。
千兆IDS几大亮点
1、“零拷贝”
“零拷贝”是今年的国内入侵检测厂商一大流行词。
其技术原理如下:
传统的处理网络数据包的方式由于网卡驱动程序运行在内核空间,当网卡收到包以后,包会存放在内核空间内,由于上层应用运行在用户空间,无法直接访问内核空间,因此要通过系统调用往上层应用系统送,这时候会发生一次复制过程。同时这个过程常常还伴随着一次从抓包库到检测引擎的复制过程。如果对于一般应用来说,很少的操作来处理网络通信,这样的系统开销还可以忍受,但是对于入侵检测系统这样大量读取网络数据包的应用来说,这样的开销就很难忍受了。
“零拷贝”技术是指网卡驱动程序共享一段内存区域,当网卡抓到数据包以后直接写到共享内存,这样的一个处理过程减少了至少一次复制。同时减少了一次网卡驱动程序向用户空间复制网络数据包的系统调用。而一次系统调用的开销其实是相当大的,对于入侵检测系统来说由于要频繁地跟内核空间的网卡驱动程序打交道,因此按传统方法会造成大量的系统调用,从而导致系统的性能下降。但是采用了“零拷贝”技术后有效的避免了这一点。
“零拷贝”是不是就是千兆IDS?其实从上面的技术原理我们就可以很清晰的看出,“零拷贝”的应用对高流量下的入侵检测来说确实是一个技术上的突破,表现形式是专用的网卡驱动程序。但是本质上说来,“零拷贝”解决的是抓包带来的性能问题,而对千兆IDS来说,抓包是一个制约因素,但对数据包的分析又是另外一个制约因素,“零拷贝”只解决了其中一个方面,所以仅仅只有“零拷贝”技术并不是千兆IDS。
因此,我们在看到如果某个入侵检测产品仅仅是多了一个专用的网卡驱动程序,那么还不能称为千兆IDS。
2、“负载均衡”
单机无法解决的问题,人们通常首先会想到叠加的方法,于是有了负载均衡;“负载均衡”是应对单个处理设备在超出了处理能力的高流量环境下,将负荷均衡到多个处理设备上来分摊处理,一般用于路由器、防火墙、应用服务器等重要的网络干网设备,应用于IDS也是一种解决方案。
负载均衡虽然一定程度上解决了高速网络环境的检测问题,但仍然不是最佳的解决方案,因为有几个问题是负载均衡技术必须面对和解决的:
一般情况,负载均衡器是按照某种规则(如协议或者IP地址)来分流数据,那么当来自于一个IP地址的数据或某种应用服务流量突然增加的时候,负载均衡器如果不能够智能地进行分流,则对口负责的 IDS则不堪重负;如果负载均衡器又做了流量均衡,混在其中攻击信息也有可能被分流,而对应的IDS又可能没有配置相应的攻击检测策略而漏过检测。
此外,对于判断不同攻击模式之间的行为关联性,由于分流也将无法识别。最后,目前的负载分流一般是利用专用硬件设备,其主要提供商是国外厂家,其价格自然不菲,再加上多个百兆入侵检测,一方面占用更多的机架空间,管理麻烦;另一方面,用户额外安全投资也增加了
靠把千兆流量分流到多个百兆IDS只是在没有真正意义上千兆IDS出现前的一种解决方案,千兆防火墙的发展也证明了这点。于是人们的目光还是回到了入侵检测的技术本身的提高上来。否则等到万兆级别的网络出现,是不是还要来多个万兆负载均衡的IDS呢?
3、“协议分析”
“协议分析”应当是目前绝大多数IDS所宣称采用的。协议分析的原理就是根据现有的协议模式,到固定的位置取值而不是一个个的去比较,然后根据取得的值来判断其协议以及实施下一步分析动作。其作用十分类似于邮局的邮件自动分捡设备,有效的提高了分析效率,同时还可以避免了单纯模式匹配带来的误报。
对千兆IDS 来说,协议分析不仅仅是判断是什么协议那么简单了。要提高其性能和准确性,必须做到更深层次的协议分析,如:高层协议的数据字段的取值。因此,千兆IDS 采用的“协议分析”,就是要求更为完整的协议分析,尽可能的缩减模式匹配的范围。
4、“匹配算法”
现有的商业入侵检测系统在做完了协议分析后,接下来就是如何去进行模式匹配了。模式匹配就是进行字符串的比较,这就涉及到一个算法的问题。因此,一般在千兆IDS中都会声称其采用了高效的算法。这个高效的算法通常就是BM算法(或改进的)。这种算法是字符串匹配领域十分常用的方法,广泛的应用于文本编辑器的字符串搜索之中,可以有效的提高单条规则匹配报文的匹配效率。
没有采高效算法的入侵检测的效率是无法想象的,但是在千兆的高速流量下,单纯的单条规则匹配报文的匹配效率提高也不能完全适应其要求,特别是现在的入侵检测的规则模式在不断增加,对每一个数据包其可能要匹配的次数也在不断增加,因此其性能也无法完全满足。
真正的高效是要结合“匹配算法”和“规则结构”,做到匹配效率和规则数量的无关性,甚至规则越多,效率越高。从目前看来,真正在这方面的突破是体现在启明星辰的“天阗”千兆入侵检测系统上的。
5、“高性能硬件”
软件的表现要依赖其所处的硬件平台,国内的入侵检测产品往往将其引擎安装在固定的硬件设备上。因此,从外观上,千兆IDS比百兆IDS显的更上档次,从内部配置上,其CPU、内存等重要部件上规格也更高一些。例如,采用多CPU 方式是可以把多个线程分配到不同的CPU上处理来提高性能。采用“高性能硬件”是可以进一步提高入侵检测的能力,但绝对不是主要因素。因此,如果发现某个千兆入侵检测产品只是比百兆入侵检测多了一块千兆网卡,硬件配置又高一些,那就不要把其当作千兆IDS,其正确名称是“可以接入到千兆环境下的IDS”。
千兆IDS的几大谎言
1、 千兆检测特征达到1800种
不知道从什么时候开始,入侵检测特征成了一个放卫星式的指标,似乎特征越多其产品能力越强,因此也就出现了如下的现象:对某个号称其特征数为1800种的入侵检测产品,我们惊奇的发现,其自身控制台和引擎之间的控制信息也列入其中,数量有60条之多;还有对某一个后门,其特征被细化了有50条之多。原来,入侵检测特征是这么加到这个数量的。不知道这样的检测特征在千兆环境下有什么用?
2、 多个高速网段的同时监控
目前双网卡探测技术仅仅适用于非常低带宽的网络环境(例如:ISS公司在其Realsecure 的最新版本的系统需求手册中明确指出:支持在一台主机上安装两个其network_sensor,但只允许在带宽非常低的网络;安装三块网卡和三个network_sensor监控三个网络也可以,但我们不支持这种安装和维护服务。)。也就是说在现在通用的硬件架构和操作系统的条件下,当两块网卡同时抓包并进行分析的时候,其消耗的系统资源远远大于用一块网卡来分析两块网卡的合流量。尤其在高速网络(千兆)中应用,其性能影响更为明显。当然,如果基于RISC的结构,并将抓包和协议分析的技术在专用的硬件芯片中实现,应该是有一定程度的提高。遗憾的是目前国际、国内的入侵检测厂商都没有实现,原因是芯片技术有技术壁垒和垄断,单独开发其成本必然很高。
所以可以相信要实现双网卡探测正常流量下工作,这还是有很长的路要走。现在多个高速网段的同时监控,如果不指明其适用环境,不能不说是对用户的欺骗。
3、 监控的最大TCP连接数
TCP最大连接数原本是防火墙的一个指标,现在被某些入侵检测厂商引入做为一个入侵检测的指标,并通过其大小来比拼产品优势。最新的一个数据是,某入侵检测产品在千兆的白皮书中声称的最大TCP连接数是50万。
支持的TCP连接数的多少主要不在于程序的实现上的差别,可以简单修改配置。影响其数量主要在于系统内存的大小。计算方法是:
最大连接数 × 每连接使用的缓冲区大小 = 内存占用
比如:如果我们每一个连接使用4k的缓冲区进行处理,那么维持10000个的tcp连接数意味着最大连接情况下的内存占用是4k*10000=40M
如何提高连接数的方法有两种:提高内存容量是一种很容易理解的方法。假如说内存占用数不变的情况下,我们可以通过减少每连接使用的缓冲区的大小,来提高最大连接数。(如果是600M内存空间,我们将缓冲区大小减少为0.5k,那么最大连接数可以到1200k)。但是如果每连接使用的缓冲区太小,会影响检测的准确程度,导致漏报,所以一般2k、4k是相对合理的大小。
用TCP最大连接数多少来比较两个ids系统的能力,也是一种谎言吧!
4、 检测规则升级
现在防病毒产品的升级周期基本上是每周一次,而有些入侵检测厂商也基本和防病毒升级保持了同步。在细看看其检测规则,原来是使用snort的规则。大家都知道snort规则是免费发布的,只要有时间从网上去下载就可以了,根本不需要投入专门的人力去分析研究。由此,数量是有保证的,升级也是有保证的。但是snort本身只是一个轻量级的入侵检测系统,又如何指望能够在高速网上使用呢?
5、 网络内容实时回放
有一部分入侵检测厂商主要功能是把HTTP、FTP以及邮件信息全部给抓下来,管理员可以随时看别人网上信息的内容。这一项功能对某些用户是十分有诱惑力的。但是,入侵检测本身是对网络信息进行检测,发现其中包含的入侵行为和违规行为上报。而对于上网、邮件发送通常是正常行为,把这些信息完整回放出来未免是有侵犯隐私权和泄密的可能。同时,由于网上信息也大部分是这种正常行为,记录这些信息会消耗大量资源,降低性能,在高速IDS上如果也采用这种回放无疑是灾难性的。
因此,在涉密网中,这种网络内容实时回放是不收欢迎的。
6、 事件追踪分析和处理
看了某个国内厂商在其产品资料中宣称的可以对入侵事件进行追踪分析和处理,顿生敬佩之意。要知道,网络IDS 的一大难点就是对入侵事件进行主动的追踪分析以及校验。看完了其产品的实际功能才知道,所谓“追踪分析和处理”就是把一些小工具集成到产品中,可以对源地址进行ping、telnet以及tracert等操作,仅此而已。
7、 千兆IDS产品的资质
通过国家的权威测试和认证是有个过程的。不少入侵检测厂商一推出千兆的入侵检测系统后,就声称拥有国家的权威资质。事实上,一些厂商是用百兆产品的资质去模糊千兆产品。在这个时候,这些厂商就把千兆IDS看作是可以安装于在千兆环境下的IDS了,不去强调其中的技术和性能上的区别了。
用户的网络环境向高速化方向发展是一个必然的趋势,如千兆网络交换设备、千兆级网络防火墙等等,传统的百兆网络入侵检测产品无法适应现有的网络结构;因此,人们迫切需要速度更快、功能更好、性能更强的入侵检测系统,来适应在高速环境下的提高网络安全防护水平。同时,在高速的流量环境下,用户对网络入侵识别的确定性提出了更高的要求,既不能漏过重要的攻击事件,也不能出现大量纷繁复杂的报警而使管理员要花费大量时间来从中寻找与重点防护资产有关的问题。因此对高速入侵检测系统的信息分析能力和策略控制能力又是一个重要的挑战。
目前,国内已有数家网络安全厂商推出或私下表示具备了千兆的入侵检测系统,也许有些产品还需要不断改进,也许有些产品在功能和性能上和用户需求还是存在一定的差异,也许甚至只是技术上接近而没有最终形成产品,这都不是最重要的,只要是踏踏实实的进行长期的研究探索,进行持续的技术创新和功能改进,用经过实际检验的数字说话,也必将为推动我国的具有民族自主知识产权的高性能网络安全产品的发展起到良好的作用。
但是,我们不希望某些入侵检测厂商在为了宣传而在其中夹杂太多的谎言,企图利用用户对入侵检测技术内幕的不了解来推销其产品或是利用玩价格游戏来搞不良竞争,无论是对入侵检测的用户还是对入侵检测的整个产业都是致命的。
“路漫漫其修远兮,吾将上下而求索”,屈原的这个千古名句无疑是给入侵检测厂商的最好的诤言。
⑤ 如何将snort检测算法改为bm算法
当今对计算机网络的攻击已经成为很严重的问题。防火墙作为主要的安全防范手段,在很多方面存在弱点,而入侵检测系统能够自动的监控网络的数据流,迅速发现攻击,对可疑的事件给予检测和响应。下面对Snort的体系结构、规则的解析与检测流程进行研究,阐述了Snort在网络入侵检测方
⑥ snort日志输出插件
去CSDN论坛找吧,网络上没人理你的。
⑦ snort 为什么 不使用 ac-bm算法
sqlplus / as sysdba
startup
这些命令在linux下是好用的
但是在windows下只要启动了oracle服务,数据库就已经被启动了,即使你使用shutdown关闭数据库后你要想再重新启动oracle必须先关闭win服务在启动才可以,使用startup是不可以的。
// 函数:int* MakeSkip(char *, int)
// 目的:根据坏字符规则做预处理,建立一张坏字符表
// 参数:
// ptrn => 模式串P
// PLen => 模式串P长度
// 返回:
// int* - 坏字符表
int* MakeSkip(char *ptrn, int pLen)
{
int i;
//为建立坏字符表,申请256个int的空间
//PS:之所以要申请256个,是因为一个字符是8位,
// 所以字符可能有2的8次方即256种不同情况
int *skip = (int*)malloc(256*sizeof(int));
if(skip == NULL)
{
fprintf(stderr, "malloc failed!");
return 0;
}
⑧ 计算机信息安全技术的主要课程
1.1威胁计算机信息安全的因素
1.2计算机信息安全研究的内容
1.2.1计算机外部安全
1.2.2计算机内部安全
1.2.3计算机网络安全
1.3OSI信息安全体系
1.3.1安全服务
1.3.2安全机制
1.4计算机系统的安全策略
1.4.1安全策略
1.4.2人、制度和技术之间的关系
1.5计算机系统的可靠性
1.5.1避错和容错
1.5.2容错设计
1.5.3故障恢复策略
习题1 2.1密码技术概述
2.2古典加密方法
2.2.1代替密码
2.2.2换位密码
2.2.3对称加密体制
2.3数据加密标准DES
2.3.1DES算法描述
2.3.2DES算法加密过程
2.3.3DES算法解密过程
2.3.4三重DES算法
2.4高级加密标准AES
2.4.1AES算法数学基础
2.4.2AES算法概述
2.4.3AES算法加密过程
2.4.4AES算法解密过程
2.4.5AES算法安全性
2.5公开密钥体制
2.6RSA算法
2.6.1RSA算法数学基础
2.6.2RSA算法基础
2.6.3RSA算法过程
2.6.4RSA算法安全性
2.7NTRU算法
2.7.1NTRU算法数学基础
2.7.2NTRU算法描述
2.7.3NTRU算法举例
2.8对称加密体制与公开密钥体制比较
2.9信息隐藏技术
2.10数字水印
2.10.1数字水印的通用模型
2.10.2数字水印主要特性
2.10.3数字水印分类
2.10.4典型数字水印算法
2.10.5数字水印应用
2.10.6数字水印攻击
习题2 3.1数字签名概述
3.1.1数字签名原理
3.1.2数字签名标准DSS
3.1.3PGP电子邮件加密
3.2单向散列函数
3.2.1单向散列函数特点
3.2.2MD5算法
3.2.3SHA算法
3.2.4SHA-1与MD5的比较
3.3Kerberos身份验证
3.3.1什么是Kerberos
3.3.2Kerberos工作原理
3.4公开密钥基础设施PKI
3.4.1数字证书
3.4.2PKI基本组成
3.4.3对PKI的性能要求
3.4.4PKI的标准
3.5用户ID与口令机制
3.5.1用户认证ID
3.5.2不安全口令
3.5.3安全口令
3.5.4口令攻击
3.5.5改进方案
3.6生物特征识别技术
3.6.1生物特征识别系统组成
3.6.2指纹识别
3.6.3虹膜识别
3.6.4其他生物识别技术
3.7智能卡
习题3 4.1计算机病毒概述
4.1.1计算机病毒的定义
4.1.2计算机病毒的特征
4.1.3计算机病毒的产生原因
4.1.4计算机病毒的传播途径
4.1.5计算机病毒的分类
4.1.6计算机病毒的表现现象
4.1.7计算机病毒程序的一般构成
4.2计算机病毒制作技术
4.3计算机杀毒软件制作技术
4.4蠕虫病毒分析
4.5特洛伊木马
4.5.1黑客程序与特洛伊木马
4.5.2木马的基本原理
4.5.3特洛伊木马的启动方式
4.5.4特洛伊木马端口
4.5.5特洛伊木马的隐藏
4.5.6特洛伊木马分类
4.5.7特洛伊木马查杀
4.6计算机病毒与黑客的防范
习题4 5.1网络安全漏洞
5.2目标探测
5.2.1目标探测的内容
5.2.2目标探测的方法
5.3扫描概念和原理
5.3.1扫描器概念
5.3.2常用端口扫描技术
5.3.3防止端口扫描
5.4网络监听
5.4.1网络监听原理
5.4.2网络监听检测与防范
5.4.3嗅探器Sniffer介绍
5.5缓冲区溢出
5.5.1缓冲区溢出原理
5.5.2缓冲区溢出攻击方法
5.5.3防范缓冲区溢出
5.6拒绝服务
5.6.1拒绝服务DDoS
5.6.2分布式拒绝服务DDoS
5.6.3DDoS攻击的步骤
5.6.4防范DDoS攻击的策略
5.7欺骗攻击与防范
5.7.1IP欺骗攻击与防范
5.7.2IP地址盗用与防范
5.7.3DNS欺骗与防范
5.7.4Web欺骗与防范
5.8网络安全服务协议
5.8.1安全套接层协议SSL
5.8.2传输层安全协议TLS
5.8.3安全通道协议SSH
5.8.4安全电子交易SET
5.8.5网际协议安全IPSec
5.9无线网安全
5.9.1IEEE802.11b安全协议
5.9.2IEEE802.11i安全协议
5.9.3WAPI安全协议
5.9.4扩展频谱技术
习题5 6.1防火墙概述
6.1.1防火墙的概念
6.1.2防火墙的主要功能
6.1.3防火墙的基本类型
6.2防火墙的体系结构
6.2.1筛选路由器结构
6.2.2双宿主主机结构
6.2.3屏蔽主机网关结构
6.2.4屏蔽子网结构
6.3防火墙技术
6.3.1包过滤技术
6.3.2代理服务技术
6.3.3电路层网关技术
6.3.4状态检测技术
6.4分布式防火墙
6.4.1传统边界式防火墙
6.4.2分布式防火墙概述
6.4.3分布式防火墙组成
6.4.4分布式防火墙工作原理
6.5防火墙安全策略
6.5.1防火墙服务访问策略
6.5.2防火墙设计策略
6.6Windows XP防火墙
6.7防火墙的选购
6.8个人防火墙程序设计介绍
习题6 7.1入侵检测系统概述
7.2入侵检测一般步骤
7.3入侵检测系统分类
7.3.1根据系统所检测的对象分类
7.3.2根据数据分析方法分类
7.3.3根据体系结构分类
7.4入侵检测系统关键技术
7.5入侵检测系统模型介绍
7.5.1分布式入侵检测系统
7.5.2基于移动代理的入侵检测系统
7.5.3智能入侵检测系统
7.6入侵检测系统标准化
7.6.1入侵检测工作组IDWG
7.6.2通用入侵检测框架CIDF
7.7入侵检测系统Snort
7.8入侵检测产品选购
习题7 8.1数字取证概述
8.2电子证据
8.2.1电子证据的概念
8.2.2电子证据的特点
8.2.3常见电子设备中的电子证据
8.3数字取证原则和过程
8.3.1数字取证原则
8.3.2数字取证过程
8.4网络取证技术
8.4.1网络取证概述
8.4.2网络取证模型
8.4.3IDS取证技术
8.4.4蜜阱取证技术
8.4.5模糊专家系统取证技术
8.4.6SVM取证技术
8.4.7恶意代码技术
8.5数字取证常用工具
习题8 9.1操作系统的安全性
9.1.1操作系统安全功能
9.1.2操作系统安全设计
9.1.3操作系统的安全配置
9.1.4操作系统的安全性
9.2Windows安全机制
9.2.1Windows安全机制概述
9.2.2活动目录服务
9.2.3认证服务
9.2.4加密文件系统
9.2.5安全模板
9.2.6安全账号管理器
9.2.7其他方面
9.3Windows安全配置
9.4UNIX安全机制
9.5Linux安全机制
9.5.1PAM机制
9.5.2安全审计
9.5.3强制访问控制
9.5.4用户和文件配置
9.5.5网络配置
9.5.6Linux安全模块LSM
9.5.7加密文件系统
9.6Linux安全配置
习题9 10.1数据备份概述
10.2系统数据备份
10.2.1磁盘阵列RAID技术
10.2.2系统还原卡
10.2.3克隆大师Ghost
10.2.4其他备份方法
10.3用户数据备份
10.3.1Second Copy 2000
10.3.2File Genie 2000
10.4网络数据备份
10.4.1网络备份系统
10.4.2DAS直接连接存储
10.4.3NAS网络连接存储
10.4.4SAN存储网络
10.4.5IP存储技术
10.4.6数据迁移技术
10.5数据恢复
10.5.1数据恢复概述
10.5.2硬盘数据恢复
10.5.3EasyRecovery
10.5.4FinalData
习题10 11.1软件保护技术概述
11.2静态分析技术
11.2.1文件类型分析
11.2.2W32Dasm
11.2.3IDA Pro简介
11.2.4可执行文件代码编辑工具
11.2.5可执行文件资源编辑工具
11.3动态分析技术
11.3.1SoftICE调试器
11.3.2OllyDbg调试器
11.4常用软件保护技术
11.4.1序列号保护机制
11.4.2警告(NAG)窗口
11.4.3时间限制
11.4.4时间段限制
11.4.5注册保护
11.4.6功能限制
11.4.7光盘软件保护
11.4.8软件狗
11.4.9软盘保护技术
11.4.10反跟踪技术
11.4.11网络软件保护
11.4.12补丁技术
11.5软件加壳与脱壳
11.5.1“壳”的概念
11.5.2“壳”的加载
11.5.3软件加壳工具介绍
11.5.4软件脱壳
11.6设计软件保护的建议
习题11 实验1加密与隐藏
实验2破解密码
实验3网络漏洞扫描
实验4“冰河”黑客工具
实验5网络监听工具Sniffer
实验6个人防火墙配置
实验7入侵检测软件设置
实验8Windows 2000/XP/2003安全设置
实验9系统数据备份
实验10用户数据备份
实验11数据恢复
实验12软件静态分析
实验13资源编辑工具
实验14软件动态分析