日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件漏洞分析技术

發布時間:2025/4/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件漏洞分析技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3 開發shellcode的藝術

3.1 shellcode概述

shellcode這個專用術語通稱緩沖區溢出攻擊中植入進程的代碼。
shellcode往往需要用匯編語言編寫,并轉換成二進制機器碼,其內容和長度經常還會受到很多苛刻限制,故開發和調試的難度很高。
植入代碼之前需要做大量的調試工作,
這個代碼植入的過程就是漏洞利用,也就是exploit。
exploit一般以一段代碼的形式出現,用于生成攻擊性的網絡數據包或者其他形式的攻擊性輸入。exploit的核心是淹沒返回地址,劫持進程的控制權,之后跳轉去執行shellcode。


3.2 定位shellcode

在實際的漏洞利用過程中,由于動態鏈接庫的裝入和卸載等原因,Windows進程的函數棧幀有可能產生移位,即shellcode在內存中的地址是會動態變化的。將返回地址簡單地覆蓋成一個定值的做法往往不能讓exploit奏效。
必須想出一種方法在程序運行時動態定位棧中的shellcode。


由于ESP寄存器在函數返回后不被溢出數據干擾,且始終指向返回地址之后的位置,可以
1)用內存中任意一個jmp esp 指令的地址覆蓋函數返回地址,而不是原來用手工查出的shellcode起始地址直接覆蓋;
2)函數返回后被重定向去執行內存中的這條jmp esp指令,而不是直接開始執行shellcode。
3)由于esp在函數返回時仍指向棧區(函數返回地址之后),jmp esp 指令被執行后,處理器會到棧區函數返回地址之后的地方取指令執行;
4)重新布置shellcode。在淹沒函數返回地址后,繼續淹沒一片棧空間。將緩沖區前邊一段地方用任意數據填充,把shellcode恰好擺放在函數返回地址之后。這樣,jmp esp 指令執行過后會恰好跳進shellcode。

5 堆溢出利用

5.3 堆溢出利用 DWORD SHOOT

5.3.1 鏈表拆卸中的問題
堆管理系統的三類操作:堆塊分配、堆塊釋放和堆塊合并歸根結底都是對鏈表的修改。分配就是將堆塊從空表中卸下;釋放是把堆塊鏈入空表;合并,把若干個堆塊先從空表中卸下,修改塊首信息,之后把更新后的新塊鏈入空表。
如果我們能偽造鏈表結點的指針,在卸下和鏈入的過程中就有可能獲得一次讀寫內存的機會。
堆溢出利用的精髓就是用精心構造的數據去溢出下一個堆塊的塊首,改寫塊首中的前向指針flink和后向指針blink,然后在分配、釋放、合并等操作發生時伺機獲得一次向內存任意地址寫入任意數據的機會。
不但可以控制射擊的目標(任意地址),還可以選用適當的子彈(4字節惡意數據)。


點射目標:棧幀中的函數返回地址;棧幀中的SEH句柄;重要函數調用地址;
子彈:shellcode起始地址




10 棧中的守護天使:GS

10.1 GS 安全編譯選項的保護原理

針對緩沖區溢出時覆蓋函數返回地址這一特征,微軟在編譯程序時使用了安全編譯選項-GS。
在VS2003(VS 7.0)及以后版本的Visual Studio中默認啟用了這個編譯選項。
VS2008(VS 9.0)中,可以通過菜單中的Project-project Properties-Configuration Properties-C/C++-Code Generation-Buffer Security Check中對GS編譯選項進行設置。


.在所有函數調用發生時,向棧幀內壓入一個額外的隨機DWORD,
.Security Cookie位于EBP之前,系統還將在.data的內存區域中存放一個Security Cookie的副本,
.當棧中發生溢出時,Security Cookie將被首先淹沒,之后才是EBP和返回地址,
.在函數返回之前,系統將執行一個額外的安全驗證操作,被稱做Security check,


在VS 2005 SP1起引入了一個新的安全標識:
#pragma strict_gs_check
通過添加#pragma strict_gs_check(on)可以對任意類型的函數添加Security Cookie。


Security Cookie 產生的細節:
.系統以.data節的第一個雙字作為Cookie的種子,
.在棧幀初始化以后系統用ESP異或種子,作為當前函數的Cookie,


在VS 2005 及后續版本還使用了變量重排技術,在編譯時根據局部變量的類型對變量在棧幀中的位置進行調整,


12 數據與程序的分水嶺:DEP

12.1 DEP機制的保護原理

DEP,Data Execution Prevention,數據執行保護;
溢出攻擊的根源在于現代計算機對數據和代碼沒有明確區分這一先天缺陷,
DEP基本原理:將數據所在內存頁標識為不可執行,當程序溢出成功轉入shellcode時,程序會嘗試在數據頁面上執行指令,此時CPU就會拋出異常,而不是去執行惡意指令。
軟件DEP其實就是SafeSEH;
硬件DEP才是真正意義的DEP,AMD和Intel都為此做了設計,
12.3 利用Ret2Libc挑戰DEP
Ret2libc,Return to libc;


三種相對比較有效的繞過DEP的exploit方法:
1)通過跳轉到ZwSetInformationProcess函數將DEP關閉后再轉入shellcode執行;
2)通過跳轉到VirtualProtect函數來將shellcode所在內存頁設置為可執行狀態,然后再轉入shellcode執行;
3)通過跳轉到VirtualAlloc函數開辟一段具有執行權限的內存空間,然后將shellcode復制到這段內存中執行;


一個進程的DEP設置標識保存在KPROCESS結構中的_KEXECUTE_OPTIONS上,


如果一個進程的Permanent位沒有設置,當它加載DLL時,系統就會對這個DLL進行DEP兼容性檢查,當存在兼容性問題時進程的DEP就會被關閉。


用OllyDbg加載調試程序。在0x7C92E257,即MOV EAX,1后邊的RETN指令處暫停程序。觀察堆棧可以看到此時ESP指向test函數返回地址的下方,而這個ESP指向的內存空間存放的值將是RETN指令要跳到的地址。
所以我們需要在這個位置放上0x7C93CD24以便讓程序轉入關閉DEP流程,我們為shellcode添加4個字節,并放置0x7C93CD24,



總結

以上是生活随笔為你收集整理的软件漏洞分析技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。