導航:首頁 > 源碼編譯 > snort演算法

snort演算法

發布時間:2022-07-18 20:43:11

① 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軟體動態分析

閱讀全文

與snort演算法相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:570
python員工信息登記表 瀏覽:371
高中美術pdf 瀏覽:153
java實現排列 瀏覽:508
javavector的用法 瀏覽:976
osi實現加密的三層 瀏覽:226
大眾寶來原廠中控如何安裝app 瀏覽:906
linux內核根文件系統 瀏覽:235
3d的命令面板不見了 瀏覽:520
武漢理工大學伺服器ip地址 瀏覽:141
亞馬遜雲伺服器登錄 瀏覽:517
安卓手機如何進行文件處理 瀏覽:65
mysql執行系統命令 瀏覽:923
php支持curlhttps 瀏覽:139
新預演算法責任 瀏覽:439
伺服器如何處理5萬人同時在線 瀏覽:244
哈夫曼編碼數據壓縮 瀏覽:419
鎖定伺服器是什麼意思 瀏覽:380
場景檢測演算法 瀏覽:613
解壓手機軟體觸屏 瀏覽:343