日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用IntelPT與IPTAnalyzer進(jìn)行漏洞利用

英特爾PT(處理器跟蹤)是一項(xiàng)最新的英特爾CPU的技術(shù),Intel Skylake和更高版本的CPU型號都已經(jīng)具有了此功能。你可以使用觸發(fā)和過濾功能在指令級別跟蹤代碼執(zhí)行。通過本文,我們希望探索該技術(shù)在漏洞利用分析中的實(shí)際應(yīng)用。

為新鄉(xiāng)縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及新鄉(xiāng)縣網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、新鄉(xiāng)縣網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

0x01 在Windows上使用Intel PT

在Windows上記錄Intel PT的信息主要可以使用三種方法。

 
 
 
 
  1. [WindowsIntelPT](https://github.com/intelpt/WindowsIntelPT)
  2. [WinIPT](https://github.com/ionescu007/winipt)
  3. [Intel? Debug Extensions for WinDbg* for Intel? Processor Trace](https://software.intel.com/en-us/intel-system-studio-2019-windbg-pt-user-guide-windows-introducing-the-intel-debug-extensions-for-windbg-for-intel-processor-trace)

要分析記錄的數(shù)據(jù)包,可以使用Intel的libipt,Libipt是可以解碼Intel PT數(shù)據(jù)包的標(biāo)準(zhǔn)庫,它提供了ptdump和ptexd基本工具。

 
 
 
 
  1. https://github.com/intel/libipt

Instruction Source

Intel PT僅記錄控制流更改。要解碼Intel PT跟蹤,我們需要執(zhí)行指令的image文件。如果在代碼執(zhí)行的某些區(qū)域沒有匹配的image,則可能會丟失一些執(zhí)行信息。在沒有靜態(tài)image文件可用的JIT代碼執(zhí)行中,可能會發(fā)生這種情況,甚至shellcode都很難跟蹤,因?yàn)閟hellcode指令僅存在于內(nèi)存中。

因?yàn)镮ntel PT不會保存指令字節(jié)或內(nèi)存內(nèi)容,所以你需要為每個IP(指令指針)提供指令字節(jié)。例如,下面顯示了ptxed命令的工作方式。

記錄壓縮

在現(xiàn)實(shí)世界中使用Intel PT的一個障礙是處理Intel PT跟蹤文件所需的大量CPU時間,跟蹤文件已被壓縮,在使用之前都需要先對其進(jìn)行解壓縮,Libipt庫可用于解碼過程,但它更多是單線程操作。

方法

類似于LBR,英特爾PT通過記錄分支來工作。在運(yùn)行時,當(dāng)CPU遇到任何分支指令(如“ je”,“ call”,“ ret”)時,它將記錄對該分支采取的操作。使用附加跳轉(zhuǎn)指令,它將使用1位記錄已占用(T)或未占用(NT)。通過間接調(diào)用和跳轉(zhuǎn),它將記錄目標(biāo)地址。對于無條件分支(如跳轉(zhuǎn)或調(diào)用),它不會記錄更改,因?yàn)槟憧梢詮闹噶钪型茢喑瞿繕?biāo)跳轉(zhuǎn)地址。將使用FUP,TIP,TIP.PGE或TIP.PGD數(shù)據(jù)包之一將要記錄的IP(指令指針)與上次IP記錄進(jìn)行比較。如果地址字節(jié)的高位部分重疊,則那些匹配的字節(jié)將在當(dāng)前數(shù)據(jù)包中被解析。同樣,對于臨近返回指令,如果返回目標(biāo)是調(diào)用指令的下一條指令,

數(shù)據(jù)包

IPT壓縮中使用的數(shù)據(jù)包的說明可以從《英特爾?64和IA-32體系結(jié)構(gòu)軟件開發(fā)人員手冊》中找到。

https://software.intel.com/en-us/articles/intel-sdm

有許多數(shù)據(jù)包用于實(shí)現(xiàn)記錄機(jī)制,但是,很少有重要的數(shù)據(jù)包類型起主要作用。

PSB數(shù)據(jù)包

PSB數(shù)據(jù)包用作跟蹤數(shù)據(jù)包解碼的同步點(diǎn)。它是跟蹤日志中的邊界,在其中可以獨(dú)立執(zhí)行減壓過程而沒有任何副作用,此偏移在libipt庫代碼中稱為“同步偏移”,因?yàn)檫@是跟蹤文件中的偏移,你可以在其中安全地開始解碼以下數(shù)據(jù)包。

TIP (Target IP)

TIP數(shù)據(jù)包指示目標(biāo)IP,該信息可用作指令指針的基地址。

TNT (Taken Not-Taken)

TNT數(shù)據(jù)包用于指示是否進(jìn)行條件轉(zhuǎn)移。因?yàn)榭梢詮倪^程映像中推斷出那些流量控制,所以不會記錄任何無條件的分支跳轉(zhuǎn)。

總體而言,解壓縮過程如下圖所示。這更多是過于簡化的視圖,但是它可以向你展示解壓縮的工作原理,IntelPT日志可用于重建完整的指令執(zhí)行并在指令字節(jié)的幫助下控制流的變化,沒有指令字節(jié),它僅給出完整指令執(zhí)行的部分視圖。

跟蹤日志

這是IPT跟蹤日志的一個片段,該片段使用libipt中的ptdump轉(zhuǎn)換為文本形式。它以PSB數(shù)據(jù)包開頭,該位置指示你可以安全地解碼后續(xù)數(shù)據(jù)包的位置,目前有一些與填充和定時相關(guān)的數(shù)據(jù)包可以忽略。

 
 
 
 
  1. 000000000000001c  psb
  2. 000000000000002c  pad
  3. 000000000000002d  pad
  4. 000000000000002e  pad

在偏移量3db處,有一個tip.pge數(shù)據(jù)包。這意味著指令指針位于數(shù)據(jù)包指示的位置00007ffbb7d63470。

 
 
 
 
  1. ...
  2. 00000000000003db  tip.pge    3: 00007ffbb7d63470
  3. 00000000000003e2  pad
  4. 00000000000003e3  pad

從過程映像中,我們可以確定tip.pge的地址00007ffbb7d63470指向以下說明。

 
 
 
 
  1. seg000:00007FFBB7D63470                 mov     rcx, [rsp+20h]
  2. seg000:00007FFBB7D63475                 mov     edx, [rsp+28h]
  3. seg000:00007FFBB7D63479                 mov     r8d, [rsp+2Ch]
  4. seg000:00007FFBB7D6347E                 mov     rax, gs:60h
  5. seg000:00007FFBB7D63487                 mov     r9, [rax+58h]
  6. seg000:00007FFBB7D6348B                 mov     rax, [r9+r8*8]
  7. seg000:00007FFBB7D6348F                 call    sub_7FFBB7D63310

提示數(shù)據(jù)包指示該代碼從地址00007ffbb7d63470開始執(zhí)行,并繼續(xù)執(zhí)行直到遇到00007FFBB7D6348F處的調(diào)用指令為止。由于調(diào)用不是間接調(diào)用,因此調(diào)用目標(biāo)是在編譯時預(yù)先確定的,因此該tip.pge數(shù)據(jù)包擴(kuò)展為內(nèi)部調(diào)用指令,來自調(diào)用目標(biāo)地址00007FFBB7D63310的其他指令將被解碼。

 
 
 
 
  1. seg000:00007FFBB7D63310                 sub     rsp, 48h
  2. seg000:00007FFBB7D63314                 mov     [rsp+48h+var_28], rcx
  3. seg000:00007FFBB7D63319                 mov     [rsp+48h+var_20], rdx
  4. seg000:00007FFBB7D6331E                 mov     [rsp+48h+var_18], r8
  5. seg000:00007FFBB7D63323                 mov     [rsp+48h+var_10], r9
  6. seg000:00007FFBB7D63328                 mov     rcx, rax
  7. seg000:00007FFBB7D6332B                 mov     rax, cs:7FFBB7E381E0h
  8. seg000:00007FFBB7D63332                 call    rax

此時,在地址00007FFBB7D63332處發(fā)生了間接調(diào)用,下一個提示包將在此調(diào)用跳轉(zhuǎn)的位置提供必要的信息。壓縮會刪除地址的前4個字節(jié)以節(jié)省空間,從3ee的數(shù)據(jù)包中,我們可以得出調(diào)用目標(biāo)是00007ffbb7d4fb70。

 
 
 
 
  1. ...
  2. 00000000000003ee  tip        2: ????????b7d4fb70
  3. 00000000000003f3  pad
  4. ...

解碼從00007ffbb7d4fb70繼續(xù),直到它在00007FFBB7D4FB8C處有條件跳轉(zhuǎn)指令為止。

 
 
 
 
  1. seg000:00007FFBB7D4FB70                 mov     rdx, cs:7FFBB7E38380h
  2. seg000:00007FFBB7D4FB77                 mov     rax, rcx
  3. seg000:00007FFBB7D4FB7A                 shr     rax, 9
  4. seg000:00007FFBB7D4FB7E                 mov     rdx, [rdx+rax*8]
  5. seg000:00007FFBB7D4FB82                 mov     rax, rcx
  6. seg000:00007FFBB7D4FB85                 shr     rax, 3
  7. seg000:00007FFBB7D4FB89                 test    cl, 0Fh
  8. seg000:00007FFBB7D4FB8C                 jnz     short loc_7FFBB7D4FB95
  9. seg000:00007FFBB7D4FB8E                 bt      rdx, rax
  10. seg000:00007FFBB7D4FB92                 jnb     short loc_7FFBB7D4FBA0
  11. seg000:00007FFBB7D4FB94                 retn

此時,tnt數(shù)據(jù)包將為你提供是否執(zhí)行條件跳轉(zhuǎn)的信息。以下帶有2個“ ..”的tnt.8數(shù)據(jù)包表示,它沒有進(jìn)行兩次無條件跳轉(zhuǎn)。

 
 
 
 
  1. 00000000000003fe  tnt.8      ..

接下來,它將在00007FFBB7D4FB94處遇到ret指令。

 
 
 
 
  1. seg000:00007FFBB7D4FB94                 retn

即使可以通過某種模擬進(jìn)行計算,也無法從image本身可靠地確定返回地址,“ ret”是間接跳轉(zhuǎn),它從當(dāng)前SP(堆棧指針)中檢索跳轉(zhuǎn)地址,下一個提示包將為你提供此ret指令返回的地址。

 
 
 
 
  1. 00000000000003ff  tip        2: ????????b7d63334

返回的地址將按照以下方式反匯編,并且代碼執(zhí)行將繼續(xù)。

 
 
 
 
  1. seg000:00007FFBB7D63334                 mov     rax, rcx
  2. seg000:00007FFBB7D63337                 mov     rcx, [rsp+48h+var_28]
  3. seg000:00007FFBB7D6333C                 mov     rdx, [rsp+48h+var_20]
  4. seg000:00007FFBB7D63341                 mov     r8, [rsp+48h+var_18]
  5. seg000:00007FFBB7D63346                 mov     r9, [rsp+48h+var_10]
  6. seg000:00007FFBB7D6334B                 add     rsp, 48h

IPTA 分析工具

IPT壓縮機(jī)制非常有效,需要拆卸引擎的幫助來重建完整指令。即使是很短的IPT跟蹤記錄,也需要大量CPU資源進(jìn)行解壓縮。一種方法是,可以應(yīng)用IP過濾來限制輸出,以最大程度地減少跟蹤輸出量。有時出于研究目的,不可避免的需要處理大量跟蹤日志。

IPTAnalyzer是用于并行處理IPT跟蹤日志的工具。該工具可以使用Python多處理庫處理Intel PT跟蹤,并創(chuàng)建基本的塊緩存文件,該塊信息對于控制流變化的整體分析很有用。例如,如果要從特定的image或地址范圍收集指令,則可以在檢索完整的指令之前查詢此基本塊緩存文件以查找屬于該范圍的位置。

https://github.com/ohjeongwook/iptanalyzer

案例研究:CVE-2017-11882

CVE-2017-11882是Microsoft Office公式編輯器中的漏洞,這是練習(xí)將IPT用于漏洞分析的良好練習(xí)目標(biāo)。我們將說明如何使用IPT和IPTAnalyzer高效執(zhí)行漏洞利用分析。

 https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882

IPT 日志收集

你可以使用各種方法來生成IPT跟蹤日志。我使用WinIPT生成跟蹤日志。

 https://github.com/ionescu007/winipt
 https://www.virustotal.com/gui/file/abbdd98106284eb83582fa08e3452cf43e22edde9e86ffb8e9386c8e97440624/detection

我們使用了惡意樣本abbdd98106284eb83582fa08e3452cf43e22edde9e86ffb8e9386c8e97440624來復(fù)制利用條件,使用進(jìn)程ID和日志文件名運(yùn)行ipttool.exe,進(jìn)程ID 2736是易受攻擊的公式編輯器進(jìn)程,跟蹤輸出將保存到EQNEDT32.pt文件中。

 
 
 
 
  1. C:\Analysis\DebuggingPackage\TargetMachine\WinIPT>ipttool.exe --trace 2736 EQNEDT32.pt
  2. /-----------------------------------------\
  3. |=== Windows 10 RS5 1809 IPT Test Tool ===|
  4. |===  Copyright (c) 2018 Alex Ionescu  ===|
  5. |===    http://github.com/ionescu007   ===|
  6. |===  http://www.windows-internals.com ===|
  7. \-----------------------------------------/
  8. [+] Found active trace with 1476395324 bytes so far
  9.     [+] Trace contains 11 thread headers
  10.         [+] Trace Entry 0 for TID 2520
  11.                Trace Size: 134217728             [Ring Buffer Offset: 4715184]
  12.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  13.         [+] Trace Entry 1 for TID 1CA8
  14.                Trace Size: 134217728             [Ring Buffer Offset: 95936]
  15.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  16.         [+] Trace Entry 2 for TID 8AC
  17.                Trace Size: 134217728             [Ring Buffer Offset: 63152]
  18.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  19.         [+] Trace Entry 3 for TID 1A88
  20.                Trace Size: 134217728             [Ring Buffer Offset: 4560]
  21.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  22.         [+] Trace Entry 4 for TID 1964
  23.                Trace Size: 134217728             [Ring Buffer Offset: 45184]
  24.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  25.         [+] Trace Entry 5 for TID 22D0
  26.                Trace Size: 134217728             [Ring Buffer Offset: 6768]
  27.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  28.         [+] Trace Entry 6 for TID 73C
  29.                Trace Size: 134217728             [Ring Buffer Offset: 32480]
  30.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  31.         [+] Trace Entry 7 for TID 1684
  32.                Trace Size: 134217728             [Ring Buffer Offset: 285264]
  33.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  34.         [+] Trace Entry 8 for TID 3C4
  35.                Trace Size: 134217728             [Ring Buffer Offset: 99056]
  36.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  37.         [+] Trace Entry 9 for TID 610
  38.                Trace Size: 134217728             [Ring Buffer Offset: 4812464]
  39.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  40.         [+] Trace Entry 10 for TID 1CD8
  41.                Trace Size: 134217728             [Ring Buffer Offset: 7424]
  42.               Timing Mode: MTC Packets          [MTC Frequency: 3, ClockTsc Ratio: 83]
  43. [+] Trace for PID 2736 written to EQNEDT32.pt

進(jìn)程內(nèi)存轉(zhuǎn)儲

你可以使用ProcDump或Process Explorer甚至Windbg來獲取方程編輯器(EQNEDT32.exe)的內(nèi)存轉(zhuǎn)儲,IPTAnalyzer可以使用進(jìn)程內(nèi)存轉(zhuǎn)儲來自動檢索指令字節(jié),而不是將單獨(dú)的image文件提供給libipt。

 https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
 https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer

運(yùn)行iptanalyzer

為了方便起見,在以下示例中,將%IPTANALYZERTOOL%設(shè)置為IPTAnalyzer文件夾的根目錄。通過使用decode_blocks.py,可以生成塊緩存文件。你需要提供帶有IPT跟蹤文件名的-p選項(xiàng)和帶有進(jìn)程內(nèi)存轉(zhuǎn)儲文件的-d選項(xiàng)。

 
 
 
 
  1. python %IPTANALYZER%\pyipttool\decode_blocks.py -p PT\EQNEDT32.pt -d ProcessMemory\EQNEDT32.dmp -c block.cache

下面顯示了并行的Python進(jìn)程,它們對解碼文件進(jìn)行解碼。

轉(zhuǎn)儲EQNEDT32模塊數(shù)據(jù)

由于EQNEDT32主模塊存在漏洞,并且模塊地址范圍內(nèi)或附近將發(fā)生異常代碼執(zhí)行模式,因此我們希望枚舉EQNEDT32主模塊范圍內(nèi)的塊,該塊介于00400000和0048e000之間。

 
 
 
 
  1. 0:011> lmvm EQNEDT32
  2. Browse full module list
  3. start             end                 module name
  4. 00000000`00400000 00000000`0048e000   EQNEDT32   (deferred)             
  5. ...

dump_blocks.py工具可用于枚舉特定地址范圍內(nèi)的任何基本塊。

 
 
 
 
  1. python %IPTANALYZER%\pyipttool\dump_blocks.py -p PT\EQNEDT32.pt -d ProcessMemory\EQNEDT32.dmp -C 0 -c blocks.cache -s 0x00400000 -e 0x0048e000

該命令將生成與地址范圍匹配的基本塊的完整日志。從易受攻擊的模塊執(zhí)行代碼結(jié)束時,可能會過渡到shellcode,我們將重點(diǎn)放在日志末尾的基本塊模式。注意,“ sync_offset = 2d236c”顯示了這些最后的基本塊命中的PSB數(shù)據(jù)包的位置。此sync_offset值可用于檢索該點(diǎn)附近的指令。

 
 
 
 
  1. ...
  2.  > 00000000004117d3 () (sync_offset=2d236c, offset=2d26f4)
  3.   EQNEDT32!EqnFrameWinProc+0x2cf3:
  4.  00000000`004117d3 0fbf45c8        movsx   eax,word ptr [rbp-38h]
  5.  
  6.  > 000000000041181e () (sync_offset=2d236c, offset=2d26f4)
  7.   EQNEDT32!EqnFrameWinProc+0x2d3e:
  8.  00000000`0041181e 0fbf45fc        movsx   eax,word ptr [rbp-4]
  9.  
  10.  > 0000000000411869 () (sync_offset=2d236c, offset=2d26f4)
  11.   EQNEDT32!EqnFrameWinProc+0x2d89:
  12.  00000000`00411869 33c0            xor     eax,eax
  13.  
  14.  > 000000000042fad6 () (sync_offset=2d236c, offset=2d26fc)
  15.   EQNEDT32!MFEnumFunc+0x12d9:
  16.  00000000`0042fad6 c3              ret

轉(zhuǎn)儲EQNEDT32模塊指令

現(xiàn)在,我們知道EQNEDT32模塊的最后一個基本塊是在“ sync_offset = 2d236c” PSB塊內(nèi)執(zhí)行的。dump_instructions.py腳本可用于轉(zhuǎn)儲完整指令。-S(開始sync_offset)和-E(結(jié)束sync_offset)之類的選項(xiàng)可用于指定sync_offset范圍。

 
 
 
 
  1. python %IPTANALYZER%\pyipttool\dump_instructions.py -p ..\PT\EQNEDT32.pt -d ..\ProcessMemory\EQNEDT32.dmp -S 0x2d236c -E 0x2d307c

查找ret代碼

使用dump_instructions.py的輸出,你可以輕松確定從EQNEDT32到Shellcode的代碼的位置。

 
 
 
 
  1. ...
  2. Instruction: EQNEDT32!EqnFrameWinProc+0x2d8b:
  3. 00000000`0041186b e900000000      jmp     EQNEDT32!EqnFrameWinProc+0x2d90 (00000000`00411870)
  4. Instruction: EQNEDT32!EqnFrameWinProc+0x2d90:
  5. 00000000`00411870 5f              pop     rdi
  6. Instruction: EQNEDT32!EqnFrameWinProc+0x2d91:
  7. 00000000`00411871 5e              pop     rsi
  8. Instruction: EQNEDT32!EqnFrameWinProc+0x2d92:
  9. 00000000`00411872 5b              pop     rbx
  10. Instruction: EQNEDT32!EqnFrameWinProc+0x2d93:
  11. 00000000`00411873 c9              leave
  12. Instruction: EQNEDT32!EqnFrameWinProc+0x2d94:
  13. 00000000`00411874 c3              ret
  14. Instruction: EQNEDT32!MFEnumFunc+0x12d9:
  15. 00000000`0042fad6 c3              ret
  16. Instruction: 00000000`0019ee9c bac342baff      mov     edx,0FFBA42C3h
  17. Instruction: 00000000`0019eea1 f7d2            not     edx
  18. Instruction: 00000000`0019eea3 8b0a            mov     ecx,dword ptr [rdx]
  19. Instruction: 00000000`0019eea5 8b29            mov     ebp,dword ptr [rcx]
  20. Instruction: 00000000`0019eea7 bb3a7057f4      mov     ebx,0F457703Ah
  21. Instruction: 00000000`0019eeac 81eb8a0811f4    sub     ebx,0F411088Ah
  22. Instruction: 00000000`0019eeb2 8b1b            mov     ebx,dword ptr [rbx]
  23. Instruction: 00000000`0019eeb4 55              push    rbp
  24. Instruction: 00000000`0019eeb5 ffd3            call    rbx
  25. ...

從上面的指令清單中,你可以注意到00411874和0042fad6有兩個“ ret”指令。

 
 
 
 
  1. Instruction: EQNEDT32!EqnFrameWinProc+0x2d94:
  2. 00000000`00411874 c3              ret
  3. Instruction: EQNEDT32!MFEnumFunc+0x12d9:
  4. 00000000`0042fad6 c3              ret

在這兩個“ ret”指令之后,代碼將轉(zhuǎn)移到非映像地址空間中。

 
 
 
 
  1. Instruction: 00000000`0019ee9c bac342baff      mov     edx,0FFBA42C3h
  2. Instruction: 00000000`0019eea1 f7d2            not     edx
  3. Instruction: 00000000`0019eea3 8b0a            mov     ecx,dword ptr [rdx]
  4. Instruction: 00000000`0019eea5 8b29            mov     ebp,dword ptr [rcx]

注意,在00000000`0019ee9c處的指令沒有檢索到任何匹配的模塊名稱,這意味著它很有可能被shellcode加載到動態(tài)內(nèi)存中。

執(zhí)行下一階段的Shellcode

在shellcode之后,我們可以使用“ jmp rax”指令在0019eec1處定位執(zhí)行下一級shellcode的位置,我們在Intel PT日志中有完整的Shellcode執(zhí)行列表。

 
 
 
 
  1. Instruction: 00000000`0019eeb7 0567946d03      add     eax,36D9467h
  2. Instruction: 00000000`0019eebc 2d7e936d03      sub     eax,36D937Eh
  3. Instruction: 00000000`0019eec1 ffe0            jmp     rax

這些是dump_instructions.py腳本轉(zhuǎn)儲的下一階段shellcode。

 
 
 
 
  1. Instruction: 00000000`00618111 9c              pushfq
  2. Instruction: 00000000`00618112 56              push    rsi
  3. Instruction: 00000000`00618113 57              push    rdi
  4. Instruction: 00000000`00618114 eb07            jmp     00000000`0061811d
  5. Instruction: 00000000`0061811d 9c              pushfq
  6. Instruction: 00000000`0061811e 57              push    rdi
  7. Instruction: 00000000`0061811f 57              push    rdi
  8. Instruction: 00000000`00618120 81ef40460000    sub     edi,4640h
  9. Instruction: 00000000`00618126 81ef574b0000    sub     edi,4B57h
  10. Instruction: 00000000`0061812c 8dbfbc610000    lea     edi,[rdi+61BCh]
  11. Instruction: 00000000`00618132 81c73b080000    add     edi,83Bh
  12. Instruction: 00000000`00618138 5f              pop     rdi
  13. Instruction: 00000000`00618139 5f              pop     rdi

分析總結(jié)

英特爾PT是一項(xiàng)非常有用的技術(shù),可用于防御性和攻擊性安全性研究。IPTAnalyzer是一個使用libipt庫來使用IPT跟蹤日志加快分析速度的工具。這里的漏洞利用示例顯示了使用IPTAnalyzer工具生成塊緩存文件并將其用于基本漏洞利用調(diào)查的好處。沒有英特爾PT的幫助,此過程可能很繁瑣,可能更多地取決于研究人員的直覺。使用Intel PT,可以自動執(zhí)行此過程并自動檢測惡意代碼活動。

本文翻譯自:https://darungrim.com/research/2020-05-07-UsingIntelPTForVulnerabilityTriagingWithIPTAnalyzer.html如若轉(zhuǎn)載,請注明原文地址。


分享題目:使用IntelPT與IPTAnalyzer進(jìn)行漏洞利用
文章位置:http://www.5511xx.com/article/cooedjc.html