1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis

48 0 0
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 đề Lab 6.2 + 13.1 Practical Malware Analysis
Tác giả Nguyễn Văn Khải, Nguyễn Đức Duy, Nguyễn Tiến Đạt, Nguyễn Tùng Dương
Người hướng dẫn Ths. Đặng Xuân Bảo
Trường học Học viện Kỹ thuật Mật mã
Chuyên ngành Mã Độc
Thể loại Báo cáo thực hành
Năm xuất bản 2025
Thành phố Hà Nội
Định dạng
Số trang 48
Dung lượng 2,52 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trả lời: - Để hiểu rõ cách nó hoạt động như nào ta sẽ sử dụng công cụ IDA Pro để phân tích.. - Mục đích của chương trình này là sử dụng hàm InternetGetConnectedState để kiểm tra trạng t

Trang 1

BAN CƠ YẾU CHÍNH PHỦ

Giảng viên hướng dẫn : Ths Đặng Xuân Bảo

Sinh viên thực hiện:

Nguyễn Văn Khải AT190128 Nguyễn Đức Duy

Nguyễn Tiến Đạt

AT190116 AT170209 Nguyễn Tùng Dương AT190115

Hà Nội, 2025

Trang 2

MỤC LỤC DANH MỤC HÌNH ẢNH

LỜI CẢM ƠN

PHÂN TÍCH VÀ TRẢ LỜI CÂU HỎI LAB 6.2 1

Question 1: What operation does the first subroutine called by main perform? 1

Question 2: What is the subroutine located at 0x40117F? 3

Question 3: What does the second subroutine called by mail? 5

Question 4: What type of code construct is used in this subroutine? 6

Question 5: Are there any network-based indicators for this program? 10

Question 6: What is the purpose of this malware? 10

PHÂN TÍCH VÀ TRẢ LỜI CÂU HỎI LAB 13.1 15

Question 1: Compare the strings in the malware (from the output of the strings command) with the information available via dynamic analysis Based on this comparison, which elements might be encoded? 15

Question 2: Use IDA Pro to look for potential encoding by searching for the string xor What type of encoding do you find? 18

Question 3: What is the key used for encoding and what content does it encode? 21

Question 4: Use the static tools FindCrypt2, Krypto ANALyzer (KANAL), and the IDA Entropy Plugin to identify any other encoding mechanisms.What do you find ? 24

Question 5: What type of encoding is used for a portion of the network traffic sent by the malware? Dịch: Loại mã hóa nào được sử dụng cho một phần lưu lượng mạng mà mã độc gửi đi? 25

Question 6: Where is the Base64 function in the disassembly? 28

Question 7: What is the maximum length of the Base64-encoded data that is sent? What is encoded? 33

Question 8: In this malware, would you ever see the padding characters (= or ==) in the Base64-encoded data? 35

Question 9: What does this malware do? 38

TÀI LIỆU THAM KHẢO BẢNG PHÂN CHIA CÔNG VIỆC

Trang 3

DANH MỤC HÌNH ẢNH

Hình 1.1: Cửa sổ IDA Pro tại hàm main 1

Hình 1.2: Giao diện graph view của hàm sub_401000 2

Hình 1.3: Nhảy tới địa chỉ 0x40117F 3

Hình 1.4: Giao diện disassembly của hàm sub_40117F trong IDA Pro 3

Hình 1.5: Giao diện disassembly tại loc_40115C trong IDA Pro 4

Hình 1.6: Hàm sub_401040 5

Hình 1.7: Sơ đồ luồng của sub_401040 6

Hình 1.8: Sơ đồ luồng từ đoạn loc_40109D 7

Hình 1.9: Chuyển kí tự về dạng ASCII 8

Hình 1.10: Quá trình chỉnh sửa kích thước biến buffer 8

Hình 1.11: Trước và sau khi chỉnh sửa 9

Hình 1.12: Mã giả code của sub_401040 9

Hình 1.13: Sơ đồ luồng từ hàm main 10

Hình 1.14: Chọn interface tương ứng để bắt gói tin 12

Hình 1.15: Thông báo hiện ra sau khi thực thi mã độc trên cmd 12

Hình 1.16: Bắt request gửi yêu cầu tới cc.html(1) 13

Hình 1.17: Follow tcp stream request 13

Hình 1.18: CMD sau khi thực thi xong mã độc 14

Hình 2.1: Kết quả BinText – các chuỗi DLL và API 15

Hình 2.2: Kết quả của BinText-chuỗi User-Agent và mẫu URL 16

Hình 2.3: Gói tin HTTP từ Wireshark – mã độc gửi yêu cầu GET 17

Hình 2.4: Follow tcp stream request 17

Hình 2.5: Log của InetSim trên máy chủ Kali Linux 18

Hình 2.6: Kết quả tìm kiếm lệnh xor 19

Hình 2.7: Đoạn mã disassembly thể hiện lệnh XOR (xor eax, 3Bh) 20

Hình 2.8: Kết quả của chuỗi tìm kiếm sub_401190 21

Hình 2.9: Đoạn mã chứa lời gọi sub_401190 21

Hình 2.10: Đoạn mã chứa các hàm API xử lý tài nguyện 22

Hình 2.11: Đoạn mã chứa hàm FindResourceA 22

Hình 2.12: Kiểm tra resource với PEview 23

Hình 2.13: Tìm kiếm chuỗi cần giải mã 23

Hình 2.14: Kết quả sau khi thực hiện giải mã 23

Trang 4

Hình 2.15: Bảng BASE64 tại địa chỉ 0x004050E8 24

Hình 2.16: Đoạn mã tại địa chỉ 0x4050E8 trong IDA Pro 24

Hình 2.17: Kết quả sau khi chuyển đoạn mã sang string 25

Hình 2.18: Đoạn mã thực hiện thuật toán Base64 encode 25

Hình 2.19: Sinh kí tự Base64 đầu tiên 26

Hình 2.20: Sinh ký tự Base 64 thứ hai 27

Hình 2.21: Sinh kí tự Base 64 thứ 3 27

Hình 2.22: Tìm được chuỗi bảng mã base64 trong công cụ bintext 29

Hình 2.23: Giải mã Base64 chuỗi path trong header HTTP 30

Hình 2.24: IDA Pro tạo ghi chú hàm tên sub_401000 đã tham chiếu dữ liệu tới địa chỉ 0x004050E8 31

Hình 2.25: Hàm sub_401000 gọi đến các bảng mã Base64 32

Hình 2.26: Bảng tham chiếu tới hàm sub_401000 32

Hình 2.27: Hàm 4010B1 gọi tới hàm 401000 33

Hình 2.28: Bảng tham chiếu tới hàm sub_4010B1 34

Hình 2.29: Phân tích hàm sub_4011C9 34

Hình 2.30: Các bước mã hóa base64, thêm padding 36

Hình 2.31: Hàm sub_401000 tiếp tục mã hóa base64 từng phần một 37

Hình 2.32: Bảng tham chiếu đến hàm sub_4011C9 39

Hình 2.33: Các bước thực hiện gửi beacon, đặt thời gian chờ, kiểm tra phản hồi 40 Hình 2.34: Hàm loc_4012EA kiểm tra điều kiện, trả về kết quả kết thúc gửi beacon 41

Trang 5

NHÓM SINH VIÊN THỰC HIỆN

Nguyễn Văn Khải Nguyễn Đức Duy Nguyễn Tiến Đạt Nguyễn Tùng Dương

Trang 6

PHÂN TÍCH VÀ TRẢ LỜI CÂU HỎI LAB 6.2

Question 1: What operation does the first subroutine called by main perform? Dịch: Thao tác đầu tiên được hàm main gọi trong mã độc thực hiện là gì?

Công cụ: IDA Pro

Trả lời:

- Để hiểu rõ cách nó hoạt động như nào ta sẽ sử dụng công cụ IDA Pro để phân tích

- Trước tiên, ta load tệp Lab06-02.exe vào IDA Pro và chuyển sang chế độ Graph View

Hình 1.1: Cửa sổ IDA Pro tại hàm main

- Ta sẽ thấy sub_401000 là sub được call đến đầu tiên

- Nháy đúp vào sub_401000 sẽ được cửa sổ view như hình dưới với 2 nhánh rẽ sau

lệnh so sánh :

Trang 7

Hình 1.2: Giao diện graph view của hàm sub_40100

- Giá trị trả về được so sánh với 0 :

• Nếu hàm trả về 0, ZF =1, CF = 0, PF =0, OF = 0; Chuyển đến khối chương trình loc_40102B hiển thị chuỗi Error 1.1: No Internet\n

• Nếu hàm trả về 1, ZF = 0, CF = 0, PF =1, OF = 0; Chuyển đến khối chương

có mũi tên trình màu đỏ, khối chương trình hiển thị: Success: Internet Connection\n

 Đây vẫn là một câu lệnh if sử dụng hàm InternetGetConnectedState

- Mục đích của chương trình này là sử dụng hàm InternetGetConnectedState

để kiểm tra trạng thái kết internet và đưa ra thông báo tùy thuộc vào kết quả của kết nối

• Nếu biến trả về true, nó sẽ in chuỗi Success : Internet Connection

• Nếu không, nó sẽ in ra chuỗi Error : No Internet

Kết luận: Subroutine đầu tiên được gọi bởi hàm main là sub_401000 Nó thực hiện

kiểm tra trạng thái kết nối Internet của hệ thống bằng hàm InternetGetConnectedState

• Nếu máy có kết nối Internet, chương trình in: “Success: Internet Connection”

• Nếu không có kết nối, chương trình in: “Error: No Internet”

Trang 8

Question 2: What is the subroutine located at 0x40117F?

Dịch: Chương trình con ở địa chỉ 0x40117F là gì?

Công cụ: IDA Pro

Trả lời:

- Để biết chương trình con ở địa chỉ 0x40117F ta sẽ sử dụng công cụ IDA Pro

- Trước tiên, để chuyển hướng đến địa chỉ 0x40117F trong IDA Pro, nhấn G, nhập 0x40117F và nhấn Enter; chương trình sẽ di chuyển con trỏ đến vị trí mã đó:

Hình 1.3: Nhảy tới địa chỉ 0x40117F

Hình 1.4: Giao diện disassembly của hàm sub_40117F trong IDA Pro

- Từ hình ảnh thu được ta sẽ tiến hành phân tích subroutine sub_40117F:

• Chức năng:

o Sub_40117F là hàm hiển thị chuỗi đã format, tương tự như printf Nó có khả năng in ra console hoặc ghi vào file tùy ngữ cảnh

• Cơ chế hoạt động:

1 Chuẩn bị stack và bảo toàn các register (ebx, esi, edi)

2 Thiết lập buffer tạm thời qua stbuf

3 Xử lý và format chuỗi đầu vào bằng sub_4013A2

Trang 9

4 Xuất nội dung buffer ra kênh output thực tế thông qua ftbuf

5 Dọn dẹp stack và trả quyền điều khiển về caller

• Tham số:

o arg_4: địa chỉ chuỗi ký tự hoặc format string

o arg_0: giá trị bổ sung cho format string (ví dụ %c, %d)

- Trong lệnh gọi tới 0x40117F tại loc_4015c, chúng ta nhận thấy rằng 2 tham số được đẩy lên ngăn xếp trước lệnh gọi

Hình 1.5: Giao diện disassembly tại loc_40115C trong IDA Pro

- Một tham số là chuỗi "Success: Parsed command is %c\n" và tham số còn lại là byte được trả về từ lệnh gọi trước đó tại 0x401148 Vì có các ký tự định dạng như

%c nên ở đây ta biết được đây là một chuỗi được định dạng %c in ra biểu diễn ASCII của ký tự %d in giá trị thập phân của nó

- Như vậy, có thể xác định rằng sub_40117F đóng vai trò cốt lõi trong việc hiển thị thông tin và thông báo trạng thái của chương trình, đảm bảo chuỗi được in ra an toàn

và hỗ trợ định dạng

Kết luận:

- Subroutine nằm ở địa chỉ 0x40117F là sub_40117F Nó là một hàm in chuỗi có định dạng (printf-like) — nhận một format string và các đối số, định dạng vào buffer tạm, rồi xuất buffer đó ra kênh đầu ra (console / file) an toàn

Trang 10

Question 3: What does the second subroutine called by mail?

Dịch: Chương trình con thứ hai được hàm main gọi có chức năng gì?

Công cụ: Sử dụng IDA Pro

Trả lời:

1 Mở file Lab_006-02.exe trong IDA Pro

2 Trong cửa sổ Functions/Names, ta thấy chương trình con thứ 2 ở đây là

được sử dụng cho các lời gọi tiếp theo

• InternetOpenUrlA: Dùng handle từ InternetOpenA để mở URL cụ thể:

http://www.practicalmalwareanalysis.com/cc.htm

- Nếu mở thành công, trả về một handle file (hFile) cho phép đọc dữ liệu từ URL

Sau khi gọi InternetOpenUrlA, chương trình thực hiện lệnh so sánh:

Trang 11

Đây chính là cấu trúc điều kiện if, phân nhánh thành công hoặc thất bại

• Nếu hFile == 0: chương trình đi vào nhánh lỗi, in thông báo “Error 2.1:

Fail to OpenUrl” và gọi InternetCloseHandle để đóng kết nối

• Nếu hFile != 0: chương trình nhảy tới loc_40109D để tiếp tục xử lý (đọc dữ

liệu bằng InternetReadFile)

Kết luận:

- Chức năng chính của sub_401040 là tải nội dung trang web

http://www.practicalmalwareanalysis.com/cc.htm để chuẩn bị cho quá trình phân

tích phần mở đầu HTML

Question 4: What type of code construct is used in this subroutine?

Dịch: Chương trình con này sử dụng loại cấu trúc lập trình nào?

Công cụ sử dụng: IDA Pro

Trả lời:

- Theo câu 3, chương trình con ở đây là sub_401040

1 Mở file Lab_006-02.exe trong IDA Pro

2 Trong cửa sổ Functions/Names, chọn sub_401040 để nhảy tới hàm đó

3 Nhấn phím Space để chuyển giữa disassembly view và graph view (sơ đồ

luồng) nhằm quan sát cấu trúc lệnh và các nhánh rẽ

Hình 1.7: Sơ đồ luồng của sub_401040

Trang 12

- Trong hình trên ta thấy hàm sub_401040 gọi các API InternetOpenAvà

InternetOpenUrlA để mở URL

InternetOpenA: Hàm này khởi tạo một session để các hàm WinINet khác có

thể dùng để thực hiện các thao tác mạng (HTTP, FTP ) Nó tạo ra một

"Internet handle" dùng chung cho toàn bộ kết nối sau đó

InternetOpenUrlA: Hàm này dùng handle từ InternetOpenA để mở một URL

cụ thể Nó gửi request đến server, nếu thành công sẽ trả về một handle file (hFile) cho phép đọc dữ liệu từ URL

- Sau đó có lệnh so sánh cmp [ebp+hFile], 0 kết hợp với jnz(nhảy nếu không bằng 0) → đây là cấu trúc điều kiện if, phân nhánh thành công hoặc thất bại

- Nếu khác 0, chương trình nhảy xuống nhánh đỏ và in ra thông báo “Error 2.1: Fail

to OpenUrl” và đóng handle (InternetCloseHandle)

- Nếu bằng 0, chương trình nhảy vào loc_40109D Sau đó ta xem loc_40109D

Hình 1.8: Sơ đồ luồng từ đoạn loc_40109D

- Trong hình trên ta thấy sau khi gọi InternetReadFile với tham số 0x200 (512

byte), chương trình tiến hành kiểm tra số byte đọc được

- Nếu giá trị bằng 0 → nhảy xuống nháy đỏ nhánh lỗi được thực thi, in thông báo

“Error 2.2: Fail to ReadFile” và đóng handle (InternetCloseHandle)

- Nếu giá trị khác 0 → chương trình nhảy xuống nháy xanh và tiếp tục xử lý dữ liệu

trong Buffer

Trang 13

- Lệnh cmp kiểm tra xem ký tự đầu tiên có bằng 0x3C hay không (tương ứng với

ký hiệu < trong ASCII) Đặt con trỏ vào vị trí 3Ch nhấn phím tắt R thì IDA Pro sẽ đổi nó thành ký tự < , để trở lại nhấn phím Q Theo cách tương tự, ta có thể thực hiện tương tự với 21h , 2Dh và 2Dh

Hình 1.9: Chuyển kí tự về dạng ASCII

- Để nhận diện chính xác mảng Buffer (512 byte) trong sub_401040, ta chỉnh lại mô

tả ngăn xếp của hàm trong IDA Pro Thao tác thực hiện như sau: mở hàm

sub_401040 trong IDA, nhấn Ctrl+K để hiện hộp thoại Stack of sub_401040, nhấp chuột phải lên vùng biến tương ứng → chọn Array, đặt Array size = 512 và

Element print width = 1 (một phần tử = 1 byte), rồi nhấn OK để áp dụng

Hình 1.10: Quá trình chỉnh sửa kích thước biến buffer

Kết quả: IDA sẽ hiển thị Buffer như một mảng 512 byte trong toàn bộ hàm, giúp việc phân tích các phép so sánh trên từng byte (ví dụ kiểm tra <! ) trở nên rõ ràng

và chính xác hơn

Trang 14

Hình 1.11: Trước và sau khi chỉnh sửa

- 4 byte đầu tiên của bộ đếm được so sánh để xem liệu chúng có phải là những ký tự

<!- - này không (chuỗi ký tự này là phần đầu của nhận xét HTML) Trong IDA Pro,

nhấn Space để chuyển giữa disassembly view và mã giả C (pseudocode), giúp quan

sát logic trên ở cấp độ C rõ ràng hơn

Hình 1.12: Mã giả code của sub_401040

Trang 15

Kết luận:

- Chương trình con này sử dụng một mảng ký tự (character array) được điền dữ liệu

thông qua lời gọi InternetReadFile Mảng này sau đó được so sánh từng byte một để phân tích cú pháp nhận xét HTML (HTML comment)

Question 5: Are there any network-based indicators for this program?

Dịch: Chương trình này có dấu hiệu nào liên quan đến mạng không?

Công cụ sử dụng: IDA Pro

- Sau khi xác định chức năng của sub_401000 và sub_401040, quay lại hàm main

và nhấn Space để chuyển sang chế độ Graph view Quan sát sơ đồ luồng tại main để nắm được mục đích tổng quát của chương trình/mã độc

Hình 1.13: Sơ đồ luồng từ hàm main

Trang 16

1) Kiểm tra kết nối Internet (sub_401000)

- Hàm main gọi sub_401000 để kiểm tra có kết nối Internet hay không

- Sau đó có lệnh so sánh với 0 (cmp …, 0) và một lệnh nhảy theo điều kiện (jnz):

• Nếu giá trị bằng 0 → không có kết nối → chương trình kết thúc

• Nếu giá trị khác 0 → có kết nối → chương trình tiếp tục (nhảy tới

loc_401148)

2) Mở trang web để lấy dữ liệu (sub_401040)

- Tại loc_401148, main gọi sub_401040 (khoảng địa chỉ 0x401040) Đây là hàm

thực hiện tải trang và chuẩn bị dữ liệu để phân tích

- Trong sub_401040:

• Gọi InternetOpenA với User-Agent "Internet Explorer 7.5/pma" → tạo

Internet handle (phiên làm việc mạng)

• Gọi InternetOpenUrlA với URL:

http://www.practicalmalwareanalysis.com/cc.htm → nếu thành công trả về

hFile (handle dùng để đọc dữ liệu)

- Kiểm tra hFile:

• Nếu hFile == 0 → mở URL thất bại → in thông báo "Error 2.1: Fail to OpenUrl" và đóng handle → hàm trả về thất bại

• Nếu hFile != 0 → mở URL thành công → chuyển sang bước đọc dữ liệu

3) Đọc dữ liệu và dò nhận xét HTML (sub_401040)

- Gọi InternetReadFile để đọc 512 byte (0x200) vào Buffer

- Kiểm tra bytesRead:

Nếu bytesRead == 0 → in "Error 2.2: Fail to ReadFile" và đóng handle →

trả về thất bại

• Nếu bytesRead > 0 → có dữ liệu → tiếp tục xử lý Buffer

- Xử lý Buffer: chương trình so sánh tuần tự 4 byte đầu của Buffer với các giá trị

• Nếu không khớp, hàm trả về thất bại (không có command)

4) Hậu xử lý trong main

- Hàm main nhận giá trị trả về từ sub_401040 (ký tự đã parse, lưu tại [ebp+var_8])

- Nếu giá trị khác 0 (parsing thành công):

• Gọi hàm sub_40117F để in ra: Success: Parsed command is %c (với %c là ký

tự lấy từ comment HTML)

Gọi Sleep(0xEA60) → tạm dừng 60000 ms (1 phút)

Sau đó chương trình kết thúc

Trang 17

Phân tích động để chứng minh:

Công cụ : Wireshark

- Đầu tiên mở wireshark, chọn interface mạng tương ứng

Hình 1.14: Chọn interface tương ứng để bắt gói tin

- Sau đó mở và thực thi file mã độc Lab 6-2.exe

Hình 1.15: Thông báo hiện ra sau khi thực thi mã độc trên cmd

Nhận xét: Dòng Success: Internet Connection chứng tỏ sub_401000 trả về thành

công — tức chương trình phát hiện có kết nối Internet và không thoát sớm

=> Kết quả này cho phép main tiếp tục gọi sub_401040 để tải và phân tích trang web

(giai đoạn tiếp theo của phân tích)

Trang 18

- Trong wireshark ta có thể dễ dàng bắt được request sau:

Hình 1.16: Bắt request gửi yêu cầu tới cc.html(1)

- Chuột phải vào request chọn follow tcp stream để xem lại toàn bộ luồng TCP (request/response) dưới dạng một chuỗi liên tục

Hình 1.17: Follow tcp stream request

Nhận xét: Ảnh cho thấy yêu cầu GET /cc.htm kèm header User-Agent: Internet

Explorer 7.5/pma tới www.practicalmalwareanalysis.com, và response HTTP/1.1

200 OK có thân bắt đầu bằng <! A Nội dung này cung cấp bằng chứng mạng rằng chương trình đã nhận được một HTML comment có ký tự A ở vị trí thứ năm

Trang 19

Hình 1.18: CMD sau khi thực thi xong mã độc

Nhận xét: Ảnh chụp màn hình CMD (đã đính kèm) chứng minh rõ ràng chương

trình đã parse và in ký tự A, khớp hoàn toàn với hành vi đã phân tích tĩnh (so sánh từng byte của buffer)

Kết luận:

- Mục đích củ chương trình thực hiện trình tự hành vi mạng và xử lý dữ liệu như

sau: Đầu tiên kiểm tra kết nối Internet, nếu có thì mở một phiên HTTP (với Agent đặc trưng Internet Explorer 7.5/pma) tải trang :

User-http://www.practicalmalwareanalysis.com/cc.htm

- Nó đọc 512 byte đầu vào một bộ đệm, kiểm tra tuần tự bốn byte đầu để phát hiện

tiền tố nhận xét HTML <! , rồi lấy ký tự thứ năm trong comment làm parsed command Khi parsing thành công chương trình in Success: Parsed command is X

(với X là ký tự được trích) rồi tạm dừng 60 giây trước khi kết thúc

Trang 20

PHÂN TÍCH VÀ TRẢ LỜI CÂU HỎI LAB 13.1 Question 1: Compare the strings in the malware (from the output of the

strings command) with the information available via dynamic analysis Based

on this comparison, which elements might be encoded?

Dịch: So sánh các chuỗi trong phần mềm độc hại (từ đầu ra của lệnh strings) với

thông tin có sẵn thông qua phân tích động Dựa trên so sánh này, những phần tử nào

có thể được mã hóa?

Công cụ: BinText, Wireshark, ApateDNS/InetSim

Trả lời:

a) Thực hiện quá trình phân tích tĩnh

- Để phân tích strings trong mã độc ta sử dụng công cụ BinText, tiến hành mở file thực thi trong BinText để quan sát

Hình 2.1: Kết quả BinText – các chuỗi DLL và API

- Trong Tệp thực thi chứa các chuỗi tên DLL (KERNEL32.dll, WS2_32.dll, WININET.dll) và các API mạng/với resource (FindResourceA, LoadResource, InternetOpenA, InternetReadFile, Sleep), cho thấy malware đọc resource nội bộ và thực hiện kết nối mạng (HTTP) Xác minh import table trong IDA/PEview để chứng thực các lời gọi API

Trang 21

Hình 2.2: Kết quả của BinText-chuỗi User-Agent và mẫu URL

- Quan sát ta thấy được chuỗi:

http://%s/%s/: pattern định dạng URL, nghĩa là chương trình có thể dùng sprintf/wsprintf… để chèn domain và path vào chỗ %s Rất có khả năng là template

cho URL máy chủ (C2 / downloader)

Mozilla/4.0: user-agent dùng trong HTTP request (thông thường kèm

WININET/HttpOpenRequest hoặc InternetOpen/InternetOpenUrl) Việc thấy

user-agent + pattern URL mạnh chỉ ra chương trình gửi yêu cầu HTTP ra ngoài

- Tiếp tục tìm kiếm không phát hiện được địa chỉ đích (C2/URL) mà mã độc gửi yêu cầu tới; để xác định chính xác cần tiến hành phân tích động

b) Thực hiện quá trình phân tích động

- Trước khi chạy file thực thi, cần chạy các công cụ này trước để đảm bảo bắt được toàn bộ các hành động của mã độc, tránh bỏ sót bất kì chi tiết nào, từ đó giúp ích cho quá trình phân tích động

1 Trên máy Windows Server 2008: Bật Wireshark, chọn card mạng đang sử dụng

2 Trên máy Kali Linux: Khởi chạy công cụ InetSim để lắng nghe

Trang 22

- Sau khi chuẩn bị xong các công cụ cần thiết, tạo snapshot đầy đủ, tiến hành khởi chạy file Lab13-01.exe và theo dõi hành vi của nó Trên giao diện wireshark bắt được các gói tin mạng được gửi qua lại Phân tích lưu lượng mạng, sẽ thấy mã độc phát tín hiệu (beacon) là một gói tin HTTP request GET đến máy Kali Linux đang chạy INetSim với nội dung HTTP như hình dưới đây:

Hình 2.3: Gói tin HTTP từ Wireshark – mã độc gửi yêu cầu GET

- Khi xem xét các chuỗi, nhận thấy có Mozilla/4.0 ở mục User-Agent đã xuất hiện ở bước phân tích tĩnh (strings), nhưng có chuỗi V0lOLUpXQlBQWlNY và www.practicalmalwareanalysis.com thì không xuất hiện Do đó, có thể giả định rằng các chuỗi này có thể đã được mã độc mã hóa/encode nhằm che giấu tên miền, hành

vi kết nối ra ngoài Internet, tránh bị phát hiện khi được phân tích tĩnh

- Ngoài ra, một số thành phần của gói tin beacon mạng, chẳng hạn như GET, HTTP/1.1, User-Agent, và Host có thể do các thư viện mạng của Windows cung cấp

Hình 2.4: Follow tcp stream request

Trang 23

- Trong công cụ Wireshark, chọn gói tin HTTP, chọn Follow -> HTTP Stream, sẽ thấy được gói tin request từ máy chạy mã độc gửi đến máy Kali linux và phản hồi gửi về (200 OK) biểu thị việc kết nối giữa hai máy thành công

Hình 2.5: Log của InetSim trên máy chủ Kali Linux

- Trên máy Kali Linux, dừng công cụ INetSim, phân tích file log của công cụ này cũng thấy thông tin chi tiết về các request đến, gồm domain, path,…Còn lại trên các công cụ kiểm soát tiến trình thì không nhận thấy dấu hiệu bất thường

Kết luận:

- Như vậy thông qua việc tiến hành phân tích động, có thể rút ra kết luận mã độc có hành vi kết nối ra Internet, trùng khớp với các dự đoán đã đặt ra ở bước phân tích tĩnh Ngoài ra, còn phát hiện thêm các chuỗi domain, path lạ mà trong quá trình phân tích tĩnh chưa hề xuất hiện

Question 2: Use IDA Pro to look for potential encoding by searching for the

string xor What type of encoding do you find?

Dịch: Sử dụng IDA Pro để tìm kiếm mã hóa tiềm năng bằng cách tìm kiếm chuỗi

xor Tìm thấy loại mã hóa nào?

Công cụ: IDA Pro

Trang 24

Trả lời:

- Sử dụng công cụ IDA Pro để reverse nhằm mục đích phân tích mã nguồn, tìm kiếm trong mã độc các bằng chứng về kỹ thuật mã hóa Xét tới kỹ thuật mã hóa dựa trên phép toán XOR khá phổ biến, được sử dụng nhiều

- Có hai kiểu XOR thường gặp trong assembly:

1 Zeroing xor: ví dụ xor eax, eax — đây là thủ thuật nhanh để gán 0 cho thanh

ghi Khi thấy kiểu này, thường không phải là mã hóa

2 Nonzeroing xor: ví dụ xor eax, 3Bh (xor với một immediate ≠ 0) — đây không xóa thanh ghi mà thay đổi giá trị theo một hằng Đây là kiểu xor thường dùng cho mã hóa/giải mã (XOR cipher) hoặc cho các phép biến đổi

dữ liệu khác

- Sau khi lọc bỏ các lệnh xor không phải dạng xóa về 0 (nonzeroing xor) trong IDA Pro, chúng ta thấy có 3 địa chỉ, trong số đó có hai địa chỉ 0x00402BE2 và 0x00402BE6 được xác định là mã của thư viện (library code) tức là những đoạn code chuẩn (runtime/CRT/library) mà chương trình dùng, vì vậy cửa sổ tìm kiếm không thể hiển thị tên hàm

Hình 2.6: Kết quả tìm kiếm lệnh xor

- Còn lại địa chỉ 0x004011B8 lệnh xor eax, 3Bh nằm trong hàm sub_401190:

Ngày đăng: 09/10/2025, 21:48

HÌNH ẢNH LIÊN QUAN

Hình 1.2: Giao diện graph view của hàm sub_40100 - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 1.2 Giao diện graph view của hàm sub_40100 (Trang 7)
Hình 1.7: Sơ đồ luồng của sub_401040 - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 1.7 Sơ đồ luồng của sub_401040 (Trang 11)
Hình 1.11: Trước và sau khi chỉnh sửa. - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 1.11 Trước và sau khi chỉnh sửa (Trang 14)
Hình 2.2: Kết quả của BinText-chuỗi User-Agent và mẫu URL. - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.2 Kết quả của BinText-chuỗi User-Agent và mẫu URL (Trang 21)
Hình 2.7: Đoạn mã disassembly thể hiện lệnh XOR (xor eax, 3Bh). - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.7 Đoạn mã disassembly thể hiện lệnh XOR (xor eax, 3Bh) (Trang 25)
Hình 2.9: Đoạn mã chứa lời gọi sub_401190. - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.9 Đoạn mã chứa lời gọi sub_401190 (Trang 26)
Hình 2.10: Đoạn mã chứa các hàm API xử lý tài nguyện. - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.10 Đoạn mã chứa các hàm API xử lý tài nguyện (Trang 27)
Hình 2.11: Đoạn mã chứa hàm FindResourceA. - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.11 Đoạn mã chứa hàm FindResourceA (Trang 27)
Hình 2.15: Bảng BASE64 tại địa chỉ 0x004050E8. - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.15 Bảng BASE64 tại địa chỉ 0x004050E8 (Trang 29)
Hình 2.22: Tìm được chuỗi bảng mã base64 trong công cụ bintext - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.22 Tìm được chuỗi bảng mã base64 trong công cụ bintext (Trang 34)
Hình 2.23: Giải mã Base64 chuỗi path trong header HTTP - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.23 Giải mã Base64 chuỗi path trong header HTTP (Trang 35)
Hình 2.27: Hàm 4010B1 gọi tới hàm 401000 - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.27 Hàm 4010B1 gọi tới hàm 401000 (Trang 38)
Hình 2.31: Hàm sub_401000 tiếp tục mã hóa base64 từng phần một - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.31 Hàm sub_401000 tiếp tục mã hóa base64 từng phần một (Trang 42)
Hình 2.33: Các bước thực hiện gửi beacon, đặt thời gian chờ, kiểm tra phản - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.33 Các bước thực hiện gửi beacon, đặt thời gian chờ, kiểm tra phản (Trang 45)
Hình 2.34: Hàm loc_4012EA kiểm tra điều kiện, trả về kết quả kết thúc gửi - Báo cáo thực hành lab 6 2 + 13 1 practical malware analysis
Hình 2.34 Hàm loc_4012EA kiểm tra điều kiện, trả về kết quả kết thúc gửi (Trang 46)
w