版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——北郵軟件安全期末復(fù)習(xí)整理軟件安全
2023.6
1.1概述
1.1.1信息安全的六性***
①保密性(C,confidentiality):信息不泄漏給非授權(quán)的用戶、實(shí)體或者過程的特性,。②完整性(I,integrity):數(shù)據(jù)未經(jīng)授權(quán)不能進(jìn)行改變的特性,即信息在存儲或傳輸過程中保持不被修改、不被破壞和丟失的特性。
③可用性(A,availability):可被授權(quán)實(shí)體訪問并按需求使用的特性,即當(dāng)需要時應(yīng)能存取所需的信息。④真實(shí)性:內(nèi)容的真實(shí)性。
⑤可核查性:對信息的傳播及內(nèi)容具有控制能力,訪問控制即屬于可控性。⑥可靠性:系統(tǒng)可靠性。
信息安全根源:繁雜性、開放性(系統(tǒng)、標(biāo)準(zhǔn)、業(yè)務(wù))信息安全特性:攻防特性、相對性、配角特性、動態(tài)性
1.1.2軟件安全要挾分類(GaryMcgraw)
①輸入驗(yàn)證與表示:輸入信任→特別字符、編碼和數(shù)字表示②API誤用:調(diào)用者沒有理解約定的目的
③安全特征:主要指認(rèn)證,訪問控制,機(jī)密性,密碼,權(quán)限管理等方面的內(nèi)容④時間與狀態(tài):死鎖、會話固定、競爭條件、擔(dān)憂全臨時文件⑤錯誤處理:沒有完全處理錯誤⑥代碼質(zhì)量⑦封裝⑧環(huán)境
OWASP的WEB安全風(fēng)險分類:認(rèn)證、授權(quán)、客戶端攻擊、命令執(zhí)行、信息泄露、規(guī)律攻擊
1.1.3軟件安全加固模型***
1.2緩沖區(qū)溢出原理
1.2.1緩沖區(qū)溢出原理***
緩沖區(qū)溢出是指當(dāng)計算機(jī)向緩沖區(qū)內(nèi)填充數(shù)據(jù)位數(shù)時超過了緩沖區(qū)本身的容量溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上。由于緩沖區(qū)溢出,相鄰的內(nèi)存地址空間被覆蓋,造成軟件出錯或崩潰。假使沒有采取限制措施,可以使用精心設(shè)計的輸入數(shù)據(jù)使緩沖區(qū)溢出,從而導(dǎo)致安全問題。
1.2.2緩沖區(qū)溢出預(yù)防
靜態(tài)保護(hù):不執(zhí)行代碼,通過靜態(tài)分析來發(fā)現(xiàn)代碼中可能存在的漏洞.靜態(tài)的保護(hù)技術(shù)包括編譯時參與限制條件,返回地址保護(hù),二進(jìn)制改寫技術(shù),基于源碼的代碼審計等.
動態(tài)保護(hù):通過執(zhí)行代碼分析程序的特性,測試是否存在漏洞,或者是保護(hù)主機(jī)上運(yùn)行的程序來防止來自外部的緩沖區(qū)溢出攻擊.
1.2.3系統(tǒng)棧的工作原理***
內(nèi)存的棧區(qū)實(shí)際上指的就是系統(tǒng)棧。系統(tǒng)棧由系統(tǒng)自動維護(hù),它用于實(shí)現(xiàn)高級語言中函數(shù)的調(diào)用。對于類似C語言這樣的高級語言,系統(tǒng)棧的PUSH/POP等堆棧平衡細(xì)節(jié)是透明的。
每一個函數(shù)獨(dú)占自己的棧幀空間。當(dāng)前正在運(yùn)行的函數(shù)的棧幀總是在棧頂。Win32系統(tǒng)提供兩個特別的寄放器用于標(biāo)識位于系統(tǒng)棧頂端的棧幀。
(1)ESP:棧指針寄放器(extendedstackpointer),其內(nèi)存放著一個指針,該指針永遠(yuǎn)指向系統(tǒng)棧最上面的一個棧幀的棧頂。
(2)EBP:基址指針寄放器(extendedbasepointer),其內(nèi)存放著一個指針,該指針永遠(yuǎn)指向系統(tǒng)棧最上面的一個棧幀的底部。
在函數(shù)棧幀中,一般包含以下幾類重要信息。(1)局部變量:為函數(shù)局部變量開拓的內(nèi)存空間。
(2)棧幀狀態(tài)值:保存前棧幀的頂部和底部(實(shí)際上只保存前棧幀的底部,前棧幀的頂部可以通過堆棧平衡計算得到),用于在本幀被彈出后恢復(fù)出上一個棧幀。
(3)函數(shù)返回地址:保存當(dāng)前函數(shù)調(diào)用前的“斷點(diǎn)〞信息,也就是函數(shù)調(diào)用前的指令位置,以便在函數(shù)返回時能夠恢復(fù)到函數(shù)被調(diào)用前的代碼區(qū)中繼續(xù)執(zhí)行指令。
函數(shù)調(diào)用大致包括以下幾個步驟。
(1)參數(shù)入棧:將參數(shù)從右向左一次壓入系統(tǒng)棧中。
(2)返回地址入棧:將當(dāng)前代碼區(qū)調(diào)用指令的下一跳指令地址壓入棧中,供函數(shù)返回時繼續(xù)執(zhí)行。
(3)代碼區(qū)跳轉(zhuǎn):處理器從當(dāng)前代碼區(qū)跳轉(zhuǎn)到被調(diào)用函數(shù)的入口處。
(4)棧幀調(diào)整:保存當(dāng)前棧幀的狀態(tài)值,以備后面恢復(fù)本棧幀時使用(EBP入棧);將當(dāng)前棧幀切換到新棧幀(將ESP值裝入EBP,更新棧幀底部);給新棧幀分派空間(把ESP減去所需空間的大小,抬高棧幀);
1.2.4基于鄰接變量修改的緩沖區(qū)溢出的原理
略
1.3緩沖區(qū)溢出利用
1.3.1什么是shellcode
shellcode:緩沖區(qū)溢出攻擊中植入進(jìn)程的代碼。
1.3.2如何定位shellcode
①棧幀移位與jmpesp②獲取“跳板〞的地址③使用“跳板〞定位的exploit
1.3.3緩沖區(qū)的組織
①緩沖區(qū)的組成:填充物、吞噬返回地址的數(shù)據(jù)、shellcode②抬高棧頂保護(hù)shellcode③函數(shù)返回地址移位
1.3.4shellcode編碼
首先,所有的字符串函數(shù)都會對NULL字節(jié)進(jìn)行限制。
其次,有些函數(shù)還會要求shellcode必需為可見字符的ASCII或Unicode的值。最終,在進(jìn)行網(wǎng)絡(luò)攻擊時,基于特征的系統(tǒng)往往會對常見的shellcode進(jìn)行攔截
1.4漏洞挖掘方法
1.4.1什么是漏洞挖掘技術(shù)
1.4.2簡單的fuzzing過程
Fuzz的主要目的是〞崩潰crash〞,〞中斷break〞,〞銷毀destroy〞。
Fuzz技術(shù)的思想就是利用“暴力〞來實(shí)現(xiàn)對目標(biāo)程序的自動化測試,然后監(jiān)視檢查其最終的結(jié)果,假使符合某種狀況就認(rèn)為程序可能存在某種漏洞或者問題。
1.4.3文件類型漏洞挖掘
攻擊者往往會在約定的數(shù)據(jù)格式進(jìn)行稍許修改,觀測軟件在解析這種“畸形文件〞時是否會發(fā)生錯誤,緩沖區(qū)是否會溢出等。
(1)以一個正常的文件模板作為基礎(chǔ),依照一定規(guī)則產(chǎn)生一批畸形文件。(2)將畸形文件逐一送入軟件進(jìn)行解析,并監(jiān)視軟件是否會拋出異常。(3)記錄軟件產(chǎn)生的錯誤信息,如寄放器狀態(tài)、棧狀態(tài)等。
(4)用日志或其他UI形式向測試人員展示異常信息,以進(jìn)一步鑒定這些錯誤是否能被利用。
Blindfuzz:即尋常所說的“盲測〞,就是在隨機(jī)位置插入隨機(jī)的數(shù)據(jù)以生成畸形文件。然而現(xiàn)代軟件往往使用十分繁雜的私有數(shù)據(jù)結(jié)構(gòu)。產(chǎn)生測試用例的策略缺少針對性,生成大量無效測試用例,難以發(fā)現(xiàn)繁雜解析器深層規(guī)律的漏洞等。
SmartFuzz:面向規(guī)律(測試前首先明確要測試的目標(biāo)是解析文件的程序規(guī)律,而不是文件本身)、面向數(shù)據(jù)類型(面向數(shù)據(jù)類型測試是指能夠識別不同的數(shù)據(jù)類型,并
且能夠針對目標(biāo)數(shù)據(jù)的類型依照不同規(guī)則來生成畸形數(shù)據(jù))、基于樣本(要求在測試前構(gòu)造一個能夠包含幾乎所有數(shù)據(jù)結(jié)構(gòu)的文件來作為樣本)。
1.4.4FTP漏洞挖掘
它的基本原理就是通過對FTP協(xié)議中的命令及命令參數(shù)進(jìn)行臟數(shù)據(jù)替換,構(gòu)造畸形的FTP命令并發(fā)送給被測試FTP服務(wù)程序。
2.1線程/進(jìn)程安全
2.1.1線程、進(jìn)程機(jī)制***進(jìn)程:
程序在計算機(jī)上的一次執(zhí)行活動。運(yùn)行一個程序,相當(dāng)于啟動了一個進(jìn)程。進(jìn)程是操作系統(tǒng)進(jìn)行資源分派的單位,通俗地講,是一個正在執(zhí)行的程序。進(jìn)程的安全主要表達(dá)在線程安全,同時涉及進(jìn)程的應(yīng)用級別、其對系統(tǒng)的要挾性等。線程:
進(jìn)程中的一個實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,它可與同屬一個進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個線程可以創(chuàng)立和撤消另一個線程,同一進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行。線程的安全性主要來源于其運(yùn)行的并發(fā)性和對資源的共享性。線程有創(chuàng)立、可運(yùn)行、運(yùn)行中、阻塞、死亡五種狀態(tài)。
2.1.2線程同步安全
所謂同步,就是在發(fā)出一個功能調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回,同時其它線程也不能調(diào)用這個方法。
2.1.3線程協(xié)作安全
多個線程合作完成一件事情的幾個步驟,此時線程之間實(shí)現(xiàn)了協(xié)作。由于線程隨時都有可能搶占CPU,可能在前面一個步驟沒有完成時,后面的步驟線程就已經(jīng)運(yùn)行,該安全隱患造成系統(tǒng)得不到正確結(jié)果。
解決:在運(yùn)行一個線程時,命令其他線程等待該線程運(yùn)行完畢,才能搶占CPU進(jìn)行運(yùn)行。
2.1.4線程死鎖問題***
死鎖:是指兩個或兩個以上的線程在執(zhí)行過程中,因爭奪資源而造成的一種相互等待的現(xiàn)象。
條件:互斥、請求等待、不搶占、循環(huán)等待解決:可以撤消陷于死鎖的全部線程。
可以逐個撤消陷于死鎖的進(jìn)程,直到死鎖不存在。
從陷于死鎖的線程中逐個強(qiáng)迫放棄所占用的資源,直至死鎖消失。
2.1.5線程控制安全
線程控制主要是對線程生命周期的一些操作,如暫停、繼續(xù)、消亡等。線程生命周期中的安全問題主要表達(dá)在:
線程暫?;蛘呓K止時,可能對某些資源的鎖并沒有釋放,它所保持的任何資源都會保持鎖定狀態(tài);
線程暫停之后,我們無法預(yù)計它什么時候會繼續(xù)(一般和用戶操作有關(guān)),假使對某個資源的鎖長期被保持,其他線程在任何時候都無法再次訪問該資源,極有可能造成死鎖。解決:
1:當(dāng)需要暫停時,干脆讓線程的run()方法終止運(yùn)行以釋放資源(實(shí)際上就是讓該線程永久終止);繼續(xù)時,新開拓一個線程繼續(xù)工作。怎樣讓run()方法終止呢?一般可用一個標(biāo)志告訴線程什么時候通過退出自己的run()方法來中止自己的執(zhí)行。
2:將線程暫?;蚶^續(xù),不使用suspend()和resume(),可在Thread類中置入一個標(biāo)志,指出線程應(yīng)當(dāng)活動還是掛起。若標(biāo)志指出線程應(yīng)當(dāng)掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個notify()重新啟動線程。
3:不推薦使用stop()來終止阻塞的線程,而應(yīng)換用由Thread提供的interrupt()方法,以便中止并退出堵塞的代碼
2.1.6隱蔽信道問題、客體重用問題
2.2輸入輸出安全
2.2.1典型的輸入安全問題及預(yù)防***
①數(shù)字輸入安全:確定數(shù)字格式、負(fù)數(shù)驗(yàn)證、判斷數(shù)值溢出
②字符串輸入安全:正則表達(dá)式、明確匹配數(shù)據(jù)的開始和終止、在輸入中拒絕特別字符
③環(huán)境變量輸入安全:環(huán)境變量在同一個交互環(huán)境下只有一個實(shí)例。不同的交互環(huán)境有不同的實(shí)例,互不干擾。其功能是用于影響該環(huán)境下進(jìn)程的行為。環(huán)境變量的內(nèi)容、存儲格式給攻擊者以機(jī)遇。
解決:限制環(huán)境變量的使用權(quán)限、可適當(dāng)破壞環(huán)境變量在shell之間的共享、用戶定義的環(huán)境變量,需要進(jìn)行嚴(yán)格的檢查。
④文件名安全:不讓用戶自己來輸入文件名、限制文件名字符種類、不允許命名可能和物理設(shè)備沖突的文件名。
2.2.2數(shù)據(jù)庫輸入安全
①惡意輸入:攻擊者通過對數(shù)據(jù)庫的惡意輸入,可以將信息注入正在運(yùn)行的流程,獲取敏感數(shù)據(jù),甚至危害進(jìn)程的運(yùn)行狀態(tài)。攻擊者通過這種技術(shù),可以完成以下攻擊活動:改變一條SQL語句的具體條件、添加并且運(yùn)行額外的SQL的語句、機(jī)要調(diào)用函數(shù)和存儲過程。
②賬戶和口令:解決問題的方法主要有:
不到萬不得已,不使用管理員賬戶;使用最小特權(quán)賬戶,不給以額外的權(quán)限;
不允許使用空口令連接數(shù)據(jù)庫,防止管理員疏忽而創(chuàng)立了空口令;
數(shù)據(jù)庫連接字符串存放在配置文件中,最好可以加密,而不是代碼中以明文顯示;發(fā)生錯誤時,僅給客戶端通知信息,不給具體原因,防止攻擊者利用這些通知信息進(jìn)行數(shù)據(jù)庫猜測。
2.2.3什么是國際化安全
國際化的主要目的,是調(diào)整軟件,使之能適用于不同的語言及地區(qū)。三個部分:資源文件、讀取工具、應(yīng)用程序。
目標(biāo)程序所支持的字符集和源數(shù)據(jù)屬于的字符集可能不一致。此種狀況下,可能造成系統(tǒng)顯示出錯。
1:當(dāng)目標(biāo)程序所支持的字符集和源數(shù)據(jù)屬于的字符集完全不兼容時,數(shù)據(jù)無法顯示(或者以亂碼形式顯示)。
2:當(dāng)目標(biāo)程序所支持的字符集是源數(shù)據(jù)屬于的字符集的子集時,信息會部分丟失。
2.3面向?qū)ο缶幊贪踩?/p>
面向?qū)ο缶幊谈拍詈突咎卣?**
面向?qū)ο髲?qiáng)調(diào)人類在日常的思維規(guī)律中經(jīng)常采用的思維方法與原則,其中的重要概念如抽象、分類、繼承、聚合、多態(tài)等,都和我們的生活息息相關(guān),這也成為面向?qū)ο笏枷肓餍械脑颉?/p>
1:對象(Object)。對象構(gòu)成客觀世界的一個個實(shí)體,從最簡單的字符串到繁雜的軟件系統(tǒng)等,均可看作對象,廣義上,對象不僅能表示具體的實(shí)體,還能表示抽象的規(guī)則或事件等。
對象具有兩個方面的特點(diǎn):能夠保存一定的狀態(tài),由“屬性〞來表達(dá);能執(zhí)行一定的動作,“方法〞來表達(dá)。
2:類(class)。類是用于描述同一類型的對象的一個抽象的概念,類中定義了這一類對象所應(yīng)具有的屬性和方法。多個對象的抽象成為類,類的具體化就是對象,尋常的說法,創(chuàng)立一個對象實(shí)際上就是將類實(shí)例化。
3:消息和方法。消息是指對象之間進(jìn)行通信的數(shù)據(jù)或者數(shù)據(jù)結(jié)構(gòu)。在通信的過程中,一個消息發(fā)送給某個對象,實(shí)際上相當(dāng)于調(diào)用另一個對象的方法,消息可以是這個方法的參數(shù)。
4:繼承(Inheritance)。繼承性是指子類自動共享父類屬性和方法的機(jī)制。繼承的思想來源于:在定義和實(shí)現(xiàn)一個新的類時,可以將一個已經(jīng)存在的類作為父類,新類的定義在這個父類的基礎(chǔ)之上進(jìn)行,把這個父類中的屬性和方法作為自己的屬性和方法,并可參與若干新的屬性和方法。繼承性是面向?qū)ο蟪绦蛟O(shè)計語言不同于其它語言的重要特點(diǎn),是其他語言所沒有的。
5:多態(tài)(Polymorphism)。多態(tài),是指不同類型對象,收到同一消息(調(diào)用同一個函數(shù)等),根據(jù)其類型,可以產(chǎn)生不同的結(jié)果。在面向?qū)ο笳Z言中,一般具有兩種形式的
多態(tài):靜態(tài)多態(tài),一般指函數(shù)重載;動態(tài)多態(tài),一般利用繼承和函數(shù)覆蓋。
有了多態(tài)性,不同對象可以以適合自身的方式,去響應(yīng)一致的消息,加強(qiáng)了軟件的可擴(kuò)展性和和重用性。
6:封裝(Encapsulation)。封裝,保證了軟件的每個組成部分具有優(yōu)良的模塊性,通過定義外部接口使模塊之間的耦合性達(dá)到最小。在面向?qū)ο蟮恼Z言中,對象是封裝的最基本單位,增加了程序結(jié)構(gòu)的明了性,防止了程序相互依靠性而帶來的變動影響。
面向?qū)ο缶幊痰漠惓2东@機(jī)制***
在面向?qū)ο蟮恼Z言中,可以有兩種方法進(jìn)行異常的捕獲:就地捕獲異常;將異常向前端(調(diào)用方)拋出。
2.3.1對象內(nèi)存分派與釋放***
分派:對象分派內(nèi)存,一般叫做對象的實(shí)例化。聲明不同于創(chuàng)立,聲明對象,只分派了存儲地址的存儲器位置,還沒有為其分派內(nèi)存。給對象分派內(nèi)存也稱為實(shí)例化對象。C++中,和對象釋放內(nèi)存相關(guān)的,一般是析構(gòu)函數(shù)。析構(gòu)函數(shù)的作用是釋放對象申請的資源。
釋放:析構(gòu)函數(shù)尋常由系統(tǒng)自動調(diào)用,在以下幾種狀況下系統(tǒng)會調(diào)用析構(gòu)函數(shù):全局對象在進(jìn)程終止時;堆中對象進(jìn)行delete/free操作時;棧中對象生命周期終止時:包括離開作用域、函數(shù)正常正常跳出或者拋出異常等。
Java去除了析構(gòu)函數(shù),取而代之的是:finalize()方法。當(dāng)Java虛擬機(jī)已確定尚未終止的任何線程無法再通過任何方法訪問此對象時,由對象的垃圾回收器調(diào)用此方法。對于任何給定對象,Java虛擬機(jī)最多只調(diào)用一次finalize()方法。
2.3.2靜態(tài)成員安全***
靜態(tài)成員變量存儲在全局?jǐn)?shù)據(jù)區(qū),為該類的所有對象共享,不屬于任何對象的存儲空間,規(guī)律上所有對象都共享這一存儲單元,對靜態(tài)成員變量的任何的任何操作影響這一存儲單元的所有對象。
靜態(tài)成員附屬于一個類,不是某對象的一部分,非靜態(tài)成員可以直接訪問類中靜態(tài)的成員,但是靜態(tài)成員不可以訪問非靜態(tài)成員。
靜態(tài)成員的優(yōu)點(diǎn)是:消除傳統(tǒng)程序設(shè)計方法中的全局變量,為真正實(shí)現(xiàn)封裝性提供了必要手段。
由于靜態(tài)成員的共享性,就必需考慮其數(shù)據(jù)安全。
1:靜態(tài)成員的初始化操作先于對象的實(shí)例化而進(jìn)行,所以在它們的初始化中不要啟動線程,以免造成數(shù)據(jù)訪問的問題。同時靜態(tài)成員的初始化操作中也不應(yīng)當(dāng)有依靠關(guān)系;
2:不用靜態(tài)變量保存某個對象的狀態(tài),而應(yīng)當(dāng)保存所有對象應(yīng)當(dāng)共有的狀態(tài);
3:不用對象來訪問靜態(tài)變量,而用類名來訪問靜態(tài)變量。
2.3.3異常/錯誤的基本機(jī)制
編譯錯誤、運(yùn)行錯誤、規(guī)律錯誤
當(dāng)系統(tǒng)底層出現(xiàn)異常,實(shí)際上是將異常用一個對象包裝起來,傳給調(diào)用方(客戶端),俗稱拋出(throw)。拋出給函數(shù)的調(diào)用者;假使調(diào)用者具有對異常處理的代碼,則將異常進(jìn)行處理;否則將異常繼續(xù)向前拋出;假使直到用戶端還沒有對異常進(jìn)行處理,異常將會在標(biāo)準(zhǔn)輸出(如控制臺)上打印。
代碼中出現(xiàn)異常,在該作用域內(nèi),出現(xiàn)異常代碼后面的其他代碼將不會執(zhí)行。
2.3.4異常捕獲中的安全
當(dāng)一個模塊中可能出現(xiàn)異常時,一般狀況下,可以就地捕獲異常,過程如下:1:用try塊將可能出現(xiàn)異常的代碼包起來;2:用catch塊來捕獲異常并處理異常;
3:假使有一些工作是不管異常是否出現(xiàn)都要執(zhí)行的,則將相應(yīng)的代碼用finally塊將其包起來。
由于try塊后面可以接多個catch塊,因此,可以用某一個catch用于捕獲某種異常。當(dāng)try中出現(xiàn)異常,程序?qū)⒃赾atch中尋覓是否有相應(yīng)的異常類型的處理代碼,假使有,就處理,假使沒有,繼續(xù)向下找。
1:將大量代碼放入try塊,雖然可以保證安全性,但是系統(tǒng)開銷較大,程序員務(wù)必在系統(tǒng)開銷和安全性之間找到一個平衡。
2:以上代碼的catch塊中,是簡單的打印提醒信息,實(shí)際的系統(tǒng)中,你可能要根據(jù)實(shí)際需求來使用不同的異常處理方法。
2.3.5異常處理中的安全
finally最大的特點(diǎn)就是:在try塊內(nèi)即使跳出了代碼塊,甚至跳出函數(shù),finally內(nèi)的代碼依舊能夠運(yùn)行。
異常尋常有兩種處理方法:就地處理和向客戶端傳遞。
1:就地處理方法可以很便利地定義提醒信息,對于一些比較簡單的異常處理,可以選用這種方法。
2:向客戶端傳遞的方法,其優(yōu)勢在于可以充分發(fā)揮客戶端的能力,假使異常的處理依靠于客戶端,或者某些處理過程在本地?zé)o法完成,就必需向客戶端傳遞。舉一個例子,如數(shù)據(jù)庫連接代碼,可能出現(xiàn)異常,但是異常的處理最好傳遞給客戶端,由于客戶端在調(diào)用這塊代碼的同時,可能要根據(jù)實(shí)際狀況,獲取環(huán)境參數(shù),進(jìn)行比較繁雜的處理。這樣做的好處是:在客戶端可以進(jìn)行更為豐富的異常處理,不僅增加了可擴(kuò)展性,也可以做到更加安全的代碼保障。所以,一般狀況下,模塊中的異常,假使確定可以就地處理
則可,否則就應(yīng)當(dāng)向客戶端拋出。不過,異常不斷向客戶端拋出,會增加系統(tǒng)開銷。
2.4WEB安全編程
2.4.1WEB頁面數(shù)據(jù)交換的四種方法***
在HTTP協(xié)議中一共有4種方法來完成這件事情:URL傳值;表單傳值;Cookie方法;session方法。
2.4.2避免URL操作攻擊
1:為了避免非登陸用戶進(jìn)行訪問,對于每一個只有登錄成功才能訪問的頁面,應(yīng)當(dāng)進(jìn)行session的檢查(session檢查的內(nèi)容在下一個章節(jié)提到);
2:為限制用戶訪問未被授權(quán)的資源,可在查詢時將登錄用戶的用戶名也考慮進(jìn)去。
2.4.3頁面狀態(tài)值安全
URL傳值:簡單性和平臺支持的多樣性
1:傳輸?shù)臄?shù)據(jù)只能是字符串,對數(shù)據(jù)類型具有一定限制;2:傳輸數(shù)據(jù)的值會在瀏覽器地址欄里面被看到。
表單傳值:1:和URL方法類似,該方法傳輸?shù)臄?shù)據(jù),也只能是字符串,對數(shù)據(jù)類型具有一定限制;
2:傳輸數(shù)據(jù)的值雖然可以保證在瀏覽器地址欄內(nèi)不被看到,但是在客戶端源代碼里面也會被看到。
Cookie方法:Cookie是一個小的文本數(shù)據(jù),由服務(wù)器端生成,發(fā)送給客戶端瀏覽器,客戶端瀏覽器假使設(shè)置為啟用cookie,則會將這個小文本數(shù)據(jù)保存到其某個目錄下的文本文件內(nèi)。在客戶端的瀏覽器上,我們看不到任何的和傳遞的值相關(guān)的信息,說明在客戶端瀏覽器中,Cookie中的數(shù)據(jù)是安全的。
由于Cookie是以文件形式保存在客戶端的,客戶端存儲的Cookie文件就可能敵方獲知。
利用跨站腳本技術(shù),將信息發(fā)給目標(biāo)服務(wù)器;為了隱蔽跨站腳本的URL,甚至可以結(jié)合Ajax(異步Javascript和XML技術(shù))在后臺竊取Cookie;通過某些軟件,竊取硬盤下的Cookie;利用客戶端腳本盜取Cookie。
1:Cookie的值能夠持久化,即使客戶端機(jī)器關(guān)閉,下次開啟還是可以得到里面的值。
2:Cookie可以幫助服務(wù)器端保存多個狀態(tài)信息,但是不用服務(wù)器端專門分派存儲資源,減輕了服務(wù)器端的負(fù)擔(dān)。
3:Cookie可以持久保持一些和客戶相關(guān)的信息。解決方法:替代、及時刪除、禁用
Session方法:本質(zhì)上講,會話(session)的含義是指某個用戶在網(wǎng)站上的有始有終的一系列動作的集合。session中的數(shù)據(jù)可以被同一個客戶在網(wǎng)站的一次會話過程共享。
session機(jī)制最大的擔(dān)憂全因素是sessionId可以被攻擊者截獲,假使攻擊者通過一些手段知道了sessionId,由于sessionId是客戶端尋覓服務(wù)器端session對象的唯一標(biāo)識,攻擊者就有可能根據(jù)sesionId來訪問服務(wù)器端的session對象,得知session中的內(nèi)容,從而實(shí)施攻擊。
客戶在關(guān)閉瀏覽器時,一般不會通知服務(wù)器。由于關(guān)閉瀏覽器不會導(dǎo)致session被刪除,因此,客戶端關(guān)閉之后,session還未失效的狀況下,就給了攻擊者以機(jī)遇來獲取session中的內(nèi)容。
為了防止以上由于sessionId泄露而造成的安全問題,可以采用如下方法:1:在服務(wù)器端,可以在客戶端登陸系統(tǒng)時,盡量不要使用單一的sessionId對用戶登陸進(jìn)行驗(yàn)證??梢酝ㄟ^一定的手段,不時地變更用戶的sessionId;
2:在客戶端,應(yīng)當(dāng)在瀏覽器關(guān)閉時刪除服務(wù)器端的session,也就是說在關(guān)閉時必需通知服務(wù)器端。
2.4.4WEB跨站腳本攻擊***
跨站腳本,就是惡意攻擊者利用網(wǎng)站漏洞往Web頁面里插入惡意代碼,一般需要以下幾個條件:客戶端訪問的網(wǎng)站是一個有漏洞的網(wǎng)站,但是他沒有意識到;在這個網(wǎng)站中通過一些手段放入一段可以執(zhí)行的代碼,吸引客戶執(zhí)行(通過鼠標(biāo)點(diǎn)擊等);客戶點(diǎn)擊后,代碼執(zhí)行,可以達(dá)到攻擊目的。
2.4.5XSS攻擊及防范***
XSS屬于被動式的攻擊。
XSS可以誘使Web站點(diǎn)執(zhí)行本來不屬于它的代碼,而這些行代碼由攻擊者提供、為用戶瀏覽器加載,攻擊者利用這些代碼執(zhí)行來獲取信息。XSS涉及到三方,即攻擊者、客戶端與客戶端訪問的網(wǎng)站。XSS的攻擊目標(biāo)是盜取客戶端的敏感信息。從本質(zhì)上講,XSS漏洞終究原因是由于網(wǎng)站的Web應(yīng)用對用戶提交請求參數(shù)未做充分的檢查過濾。
XSS跨站腳本的觸發(fā)條件有以下四種:1)完整無錯的腳本標(biāo)記2)訪問文件的標(biāo)記屬性3)觸發(fā)事件4)請求失敗
利用XSS跨站腳本漏洞可以實(shí)施這些攻擊1)獲取Cookie2)Session欺騙3)惡意鏈接4)其它利用
XSS攻擊的主要危害包括:盜取用戶的各類敏感信息,如賬號密碼等;讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù);讀取企業(yè)重要的具有商業(yè)價值的資料;控制受害者機(jī)器向其它網(wǎng)站發(fā)起攻擊防范:
網(wǎng)站開發(fā)者:對于任意的輸入數(shù)據(jù)應(yīng)當(dāng)進(jìn)行驗(yàn)證,以有效檢測攻擊(易被繞過);對于任意的輸出數(shù)據(jù),要進(jìn)行進(jìn)行適當(dāng)?shù)木幋a,防止任何已成功注入的腳本在瀏覽器端運(yùn)行。
網(wǎng)站用戶:開啟一些Email或附件、瀏覽論壇帖子時,做的操作時一定要特別提防,否則有可能導(dǎo)致惡意腳本執(zhí)行;加強(qiáng)安全意識,只信任值得信任的站點(diǎn)或內(nèi)容,不要信任別的網(wǎng)站發(fā)到自己信任的網(wǎng)站中的內(nèi)容;使用瀏覽器中的一些配置。
2.4.6SQL注入攻擊原理與危害***SQL注入攻擊的主要危害包括:
①非法讀取、篡改、添加、刪除數(shù)據(jù)庫中的數(shù)據(jù);②盜取用戶的各類敏感信息,獲取利益;③通過修改數(shù)據(jù)庫來修改網(wǎng)頁上的內(nèi)容;④私自添加或刪除賬號;⑤注入木馬。
2.4.7如何實(shí)現(xiàn)SQL注入攻擊***
2.4.8SQL注入攻擊防范***
1:將輸入中的單引號變成雙引號。
2:使用存儲過程。
3:認(rèn)真對表單輸入進(jìn)行校驗(yàn),從查詢變量中濾去盡可能多的可疑字符。
4:在程序中,組織SQL語句時,應(yīng)當(dāng)盡量將用戶輸入的字符串以參數(shù)的形式來進(jìn)行包裝,而不是直接嵌入SQL語言。
5:嚴(yán)格區(qū)分?jǐn)?shù)據(jù)庫訪問權(quán)限。6:多層架構(gòu)下的防治策略。
7:對于數(shù)據(jù)庫敏感的、重要的數(shù)據(jù),不要以明文顯示,要進(jìn)行加密。關(guān)于加密的方法,讀者可以參考后面的章節(jié)。
8:對數(shù)據(jù)庫查詢中的出錯信息進(jìn)行屏蔽,盡量減少攻擊者根據(jù)數(shù)據(jù)庫的查詢出錯信息來猜測數(shù)據(jù)庫特征的可能。
9:由于SQL注入有時伴隨著猜測,因此,假使發(fā)現(xiàn)一個IP不斷進(jìn)行登錄或者短時間內(nèi)不斷進(jìn)行查詢,可以自動拒絕他的登陸;也可以建立攻擊者IP地址備案機(jī)制,對曾經(jīng)的攻擊者IP進(jìn)行備案,發(fā)現(xiàn)此IP,直接拒絕。
10:可以使用專業(yè)的漏洞掃描工具來尋覓可能被攻擊的漏洞。
11:一個傳統(tǒng)的防止SQL注入攻擊的方法是針對輸入進(jìn)行驗(yàn)證,或只接受白名單中的安全字符,或鑒別和排除黑名單中的惡意字符。
2.4安全特征編程
2.4.1安全認(rèn)證
1:用戶名/口令:用戶名/口令,是最簡單,也是最常用的用戶認(rèn)證方法。大量的系統(tǒng)中都是采用這種方法。
用戶名可以由每個用戶自己設(shè)定,也可由系統(tǒng)給出;
用戶的口令(或者密碼)由用戶自己設(shè)定的,理論上只有用戶自己才具有讀取和修改權(quán);
對于某一用戶名,只要能夠正確輸入口令,計算機(jī)就認(rèn)為持該用戶名的操就是合法用戶。
安全性依靠于口令,大量用戶為了防止忘掉口令,經(jīng)常采用很簡單的口令(如用自己的生日)或者將口令簡單存放(如簡單地保存在郵箱或者自己機(jī)器的硬盤上),造成口令簡單猜測和泄露;
口令是靜態(tài)的數(shù)據(jù),而大量的口令驗(yàn)證是遠(yuǎn)程的,在驗(yàn)證過程中要在計算機(jī)內(nèi)存中和網(wǎng)絡(luò)中傳輸,簡單被攻擊者通過各種手段(如木馬程序或網(wǎng)絡(luò)監(jiān)聽程序)截獲。
口令保存在數(shù)據(jù)庫中,可能被管理員得知;等等。
2:智能卡認(rèn)證:智能卡是一種內(nèi)置集成電路的芯片,由專門的廠商通過專門的設(shè)備生產(chǎn),芯片中存有與用戶身份相關(guān)的數(shù)據(jù)。是不可復(fù)制的硬件,由合法用戶隨身攜帶;假使用戶想要進(jìn)行認(rèn)證,必需將智能卡插入專用的讀卡器,讀取其中的信息,再通過一定的手段,以驗(yàn)證用戶的身份。
不過,和前面一種方法類似,由于存在于智能卡中的數(shù)據(jù)是靜態(tài)的,在驗(yàn)證過程中也可能要在計算機(jī)內(nèi)存中和網(wǎng)絡(luò)中傳輸,攻擊者也可以通過各種手段(如木馬程序或網(wǎng)絡(luò)監(jiān)聽程序)截獲。因此還是存在一定的安全隱患。
3:動態(tài)口令技術(shù):動態(tài)口令技術(shù)采用專門硬件,每次根據(jù)一定的密碼算法生成不同的密碼,顯示出來告訴用戶,每個密碼只能使用一次。用戶使用時,將顯示的當(dāng)前密碼提交給服務(wù)器,當(dāng)密碼傳輸?shù)椒?wù)器端,認(rèn)證服務(wù)器采用一致的算法計算當(dāng)前的有效密碼,判斷兩個密碼是否吻合,即可實(shí)現(xiàn)身份認(rèn)證。
由于每次使用的密碼動態(tài)產(chǎn)生,用戶每次使用的密碼不一致,即使黑客通過一定手段截獲了一次密碼,也無法利用這個密碼來仿冒合法用戶的身份。
不過,假使客戶端與服務(wù)器端的密碼不能保持良好的同步,就可能發(fā)生合法用戶無法登錄的問題。因此,此方法對技術(shù)要求較高。
單點(diǎn)登錄:各個子系統(tǒng)賬號同步、統(tǒng)一存儲、用戶映射;Session機(jī)制、Cookie機(jī)制
多因子口令認(rèn)證:惡意添加、惡意查詢:驗(yàn)證碼技術(shù)
2.4.2口令安全
1.執(zhí)行統(tǒng)一的口令策略:2.安全的存儲口令:3.需要一個安全的口令傳輸:4.允許用戶改變其口令:
5.當(dāng)用戶信息改變時,使用單獨(dú)的通道通知:6.執(zhí)行口令重置策略:7.一致化重置口令的過程;8.保護(hù)口令重置信息;9.不要使口令過期:10.使用強(qiáng)口令:11.替換默認(rèn)口令;
12.其他:不要相信網(wǎng)絡(luò)標(biāo)識符、使用SSL認(rèn)證信息、一個帳號對應(yīng)一個人而不是一個組、提防給出認(rèn)證和注冊的錯誤信息、處理每一個認(rèn)證請求的時間一致、提防給出認(rèn)證和注冊的錯誤信息、處理每一個認(rèn)證請求的時間一致、對認(rèn)證嘗試的頻率進(jìn)行限制
2.4.3訪問控制
權(quán)限控制模塊和業(yè)務(wù)規(guī)律模塊分開,可以單獨(dú)開發(fā);可以很便利地對權(quán)限控制模塊進(jìn)行修改,具有良好的可維護(hù)性
代理模式:給某一個對象提供一個代理,并由代理對象控制對原對象的引用。雖然代理模式可能使得請求的處理速度會變慢,但是能夠?qū)⒋砟K的功能從整個系統(tǒng)中分開出來。
代理類和工作類實(shí)現(xiàn)同樣的接口;客戶端和代理類打交道;代理類假使通過驗(yàn)證,則將請求發(fā)給工作類;客戶和代理類打交道,其感覺就好像在調(diào)用工作類一樣,也就是說,代理類實(shí)際上對客戶透明。
AOP:通過預(yù)編譯方式和運(yùn)行期動態(tài)代理,給程序動態(tài)統(tǒng)一添加功能的一種技術(shù),但是不需要不修改程序源代碼。
權(quán)限控制管理:矩陣模型、任務(wù)模型、角色模型、綜合模型
控制安全:集中訪問控制、對每個用戶交互都要檢測訪問控制狀態(tài)、使用細(xì)粒度的訪問控制、對關(guān)鍵操作需要再次認(rèn)證
2.4.4密碼安全
使用可信的密碼算法、好的密鑰應(yīng)當(dāng)滿足以下特性:
1:不可憐況下生成的密鑰應(yīng)是獨(dú)立的、互不相關(guān)的,即每次生成的密鑰和其他密鑰無關(guān)。
2:密鑰值應(yīng)是不可預(yù)計的。
3:密鑰值在某個范圍內(nèi)實(shí)現(xiàn)均勻分布。
隨機(jī)數(shù)也應(yīng)有三個特性:均勻分布;數(shù)值不可預(yù)計;互不相關(guān)。使用安全的隨機(jī)數(shù)生成器、創(chuàng)立攻擊者不能進(jìn)行猜測的隨機(jī)數(shù)
2.4.5隱私保護(hù)
①最小化無用的私密信息的存活時間②盡量少的共享私密信息③不要暴露隱私信息
④在用戶之間建立比較強(qiáng)的邊界
3.1軟件版權(quán)保護(hù)
3.1.1軟件認(rèn)證方式***
序列號**、KeyFile、網(wǎng)絡(luò)驗(yàn)證、CD-check、只運(yùn)行一個實(shí)例、
軟件驗(yàn)證序列號的合法性過程就是驗(yàn)證用戶名和序列號之間的換算關(guān)系,即數(shù)學(xué)映射關(guān)系是否正確的過程。映射關(guān)系越繁雜,越不簡單破解。
3.1.2軟件認(rèn)證破解
攻擊序列號保護(hù):通過跟蹤輸入注冊碼之后的判斷,從而找出注冊碼;跟蹤程序啟動時對注冊碼的判斷。
拆解KeyFile保護(hù)網(wǎng)絡(luò)驗(yàn)證破解:分析發(fā)送的數(shù)據(jù)包、l分析接受的數(shù)據(jù)包、解除網(wǎng)絡(luò)驗(yàn)證
拆解光盤保護(hù):為了能有效地防止光盤盜版,從技術(shù)來說要解決三個問題:(1)要防止光盤之間的拷貝;(2)要防止破解和跟蹤加密光盤;(3)要防止光盤與硬盤的拷貝。目前防止光盤盜版技術(shù)有:(1)特征碼技術(shù)(2)非正常導(dǎo)入?yún)^(qū)(3)非正常扇區(qū)(4)修改文檔結(jié)構(gòu)(5)使用光盤保護(hù)軟件
3.1.3軟件限制機(jī)制
窗口限制、時間限制、功能菜單限制
3.1.4軟件限制機(jī)制破解
窗口:去除警告窗口常用3種方法:(1)修改程序資源;(2)靜態(tài)分析;(3)動態(tài)分析。
時間限制:靜態(tài)分析、API斷點(diǎn)、監(jiān)視法
3.1.5PE文件結(jié)構(gòu)及軟件水印***
PE文件由五部分組成:1.DOSMZHeader2.DOSStub3.PEHeader4.SectionTable
5.Sections:Sections是存放軟件信息的地方。所有的代碼、初始化數(shù)據(jù)、未初始
化數(shù)據(jù)、資源、引入函數(shù)、引出函數(shù)、調(diào)試信息等各類信息,最終都按各自的特點(diǎn)存放在各個不同的節(jié)中。
軟件水?。豪肞E文件的冗余空間隱蔽信息:PE文件的冗余可分為兩類:一類是PE文件本身存在的;另一類是對PE文件進(jìn)行擴(kuò)展,人為構(gòu)造的。將信息嵌入到PE文件冗余空間中實(shí)現(xiàn)信息隱蔽,不會影響PE文件的正常執(zhí)行。
通過調(diào)整PE文件結(jié)構(gòu)隱蔽信息:軟件源代碼經(jīng)編譯后產(chǎn)生的PE文件,其部分結(jié)構(gòu)存在一些特點(diǎn),例如:資源節(jié)具有類似樹型的多層結(jié)構(gòu),定位節(jié)完成定位后成為無用節(jié)可以覆蓋等。基于PE文件的這些結(jié)構(gòu)特點(diǎn),用重構(gòu)的結(jié)構(gòu)表示隱蔽信息。這種信息隱蔽思想不是在PE文件中添加冗余信息,因此和前一種思想相比,具有更好的隱蔽性。
PE文件信息隱蔽的嵌入過程如下:(1)選擇作為載體的PE文件。(2)檢驗(yàn)載體PE文件的有效性。(3)對所選有效PE文件的屬性進(jìn)行分析。
(4)根據(jù)所選PE屬性和實(shí)際需求選擇適合的嵌入算法嵌入信息。
3.1.6軟件完整性保護(hù)
完整性檢查又包括磁盤文件檢查和內(nèi)存映像的檢查。完整性檢查的實(shí)現(xiàn)原理是用散列函數(shù)計算文件的散列值,并將該值放在某處,以后文件每次運(yùn)行時,重新計算文件的散列值,并與原散列值比較,以判斷文件是否被修改。
內(nèi)存映像的檢查:
(1)從內(nèi)存映像得到PE相關(guān)數(shù)據(jù),入代碼區(qū)塊的RVA值和內(nèi)存大小等。(2)根據(jù)得到的代碼區(qū)塊的RVA值和內(nèi)存大小,計算其內(nèi)存數(shù)據(jù)的散列值。(3)讀取自身文件從前存儲的散列值。(4)比較兩個散列值。
3.2軟件加殼脫殼
3.2.1軟件反匯編
目前主要的兩類反匯編算法是線性掃描算法(Linearsweep)和遞歸行進(jìn)算法(Recursivetraversal)。
線性掃描:線性掃描是一種十分基礎(chǔ)的反匯編算法。線性掃描算法這種方法的技術(shù)含量并不高,反匯編器只是依次逐個地將整個模塊中的每一條指令都反匯編成匯編指令。并沒有對反匯編的內(nèi)容進(jìn)行任何判斷,而是將遇到的機(jī)器碼都作為代碼來處理。因此無法正確地將代碼和數(shù)據(jù)區(qū)分開,數(shù)據(jù)也將被作為代碼來進(jìn)行解碼,從而導(dǎo)致反匯編出現(xiàn)錯誤。而這種錯誤將影響下一條指令正確識別,會使得整個反匯編都錯誤。
遞歸行進(jìn)算法:遞歸行進(jìn)算法依照代碼可能的執(zhí)行順序來反匯編程序,對每條可能的路徑都進(jìn)行掃描。當(dāng)解碼出分支指令后,反匯編器就把這個地址記錄下來,并分別反匯編各個分支中的指令。采用這種算法可以避免將代碼中的數(shù)據(jù)作為指令來解碼,比較靈活。
3.2.2殼的加載過程***
(1)保存入口參數(shù)
(2)獲取殼自己所需要使用的API地址(3)解密原程序的各個區(qū)塊的數(shù)據(jù)(4)IAT的初始化(5)重定位項(xiàng)的處理(6)HOOK—API
(7)跳轉(zhuǎn)到程序原入口點(diǎn)(OEP)
3.2.3加殼工具簡介
3:確定系統(tǒng)可能面臨的要挾,將要挾進(jìn)行分類,可以畫出要挾樹;4:選擇應(yīng)付要挾或者緩和要挾的方法;5:確定最終解決這些要挾的技術(shù)
測試過程:1:基于前面設(shè)計階段制定的要挾模型,設(shè)計測試計劃。
2:將安全測試的最小組件單位進(jìn)行劃分,并確定組件的輸入格式。
3:根據(jù)各個接口可能遇到的要挾,或者系統(tǒng)的潛在漏洞,對接口進(jìn)行分級。4:確定輸入數(shù)據(jù),設(shè)計測試用例。5:攻擊應(yīng)用程序,查看其效果。6:總結(jié)測試結(jié)果,提出解決方案。
5.2.3滲透測試
定義:滲透測試(PenetrationTest)是指安全工程師盡可能完整地模擬黑客使用的漏洞發(fā)現(xiàn)技術(shù)和攻擊手段,對目標(biāo)網(wǎng)絡(luò)/系統(tǒng)/主機(jī)/應(yīng)用的安全性作深入的探測,發(fā)現(xiàn)系統(tǒng)最脆弱的環(huán)節(jié)的過程。滲透測試能夠直觀的讓管理人員知道自己網(wǎng)絡(luò)所面臨的問題。
意義:協(xié)助用戶發(fā)現(xiàn)組織中的安全最短板,協(xié)助企業(yè)有效的了解目前降低風(fēng)險的初始任務(wù);一份文檔齊全有效的滲透測試報告有助于組織IT管理者以案例說明目前安全現(xiàn)狀,從而加強(qiáng)信息安全的認(rèn)知程度,甚至提高組織在安全方面的預(yù)算;
信息安全是一個整體工程,滲透測試有助于組織中的所有成員意識到自己的崗位同樣可能提高或降低風(fēng)險,有助于內(nèi)部安全的提升;
滲透測試并不能保證發(fā)現(xiàn)目標(biāo)網(wǎng)絡(luò)中的“所有〞弱點(diǎn),因此我們不宜片面強(qiáng)調(diào)它的重要性。
階段:
實(shí)施:攻擊路徑(內(nèi)網(wǎng)、外網(wǎng)、網(wǎng)段間滲透)、實(shí)施流程(制定方案、信息收集分析、計劃制定和確認(rèn)、取得和提升權(quán)限、生成報告)、風(fēng)險規(guī)避措施
5.2.4模糊測試
主要思路就是用大量的測試用例一個一個試,盡可能多的找出有可能出問題的地方。過程:
(1)要生成大量的測試用例。
(2)將構(gòu)造好的數(shù)據(jù)發(fā)送或傳遞給特定的程序,觀測其反應(yīng)(3)捕獲由于這些異常輸入導(dǎo)致的程序日志及異常(4)對捕獲的結(jié)果進(jìn)行深度分析,判讀其中是否存在問題
5.2.5安全審查
安全審查是指對軟件產(chǎn)品進(jìn)行安全方面的人工檢查,是軟件質(zhì)量保證的一個重要環(huán)節(jié),主要包括:代碼的安全審查;配置復(fù)查;文檔的安全審查。
(1)壓縮殼:減小程序體積,如UPX、ASPacK和PECompact等。(2)加密殼:保護(hù)程序不被調(diào)試、脫殼等,如ASProtect、Armadillo等。
3.2.4脫殼基本手段***
脫殼機(jī)
手動脫殼:分三步:1.查找程序的真正入口點(diǎn)(OEP);2.抓取內(nèi)存映像文件;3.輸入表重建
3.2.5花指令技術(shù)***
巧妙構(gòu)造代碼和數(shù)據(jù),在指令流中插入好多“數(shù)據(jù)垃圾〞,干擾反匯編軟件的判斷,從而使得它錯誤地確定指令的起始位置,這類代碼數(shù)據(jù)稱之為“花指令〞。
可執(zhí)行式花指令顧名思義,可執(zhí)行式花指令指的是能夠正常運(yùn)行的但又不改變原始程序規(guī)律性的一組無用指令。這類花指令有如下特點(diǎn):①可以正常運(yùn)行;②不改變?nèi)魏渭姆牌鞯闹?;③反匯編器可以正確反匯編該指令。
不可執(zhí)行式花指令(垃圾指令)是指被插入到原始代碼中但又不改變原始程序規(guī)律性的一組無用字節(jié)。這類花指令有如下特點(diǎn):①不可以正常運(yùn)行;②不改變?nèi)魏渭姆牌鞯闹?;③反匯編器可能會錯誤反匯編這些字節(jié)。
代碼與數(shù)據(jù)結(jié)合技術(shù)一般程序的代碼和數(shù)據(jù)是分開的?,F(xiàn)提出一個將序列號與程序代碼結(jié)合的防護(hù)方案設(shè)想,在未知正確注冊碼的狀況下,很難被破解。
3.2.6SMC技術(shù)
所謂SMC(SelfModifyingCode)技術(shù),就是一種將可執(zhí)行文件中的代碼或數(shù)據(jù)進(jìn)行加密,防止別人使用逆向工程工具(譬如一些常見的反匯編工具)對程序進(jìn)行靜態(tài)分析的方法,只有程序運(yùn)行時才對代碼和數(shù)據(jù)進(jìn)行解密,從而正常運(yùn)行程序和訪問數(shù)據(jù)。計算機(jī)病毒尋常也會采用SMC技術(shù)動態(tài)修改內(nèi)存中的可執(zhí)行代碼來達(dá)到變形或?qū)Υa加密的目的,從而躲過殺毒軟件的查殺或者迷惑反病毒工對代碼進(jìn)行分析。
4.1有害程序原理
4.1.1有害程序原理***
侵入計算機(jī)系統(tǒng)、破壞系統(tǒng)、信息的機(jī)密性、完整性和可用性等的程序。包括計算機(jī)病毒、特洛伊木馬、僵尸程序、蠕蟲、惡意腳本等。
4.1.2典型有害程序舉例
CIH、ILOVEU、CodeRed、灰鴿子
4.1.3有害程序防范手段***
惡意代碼特征掃描、系統(tǒng)檢測、完整性檢查、行為阻斷、啟發(fā)式分析
4.2特洛伊木馬
4.2.1木馬定義
特洛伊木馬程序是這樣一種程序,它提供了一些有用的,或僅僅是有意思的功能。但是尋常要做一些用戶不希望的事,諸如在你不了解的狀況下拷貝文件或竊取你的密碼。
特性:程序性、隱蔽性、有效性、頑固性、易植入性
4.2.2木馬分類
密碼發(fā)送型、按鍵記錄型、屏幕截取型、文件控制型、后門型EXE偽裝型、傳統(tǒng)DLL/D型、DLL關(guān)聯(lián)型、DLL注入型
傳統(tǒng)C/S通信型、端口寄生型、端口反彈型、ICMP型、電子郵件型、網(wǎng)卡/Modem直接編程型
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 順豐同城新人考試
- 業(yè)財一體化智慧樹知到答案2024年青島理工大學(xué)
- 30高中數(shù)學(xué)新教材課堂導(dǎo)學(xué)案(復(fù)合函數(shù)的導(dǎo)數(shù)及函數(shù)圖像的切線)及答案
- 第一章 有理數(shù) 復(fù)習(xí)課 教學(xué)設(shè)計-2024-2025學(xué)年青島版數(shù)學(xué)七年級上冊
- 第十一章三角形專題練習(xí)2024-2025學(xué)年人教版數(shù)學(xué)八年級上冊
- 分散型控制系統(tǒng)(DCS)相關(guān)行業(yè)投資方案范本
- 專題01 全等圖形與全等三角形壓軸題五種模型全攻略(原卷版)
- 金屬礦區(qū)生態(tài)修復(fù)與污染控制一體化
- 納米材料增強(qiáng)電熱封裝
- 云遷移策略與最佳實(shí)踐
- GB/T 41-2000六角螺母C級
- GB/T 21415-2008體外診斷醫(yī)療器械生物樣品中量的測量校準(zhǔn)品和控制物質(zhì)賦值的計量學(xué)溯源性
- GB/T 12821-1991內(nèi)燃機(jī)車臺架試驗(yàn)方法機(jī)車空載性能試驗(yàn)
- 電子工業(yè)出版社小學(xué)信息技術(shù)第5冊全冊教案(安徽2023版)
- 高邊坡預(yù)應(yīng)力錨桿框架梁施工工法
- GA/T 1969-2021法醫(yī)學(xué)機(jī)械性損傷致傷物分類及推斷指南
- 化學(xué)與新材料
- 野貓的城市-公開課課件
- 道路養(yǎng)護(hù)改造工程工程質(zhì)量管理體系及保證措施
- 《數(shù)字化設(shè)計與制造》第01章課件
- 小學(xué)數(shù)學(xué)同課異構(gòu)教研活動實(shí)施方案
評論
0/150
提交評論