Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)之二
struct arphdr
{
unsigned short int ar_hrd;
unsigned short int ar_pro;
unsigned char ar_hln;
unsigned char ar_pln;
unsigned short int ar_op;
#if 0
unsigned char _ar_sha[ETH_ALEN];
unsigned char _ar_sip[4];
unsigned char _ar_tha[ETH_ALEN];
unsigned char _ar_tip[4];
#end if
};
這是linux 的arp 協(xié)議報(bào)頭,其中ar_hrd 是硬件地址的格式,ar_pro協(xié)議地址的格式,ar_hln是硬件地址的長(zhǎng)度,ar_pln時(shí)協(xié)議地址的長(zhǎng)度,ar_op是arp協(xié)議的分類0x001是arp echo 0x0002 是 arp reply.接下來的分別是源地址的物理地址,源ip地址,目標(biāo)地址的物理地址,目標(biāo)ip地址。
Tcphdr ip協(xié)議的tcp協(xié)議報(bào)頭
以下是相應(yīng)數(shù)據(jù)結(jié)構(gòu):
struct tcphdr
{
u_int16_t source;
u_int16_t dest;
u_int32_t seq;
u_int32_t ack_seq;
# if _BYTE_ORDER == _LITTLE _ENDIAN
u_int16_t resl:4;
u_int16_t doff:4;
u_int16_t fin:1;
u_int16_t syn:1;
u_int16_t rst:1;
u_int16_t psh:1;
u_int16_t ack:1;
u_int16_t urg:1;
u_int16_t res2:2;
#elif _BYTE _ORDER == _BIG _ENDIAN
u_int16_t doff:4;
u_int16_t res1:4;
u_int16_t res2:2;
u_int16_t urg:1;
u_int16_t ack:1;
u_int16_t psh:1;
u_int16_t rst:1;
u_int16_t syn:1;
u_int16_t fin:1;
#else
#error "Adjust your defines"
#endif
u_int16_t window;
u_int16_t check;
u_int16_t urg_ptr;
};
這是Linux 下tcp協(xié)議的一部分與ip協(xié)議相同取BIG,其中source是源端口,dest 是目的端口,seq是s序,ack_seq是a序號(hào),其余的是tcp的連接標(biāo)志其中包括6個(gè)標(biāo)志:syn表示連接請(qǐng)求,urg 表示緊急信息,fin表示連接結(jié)束,ack表示連接應(yīng)答,psh表示推棧標(biāo)志,rst表示中斷連接。window是表示接受數(shù)據(jù)窗口大小,check是校驗(yàn)碼,urg ptr是緊急指針。
Udphdr 這是udp協(xié)議報(bào)頭
struct udphdr {
u_int16_t source;
u_int16_t dest;
u_int16_t len;
u_int16_t check;
}
這是Linux下ip協(xié)議中udp協(xié)議的一部分,結(jié)構(gòu)很明顯 source 源端口,dest目的端口,len udp 長(zhǎng)度,check 是校驗(yàn)碼。
Icmphdr 這是ip協(xié)議的icmp協(xié)議的報(bào)頭
struct icmphdr
{
u_int8_t type;
u_int8_t code;
u_int16_t checksum;
union
{
struct
{
u_int16_t id;
u_int16_t sequence;
} echo;
u_int32_t gateway;
struct
{
u_int16_t_unused;
u_int16_t mtu;
} frag;
} un;
};這是linux下的ip協(xié)議中的icmp的協(xié)議,這里面主要的是前兩項(xiàng)參數(shù),其中type是icmp協(xié)議的類型,而code 則是對(duì)type類型的再分析。如:type 0x03 是表示unsearchable,這時(shí)code的不同表示了不同的unsearchable :0x00表示網(wǎng)絡(luò)不可尋,0x01表示主機(jī)不可尋,0x02表示協(xié)議不可尋,0x03表示端口不可尋,0x05表示源路由失敗,0x06網(wǎng)絡(luò)不可知,0x07主機(jī)不可知。
Igmphdr 這是ip協(xié)議的igmp協(xié)議報(bào)頭
struct igmphdr
{
_u8 type;
_u8 code;
_u16 csum;
_u32 group;
};
這是Linux下的ip協(xié)議中的igmp協(xié)議,協(xié)議中主要是前面兩個(gè)屬性,Type表示igmp 協(xié)議的信息類型,code表示routing code. 然后,將截取的數(shù)據(jù)幀的地址賦值給定義的結(jié)構(gòu).由此可根據(jù)不同的結(jié)構(gòu)分析數(shù)據(jù),得到我們需要的信息.
檢測(cè)網(wǎng)絡(luò)監(jiān)聽的方法
網(wǎng)絡(luò)監(jiān)聽在上述中已經(jīng)說明了。它是為了系統(tǒng)管理員管理網(wǎng)絡(luò),監(jiān)視網(wǎng)絡(luò)狀態(tài)和數(shù)據(jù)流動(dòng)而設(shè)計(jì)的。但是由于它有著截獲網(wǎng)絡(luò)數(shù)據(jù)的功能所以也是黑客所慣用的伎倆之一。
檢測(cè)規(guī)則的定義
監(jiān)聽是為了得到我們需要的網(wǎng)絡(luò)信息,然而網(wǎng)絡(luò)中的信息流量可能很大,例如一個(gè)擁有百臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)其一般監(jiān)聽日志是每分鐘以MB計(jì)算的,從如此大量的數(shù)據(jù)中找出我們需要的信息是很不容易的,于是我再程序中添加了檢測(cè)規(guī)則的定義,如此用戶就可以自己定義檢測(cè)的規(guī)則從大量的數(shù)據(jù)中找到需要的數(shù)據(jù)并對(duì)其進(jìn)行操作。關(guān)于定義的包括了我們感興趣的大部分?jǐn)?shù)據(jù)包屬性:包括了源地址,目的地址,源ip地址,目的ip地址,源端口,目的端口,協(xié)議類型,連接標(biāo)志,數(shù)據(jù)包數(shù)量,時(shí)間限制等。
如我們可定義將源物理地址為172.16.11.148且源端口為25,協(xié)議為tcp連接標(biāo)志為syn的數(shù)據(jù)存入相關(guān)日志文件中,并且在檢測(cè)中采取鏈?zhǔn)揭?guī)則,就是我們可以定義很多的規(guī)則而數(shù)據(jù)將像過流水線一樣通過各個(gè)規(guī)則的檢測(cè)處理,該功能和現(xiàn)在大多數(shù)的入侵檢測(cè)系統(tǒng)的規(guī)則定義相似,有了這種功能使網(wǎng)絡(luò)監(jiān)聽更具針對(duì)性,可以滿足不同用戶的需要。
一般檢測(cè)網(wǎng)絡(luò)監(jiān)聽的方法通過以下來進(jìn)行:
網(wǎng)絡(luò)監(jiān)聽實(shí)際上是很難被發(fā)現(xiàn)的。因?yàn)檫\(yùn)行監(jiān)聽程序的主機(jī)在進(jìn)監(jiān)聽的過程中只是被動(dòng)的接收在以太網(wǎng)中傳輸?shù)男畔ⅲ粫?huì)跟其它的主機(jī)交換信息的,也不能修改在網(wǎng)絡(luò)中傳輸?shù)男畔_@就說明了網(wǎng)絡(luò)監(jiān)聽的檢測(cè)是比較麻煩的事情。
一般情況下可以通過ps -ef或者ps -aux來檢測(cè)。但大多實(shí)施監(jiān)聽程序的人都會(huì)通過修改ps的命令來防止被ps -ef的。
上邊提到過。當(dāng)運(yùn)行監(jiān)聽程序的時(shí)候主機(jī)響應(yīng)一般會(huì)受到影響變的會(huì)慢,所以也就有人提出來通過響應(yīng)的速率來判斷是否受到監(jiān)聽。如果說當(dāng)你懷疑網(wǎng)內(nèi)某太機(jī)器正在實(shí)施監(jiān)聽程序的話,可以用正確的IP地址和錯(cuò)誤的物理地址去ping它,這樣正在運(yùn)行的監(jiān)聽程序就會(huì)做出響應(yīng)的。這是因?yàn)檎5臋C(jī)器一般不接收錯(cuò)誤的物理地址的ping信息的。但正在進(jìn)監(jiān)聽的機(jī)器就可以接收,要是它的IP stack不再次反向檢查的話就會(huì)響應(yīng)的。不過這種方法對(duì)很多系統(tǒng)是沒效果的,因?yàn)樗蕾囉谙到y(tǒng)的IP stack。
另一種就是向網(wǎng)上發(fā)大量不存在的物理地址的包,而監(jiān)聽程序往往就會(huì)將這些包進(jìn)行處理,這樣就會(huì)導(dǎo)致機(jī)器性能下降,你可以用icmp echo delay來判斷和比較它。還可以通過搜索網(wǎng)內(nèi)所有主機(jī)上運(yùn)行的程序,但這樣做其的難度可想而知,因?yàn)檫@樣不但是大的工作量,而且還不能完全同時(shí)檢查所有主機(jī)上的進(jìn)程??墒侨绻芾韱T這樣做也會(huì)有很大的必要性,那就是可以確定是否有一個(gè)進(jìn)程是從管理員機(jī)器上啟動(dòng)的。 在Unix中可以通過ps –aun或ps –augx命令產(chǎn)生一個(gè)包括所有進(jìn)程的清單:進(jìn)程的屬主和這些進(jìn)程占用的處理器時(shí)間和內(nèi)存等。這些以標(biāo)準(zhǔn)表的形式輸出在STDOUT上。如果某一個(gè)進(jìn)程正在運(yùn)行,那么它將會(huì)列在這張清單之中。但很多黑客在運(yùn)行監(jiān)聽程序的時(shí)候會(huì)毫不客氣的把ps或其它運(yùn)行中的程序修改成Trojan Horse程序,因?yàn)樗耆梢宰龅竭@一點(diǎn)的。如果真是這樣那么上述辦法就不會(huì)有結(jié)果的。但這樣做在一定程度上還是有所作為的。在Unix和Windows NT上很容易就能得到當(dāng)前進(jìn)程的清單了。
還有一種方式,這種方式要靠足夠的運(yùn)氣。因?yàn)橥诳退玫谋O(jiān)聽程序大都是免費(fèi)在網(wǎng)上得到的,他并非專業(yè)監(jiān)聽。所以做為管理員用來搜索監(jiān)聽程序也可以檢測(cè)。使用Unix可以寫這么一個(gè)搜索的小工具了。有個(gè)叫Ifstatus的運(yùn)行在Unix下的工具,它可以識(shí)別出網(wǎng)絡(luò)接口是否正處于調(diào)試狀態(tài)下或者是在進(jìn)聽裝下。要是網(wǎng)絡(luò)接口運(yùn)行這樣的模式之下,那么很有可能正在受到監(jiān)聽程序的攻擊。Ifstatus一般情況下不會(huì)產(chǎn)生任何輸出的,當(dāng)它檢測(cè)到網(wǎng)絡(luò)的接口處于監(jiān)聽模式下的時(shí)候才回輸出。管理員可以將系統(tǒng)的cron參數(shù)設(shè)置成定期運(yùn)行Ifstatus,如果有好的cron進(jìn)程的話可以將它產(chǎn)生的輸出用mail發(fā)送給正在執(zhí)行cron任務(wù)的人,要實(shí)現(xiàn)可以在crontab目錄下加****/usr/local/etc/ifstatus一行參數(shù)。這樣不行的話還可以用一個(gè)腳本程序在crontab下00****/usr/local/etc/run-ifstatus。
一般情況下監(jiān)聽只是對(duì)用戶口令信息比較敏感一點(diǎn)(沒有無聊的黑客去監(jiān)聽兩臺(tái)機(jī)器間的聊天信息的那是個(gè)浪費(fèi)時(shí)間的事情)。所以對(duì)用戶信息和口令信息進(jìn)行加密是完全有必要的。防止以明文傳輸而被監(jiān)聽到。現(xiàn)代網(wǎng)絡(luò)中,SSH通信協(xié)議一直都被沿用,SSH所使用的端口是22,它排除了在不安全信道上通信的信息,被監(jiān)聽的可能性使用到了RAS算法,在授權(quán)過程結(jié)束后,所有的傳輸都用IDEA技術(shù)加密。但SSH并不就是完全安全的。因此,總的說來,監(jiān)聽的檢測(cè)屬于安全防范的內(nèi)容,需要非常綜合的知識(shí)和技能進(jìn)行分析設(shè)計(jì)。
安全方面的考慮
DOS 攻擊的檢測(cè)與預(yù)防
我國(guó)還在網(wǎng)絡(luò)的發(fā)展階段,自然有網(wǎng)絡(luò)“hacker”、“crack”出現(xiàn),也正是由于是發(fā)展階段,這些人的攻擊手段一般靠一些工具,這些工具一般分為破解性和破壞性,破解性耗時(shí)長(zhǎng)成功率低,而破壞性的工具較符合這些人的性格故受歡迎,而DOS攻擊工具攻擊方便,成功率高,一般是“hacker”的首選。
所謂的DOS攻擊是一種拒絕服務(wù)攻擊,它并不是入侵系統(tǒng),而只是讓系統(tǒng)崩潰,或處于拒絕連接狀態(tài),DOS攻擊的方法主要是發(fā)送大量假的syn包使服務(wù)器忙于應(yīng)答和等待假syn的請(qǐng)求無法對(duì)正常的連接作出反應(yīng),或發(fā)送大量的廣播包利用某系系統(tǒng)對(duì)一些廣播包會(huì)產(chǎn)生回應(yīng)得bug來形成廣播風(fēng)暴阻塞網(wǎng)絡(luò),消耗服務(wù)器資源達(dá)到進(jìn)攻目的?,F(xiàn)在還出現(xiàn)了分布式的DOS攻擊工具,它通過控制多臺(tái)分機(jī)同時(shí)發(fā)送到攻擊包,威力巨大,同時(shí),DOS攻擊還可能是另一種供給的前奏,這就是IP欺騙攻擊(該攻擊可以獲得ROOT權(quán)限,危險(xiǎn)系數(shù)最高),如果出現(xiàn)了DOS攻擊但又不阻塞網(wǎng)絡(luò),且攻擊目標(biāo)不起眼,那么這很可能就是一個(gè)IP欺或TCP截取的開始,所以DOS攻擊是一種破壞力大,效果明顯,且暗藏殺機(jī)的攻擊。
熱而DOS攻擊是較容易檢測(cè)的,其攻擊現(xiàn)象明顯,攻擊特征突出,通過對(duì)網(wǎng)絡(luò)的監(jiān)聽不難發(fā)現(xiàn),如上所述我們已經(jīng)可以從網(wǎng)絡(luò)上監(jiān)聽數(shù)據(jù)幀并能分析他們,于是編寫一個(gè)程序使用戶可以通過定義自己的規(guī)范與數(shù)據(jù)幀比較然后對(duì)符合規(guī)范的數(shù)據(jù)作出相應(yīng)的反應(yīng),對(duì)于DOS攻擊我們可以通過定義一個(gè)帶有時(shí)間限制的規(guī)范來檢測(cè),如我們可以定義在1秒如出現(xiàn)100個(gè)以上的syn數(shù)據(jù)包為DOS攻擊,然后定義處理方法,如MAIL,LOG,SHUTDOWN或與_blank">防火墻聯(lián)動(dòng)等。
IP冒用的檢測(cè)與攻擊
網(wǎng)絡(luò)的飛速發(fā)展導(dǎo)致了原有的32位地址協(xié)議不能滿足飛速擴(kuò)充的龐大計(jì)算機(jī)群,。利益不能均分,導(dǎo)致了IP冒用的出現(xiàn),使網(wǎng)絡(luò)秩序產(chǎn)生混亂。
在這里先解釋一下ARP協(xié)議的應(yīng)用。ARP協(xié)議是將IP地址轉(zhuǎn)換成MAC地址的協(xié)議,是局域網(wǎng)數(shù)據(jù)交流的基礎(chǔ),一臺(tái)計(jì)算機(jī)是如何將自己和某一IP地址綁定?首先,一臺(tái)計(jì)算機(jī)啟動(dòng),他將向局域網(wǎng)發(fā)送其IP的ARP詢問包,這是為了防止IP沖突,如無人回答,其將發(fā)送其IP的ARP應(yīng)答包,向局域網(wǎng)申明綁定其物理地址和ip地址,如果沒有在服務(wù)器上使用固定的ip/mac表那么沒有ip使用權(quán)的計(jì)算機(jī)也可以乘機(jī)綁定ip,這就是ip冒用。
對(duì)網(wǎng)絡(luò)監(jiān)測(cè)的利用可以達(dá)到檢測(cè)ip冒用的出現(xiàn)并對(duì)之進(jìn)行攻擊的目的。具體方法是將檢測(cè)到的arp數(shù)據(jù)幀中的ip 和 eth 地址取出來與我們建立的對(duì)應(yīng)表比較,如發(fā)現(xiàn)ip冒用的情況,則向其發(fā)送反向arp包使其網(wǎng)絡(luò)中斷實(shí)現(xiàn)攻擊,該做法適用于那些無法控制路由器配置,又不想修改網(wǎng)關(guān)配置的網(wǎng)絡(luò)管理。在程序中我采用的是被動(dòng)式的arp查詢,也就是不發(fā)arp查詢包,可以說出了發(fā)攻擊包外對(duì)網(wǎng)絡(luò)沒有增加另外的負(fù)擔(dān)。 監(jiān)聽技術(shù)在網(wǎng)絡(luò)測(cè)試中的應(yīng)用
網(wǎng)絡(luò)監(jiān)聽不只是網(wǎng)絡(luò)管理的基礎(chǔ),還能應(yīng)用在網(wǎng)絡(luò)測(cè)試中,現(xiàn)在的網(wǎng)絡(luò)測(cè)試工具大都建立在監(jiān)聽基礎(chǔ)上,對(duì)監(jiān)聽到的數(shù)據(jù)幀的種類和數(shù)量進(jìn)行統(tǒng)計(jì),從而實(shí)現(xiàn)網(wǎng)絡(luò)的測(cè)試。同理可以使用本監(jiān)聽程序?qū)?shù)據(jù)分類統(tǒng)計(jì)達(dá)到測(cè)試網(wǎng)絡(luò)的作用。
例如目前較多用到的網(wǎng)絡(luò)測(cè)試:
1)檢測(cè)廣播包在網(wǎng)絡(luò)中的負(fù)載,即檢測(cè)廣播包在所有包中的比例,只要在程序中比較數(shù)據(jù)幀中目的地址的物理地址為ff:ff:ff:ff:ff:ff與總幀數(shù)的比例就可得知。從而給出了配置VLAN等的數(shù)據(jù)基礎(chǔ)。
2)檢測(cè)網(wǎng)絡(luò)中因沖突產(chǎn)生的壞數(shù)據(jù)幀的數(shù)量,因?yàn)楣蚕硎揭蕴W(wǎng)采取的CSMA/CD協(xié)議,每臺(tái)計(jì)算機(jī)發(fā)送信號(hào)時(shí)不能保證沒有有其它計(jì)算機(jī)也在發(fā)送信號(hào),而在發(fā)現(xiàn)沖突后就停止發(fā)送,故會(huì)產(chǎn)生一些損壞的數(shù)據(jù)幀,檢測(cè)損壞的數(shù)據(jù)幀在網(wǎng)絡(luò)數(shù)據(jù)中的比例是體現(xiàn)網(wǎng)絡(luò)性能的重要參數(shù),這種檢測(cè)對(duì)于監(jiān)聽程序而言和第一種檢測(cè)大體相同,只是把統(tǒng)計(jì)的數(shù)據(jù)包改成沖突的數(shù)據(jù)幀,也就是數(shù)據(jù)幀大小小于64個(gè)字節(jié)的數(shù)據(jù)幀的數(shù)量,同理類是網(wǎng)絡(luò)測(cè)試都可以通過監(jiān)聽程序?qū)崿F(xiàn),由此我們可以分析出更合適具體情況的布線方法等等。
垃圾郵件過濾的初步實(shí)現(xiàn)
垃圾郵件就是過濾到那些我們不想接受的,內(nèi)容不安全的電子郵件,由于電子郵件的服務(wù)特點(diǎn),使得電子郵件成為當(dāng)代社會(huì)信息傳遞的便捷途徑之一,但同時(shí)也有一些人利用這一點(diǎn)發(fā)送不安全的危害社會(huì)的宣傳,于是垃圾郵件過濾就成為了必要,由于當(dāng)前郵件服務(wù)器管理的松懈,隨便一個(gè)人有臺(tái)計(jì)算機(jī)有個(gè)IP就可以組建服務(wù)器,使得郵件的來源相當(dāng)復(fù)雜,所以要完全過濾不容易,但我們還是可以通過網(wǎng)絡(luò)監(jiān)聽來實(shí)現(xiàn)郵件的初步過濾.
第一種方法:就是屏蔽某些ip的swtp連接,通過監(jiān)聽程序可以實(shí)現(xiàn)這點(diǎn),如設(shè)定規(guī)則當(dāng)源IP地址為****且TCP連接端口為25時(shí)就屏蔽連接。
第二種方法:由于很多電子郵件服務(wù)器允許郵件轉(zhuǎn)發(fā)(這也是必要的,我們不可能能連接到每一臺(tái)機(jī)),所以通過ip地址不一定可以屏蔽這個(gè)用戶的郵件他可以通過其他的服務(wù)器轉(zhuǎn)發(fā),因此在第一種方法無效的情況下我們可以通過賬號(hào)來屏蔽服務(wù),由于電子郵件服務(wù)器的統(tǒng)一命令要求需要用戶在發(fā)郵件時(shí)申明用戶例如:mail from XXX@XXX ,所以我們可以通過監(jiān)聽程序來發(fā)現(xiàn)我們不喜歡的用戶并屏蔽,這要求我們對(duì)數(shù)據(jù)幀不僅分析報(bào)頭,還要分析數(shù)據(jù),將其與我們?cè)O(shè)定的字符串比較,如相同,則找到了屏蔽連接.
- Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)之一
- VC++簡(jiǎn)單實(shí)現(xiàn)關(guān)機(jī)、重啟計(jì)算機(jī)實(shí)例代碼
- VC實(shí)現(xiàn)獲取本機(jī)MAC地址的方法
- VC MFC非模態(tài)對(duì)話框的實(shí)現(xiàn)方法
- VC中SDK與MFC的區(qū)別淺析
- VC++創(chuàng)建msi文件的方法
- VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動(dòng)畫的方法
- 基于VC實(shí)現(xiàn)的網(wǎng)絡(luò)監(jiān)聽功能程序?qū)嵗?/a>
相關(guān)文章
Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)之一
Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)之一...2007-09-09根據(jù)IP地址查所連交換機(jī)端口CISCO網(wǎng)絡(luò)適用
根據(jù)IP地址查所連交換機(jī)端口CISCO網(wǎng)絡(luò)適用...2007-09-09撥號(hào)網(wǎng)絡(luò)的簡(jiǎn)單知識(shí)
撥號(hào)網(wǎng)絡(luò)的簡(jiǎn)單知識(shí)...2007-09-09在可擴(kuò)展的網(wǎng)絡(luò)中實(shí)施BGP
在可擴(kuò)展的網(wǎng)絡(luò)中實(shí)施BGP...2007-09-09