畢業(yè)設(shè)計(jì)(論文)-基于數(shù)據(jù)挖掘的入侵檢測(cè)系統(tǒng).doc_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于數(shù)據(jù)挖掘的入侵檢測(cè)系統(tǒng).doc_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于數(shù)據(jù)挖掘的入侵檢測(cè)系統(tǒng).doc_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于數(shù)據(jù)挖掘的入侵檢測(cè)系統(tǒng).doc_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于數(shù)據(jù)挖掘的入侵檢測(cè)系統(tǒng).doc_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

生產(chǎn)實(shí)習(xí)設(shè)計(jì)( 論文 ) 基于數(shù)據(jù)挖掘的入侵檢測(cè)系統(tǒng) 院 系: 計(jì)算機(jī)科學(xué)系 專(zhuān) 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 號(hào): 2007210487 姓 名: 劉 兵 指導(dǎo)老師: 李 源 (1):目 錄摘 要前 言1. 選題背景及研究現(xiàn)狀2. 本文研究?jī)?nèi)容3. 全文組織結(jié)構(gòu)第一章 入侵檢測(cè)系統(tǒng)概述1.1 入侵檢測(cè)的概念1.2 入侵檢測(cè)的模型建立方法1.3 入侵檢測(cè)的技術(shù)分類(lèi)1.3.1 基于統(tǒng)計(jì)方法的入侵檢測(cè)技術(shù)1.3.2 基于神經(jīng)網(wǎng)絡(luò)的入侵檢測(cè)技術(shù)1.3.3 基于專(zhuān)家系統(tǒng)的入侵檢測(cè)技術(shù)1.3.4 基于模型推理的入侵檢測(cè)技術(shù)1.4 入侵檢測(cè)系統(tǒng)分類(lèi)1.4.1 基于主機(jī)的入侵檢測(cè)系統(tǒng)1.4.2 基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)第二章 win32 api編程技術(shù)2.1 win32 api概論2.2 跨進(jìn)程api hook2.2.1 api hook理論2.2.2 api hook的實(shí)現(xiàn)2.2.3 跨進(jìn)程理論2.2.4 跨進(jìn)程的實(shí)現(xiàn)和幾點(diǎn)注意2.2.5 在跨進(jìn)程api hook時(shí)可能用到的其他技術(shù)第三章 利用數(shù)據(jù)挖掘技術(shù)的入侵檢測(cè)系統(tǒng)模型3.1 傳感器3.2 通信器3.3 檢測(cè)器3.4 數(shù)據(jù)倉(cāng)庫(kù)3.5 報(bào)警器第四章 系統(tǒng)主要模塊研究4.1 傳感器部分4.2 基于數(shù)據(jù)挖掘的模型生成器部分算法研究4.2.1 問(wèn)題描述4.2.2 歸一化處理4.2.3 聚類(lèi)算法4.2.4 實(shí)時(shí)檢測(cè)入侵第五章 系統(tǒng)性能分析第六章 全文總結(jié) 及 展望致 謝參考文獻(xiàn)(2):摘 要 在允許各種網(wǎng)絡(luò)資源以開(kāi)放方式運(yùn)作的前提下,入侵檢測(cè)系統(tǒng)成了確保網(wǎng)絡(luò)安全的一種必要手段。入侵檢測(cè)就是發(fā)現(xiàn)或確定入侵行為存在或出現(xiàn)的動(dòng)作,它實(shí)際上是一種信息識(shí)別與檢測(cè)技術(shù),而從以數(shù)據(jù)為中心的觀點(diǎn)看,入侵檢測(cè)本身就是一個(gè)數(shù)據(jù)分析過(guò)程。在許多相關(guān)的領(lǐng)域,如欺詐檢測(cè)和故障管理中,數(shù)據(jù)挖掘已經(jīng)取得了成功的應(yīng)用。于是,研究數(shù)據(jù)挖掘方法在入侵檢測(cè)領(lǐng)域中的應(yīng)用,自然就成為一個(gè)熱門(mén)話題。 本文研究和設(shè)計(jì)了一種基于數(shù)據(jù)挖掘的主機(jī)入侵檢測(cè)系統(tǒng),介紹了它的體系結(jié)構(gòu),并說(shuō)明了其傳感器、通信器、檢測(cè)器和數(shù)據(jù)倉(cāng)庫(kù)等基本組件的構(gòu)成。另外介紹了windows下部分傳感器實(shí)例以及監(jiān)測(cè)器中模型生成器使用的數(shù)據(jù)挖掘的聚類(lèi)算法。最后討論了當(dāng)前存在的幾個(gè)問(wèn)題和今后的研究方向。關(guān)鍵詞 入侵檢測(cè) 數(shù)據(jù)挖掘 基于主機(jī) 異常檢測(cè) 體系結(jié)構(gòu)(3):前 言1. 選題背景及研究現(xiàn)狀 隨著網(wǎng)絡(luò)技術(shù)和網(wǎng)絡(luò)規(guī)模的不斷發(fā)展,網(wǎng)絡(luò)入侵的風(fēng)險(xiǎn)性和機(jī)會(huì)也越來(lái)越多,這些入侵有的是針對(duì)計(jì)算機(jī)系統(tǒng)和軟件的漏洞,有的是針對(duì)網(wǎng)絡(luò)系統(tǒng)本身的安全缺陷,但是它們都對(duì)主機(jī)和網(wǎng)絡(luò)造成了破壞,網(wǎng)絡(luò)安全已經(jīng)成為人們無(wú)法回避的問(wèn)題,因此為了保護(hù)現(xiàn)在越來(lái)越多的敏感信息,入侵檢測(cè)技術(shù)得到了越來(lái)越多的重視。 入侵檢測(cè)按照監(jiān)測(cè)對(duì)象的不同一般可分為兩類(lèi):基于主機(jī)的和基于網(wǎng)絡(luò)的。但是當(dāng)將基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)整合到一個(gè)保護(hù)系統(tǒng)中時(shí),一般都需要使用基于主機(jī)的入侵檢測(cè)系統(tǒng)。盡管目前大部分的攻擊都是通過(guò)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)的,但是所有這些攻擊都來(lái)自于主機(jī)(攻擊者自己的或者是被其破壞控制的主機(jī)),而且有些攻擊是產(chǎn)生并保持在主機(jī)系統(tǒng)中的。 基于網(wǎng)絡(luò)的入侵檢測(cè)有以下幾點(diǎn)缺陷:第一,因?yàn)樗潜O(jiān)測(cè)網(wǎng)絡(luò)數(shù)據(jù)的,而網(wǎng)絡(luò)數(shù)據(jù)可以看成是代表用戶行為的,但是不一定能代表用戶行為所造成的后果;第二,幾乎不可能將所有的網(wǎng)絡(luò)數(shù)據(jù)全部接收到;第三,即使將所有的網(wǎng)絡(luò)數(shù)據(jù)全部接收到也不能檢測(cè)到所有的入侵;第四,數(shù)據(jù)加密會(huì)使網(wǎng)絡(luò)入侵檢測(cè)失效;另外基于網(wǎng)絡(luò)的入侵檢測(cè)可能會(huì)遺漏一些系統(tǒng)級(jí)的攻擊。而基于主機(jī)的入侵檢測(cè)可以很方便地收集在該主機(jī)上所有用戶的行為及這些行為造成的后果,并且在做基于主機(jī)的數(shù)據(jù)收集和分析時(shí)可以不用擔(dān)心網(wǎng)絡(luò)上的海量數(shù)據(jù),因此研究基于主機(jī)的入侵檢測(cè)系統(tǒng)仍然是非常必要的。 基于主機(jī)的入侵檢測(cè)系統(tǒng),不管是對(duì)于單用戶或多用戶的操作系統(tǒng)來(lái)說(shuō),要想找到一個(gè)滿足所有要求的解決方案是不可能的。因此在這里研究一種基于數(shù)據(jù)挖掘的主機(jī)入侵檢測(cè)系統(tǒng),這種技術(shù)利用了現(xiàn)有的比較成熟的數(shù)據(jù)挖掘技術(shù)和一種比較健壯以及輕量的數(shù)據(jù)收集系統(tǒng)來(lái)構(gòu)造一個(gè)強(qiáng)有力的基于主機(jī)的入侵檢測(cè)系統(tǒng)。 當(dāng)今數(shù)據(jù)庫(kù)的容量已經(jīng)達(dá)到上萬(wàn)億的水平(t)- 1,000,000,000,000 個(gè)字節(jié)。從而形成一個(gè)新的挑戰(zhàn):在這被稱之為信息爆炸的時(shí)代,信息過(guò)量幾乎成為人人需要面對(duì)的問(wèn)題。隨著數(shù)據(jù)的急劇膨脹,數(shù)據(jù)的時(shí)效性和復(fù)雜性遠(yuǎn)遠(yuǎn)超過(guò)了當(dāng)前信息處理的能力,人們不可回避地遇到了信息災(zāi)難問(wèn)題:一是信息過(guò)量,難以消化;二是信息真假,難以辨識(shí);三是信息安全,難以保證;四是信息形式不一致,難以統(tǒng)一處理。在數(shù)據(jù)生產(chǎn)、傳輸能力遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)分析能力的今天,人們被數(shù)據(jù)淹沒(méi),人們卻饑餓于知識(shí)。面對(duì)這一嚴(yán)峻挑戰(zhàn),數(shù)據(jù)挖掘和知識(shí)發(fā)現(xiàn)(data mining and knowledge discovery,簡(jiǎn)稱dmkd)技術(shù)應(yīng)運(yùn)而生,并得以蓬勃發(fā)展,越來(lái)越顯示出其強(qiáng)大的生命力。 數(shù)據(jù)挖掘(data mining)就是從大量的、不完全的、有噪聲的、模糊的、隨機(jī)的數(shù)據(jù)中,提取隱含在其中的、人們事先不知道的、但又是潛在有用的信息和知識(shí)的過(guò)程。還有很多和這一術(shù)語(yǔ)相近似的術(shù)語(yǔ),如從數(shù)據(jù)庫(kù)中發(fā)現(xiàn)知識(shí)(kdd)、數(shù)據(jù)分析、數(shù)據(jù)融合(data fusion)以及決策支持等。人們把原始數(shù)據(jù)看作是形成知識(shí)的源泉,就像從礦石中采礦一樣。原始數(shù)據(jù)可以是結(jié)構(gòu)化的,如關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù),也可以是半結(jié)構(gòu)化的,如文本、圖形、圖像數(shù)據(jù),甚至是分布在網(wǎng)絡(luò)上的異構(gòu)型數(shù)據(jù)。發(fā)現(xiàn)知識(shí)的方法可以是數(shù)學(xué)的,也可以是非數(shù)學(xué)的;可以是演繹的,也可以是歸納的。發(fā)現(xiàn)的知識(shí)可以被用于信息管理、查詢優(yōu)化、決策支持、過(guò)程控制等,還可以用于數(shù)據(jù)自身的維護(hù)。因此,數(shù)據(jù)挖掘是一門(mén)很廣義的交叉學(xué)科,它匯聚了不同領(lǐng)域的研究者,尤其是數(shù)據(jù)庫(kù)、人工智能、數(shù)理統(tǒng)計(jì)、可視化、并行計(jì)算等方面的學(xué)者和工程技術(shù)人員。2. 本文研究?jī)?nèi)容 如前所述,入侵檢測(cè)作為一門(mén)新興的交叉學(xué)科提出了很多具有挑戰(zhàn)性的研究課題,其涉及的內(nèi)容、研究的方向廣泛而又豐富。本文的研究工作主要圍繞以下入侵檢測(cè)領(lǐng)域中的數(shù)據(jù)挖掘方法展開(kāi)。本文的創(chuàng)新點(diǎn)主要包括以下幾個(gè)方面: 非監(jiān)督異常檢測(cè)方法:基于聚類(lèi)技術(shù)提出了一種能處理不帶標(biāo)識(shí)且含異常數(shù)據(jù)樣本的訓(xùn)練集數(shù)據(jù)的網(wǎng)絡(luò)入侵檢測(cè)方法。對(duì)網(wǎng)絡(luò)連接數(shù)據(jù)作歸一化處理后,通過(guò)構(gòu)造該數(shù)據(jù)集對(duì)應(yīng)的數(shù)據(jù)場(chǎng),根據(jù)其勢(shì)場(chǎng)分布的局部最大值找到聚類(lèi)中心,并以3b鄰域?yàn)橄蘅紤]各數(shù)據(jù)點(diǎn)的分類(lèi)情況。完成樣本數(shù)據(jù)的類(lèi)劃分后,根據(jù)正常類(lèi)比例n來(lái)確定異常數(shù)據(jù)類(lèi)別并用于網(wǎng)絡(luò)連接數(shù)據(jù)的實(shí)時(shí)檢測(cè)。結(jié)果表明,該方法有效地以較低的系統(tǒng)誤警率從網(wǎng)絡(luò)連接數(shù)據(jù)中檢測(cè)出新的入侵。l 跨進(jìn)程apil hook:眾所周知windows應(yīng)用程序的各種系統(tǒng)功能是通過(guò)調(diào)用api函數(shù)來(lái)實(shí)現(xiàn)。api hook就是給系統(tǒng)的api附加上一段小程序,它能監(jiān)視甚至控制應(yīng)用程序?qū)pi函數(shù)的調(diào)用。所謂跨進(jìn)程也就是讓自己的程序來(lái)控制別人程序的api調(diào)用了。3. 全文組織結(jié)構(gòu)前言概要地闡述了論文的基本情況和研究背景,介紹了入侵檢測(cè)的主要研究?jī)?nèi)容和當(dāng)前的研究現(xiàn)狀,還簡(jiǎn)要介紹了本文的主要研究?jī)?nèi)容。 第一章介紹了入侵檢測(cè)研究的背景和入侵檢測(cè)的概念,并對(duì)入侵檢測(cè)技術(shù)的原理和現(xiàn)有入侵檢測(cè)系統(tǒng)的系統(tǒng)構(gòu)成及所采用的技術(shù)進(jìn)行了詳細(xì)的分析。 第二章介紹了windows下系統(tǒng)監(jiān)控所涉及到的技術(shù),包括api編程,dll注入等。尤其大膽的提出api hook的應(yīng)用。 第三章系統(tǒng)的描述了基于數(shù)據(jù)結(jié)構(gòu)技術(shù)的主機(jī)入侵檢測(cè)系統(tǒng)的系統(tǒng)模型設(shè)計(jì),有別于常規(guī)的主機(jī)入侵檢測(cè)系統(tǒng),是本文創(chuàng)新的意義與重點(diǎn)。 第四章研究了api hook以及數(shù)據(jù)挖掘技術(shù)在主要2個(gè)模塊中的應(yīng)用,尤其是數(shù)據(jù)挖掘技術(shù)的算法研究,是作者學(xué)習(xí)、研究的重點(diǎn)。 第五章根據(jù)提出的設(shè)計(jì)方案及體系結(jié)構(gòu),進(jìn)行了系統(tǒng)性能的估算與模擬測(cè)試。第六章總結(jié)了這一段時(shí)間的研究情況,列舉了研究中存在的問(wèn)題,并探討了進(jìn)一步研究的方向。(4):第一章 入侵檢測(cè)系統(tǒng)概述 入侵檢測(cè)系統(tǒng)(ids,intrusion detection system)用來(lái)識(shí)別針對(duì)計(jì)算機(jī)系統(tǒng)和網(wǎng)絡(luò)系統(tǒng),或者更廣泛意義上的信息系統(tǒng)的非法攻擊,包括檢測(cè)外界非法入侵者的惡意攻擊或試探,以及內(nèi)部合法用戶的超越使用權(quán)限的非法行動(dòng)。 入侵檢測(cè)技術(shù)是計(jì)算機(jī)安全技術(shù)中的重要部分,它從計(jì)算機(jī)系統(tǒng)中的若干關(guān)鍵點(diǎn)收集信息,并分析這些信息,檢測(cè)計(jì)算機(jī)系統(tǒng)中是否有違反安全策略的行為和遭到襲擊的跡象。入侵檢測(cè)系統(tǒng)在幾乎不影響計(jì)算機(jī)系統(tǒng)性能的情況下能對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)測(cè),并對(duì)系統(tǒng)提供針對(duì)內(nèi)部攻擊、外部攻擊和誤操作的實(shí)時(shí)保護(hù)。入侵檢測(cè)技術(shù)通過(guò)對(duì)入侵行為的過(guò)程與特征的研究,使安全系統(tǒng)對(duì)入侵事件和入侵過(guò)程能做出實(shí)時(shí)響應(yīng)。入侵檢測(cè)技術(shù)擴(kuò)展了系統(tǒng)管理遠(yuǎn)的安全管理能力(包括安全審計(jì)、監(jiān)視、進(jìn)攻識(shí)別和響應(yīng)),提高了信息安全基礎(chǔ)結(jié)構(gòu)的完整性。1.1 入侵檢測(cè)的概念 入侵(intrusion)的定義:任何試圖危害資源的完整性、可信度和可獲取性的動(dòng)作。 入侵檢測(cè)(intrusion detection):按webster辭典定義,即發(fā)現(xiàn)或確定入侵行為存在或出現(xiàn)的動(dòng)作。就是檢測(cè)入侵的方法,如發(fā)現(xiàn)闖入系統(tǒng)的入侵者或?yàn)E用系統(tǒng)資源的非法用戶。也可更具體的定義為發(fā)現(xiàn)、跟蹤并記錄計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)網(wǎng)絡(luò)中的非授權(quán)行為,或發(fā)現(xiàn)并調(diào)查系統(tǒng)中可能為試圖入侵或病毒感染所帶來(lái)的異常活動(dòng)。 在允許各種網(wǎng)絡(luò)資源以開(kāi)放方式運(yùn)作的前提下,入侵檢測(cè)系統(tǒng)(intrusion detection systems)成了確保網(wǎng)絡(luò)安全的一種新的手段,且這種手段的實(shí)現(xiàn)方式也與入侵的出現(xiàn)一樣在不斷地翻新。ids一般不是采取預(yù)防措施以防止入侵事件的發(fā)生,而是通過(guò)對(duì)包括計(jì)算機(jī)系統(tǒng)及網(wǎng)絡(luò)用戶行為的監(jiān)控,實(shí)現(xiàn)如下目標(biāo):識(shí)別入侵者,識(shí)別入侵行為,檢測(cè)和監(jiān)視已成功的安全突破,為對(duì)抗入侵及時(shí)提供重要信息,阻止事件的發(fā)生和事態(tài)的擴(kuò)大。ids解決安全問(wèn)題是基于如下假設(shè)的:系統(tǒng)是不安全的,但違反安全策略的行為(即入侵)是能夠通過(guò)監(jiān)控和分析系統(tǒng)及用戶行為而被檢測(cè)到的。1.2 入侵檢測(cè)的模型建立方法 以建立入侵模型的方法分類(lèi),入侵檢測(cè)可分為異常檢測(cè)與濫用檢測(cè)。 異常入侵檢測(cè)指能根據(jù)異常行為和使用計(jì)算機(jī)資源檢測(cè)出來(lái)的入侵。通過(guò)對(duì)審計(jì)數(shù)據(jù)的訓(xùn)練學(xué)習(xí),從中發(fā)現(xiàn)正常使用行為模式,以定量的統(tǒng)計(jì)方式描述可接受的行為特征,并由測(cè)試數(shù)據(jù)和正常行為模式的偏差捕獲到異常,以區(qū)分非正常的、潛在的入侵性行為。存在一個(gè)如何識(shí)別異常行為的問(wèn)題。建立的威脅模型包括外部闖入、內(nèi)部滲透和不當(dāng)行為。其主要前提條件是將入侵性活動(dòng)作為異?;顒?dòng)的子集。理想情況是兩集合相同。異常入侵檢測(cè)要解決的主要問(wèn)題就是構(gòu)造異?;顒?dòng)集并從中發(fā)現(xiàn)入侵性活動(dòng)子集,其方法依賴于異常模型的建立。異常檢測(cè)是通過(guò)觀測(cè)到的一組測(cè)量值偏離度來(lái)預(yù)測(cè)用戶行為的變化,然后做出決策判斷的檢測(cè)技術(shù)。 通過(guò)檢查與正常行為相違背的行為,異常檢測(cè)能夠發(fā)現(xiàn)一些新的未知的入侵行為,但不可避免的將會(huì)有更高的誤報(bào)率。所以在實(shí)際系統(tǒng)中異常檢測(cè)的結(jié)果往往都要提交給系統(tǒng)管理員進(jìn)行繼續(xù)跟蹤與分析。 濫用檢測(cè)是指根據(jù)已知系統(tǒng)和應(yīng)用軟件的弱點(diǎn)及其攻擊模式的特征進(jìn)行編碼,并通過(guò)與審計(jì)數(shù)據(jù)的匹配來(lái)檢測(cè)入侵。與異常檢測(cè)不同,濫用檢測(cè)直接檢測(cè)不利的或不可接受的行為。其主要假設(shè)是具有能夠精確地按某種方式編碼的攻擊,并可以通過(guò)捕獲攻擊及重新整理、確認(rèn)入侵活動(dòng)是基于同一安全隱患進(jìn)行攻擊的入侵方法的變種。指通過(guò)按預(yù)先定義好的入侵模式以及觀察到入侵發(fā)生的情況進(jìn)行模式匹配來(lái)檢測(cè)。 濫用檢測(cè)具有較低的誤報(bào)率(false positive rate),但它不能檢測(cè)出新出現(xiàn)的一些入侵行為,故漏報(bào)率(false negative rate)也較高。1.3 入侵檢測(cè)技術(shù)分類(lèi) 入侵的檢測(cè)實(shí)際上是一種信息識(shí)別與檢測(cè)技術(shù)。因此,傳統(tǒng)的信息識(shí)別技術(shù)也可以用到入侵檢測(cè)中來(lái)。不過(guò),和通常的信息識(shí)別和檢測(cè)相比,入侵檢測(cè)有其獨(dú)特之處。在入侵檢測(cè)中,不但信息的先后次序十分重要,信息產(chǎn)生的時(shí)間也要作為一個(gè)重要的變量輸入到識(shí)別系統(tǒng)之中,如dos攻擊,完全是依靠短時(shí)間內(nèi)大量網(wǎng)絡(luò)活動(dòng)來(lái)耗盡系統(tǒng)資源的。此外,入侵檢測(cè)比一般的信息識(shí)別有更強(qiáng)的上下文和環(huán)境相關(guān)性,不同環(huán)境下,有完全不同的結(jié)果。這兩點(diǎn)是實(shí)現(xiàn)網(wǎng)絡(luò)入侵檢測(cè)所必需的。 前面提到過(guò),入侵分析是入侵檢測(cè)的核心,入侵檢測(cè)技術(shù)主要研究的就是對(duì)入侵行為分析和判定,即入侵分析技術(shù)。目前主要的入侵檢測(cè)技術(shù)有:1.3.1 基于統(tǒng)計(jì)方法的入侵檢測(cè)技術(shù) 基于統(tǒng)計(jì)方法的入侵檢測(cè)技術(shù),就是入侵分析采用基于統(tǒng)計(jì)的檢測(cè)規(guī)則的方法的一種檢測(cè)技術(shù)。它基于對(duì)用戶歷史行為的建模,以及先驗(yàn)的證據(jù)或模型的基礎(chǔ),實(shí)時(shí)地檢測(cè)用戶對(duì)系統(tǒng)的使用情況,根據(jù)系統(tǒng)內(nèi)部保存的用戶行為的概率統(tǒng)計(jì)模型進(jìn)行檢測(cè),實(shí)時(shí)檢測(cè)系統(tǒng)是否有異常的用戶行為,依此來(lái)判斷系統(tǒng)是否遭到入侵。也就是說(shuō),系統(tǒng)根據(jù)用戶以前的歷史行為記錄來(lái)決定用戶當(dāng)前的行為是否合法。系統(tǒng)根據(jù)用戶的歷史行為,生成每個(gè)用戶的統(tǒng)計(jì)行為模型(即行為習(xí)慣)。當(dāng)用戶改變他的行為習(xí)慣時(shí),這種“異?!本蜁?huì)被檢測(cè)出來(lái)。通常記錄的行為有:一般項(xiàng)目:例如登錄的時(shí)間、地點(diǎn),cpu資源的申請(qǐng)及占用情況,i/o的使用通道和頻率,常用目錄的建立和刪除,文件的讀寫(xiě)等。特定項(xiàng)目:例如用戶習(xí)慣用的編輯器和編譯器,最常用的系統(tǒng)調(diào)用,經(jīng)常訪問(wèn)的網(wǎng)絡(luò)站點(diǎn),用戶口令文件的存取。1.3.2 基于神經(jīng)網(wǎng)絡(luò)的入侵檢測(cè)技術(shù) 由于用戶行為的復(fù)雜性,要想準(zhǔn)確地把當(dāng)前的用戶行為和用戶行為概率統(tǒng)計(jì)模型進(jìn)行匹配是相當(dāng)困難的,因而基于統(tǒng)計(jì)方法的入侵檢測(cè)技術(shù)存在著一些天生的弱點(diǎn)。錯(cuò)發(fā)的警報(bào)往往來(lái)自于對(duì)統(tǒng)計(jì)數(shù)據(jù)的統(tǒng)計(jì)算法所基于的不準(zhǔn)確的假設(shè)。因此人們利用和發(fā)展神經(jīng)網(wǎng)絡(luò)技術(shù)來(lái)進(jìn)行入侵檢測(cè)。 神經(jīng)網(wǎng)絡(luò)較好地解決了傳統(tǒng)的基于統(tǒng)計(jì)的分析方法所面臨的以下幾個(gè)難題:難于建立確切的統(tǒng)計(jì)分布:統(tǒng)計(jì)方法基本上依賴于用戶行為的主觀假設(shè),錯(cuò)發(fā)警報(bào)常由這種假設(shè)所導(dǎo)致。l 難于實(shí)現(xiàn)方法的普適性:適用于某類(lèi)用戶行為的檢測(cè)措施一般無(wú)法適用于另一類(lèi)用戶。l算法實(shí)現(xiàn)比較昂貴:由于上一條原因,即基于統(tǒng)計(jì)的算法對(duì)不同類(lèi)型的用戶行為不具有自適應(yīng)性,因此算法比較復(fù)雜而且龐大,導(dǎo)致算法上的昂貴。而神經(jīng)網(wǎng)絡(luò)技術(shù)不存在這個(gè)問(wèn)題,實(shí)現(xiàn)的代價(jià)較小。l 系統(tǒng)臃腫難于剪裁:由于采用統(tǒng)計(jì)方法檢測(cè)具有大量用戶的計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng),將不得不保留大量的用戶行為信息,導(dǎo)致系統(tǒng)的臃腫和難于剪裁。而基于神經(jīng)網(wǎng)絡(luò)的技術(shù)能夠回避這一缺點(diǎn),根據(jù)實(shí)時(shí)檢測(cè)到的信息有效地加以處理做出入侵可能性的判斷。l目前,神經(jīng)網(wǎng)絡(luò)技術(shù)提出了對(duì)于基于傳統(tǒng)統(tǒng)計(jì)的入侵檢測(cè)技術(shù)的改進(jìn)方向,但尚不十分成熟,所以傳統(tǒng)的統(tǒng)計(jì)方法仍將繼續(xù)發(fā)揮作用,也仍然能為發(fā)現(xiàn)用戶的異常行為提供相當(dāng)有參考價(jià)值的信息。1.3.3 基于專(zhuān)家系統(tǒng)的入侵檢測(cè)技術(shù) 基于專(zhuān)家系統(tǒng)的入侵檢測(cè)技術(shù),就是根據(jù)網(wǎng)絡(luò)安全專(zhuān)家對(duì)可疑行為的分析經(jīng)驗(yàn)而形成一套推理規(guī)則,然后在此基礎(chǔ)之上構(gòu)建入侵檢測(cè)專(zhuān)家系統(tǒng),由此專(zhuān)家系統(tǒng)自動(dòng)進(jìn)行對(duì)所涉及的入侵行為進(jìn)行分析工作。 所謂專(zhuān)家系統(tǒng)是基于一套有專(zhuān)家經(jīng)驗(yàn)事先定義的規(guī)則的推理系統(tǒng),例如,在數(shù)分鐘之內(nèi)某個(gè)用戶連續(xù)進(jìn)行登錄,失敗超過(guò)規(guī)定次數(shù)可以被認(rèn)為是一次入侵行為。類(lèi)似的規(guī)則在統(tǒng)計(jì)系統(tǒng)中也有,同時(shí)基于規(guī)則的專(zhuān)家系統(tǒng)或推理系統(tǒng)也有其局限性,因?yàn)樽鳛檫@類(lèi)系統(tǒng)的基礎(chǔ)的推理規(guī)則一般都是根據(jù)已知的入侵手段來(lái)進(jìn)行安排和策劃的,而對(duì)網(wǎng)絡(luò)系統(tǒng)的最危險(xiǎn)的威脅則主要來(lái)自未知的入侵手段。實(shí)現(xiàn)一個(gè)基于規(guī)則的專(zhuān)家系統(tǒng)是一個(gè)知識(shí)工程問(wèn)題,而且其功能應(yīng)當(dāng)能夠隨著經(jīng)驗(yàn)的積累而利用其自學(xué)習(xí)能力進(jìn)行規(guī)則的擴(kuò)充與修正。專(zhuān)家系統(tǒng)對(duì)歷史數(shù)據(jù)的依賴性總的來(lái)說(shuō)比基于統(tǒng)計(jì)的檢測(cè)系統(tǒng)較少,因此系統(tǒng)的適應(yīng)性比較強(qiáng),可以較靈活地適應(yīng)不同的安全策略和檢測(cè)需求。1.3.4 基于模型推理的入侵檢測(cè)技術(shù) 入侵者在入侵一個(gè)系統(tǒng)時(shí)往往具用一定的行為程序,如猜測(cè)口令的程序,這種行為程序構(gòu)成了某種具有一定行為特征的入侵行為模型。根據(jù)這種模型所代表的入侵意圖的行為特征,可以實(shí)時(shí)地檢測(cè)出惡意的入侵企圖(盡管入侵并不一定都是惡意的)。用基于模型推理的方法人們能夠?yàn)槟承┬袨榻⑻囟ǖ哪P?,從而能夠檢測(cè)具有特定行為的某些入侵活動(dòng)。根據(jù)假設(shè)的入侵腳本,這種系統(tǒng)就能檢測(cè)出非法的用戶行為。一般為了準(zhǔn)確判斷,要為不同的入侵者和不同的系統(tǒng)建立特定的入侵腳本。 當(dāng)然,上述的幾種方法都有各自的優(yōu)缺點(diǎn),并不能徹底地解決入侵檢測(cè)問(wèn)題,所以最好是綜合地利用各種方法強(qiáng)化網(wǎng)絡(luò)系統(tǒng)的安全程度以增加入侵成功的難度,同時(shí)根據(jù)系統(tǒng)本身特點(diǎn)輔助以較適合的入侵檢測(cè)技術(shù)。1.4 入侵檢測(cè)系統(tǒng)分類(lèi) 入侵檢測(cè)系統(tǒng)根據(jù)其檢測(cè)數(shù)據(jù)來(lái)源分為兩類(lèi):基于主機(jī)(host-based)的入侵檢測(cè)系統(tǒng)和基于網(wǎng)絡(luò)(network-based)的入侵檢測(cè)系統(tǒng)?;谥鳈C(jī)的入侵檢測(cè)系統(tǒng)從單個(gè)主機(jī)上提取系統(tǒng)數(shù)據(jù)(如審計(jì)記錄等)作為入侵分析的數(shù)據(jù)源,而基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)從網(wǎng)絡(luò)上提取數(shù)據(jù)(如網(wǎng)絡(luò)鏈路層的數(shù)據(jù)幀)作為入侵分析的數(shù)據(jù)源。通常來(lái)說(shuō)基于主機(jī)的入侵檢測(cè)系統(tǒng)只能檢測(cè)單個(gè)主機(jī)系統(tǒng),而基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)可以對(duì)本網(wǎng)段的多個(gè)主機(jī)系統(tǒng)進(jìn)行檢測(cè),多個(gè)分布于不同網(wǎng)段上的基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)可以協(xié)同工作以提供更強(qiáng)的入侵檢測(cè)能力。圖1.1給出了一個(gè)同時(shí)包含基于主機(jī)與基于網(wǎng)絡(luò)的兩種機(jī)制的入侵檢測(cè)結(jié)構(gòu)框圖。圖1.1 入侵檢測(cè)系統(tǒng)結(jié)構(gòu)框圖1.4.1 基于主機(jī)的入侵檢測(cè)系統(tǒng) 基于主機(jī)的入侵檢測(cè)系統(tǒng)的檢測(cè)目標(biāo)是主機(jī)系統(tǒng)和系統(tǒng)本地用戶,原理是根據(jù)主機(jī)的審計(jì)數(shù)據(jù)和系統(tǒng)日志發(fā)現(xiàn)可疑事件。該系統(tǒng)通常運(yùn)行在被監(jiān)測(cè)的主機(jī)或服務(wù)器上,實(shí)時(shí)檢測(cè)主機(jī)安全性方面諸如操作系統(tǒng)日志文件、審核日志文件、應(yīng)用程序日志文件等的情況,其效果依賴于數(shù)據(jù)的準(zhǔn)確性以及安全事件的定義??梢?jiàn)這種類(lèi)型的ids是利用主機(jī)操作系統(tǒng)及應(yīng)用程序的審核蹤跡作為輸入的主要數(shù)據(jù)源來(lái)檢測(cè)入侵。基于主機(jī)的入侵檢測(cè)系統(tǒng)被設(shè)計(jì)成檢測(cè)ids代理所駐留的宿主機(jī),如圖1.2所示,這種ids可以檢測(cè)到網(wǎng)絡(luò)協(xié)議棧的高層數(shù)據(jù),也可檢測(cè)到被監(jiān)視主機(jī)上的本地活動(dòng),諸如:文件修改和用戶帳戶的建立。圖1.2 基于主機(jī)的入侵檢測(cè)系統(tǒng)在圖1.2的客戶服務(wù)器通信模式下,客戶機(jī)對(duì)服務(wù)器上的訪問(wèn)活動(dòng)將被服務(wù)器日志所記載。ids代理檢測(cè)這些記錄用戶活動(dòng)信息的日志文件,將它們與事先知道的用戶正常行為模式進(jìn)行匹配?;谥鳈C(jī)的ids有兩種主要類(lèi)型:基于應(yīng)用和基于操作系統(tǒng)。 基于應(yīng)用的ids在應(yīng)用層搜集信息。應(yīng)用層的例子有:數(shù)據(jù)庫(kù)管理軟件、web服務(wù)器或防火墻等產(chǎn)生的日志文件。這種方式可以更好地獲取在系統(tǒng)上用戶活動(dòng)(如可以利用特定應(yīng)用的特點(diǎn)來(lái)監(jiān)視用戶活動(dòng)),但也存在應(yīng)用層的脆弱性會(huì)破壞監(jiān)視和檢測(cè)的弱點(diǎn)?;诓僮飨到y(tǒng)的ids搜集在特定系統(tǒng)上的活動(dòng)信息,這些信息可以是操作系統(tǒng)產(chǎn)生的審計(jì)蹤跡,它也包括系統(tǒng)日志、其它操作系統(tǒng)進(jìn)程產(chǎn)生的日志以及那些在標(biāo)準(zhǔn)操作系統(tǒng)的審計(jì)和日志中沒(méi)有反映的系統(tǒng)對(duì)象的有關(guān)內(nèi)容。這種方式可以監(jiān)控對(duì)系統(tǒng)訪問(wèn)的主體和對(duì)象,并且可以將可疑的活動(dòng)映射到特定的用戶id上。同樣,操作系統(tǒng)的脆弱性也會(huì)破壞ids監(jiān)視與入侵分析的完整性,同時(shí)基于操作系統(tǒng)的ids必須建立在特定的操作系統(tǒng)平臺(tái)上,這就增加了開(kāi)銷(xiāo)。 基于主機(jī)的入侵檢測(cè)系統(tǒng)具有檢測(cè)效率高,分析代價(jià)小,分析速度快的特點(diǎn),能夠迅速并準(zhǔn)確地定位入侵者,并可以結(jié)合操作系統(tǒng)和應(yīng)用程序的行為特征對(duì)入侵進(jìn)行進(jìn)一步分析、響應(yīng)。比如,一旦檢測(cè)到有入侵活動(dòng),我們可以立即使該用戶的帳號(hào)失效,用戶的進(jìn)程中斷。基于主機(jī)的入侵檢測(cè)系統(tǒng)尤其對(duì)于獨(dú)立的服務(wù)器及應(yīng)用構(gòu)造簡(jiǎn)單,易于理解。也只有這種檢測(cè)方式能檢測(cè)出通過(guò)控制臺(tái)的入侵活動(dòng)。目前很多是基于主機(jī)日志分析的入侵檢測(cè)系統(tǒng)。 但基于主機(jī)的ids也有其不足之處:首先它在一定程度上依賴于系統(tǒng)的可靠性,它要求系統(tǒng)本身應(yīng)該具備基本的安全功能并具有合理的設(shè)置,然后才能提取入侵信息;即使進(jìn)行了正確的設(shè)置,對(duì)操作系統(tǒng)熟悉的攻擊者仍然有可能在入侵行為完成后及時(shí)地將系統(tǒng)日志抹去,從而不被發(fā)覺(jué);并且主機(jī)的日志能夠提供的信息有限,有的入侵手段和途徑不會(huì)在日志中有所反映,日志系統(tǒng)對(duì)網(wǎng)絡(luò)層的入侵行為無(wú)能為力,例如利用網(wǎng)絡(luò)協(xié)議棧的漏洞進(jìn)行的攻擊,通過(guò)ping命令發(fā)送大數(shù)據(jù)包,造成系統(tǒng)協(xié)議棧溢出而死機(jī),或是利用arp欺騙來(lái)偽裝成其他主機(jī)進(jìn)行通信等等,這些手段都不會(huì)被高層的日志記錄下來(lái)。在數(shù)據(jù)提取的實(shí)時(shí)性、充分性、可靠性方面基于主機(jī)日志的入侵檢測(cè)系統(tǒng)不如基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)。1.4.2 基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)搜集來(lái)自網(wǎng)絡(luò)層的信息。這些信息通常通過(guò)嗅包技術(shù),使用在混雜模式的網(wǎng)絡(luò)接口來(lái)獲得。圖1.3 基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)從圖1.3可以看出,基于網(wǎng)絡(luò)ids位于客戶端與服務(wù)端的通信鏈路中央,它可以訪問(wèn)到通信鏈路的所有層次。因此,這種ids可以監(jiān)視和檢測(cè)網(wǎng)絡(luò)層的攻擊(如syn洪流)。 理論上,網(wǎng)絡(luò)監(jiān)視可以獲得所有的網(wǎng)絡(luò)信息數(shù)據(jù),它在沒(méi)有特定的審計(jì)或日志機(jī)制的情況下,也可以獲得數(shù)據(jù);只要時(shí)間允許,可以在龐大的數(shù)據(jù)堆中提取和分析需要的數(shù)據(jù);可以對(duì)一個(gè)子網(wǎng)進(jìn)行檢測(cè),一個(gè)監(jiān)視模塊可以監(jiān)視同一網(wǎng)段的多臺(tái)主機(jī)的網(wǎng)絡(luò)行為;可以通過(guò)增加代理來(lái)監(jiān)視網(wǎng)絡(luò),不會(huì)影響現(xiàn)存的數(shù)據(jù)源,不改變系統(tǒng)和網(wǎng)絡(luò)的工作模式,也不影響主機(jī)性能和網(wǎng)絡(luò)性能;處于被動(dòng)接收方式,很難被入侵者發(fā)現(xiàn),隱蔽性好;可以從底層開(kāi)始分析,對(duì)基于協(xié)議攻擊的入侵手段有較強(qiáng)的分析能力。 基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)的主要問(wèn)題是監(jiān)視數(shù)據(jù)量過(guò)于龐大并且它不能結(jié)合操作系統(tǒng)特征來(lái)對(duì)網(wǎng)絡(luò)行為進(jìn)行準(zhǔn)確的判斷;如果網(wǎng)絡(luò)數(shù)據(jù)被加密,ids就不能掃描協(xié)議或內(nèi)容。 就如防盜系統(tǒng)一樣,基于網(wǎng)絡(luò)的ids系統(tǒng)通常放置于企業(yè)內(nèi)部網(wǎng)與外部網(wǎng)的訪問(wèn)出口上(如路由器、modem池),能夠監(jiān)控從協(xié)議攻擊到特定環(huán)境攻擊的范圍很廣的網(wǎng)絡(luò)攻擊行為,對(duì)于監(jiān)控網(wǎng)絡(luò)外部用戶的入侵和偵察行為非常理想?;谥鳈C(jī)的ids 適合于那些以數(shù)據(jù)或應(yīng)用服務(wù)器為中心的網(wǎng)絡(luò)系統(tǒng),并對(duì)那些已取得系統(tǒng)訪問(wèn)權(quán)限的用戶對(duì)系統(tǒng)的操作進(jìn)行監(jiān)控。究竟是在哪個(gè)層次上部署ids 需要根據(jù)使用者自身的安全策略來(lái)決定。 由于基于網(wǎng)絡(luò)的入侵檢測(cè)方式具有較強(qiáng)的數(shù)據(jù)提取能力,因此目前很多入侵檢測(cè)系統(tǒng)傾向于采用基于網(wǎng)絡(luò)的檢測(cè)手段來(lái)實(shí)現(xiàn)。(5):第二章 win32 api編程技術(shù) win32 api作為microsoft 32位平臺(tái)(包括:windows 9x,windows nt3.1/4.0/5.0,windowsce)的應(yīng)用程序編程接口,它是構(gòu)筑所有32位windows平臺(tái)的基石,所有在windows平臺(tái)上運(yùn)行的應(yīng)用程序都可以調(diào)用這些函數(shù)。 從事windows應(yīng)用程序開(kāi)發(fā),離不開(kāi)對(duì)win32 api函數(shù)的調(diào)用。只有充分理解和利用api函數(shù),才能深入到windows的內(nèi)部,充分挖掘系統(tǒng)提供的強(qiáng)大功能和靈活性。2.1 win32 api 概論 在windows程序設(shè)計(jì)領(lǐng)域處于發(fā)展初期時(shí),windows程序員可使用的編程工具唯有api函數(shù)。這些函數(shù)在程序員手中猶如積木塊一樣,可搭建出各種界面豐富、功能靈活的應(yīng)用程序。不過(guò),由于這些函數(shù)結(jié)構(gòu)復(fù)雜,所以往往難以理解,而且容易誤用。 實(shí)際上,程序員要想開(kāi)發(fā)出更靈活、更實(shí)用、更具效率的應(yīng)用程序,必然要涉及到直接使用api函數(shù)。雖然類(lèi)庫(kù)和控件使應(yīng)用程序的開(kāi)發(fā)容易得多,但它們只提供microsoft windows的一般功能,對(duì)于一些比較復(fù)雜和特殊的功能來(lái)說(shuō),單使用類(lèi)庫(kù)和控件是難以實(shí)現(xiàn)的,必須直接使用api函數(shù)來(lái)編寫(xiě)。api函數(shù)是構(gòu)筑整個(gè)windows框架的基石,只有充分理解和利用api函數(shù),才能深入到windows的內(nèi)部,充分發(fā)揮各種32位平臺(tái)的強(qiáng)大功能和靈活性,才能成功地?cái)U(kuò)展和突破類(lèi)庫(kù)、控件和可視開(kāi)發(fā)環(huán)境的限制。 win32 api即為microsoft 32位平臺(tái)的應(yīng)用程序編程接口(application programming interface)。所有在win32平臺(tái)上運(yùn)行的應(yīng)用程序都可以調(diào)用這些函數(shù)。 使用win32 api,應(yīng)用程序可以充分挖掘windows的32位操作系統(tǒng)的潛力。 mircrosoft的所有32位平臺(tái)都支持統(tǒng)一的api,包括函數(shù)、結(jié)構(gòu)、消息、宏及接口。使用 win32 api不但可以開(kāi)發(fā)出在各種平臺(tái)上都能成功運(yùn)行的應(yīng)用程序,而且也可以充分利用每個(gè)平臺(tái)特有的功能和屬性。 在具體編程時(shí),程序?qū)崿F(xiàn)方式的差異依賴于相應(yīng)平臺(tái)的底層功能的不同。最顯著的差異是某些函數(shù)只能在更強(qiáng)大的平臺(tái)上實(shí)現(xiàn)其功能。例如,安全函數(shù)只能在windows nt操作系統(tǒng)下使用。另外一些主要差別就是系統(tǒng)限制,比如值的范圍約束,或函數(shù)可管理的項(xiàng)目個(gè)數(shù)等等。標(biāo)準(zhǔn)win32 api函數(shù)可以分為以下幾類(lèi):窗口管理l窗口通用控制lshell特性l圖形設(shè)備接口l系統(tǒng)服務(wù)l國(guó)際特性l網(wǎng)絡(luò)服務(wù)l 由于我們的系統(tǒng)是處于windows平臺(tái)下,相應(yīng)的就要研究windows平臺(tái)下的系統(tǒng)監(jiān)控程序設(shè)計(jì)的常用技術(shù)。由于監(jiān)控程序是針對(duì)每個(gè)進(jìn)程的,每個(gè)進(jìn)程都有自己的地址空間,它們之間不能任意訪問(wèn),為了監(jiān)視每個(gè)進(jìn)程的api函數(shù)調(diào)用情況,就需要各個(gè)進(jìn)程和監(jiān)控程序進(jìn)行通信。2.2 跨進(jìn)程api hook 眾所周知windows應(yīng)用程序的各種系統(tǒng)功能是通過(guò)調(diào)用api函數(shù)來(lái)實(shí)現(xiàn)。api hook就是給系統(tǒng)的api附加上一段小程序,它能監(jiān)視甚至控制應(yīng)用程序?qū)pi函數(shù)的調(diào)用。所謂跨進(jìn)程也就是讓自己的程序來(lái)控制別人程序的api調(diào)用了。2.2.1 api hook理論 通過(guò)對(duì)win32 pe文件的分析,我們知道在pe文件中的import table內(nèi)存儲(chǔ)著api函數(shù)的很多信息。其中包括api的函數(shù)名,調(diào)用地址等等。而操作系統(tǒng)在執(zhí)行pe文件時(shí)會(huì)先將其映射到內(nèi)存中。在映射的同時(shí)還會(huì)把當(dāng)前版本操作系統(tǒng)中api函數(shù)的入口地址寫(xiě)入import table中一組與api調(diào)用相關(guān)的結(jié)構(gòu)體內(nèi),用于該應(yīng)用程序的api調(diào)用。當(dāng)應(yīng)用程序調(diào)用api時(shí),他會(huì)在自己內(nèi)存映像里尋找api的入口地址,然后執(zhí)行call指令。如此一來(lái),通過(guò)修改應(yīng)用程序內(nèi)存映像的import table中api函數(shù)的入口地址,就可以達(dá)到重定向api的目的。將api地址改為我們自己函數(shù)的地址,這樣我們的函數(shù)就可以完成對(duì)api的監(jiān)視和控制了。2.2.2 api hook的實(shí)現(xiàn)/*1*/handle hcurrent = getmodulehandle(null);/*2*/image_dos_header *pidh;/*3*/image_nt_headers *pinh;/*4*/image_data_directory *psymboltable;/*5*/image_import_de腳本or *piid;/*6*/pidh = (image_dos_header *)hcurrent; /*7*/pinh = (image_nt_headers *)(dword)hcurrent + pidh-e_lfanew);/*8*/psymboltable = &pinh-optionalheader.datadirectory1;/*9*/piid =(image_import_de腳本or *)(dword)hcurrent + psymboltable-virtualaddress);/*10*/do /*11*/ image_thunk_data *pitd,*pitd2;/*12*/ pitd = (image_thunk_data *)(dword)hcurrent + piid-originalfirstthunk);/*13*/ pitd2 = (image_thunk_data *)(dword)hcurrent + piid-firstthunk);/*14*/ do /*15*/ image_import_by_name *piibn;/*16*/ piibn = (image_import_by_name *)(dword)hcurrent + *(dword *)pitd);/*17*/ proc *ppfn = (proc *)(pitd2-u1.function);/*18*/ if (!strcmp(messageboxw,(char *)piibn-name) /*19*/ oldmsg = (msgbox無(wú)效)(ppfn);/*20*/ dword addr = (dword)mymessage;/*21*/ dword written = 0;/*改變內(nèi)存讀寫(xiě)狀態(tài)*/*22*/ dword oldaccess;/*23*/ virtualprotect(&pitd2-u1.function,sizeof(dword),page_writecopy,&oldaccess);/*24*/ apiaddress = (dword)&pitd2-u1.function;/*向內(nèi)存映像寫(xiě)入數(shù)據(jù)*/*25*/ writeprocessmemory(getcurrentprocess(),&pitd2-u1.function, &addr,sizeof(dword), &written);/*26*/ /*27*/ pitd+;pitd2+;/*28*/ while (pitd-u1.function);/*29*/ piid+;/*30*/ while (piid-firstthunk + piid-characteristics + piid-forwarderchain + piid-name + piid-timedatestamp);分析:(1) 尋覓import talbe在/*1*/中使用getmodulehandle(null)來(lái)返回當(dāng)前進(jìn)程在內(nèi)存中映像的基地址。但這個(gè)值在文檔中僅僅被描述為“a module handle for the specified module”,雖然他確實(shí)是進(jìn)程內(nèi)存映像的基地址。如果不太放心的話也可以使用getmoduleinformation函數(shù)來(lái)獲得基地址,只不過(guò)要額外包含psapi.h和psapi.lib了。在/* 6 */里先找到image_dos_header結(jié)構(gòu),起始地址就是映像的基地址。/*7*/通過(guò)image_dos_header給出的pe文件頭的偏移量,找到image_nt_headers結(jié)構(gòu)。順藤摸瓜,image_nt_headers里的optionalheader中的datadirectory數(shù)組里的第二個(gè)元素正是指向我們想要的import table的地址。在/*9*/中將其轉(zhuǎn)化為一個(gè)image_import_de腳本or的結(jié)構(gòu)指針存入piid中。(2) 替換的api函數(shù)入口地址在/*12*/和/*13*/中分別取得originalfirstthunk和firstthunk結(jié)構(gòu),用于以后得到api函數(shù)的名稱和入口地址。/*10*/的do循環(huán)遍歷每一個(gè)image_import_de腳本or結(jié)構(gòu)也就是應(yīng)用程序引用的每個(gè)dll。在/*14*/的循環(huán)中遍歷dll中的image_thunk_data結(jié)構(gòu)來(lái)一一查詢api的信息。/*16*/中將originalfirstthunk轉(zhuǎn)換為image_import_by_name結(jié)構(gòu)用于獲得api函數(shù)的名稱進(jìn)行比對(duì)。/*18*/找到messageboxw函數(shù)之后,在/*19*/保存其原始入口地址便于以后恢復(fù)時(shí)使用。在/*23*/需要用virtualprotect改變一下內(nèi)存區(qū)域的讀寫(xiě)性,因?yàn)橐话銘?yīng)用程序的映像都是只讀的,直接寫(xiě)入會(huì)造成一個(gè)非法訪問(wèn)的異常出現(xiàn)。在/*25*/我們寫(xiě)入自己函數(shù)的地址。這樣就基本完成一個(gè)api函數(shù)的重定向。 (3) 其他恢復(fù)函數(shù)的api入口地址相對(duì)比較簡(jiǎn)單。只要把保存的值再寫(xiě)回去就可以了。上面的程序中/*24*/我用apiaddress保存了存有messageboxw入口地址的地方的地址,便于以后調(diào)用writeprocessmemory恢復(fù)時(shí)使用。 2.2.3 跨進(jìn)程理論我們要用自己的函數(shù)來(lái)替代別人程序里的api函數(shù),但我們的函數(shù)與別人的程序處于不同的進(jìn)程空間內(nèi)。不同的進(jìn)程空間是不能相互調(diào)用函數(shù)的。因此我們要想辦法把自己的函數(shù)放入別人的進(jìn)程空間去。這時(shí)我們就需要使用dll injection技術(shù)了。 簡(jiǎn)而言之,dll injection就是想辦法讓對(duì)方的進(jìn)程加載我們的一個(gè)dll程序,把需要替換的函數(shù)放在我們這個(gè)dll里。如此一來(lái),我們的函數(shù)就進(jìn)入了別人的進(jìn)程空間了。dll injection方法很多,我在這里使用setwindowshookex函數(shù)來(lái)達(dá)到目的。主要有這幾個(gè)原因:1,不用重新啟動(dòng)系統(tǒng),調(diào)試方便。2,可以利用消息循環(huán)機(jī)制進(jìn)行兩個(gè)進(jìn)程之間的通信,可以較好的掌握hook的狀態(tài),便于安裝與卸載。 setwindowshookex之所以能完成dll injection是因?yàn)樗o一個(gè)應(yīng)用程序某個(gè)環(huán)節(jié)加上一個(gè)hook,而hook就要有hook procedure也就是hook函數(shù)。如果這個(gè)hook函數(shù)在一個(gè)dll中,那么系統(tǒng)就會(huì)把這個(gè)dll加載到setwindowshookex的目標(biāo)進(jìn)程上。從而也就達(dá)到了我們dll injection的目的了。當(dāng)然這里我們會(huì)用wh_getmessage的hook進(jìn)行injection,因?yàn)檫@個(gè)hook可以用來(lái)監(jiān)視目標(biāo)進(jìn)程的消息循環(huán)方便我們的進(jìn)程與目標(biāo)進(jìn)程通信。 2.2.4 跨進(jìn)程的實(shí)現(xiàn)和幾點(diǎn)注意/* dllpart.dll */#include #include #include #include 無(wú)效def (winapi *msgbox無(wú)效)(hwnd,lpcwstr,lpcwstr,uint); msgbox無(wú)效 oldmsg; /*api原入口地址*/dword apiaddress; /*存儲(chǔ)api入口地址的地方的地址*/int winapi mymessage(hwnd hwnd ,lpcwstr m1,lpcwstr m2, uint m3) /*這是用來(lái)替換的函數(shù)*/return oldmsg(hwnd,buf,m2,mb_ok);const char szapp = dllpart.dll;hhook hhook; /*hook的句柄*/hmodule hinst; /*dll 模塊句柄,用于setwindowshookex函數(shù)*/hwnd htarget; /*目標(biāo)窗口句柄*/*dll 入口*/bool winapi dllmain(hinstance inst, dword reason, lpvoid lpvreserved)hinst = inst;switch (reason) case dll_process_attach:/*調(diào)試信息,表示dll已經(jīng)加載*/messagebox(null,dll_process_attach,szapp,mb_ok);break;case dll_process_detach:/*調(diào)試信息,表示dll已經(jīng)卸載*/messagebox(null,dll_process_detach,szapp,mb_ok);break;return true;/*顯示getlasterror的信息*/void showerr(const char *m) char message255;formatmessage(format_message_from_system,0,getlasterror(),makelangid(lang_neutral, sublang_default),message,255, 0);messagebox(null,message,m,mb_ok);/-void unhookapi() /*卸載api hook用*/void hookapi() /*加載api hook同上面介紹的函數(shù)一樣*/-/*用于wh_getmessage的hook procedure*/lresult callback getmsgproc(int ncode,wparam wparam, lparam lparam) if (ncode = hc_action) msg *msg = (msg *)lparam;if (msg-message = wm_char) if (msg-wparam = h) hookapi();if (msg-wparam = u) unhookapi();return callnexthookex(hhook,ncode,wparam,lparam);extern c _declspec(dllexport) setapihook(hwnd handle) dword threadid = getwindowthreadprocessid(handle, null);htarget = handle;messagebox(null, enabling callwndproc hook, szapp, mb_ok);hhook = setwindowshookex(wh_getmessage,getmsgproc,hinst,threadid); if (hhook) messagebox(null,hook ok!, szapp, mb_ok); else showerr(setwindowshookex);extern c _declspec(dllexport) unhookapihook() messagebox(null, disenabling callwndproc hook, szapp, mb_ok);if (unhookwindowshookex(hhook) messagebox(null,unhook ok!, szapp, mb_ok); else showerr(unhookwindowshookex);分析:幾個(gè)需要注意的問(wèn)題:setapihook和unhookapihook是我們自己進(jìn)程調(diào)用的用來(lái)加載wh_getmessage hook的函數(shù)。由于程序要用loadlibrary加載這個(gè)dll因此這兩個(gè)函數(shù)要用_declspec(dllexport)修飾,使其成為導(dǎo)出函數(shù),才能被getaddressproc函數(shù)找到。加上 extern c是讓編譯器使用c語(yǔ)言編碼方式。因?yàn)閏+編譯器會(huì)進(jìn)行dynamic binding(c+函數(shù)重載的實(shí)現(xiàn)),將函數(shù)的參數(shù)類(lèi)型附加到名稱上。是函數(shù)的導(dǎo)出名看起來(lái)像setapihookxytzx之類(lèi)的,不利于getaddressproc進(jìn)行引用。因此使用extern c讓編譯器不使用dynamic binding,自然使用externc的函數(shù)也就不能被重載了。不要忘記在getmsgproc最后要調(diào)用callnexthookex函數(shù),保證hook鏈的完整性。一定要在hook procedure中調(diào)用hookapi和unhookapi函數(shù),因?yàn)楸4鎍pi入口地址的地方在目標(biāo)進(jìn)程中,必須在目標(biāo)進(jìn)程的進(jìn)程空間內(nèi)完成卸載操作,不能在unhookapihook或是setapihook函數(shù)中調(diào)用,因?yàn)閡nhookapihook是我們的進(jìn)程調(diào)用的,因此在我們的進(jìn)程空間中。在這里使用unhookapi會(huì)造成一個(gè)非法訪問(wèn)的錯(cuò)誤。而使用hookapi會(huì)給自己的dll加上api hook。setwindowshookex的最后參數(shù)是threadid不是handle,因此要通過(guò)調(diào)用getwindowthreadprocessid轉(zhuǎn)換一下。 2.2.5 在跨進(jìn)程api hook時(shí)可能用到的其他技術(shù)(1) 主進(jìn)程與目標(biāo)進(jìn)程的信息交互和共享由于使用了wh_getmessage鉤子我們可以利用windows消息機(jī)制實(shí)現(xiàn)進(jìn)程間通訊。需要注意的是應(yīng)該使用postthreadmessage來(lái)發(fā)送讓wh_getmessage得到的消息而不是sendmessage或者postmessage,因?yàn)楹髢蓚€(gè)是用來(lái)給窗口發(fā)送消息的。而我們的wh_getmessage是hook在線程上面的,因此需使用postthreadmessage. 傳遞不太大的數(shù)據(jù)可以使用wm_copydata消息來(lái)進(jìn)行。同樣也應(yīng)該注意,如果使用mfc的窗口過(guò)程獲得消息就需要用sendmessage發(fā)送了。如果傳遞較大的數(shù)據(jù)或者希望數(shù)據(jù)共享比較方便可以開(kāi)辟共享內(nèi)存來(lái)進(jìn)行數(shù)據(jù)共享。這里簡(jiǎn)單分析一下使用共享內(nèi)存的代碼:handle hmap;switch (reason) case dll_process_attach:/*創(chuàng)建/打開(kāi)共享內(nèi)存區(qū)域*/hmap = createfilemapping(hfile *)0xffffffff, null, page_readwrite, 0, sizeof(globaldata), id_map);pg_data = (globaldata*)mapviewoffile(hmap,file_map_all_access,0 ,0 ,0);i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論