隨著對網絡安全需求的深入開發,基于網絡的入侵檢測技術已經成為一個重要且有意思的研究方向。想學習NIDS技術除了去讀一些現成的資料和一些開源系統的源碼,最好的辦法莫過于自己去寫一個NIDS程序,只有那樣才能真正體會到一些NIDS的實現需求和設計妙處。
本質上說NIDS只是一種網絡流量的分析工具,通過對網絡流量的分析識別出一些已知或未知的攻擊行為,一個最簡單的NIDS完成的主要工作也就是抓包->協議解碼->匹配,眾所周知PERL是極其強大的腳本語言,尤其是它的字符串處理能力可以方便地實現對于網絡流量中惡意特征進行匹配。當然PERL畢竟只是腳本語言,它的執行效率不允許用于真正大流量生產性環境,但PERL的簡單易學及強大功能對于實現一個簡單的NIDS達到學習的目的無疑是非常好的,下面我介紹一個用PERL實現的簡單NIDS框架,我們將在Linux下實現它,在其他操作系統上類似。
PERL的一個強大特性就在于它海量的CPAN模塊庫,很多你想實現的功能都可以找到現成的模塊,你所要做的只是安裝上那些模塊即可,關于PERL的模塊及面向對象特性的管理和使用在這就不介紹了,請參看相關資料,比如O'REILLY出版的《高級Perl編程》。在用PERL編寫網絡流量分析腳本之前,需要安裝一些底層的抓包及基本的數據包解碼模塊,包括如下這些:
http://www.tcpdump.org/release/libpcap-0.8.1.tar.gz
底層基本的抓包庫。
http://www.cpan.org/authors/id/T/TI/TIMPOTTER/Net-Pcap-0.04.tar.gz
libpcap的PERL接口。
http://www.cpan.org/authors/id/T/TI/TIMPOTTER/Net-PcapUtils-0.01.tar.gz
Net-Pcap模塊的wrapper,包裝Net-Pcap的函數,可以更方便地在PERL里調用抓包。
http://www.cpan.org/authors/id/T/TI/TIMPOTTER/NetPacket-0.03.tar.gz
用于基本的IP/TCP/UDP等包解碼的模塊,剝除各種協議頭,抽取各個字段。
下面的代碼演示了一個帶有基本SMB和FTP協議解碼模塊的最簡單NIDS框架,此程序實現最簡單的NIDS功能,面向單包,不關心包的狀態,不具備高級的商業NIDS產品諸如流重組,包狀態及應用層協議的跟蹤等功能。為了提高檢測的準確性,與Snort直接匹配數據區不同的是,這個腳本實現了兩個應用層協議:SMB、FTP的簡單解碼,解碼完全是面向NIDS的需要,代碼也沒有經過仔細的測試可能存在問題。
(一)perl-ids.pl 實現抓包及檢測分析的主程序。
代碼如下:
#!/usr/bin/perl
#
# Comments/suggestions to stardust at xfocus dot org
#
#
# $Id: perl-ids.pl,v 1.16 2004/03/04 21:51:12 stardust Exp $
#
# 引用所有相關的模塊
use Net::PcapUtils;
use NetPacket::Ethernet qw(:strip);
use NetPacket::TCP;
use NetPacket::IP qw(:protos);
use NetPacket::SMB;
use NetPacket::FTP;
# 定義日志文件名
新聞熱點
疑難解答