《0day安全:软件漏洞分析技术》学习笔记·1(需要补充节部分)
文章目錄
- 基礎知識
- 漏洞概述
- 漏洞挖掘
- 漏洞分析
- 漏洞利用
- 漏洞在安全中的應用
- 二進制文件概述
- PE文件格式
- 虛擬內存
- PE文件與虛擬內存之間的映射
基礎知識
漏洞概述
??通常把這類能夠引起軟件做一些“超出設計范圍的事情”的bug稱為漏洞(vulnerability)。
??功能性邏輯缺陷(bug):影響軟件的正常功能,例如,執行結果錯誤,圖標顯示錯誤
??安全性邏輯缺陷(漏洞):通常情況下不影響軟件的正常功能,但被攻擊者成功利用后,有可能引起軟件去執行額外的惡意代碼,常見的漏洞包括軟件中的緩沖區溢出漏洞、網絡中的跨站腳本漏洞(XSS)、SQL注入漏洞等。
漏洞挖掘
??技術角度講,漏洞挖掘實際上是一種高級的測試(QA),學術界一直熱衷于使用靜態分析方法尋找源代碼中的漏洞;而在工程界,普遍使用Fuzz,一種“灰”盒測試。
漏洞分析
??分析漏洞時,如果能夠搜索到POC(proof of concept)代碼,使用POC重現漏洞被觸發現場。使用調試器觀察漏洞的細節,或者利用工具(如Paimei)更方便的找到漏洞觸發點。當無法獲得POC的時候,通過廠商對漏洞的描述,使用補丁分析的方法,首先比較patch前后可執行文件都有哪些地方被修改,利用反匯編工具(IDA OD)重點分析這些地方。
??漏洞分析需要扎實的逆向基礎和調試技術,除此之外,還要精通各種場景下的漏洞利用方法。這種技術更多依靠的是經驗,很難總結出通用的條款。實戰為王。
漏洞利用
??漏洞利用技術可以追溯到20世紀80年代的緩沖區溢出漏洞利用,直到Aleph One于1996年在Phrack第49期上發表《Smashing The Stack For Fun And Profit》,這種技術才真正流行并日趨完善。包括內存漏洞(堆棧溢出)和Web應用漏洞(腳本注入)等
漏洞在安全中的應用
??1·從不運行任何來歷不明的軟件,為什么還會中病毒?
??系統漏洞利用引起計算機被遠程控制(沖擊波蠕蟲、slammer蠕蟲);服務器軟件存在安全漏洞,或者系統中可以被RPC遠程調用的函數中存在緩沖區溢出漏洞,攻擊者可以發起“主動”進攻。
??
??2·只是點擊了URL連接,并沒有執行任何其他操作,為什么會中木馬?
??瀏覽器在解析html文件時存在緩沖區溢出漏洞,可以通過承載惡意代碼的HTML文件,當通過鏈接點擊訪問的時候漏洞被觸發,導致HTML中所承載的shellcode被執行,這段代碼通常是在沒有任何提示的情況下去指定的地方下載木馬客戶端并運行。
??
??3·本身是數據文件的非可執行文件,如果解析器在解析數據文件的特定數據結構時存在緩沖區溢出漏洞,則可以通過構造payload觸發并利用
??4·高強度密碼只能抵抗密碼暴力猜解的攻擊,具體安全還取決于很多其他因素:
??密碼存在哪里,例如,存本地計算機還是遠程服務器
??密碼怎樣存,例如,明文存放還是加密存放,什么強度的加密算法等
??密碼怎樣傳遞,例如,密鑰交換的過程是否安全,網絡通訊是否使用SSL等
二進制文件概述
PE文件格式
??PE(Portable Exec utable)是Win32平臺下可執行文件遵守的數據格式。一個可執行文件不光包括了二進制的機器代碼,還會自帶許多其他信息,如字符串、菜單、圖標、位圖、字體等。PE文件格式規定了所有的這些信息在可執行文件中如何組織。在程序被執行時,操作系統會按照PE文件格式的約定去相應的位置準確地定位各種類型的資源,并分別裝載到內存的不同區域。
??PE文件格式把可執行文件分成若干個數據結(section),不同的資源被存放在不同的節中。一個典型的PE文件中包含的節如下:
??.text 由編譯器產生,存放著二進制的機器代碼,反匯編和調試的對象
??.data 初始化的數據塊,如宏定義、全局變量、靜態變量等
??.idata 可執行文件所使用的的動態鏈接庫等外來函數與文件的信息
??.rarc 存放程序的資源,如圖標、菜單等
??.除此之外,還可能存在的節包括“reloc”、“edata”、“tls”、“rdata”等,使用Microsoft Visual C++中的編譯指示符#pragma dat a_seg()可以把代碼中的任意部分編譯到PE的任意節中,節名也可以自己定義。如果可執行文件經過了“加殼”處理,PE的節信息就可能出現異常。
虛擬內存
??.Windows的內存可以被氛圍兩個層面:物理內存和虛擬內存。其中物理內存比較復雜,需要進入Windows內核基本Ring0才能看到。通常,在用戶模式下,我們用調試器看到的內存地址都是虛擬內存。
通過虛擬內存管理器映射實現每個進程分配“獨立”的4GB空間。當需要進行實際的內存操作的時候,內存管理器才會把“虛擬地址”和“物理地址”聯系起來。
PE文件與虛擬內存之間的映射
??.在調試漏洞是,可能經常需要做這樣兩種操作。
(1)·靜態反匯編工具看到的PE文件中某條指令的位置是相對于磁盤文件而言的,即所謂的文件偏移,我們可能還需要知道這條指令在內存中的位置,即虛擬內存地址(VA)。
(2)·在調試時看到的某條指令的地址是虛擬內存地址,也常需要回到PE文件中找到對應的機器碼。
1·文件偏移地址(File Offset)
??.數據在PE文件中的地址叫文件偏移地址,文件在磁盤存放時相對于文件開頭的偏移,可能叫做文件地址更準確。
2·裝載基址(Image Base)
??.PE裝入內存時的基地址。默認情況下,EXE文件在內存中的基地址是0x0040 0000 ,DLL文件是0x1000 0000 。可以通過修改編譯選項更改。
3·虛擬內存地址(Virtual Address VA)
PE文件中的指令被裝入內存后的地址。
4·相對虛擬地址(Relative Virtual Address,RVA)
相對虛擬地址是內存地址相對于映射基址的偏移量。
虛擬內存地址、映射基址、相對虛擬內存地址三者之間:
?? VA=Image Base+RVA
?? RVA=VA-Image Base
?? Image Base=VA-RVA
??文件偏移是相對于文件開始出0字節的偏移,RVA(相對虛擬地址)是相對于裝載基址0x0040 0000 處的偏移。由于操作系統在進行裝載時“基本”上保持PE中的各種數據結構,所以文件偏移地址和RVA有很大的一致性。
??PE文件中的數據按照磁盤數據標準存放,以0x200字節為基本單位進行組織。當一個數據節(section)不足0x200字節時,不足的地方以0x00填充;PE數據節的大小永遠是0x200的整數倍。
??當代碼裝入內存,將按照內存數據標準存放,并以0x1000字節為基本單位進行組織。內存中的節總是0x1000的整數倍。
總結
以上是生活随笔為你收集整理的《0day安全:软件漏洞分析技术》学习笔记·1(需要补充节部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东搜索布局优化方法(干货)
- 下一篇: WIN7下CS、war3不能全屏的解决方