Tải bản đầy đủ (.docx) (27 trang)

báo cáo thực tập tốt nghiệp công nghệ thông tin tìm hiểu phân tích mã độc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.51 MB, 27 trang )

1 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BO CO
THC TP TT NGHIỆP
CHUYÊN NGÀNH: AN TOÀN THÔNG TIN
Đề tài:
TÌM HIỂU VỀ PHÂN TÍCH MÃ ĐỘC
Sinh viên thực hiện: Đỗ Nhật Anh
MSSV: 1021040059
Lớp: D10ATTTM
Giáo viên hướng dẫn: TS. Hoàng Xuân Dậu
Hà Nội – 8/2014
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
MỤC LỤC
DANH MỤC HÌNH ẢNH
2 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
DANH MỤC BẢNG, BIỂU
LỜI MỞ ĐẦU
Với sự phát triển mạnh mẽ của internet và công nghệ thông tin ngày càng xuất hiện
nhiều mối nguy hại gây ảnh hưởng xấu đến người dùng cũng như phá hoại, đánh
cắp thu thâp thông tin. Mã độc - Malware một trong những mối nguy hại tiềm tàng
gây hâu quả nghiêm trong đến hệ thống và người sử dụng. Mã độc xuất hiện ngày
càng nhiều với các hình thái ngày càng phức tạp, chúng có thể xuất hiện bất kỳ ở
đâu trên môi trường của các thiết bị điện tử như máy tính smart phone, máy tính
bản …,qua Internet, trong các phần mềm miễn phí Ngăn chặn phòng ngừa khắc
phục hâu quả của malware là yêu cầu bức thiết hiện nay. Cũng vì lẽ đó việc tìm
hiểu phân tích nghiên cứu mà độc là một bước vô cùng quan trọng để có thể đẩy
lùi giảm bớt hậu quả của malware
Trong bài báo cáo này em xin trình bày những tìm hiểu ban đầu của mình về phân
tích phần mềm độc hại – malware analysis. Nội dung báo cáo bao gồm 2 chương


lớn chú yếu tâp trung ở chương 2
3 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
• Chương 1: Kỹ năng quan trị hệ thống
• Chương 2: Tìm hiểu về phân tích mã độc
Chương 1: Kỹ năng quản trị hệ thống
1.1. Cài đặt, cấu hình hệ điều hành và các dịch vụ cho các máy chủ
a. Cài đặt hệ điều hành: cài đặt thành công windows server 2008 và CentOS trên
Linux
b. Quản trị người dùng và nhóm người dùng
Hình 1.1-1: Giao diện quản lý user và group
c. Quản trị quyền truy nhập đến các files và thư mục
d. Cài đặt và cấu hình dịch vụ danh mục: cài đặt cấu hình thành công Active
Directory trên Windows
4 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
e. Cài đặt và cấu hình dịch vụ web: IIS với Windows và Apache trên CentOS thành
công
f. Cài đặt và cấu hình dịch vụ DNS trên Windows và Bind/Named trên CentOS
thành công
Hình 1.1-2 Giao diện quản lý DNS
Hình 1.1-3: Kiểm tra dịch vụ DNS bằng Nslookup
1.2. Cài đặt và cấu hình các máy chủ quản trị CSDL
Cài đặt và cấu hình các máy chủ CSDL thông dụng: MS SQL Server 2008 và
MySQL
1.3. Cài đặt, cấu hình và sử dụng các phần mềm rà quét virus và
phát hiện tấn công
Cài đặt, cấu hình và sử dụng các phần mềm rà quét virus:
5 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU

Avast AV, Norton AV, Symantec AV…
Hình 1.3-4: Cài đặt Avast AV trên máy tính
Chương 2: Tìm hiểu về phần tích mã độc
2.1. Phân tích mã độc và những điều cơ bản cần biết
2.1.1. Malware Analysis - Phân tích mã độc
Trước hết để hiêu khái niêm này chúng ta hiểu thế nào là malware
Malware viết tắt của từ malicious software được gọi là phần mềm độc hại hay phần mềm
ác ý. Phần mềm độc hại được định nghĩa là một loại phần mềm hay chuong trình có đoạn
mã được thiết kế để thực hiện hành vi tấn công hệ thống, đánh cắp thông tin, xâm nhập
vào hệ thống, gây tổn hại đến tính bí mật, tính toàn vẹn hoặc tính sẵn sang của hệ thống.
Cũng như nhưng loại virus nhiễm bệnh trên con người malware cũng gây tác hại lướn
đến hệ thống máy tính của bạn vì vậy việc phòng chống ngăn chặn nó là điều cần thiết.
Malware Analysis hay còn được gọi là phân tích mã độc hay phân tích phần mềm độc hại
chính là một bước quan trọng trong đó
Phân tích mã độc là việc thực hiện các biện pháp nghiệp vụ để thu thập, tìm hiểu nghiên
cứu mọi thông tin về mã độc từ đó xác định đặc tính, hành vi của mã độc, cũng như ảnh
hưởng và tác hại của nó để rồi sau đó đưa ra các biện pháp phòng chống và ngăn chặn
6 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
Mục đích của phân tích mã độc là để cung cấp các thông tin đầy đủ nhất về mã độc từ đó
xây dựng biện pháp pháp hiện xử lý chúng. Mục tiêu của những người phân tích thường
sẽ là xác định chính xác những gì đã xảy ra, chúng làm việc gì, gây ảnh hưởng thế nào
đến hệ thống đến máy tính của bạn …
2.1.2. Malware Analysis Techniques - Kỹ thuật phân tích phần mềm độc hại
Có hai phương pháp cơ bản để phân tích
phần mềm độc hại: phân tích tĩnh và phân
tích động (static and dynamic analysis).
Đúng như cái tên phân tích tĩnh sử dụng các
phương pháp kiểm tra các phần mềm độc hại
mà không cần chạy nó. Phân tích năng động

tìm hiểu mã đôc thông qua việc chạy các
phần mềm độc hại. Cả hai kỹ thuật trên được tiếp tục phân loại thành cơ bản và nâng cao
(basic and advanced analysis).
2.1.3. Type of malware - Phân loại phần mềm độc hại
Để phân tích mã độc một cách hiệu quả chúng ta cần hiểu rõ chúng gồm những loại,
những biến thể nào. Hiện nay phần mềm độc hại vô cùng đa dạng bao gồm nhiều loại
khác nhau: Virus, Worm, Trojan horse, Exploit kit, Rootkit, Keylogger, Spyware,
Adware
2.2. Basic static analysis - Kỹ thuật phân tích tĩnh cơ bản
Phân tích tĩnh cơ bản là bước đầu tiên trong quá trình phân tích phần mềm độc hại. Ở
bước này đa phần là sử dụng công cụ tool để thu thâp thông tin
7 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
2.2.1. Antivirus Scanning: A Useful First Step
Có thể sử dụng công cụ antivirus hoặc
vào website />để scan kiểm tra thông tin về file nghi
ngờ từ đó nắm bắt thông tin ban đầu.
2.2.2. Hashing: A Fingerprint for Malware
Mỗi loại malware virus khác nhau đều có một mã hash xác định thông thường từ mã hash
này mà các phần mềm anti có thể scan virus…
Sử dụng công cụ winMD5 để hash file malware thành mã MD5
2.2.3. Packed and Obfuscated Malware
Malware thường được packing hoặc
obfuscation để che dấu thông tin làm cho
người phân tích khó khăn hơn trong việc
phân tích thu thâp thông tin
Sử dụng công cụ PEiD để phát hiện packed
file. Muốn unpack một file có thể sử dụng
môt số công cụ khác như PE
Explorer….hoặc tìm kiếm thông qua google

nhưng đa phần chỉ có thể unpack những loại đơn giản thường gặp
8 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
Hình 2.2-5: Xem thông tin về một file qua
virustotal.com
Hình 2.2.1-1: Xem thông tin về một file qua
virustotal.com
Hình 2.2-6: Sử dụng PEID phát hiện packed
file
Hình 2.2.3-1: Sử dụng PEID phát hiện packed
file
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
2.2.4. Linked Libraries and Functions
Thu thâp thông tin functions mà malware import là một trong những phần quan trong
nhất. Cũng như các đoạn code thông thường code của malware cũng phải dựa trên các
functions lấy từ các Libraries thường là của windows API để thực hiện chức năng. Từ
việc phát hiện thu thâp thông tin về thư viện libraries và functions những nhà phân tích sẽ
có cái nhìn nhận đầu tiên về chức năng mà malware sẽ thực hiện. Ở phần đầu này chủ
yếu sử dụng tool để lấy thông tin về functions và libraries từ một file
Hình 2.2.4-1: Sử dụng Dependency walker lấy thông tin về functions và libraries từ một file
2.2.5. The PE File Headers and Sections
Kiểm tra file headers và sections cung cấp một số thông tin hữu ích khác Chúng ta có thể
sử dụng công cụ PEView để show thông tin của PE file.
2.3. Basic dynamic analysis
Dynamic analysis techniques là bước thứ hai trong quá trình phân tích malware. Dynamic
analysis thường được thực hiện sau basic static analysis đã được thực hiện xong vì rõ
ràng việc sử dụng basic static analysis mục đích chính là thu thâp thông tin ban đầu cho
người phân tích. Dynamic analysis yêu cầu monitering malware khi nó runs hoặc là kiểm
tra hệ thống sau khi malware đã được thực thi. Không giống như static analysis, dynamic
analysis giúp bạn quan sát được các chức năng thực sự của malware
9 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C

SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
2.3.1. Malware analysis in virtual machines:
Trước khi muốn phân tích động malware cần xây dựng một môi trường phù hợp mà
không gây ảnh hưởng tác hại đến máy tính của bạn
Như đã biết sử dụng công nghệ ảo hóa, chạy phân tích malware trên máy ảo sẽ không gây
ảnh hưởng đến máy thật. Có thể xây dựng máy ảo xp or linux và cài các tool trên đó để
thực hiện phân tích động. Bên cạnh đó cần chú ý kiểm tra kết nối mạng ra ngoài trên máy
ảo, có những lựa chọn phù hợp vì có một số loại malware cũng gây ảnh hưởng đến đường
truyền mạng của bạn. Thông thường nên để ở chế độ custom không cho nối mạng ra
ngoài tùy vào yêu cầu của phân tích mà có thể thay đổi sau. Ngoài ra cần kết hơp sử dụng
snapshot để đánh dấu cũng như lưu lại trang thái tại một thời điểm của một máy tính để
có thể so sánh phân tích…
2.3.2. Using sandbox
Sandbox là một trong những cộng cụ hữu hiêu hỗ trợ phân tích động được sử dụng để
running các chương trình không đáng tin mà không phải lo sợ nó ảnh hưởng đến các hệ
thống thực. Sandboxes bao gồm các môi trường được ảo hóa mà thường mô phỏng các
dịch vụ mạng theo một vài kiểu mẫu nào đó để đảm bảo rằng phần mềm hoặc là malware
được tested sẽ hoạt động bình thường.
Các sandboxes cung cấp output dễ hiểu và là thích hợp cho bước phân loại ban đầu
Hiện nay có nhiều malware sandboxes - như là Norman SandBox, GFI Sandbox, Anubis,
Joe Sandbox, ThreatExpert, BitBlaze, và Comodo Instant Malware Analysis - sẽ phân
tích malware miễn phí. Hiện tại, Norman Sandbox và GFI Sandbox (ban đầu có tên là
CWSandbox) là 2 sandboxes phổ biến nhất.
Sandboxes cũng có khá nhiều nhược điểm:
• Malware thường phát hiện khi nó đang được running trong một máy ảo, và nếu
một máy ảo bị phát hiện, malware có thể dùng việc running hoặc trở mặt cư xử
khác đi. Không phải tất cả sandboxes đều giải quyết được vấn đề này.
10 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
• Một vài malware yêu cầu sự hiện diện của registry keys nhất định hoặc files trên

hệ thống mà những thứ này có thể không được tìm thấy trong sandbox. Nhiều cái
còn yêu cầu chứa dữ liệu hợp lệ, ví dụ như commands hoặc encrytion keys.
• Nếu malware là một DLL, một lượng nhất định exported functions sẽ không được
invoked một cách thích hợp, bởi vì một DLL sẽ không run dễ dàng như là một
excutable.
2.3.3. Monitoring with Process Monitor
Process Monitor hay còn
được gọi ProcMon, là một
công cụ giám sát tiên tiến
cho Windows cung cấp một
cách để theo dõi registry, file
system, network, process and
thread activity. Công cụ
tương tự trên windows là:
FileMon và RegMon.
2.3.4. Viewing Processes with Process Explorer
Công cụ Process Explorer (một công cụ miễn phí từ Microsoft) là một công cụ cực kỳ
mạnh mẽ thưc hiện chức năng quản lý cung cấp thông tin thông số process properties, các
thông tin hệ thống, DLL được nạp bởi prosess đang chạy…. Cũng tương tư task manager
ngoài chức năng view process người sử dụng hoàn toàn có thể loại bỏ tắt một process nếu
muốn, log out users, và khởi động and xác nhận processes ….
2.3.5. Faking a Network - Kiểm tra kết nối mạng
Một số loại malware không chỉ tác động vào hê thống nó còn có thể kết nối thông qua
mang interner ra ngoài đánh cắp thông tin, kết nối với máy chủ …
• Using ApateDNS
11 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
Hình 2.3.3-2: Công cụ Process Monitor
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
ApateDNS một công cụ miễn phí từ Mandiant (www.mandiant.com/products/research/
mandiant_apatedns), là cách nhanh nhất để xem các yêu cầu DNS được thực hiện bởi

malware phần mềm độc hại. ApateDNS hoạt động dựa trên việc lắng nghe gói tin UDP
với port tương ứng 53 để lấy ip
• Packet Sniffing with Wireshark
Wireshark là một trong những
công cụ mạnh mẽ nhất trong việc
theo dõi bắt giám sát packet.
Thông qua wireshark chúng ta
hoàn toàn có thể làm rất nhiều
việc. Người phân tích hoàn toàn
có thể dựa trên các fiter của
wireshark để bắt các packet phù
hợp thu thâp thông tin. Sử dụng
Follow TCP Stream để xem nội dung của TCP
section ….
2.4. Advanced static analysis - Phân tích tĩnh nâng cao
Như ở phân trên đã nêu việc phân tích tĩnh cơ bản chỉ là thu thâp các thông tin cơ bản từ
đó có những nhìn nhận phong đoán ban đầu về malware. Muốn phân tích malware tĩnh
một cách cụ thể rõ ràng hơn cần đi sâu vào đọc phân tích code.
2.4.1. Advanced static analysis Techniques - Kỹ thuật phân tích tĩnh nâng cao
Các ứng dụng phần mềm cũng như các loại malware đều được viết trên một ngôn ngữ lâp
trình nào đó. Như những phần mềm ứng dụng được viết trên Java hay các trang web được
viêt trên asp, php … malware cũng được viết trên môt loại ngôn ngữ cụ thể nào đó có thể
là C, Vitual basic, assembly… Muỗn phân tích code tất nhiên là cần show code của
malware lên nhưng rõ ràng malware không bao giờ cung cấp source code cho bạn (trừ
12 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
Hình 2.3.5-3: Wireshark
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
các loại virus đã cũ hoặc chị phục vụ mục đích học tâp thì mới được cung cấp source
code). Vây làm thế nào để đoc được code của malware?
Như hình vẽ bên đoạn code ban đầu

được viết trên ngôn ngữ lâp trình C
– một loại ngôn ngữ lâp trình bậc
cao (High-Level Language). Khi
được Compiler về ngôn ngữ CPU nó
chỉ là các mã ASCII sau đó được
Disassenbler về dạng ngôn ngữ lâp
trình bậc thấp. Muốn phân tích tĩnh
một malware chúng ta cần đọc hiểu
loại ngôn ngữ lâp trình bâc thấp này
Để tìm hiểu về ngôn ngữ lâp trình bậc thấp chúng ta cần hiểu về kiến trúc x86, main
memory, Registers, Flags, functions call…
 Kiến trúc x86
Thuật ngữ x86 chỉ đến họ kiến trúc tập lệnh dựa trên bộ vi xử lý 8086. Thuật ngữ x86 lấy
từ hai số cuối của họ 8086. Rất nhiều thay đổi và mở rộng được thêm vào kiến trúc x86
qua nhiều năm. Kiến trúc này được hiện thực trong bộ vi xử lý từ Intel, AMD, VIA và
nhiều tổ chức khác.
Như thuật ngữ trở thành phổ biến sau sự giới thiệu của 80386, nó thường hàm ý nhị phân
tương đương với bộ tập lệnh 32 bit của 80386. Điều này đôi khi khẳng định x86-32 tách
biệt với gốc 16 bit x86-16 hoặc từ 64 bit x86-64. Mặc dù bộ vi xử lý x86 sử dụng trong
máy tính cá nhân mới và máy chủ.
 Registers
Register là thanh ghi thưc hiện nhiệm vụ lưu trữ dữ liệu có sẵn của CPU, mà nôi dụng
trong đó có thể truy câp một cách nhanh trong hơn là lưu trữ ở những nơi khác.
Registers gồm 4 loại:
• General registers được sử dụng bởi CPU trong quá trình thưc hiện
13 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
Hình 2.4.1-4: Ví dụ Code Level
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
• Segment registers sử dụng để theo dõi các phần của bộ nhớ
• Status flags sử dụng để đưa ra quyết định

• Instruction pointers sử dụng để theo dõi các lệnh tiếp theo để thưc hiện
Bảng 2.4.1-1: The x86 registers
 Flags
EFLAGS registers là thanh ghi cờ trang thại. Trong kiến trúc x86 nó có kích thước 32 bit
mỗi bit là một flag. Trong quá trình thực hiện, mỗi flag có 2 trang thái set (1) hoặc
cleared (0) để kiêm soát hoạt động của CPU hoặc chỉ ra kết quả của một hoạt động của
CPU. Một số flag quan trong trong phân tích mã độc: ZF, CF, SF, TF
 Bộ tâp lệnh
Bộ vi xử lý x86 bao gồm nhiều tâp lệnh thực hiện các chức năng khác nhau ước lượng có
khoảng hơn 100 tên lệnh trong hợp ngữ
14 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
Bảng 2.4.1-2: Một số chỉ lệnh cơ bản trong x86
Ví dụ:
int main(int argc, char* argv[])
{
if (argc != 3) {return 0;}
if (strncmp(argv[1], "-r", 2) == 0){
DeleteFileA(argv[2]);
}
return 0;
}
Đoạn code c trên khi được dịch về mã assem
004113CE cmp [ebp+argc], 3 (1)
004113D2 jz short loc_4113D8
004113D4 xor eax, eax
004113D6 jmp short loc_411414
004113D8 mov esi, esp
004113DA push 2 ; MaxCount
004113DC push offset Str2 ; "-r"

004113E1 mov eax, [ebp+argv]
15 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
004113E4 mov ecx, [eax+4]
004113E7 push ecx ; Str1
004113E8 call strncmp (2)
004113F8 test eax, eax
004113FA jnz short loc_411412
004113FC mov esi, esp
004113FE mov eax, [ebp+argv]
00411401 mov ecx, [eax+8]
00411404 push ecx ; lpFileName
00411405 call DeleteFileA
Xem xét 2 đoạn mã trên ta thấy gồm một đoạn code C và một đoạn code assembly 32 bit,
đoạn code assem chính là đoạn code được dịch ngược từ source code c, thực chất khi
thực hiện phân tích tĩnh sẽ không có soure code vì những người viết malware tất nhiên sẽ
dấu nó đi (trừ những malware đã cũ và được công bố hoặc mục đích học tâp). Ở đây chủ
yếu xem xét đoạn code thứ 2.
Từ đoạn code trên ta có một số nhận xét: đa phần các thanh ghi register được dùng là
thanh ghi 32bit như eax, ecx, esp… kết hợp với các hàm cơ bản của assembly như hàm
so sánh cmp phép xor các hàm nhẩy jz jnz jmp, các hàm push mov call…
Chú ý ở chỗ đánh dấu số 1: câu lệnh cmp đó thực chất tướng ứng với câu lệnh if(argc !=
3) ở đoạn code c ở trên nó sẽ tiến hành so sánh biến argc với số 3
Ở vị trí đánh dấu số 2 tương ứng với hàm gọi strncmp ở code c hàm gọi này sẽ kèm theo
một số biến đầu vào ở đây phần biến đầu vào sẽ được nhập vào trước thông qua hàm
push
2.4.2. IDA PRO
The Interactive Disassembler Professional (IDA Pro) là một trong những công cụ
mạnh mẽ nhất hỗ trợ việc dịch ngược mã disassemble, phân tích tĩnh phần mềm
độc hại. IDA là lưa chọn hàng đầu của những nhà phân tích mã độc.

16 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
Hình 2.4.2-5: Giao diện của IDA free 5.0
IDA cung cấp nhiều chức năng đa dạng cũng như rất trực quan với người dùng. Bạn có
thể lựa chọn nhiều loại file đuôi khác nhau để disassemble. Một số cửa sổ quan trọng
trong IDA:
• Function Windows: Cửa sổ này liệt kê tất cả các hàm của chương trình. Sau quá trình
phân tích, IDA sẽ liệt kê và đưa ra danh sách hàm với địa chỉ bắt đầu, kết thúc, các
tham số và đặc tính của từng hàm.
• Output Windows: Cửa sổ này hiển thị một số thông tin đầu ra trong quá trình xử lý
của IDA, cửa sổ này không cần quan tâm quá nhiều khi tiến hành làm việc cùng IDA
• IDA View: Cửa sổ này có hai chế độ hiển thị: Hiển thị dạng mã Asembly hoặc chia
thành từng khối lệnh có sự liên kết giữa các khối lệnh để thực hiện các cấu trúc lặp, rẽ
nhánh.
• Graph Overview: Cửa sổ này xuất hiện cùng cửa sổ IDA View ở chế độ hiển thị theo
các khối. Cửa sổ này cung cấp cho người dùng cái nhìn tổng quan về một hàm hoặc
toàn bộ chương trình. Thông qua cửa sổ này người dùng có thể biết được mức độ đơn
giản/phức tạp của một hàm/chương trình đang theo dõi, đồng thời có thể di chuyển
nhanh tới các vị trí trong toàn bộ hàm/chương trình để quan sát tổng quan và chi tiết
các module. Khi di chuyển trên Graph Overview, chúng ra sẽ xem được các khối lệnh
ở vị trí tương ứng trên cửa sổ IDA View
• Hex View: Cửa sổ này cung cấp các thông tin dưới dạng mã HEX, phần này cũng cho
phép người dùng có khả năng chỉnh sửa trực tiếp mã HEX.
17 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
• Import View: Cửa sổ này cho biết các module mà chương trình đã sử dụng và từng
module cụ thể được load lên từ thư viện nào
Ý nghĩa sử dụng IDA trong phân tích, dịch ngược
IDA cung cấp rất nhiều thông tin cũng như tính năng hỗ trợ cho người phân tích, tuy
nhiên nếu không biết cách sử dụng một cách hợp lý và hiệu quả thì rất dễ làm cho người

dùng bị nhiễu thông tin và cảm thấy khó khăn. Mục đích của IDA là để người phân tích
có một cái nhìn tổng quan về toàn bộ chương trình, tiếp theo đó, người dùng có thể thấy
được cấu trúc chi tiết của các module trong chương trình, mối quan hệ giữa các module,
các khối lệnh nằm trong từng hàm.
Kết hợp với quá trình sử dụng OllyDBG, người phân tích có thể biết được luồng đi của
chương trình tương ứng với từng giá trị và loại dữ liệu. Đồng thời với quá trình đó, người
phân tích cũng có thể xác định các chức năng của từng hàm, tạo các ghi nhớ cho từng
khối lệnh để làm việc hiệu quả hơn.
2.4.3. Recognizing C codeconstructs in assembly
Dịch ngược code c về assembly. Chúng ta cùng xem xét một ví dụ đơn giản sau:
void main(){
int x = 1;
int y = 2;
x = x+y;
printf("Total = %d\n", x);
}
Đây là một đoạn code C đơn giản công 2 số và hiện thị màn hình kết quả. Khi được dịch
về assembly sẽ được đoạn code sau:
00401006 mov dword ptr [ebp-4], 1
18 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
0040100D mov dword ptr [ebp-8], 2
00401014 mov eax, [ebp-4]
00401017 add eax, [ebp-8]
0040101A mov [ebp-4], eax
0040101D mov ecx, [ebp-4]
00401020 push ecx
00401021 push offset aTotalD ; "total = %d\n"
00401026 call printf
Cùng tìm hiểu phân tích đoạn code trên ta thấy:

Đầu tiên phần khai báo biến gán giá trị:
int x = 1;
int y = 2;
Khi dịch sang assembly tương ứng với câu lệnh:
00401006 mov dword ptr [ebp-4], 1
0040100D mov dword ptr [ebp-8], 2
Ở assem nó sẽ khai báo kiêu dữ liệu dword cho 2 memory [ebp-4], [ebp-8] và dùng hàm
mov để gán giá trị cho nó
Với câu lệnh x=x+y nó tương ứng với 3 câu tiếp theo, giá trị [ebp-4] chuyển vào thanh
ghi eax rồi dung lệnh cộng Add cộng eax và [ebp-8] sau đó lại chuyên giá trị trong eax về
cho [ebp-4] hay chính là x
19 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
Lệnh cuối cùng printf("Total = %d\n", x); tương ứng với 3 câu lệnh còn lai lệnh printf
cần có 2 tham số đầu vào theo mã assembly cần push tham số vào trước rồi mới gọi hàm
x sẽ được push vào từ thanh ghi ecx, tiếp theo là total = %d\n và cuối cùng gọi call printf
2.5. Advanced dynamic analysis
2.5.1. Debugging
Debugger là một phần mềm hoặc phần cứng được sử dụng để kiểm tra và việc thực thi
của một chương trình khác. Debuggers giúp sức trong quá trình phát triển phần mềm, bời
vì các chương trình thường xuyên có những lỗi khi chúng được viết lần đầu tiên. Như khi
bạn phát triển, bạn cung cấp input cho chương trình và nhìn vào output, nhưng bạn không
thể biết được làm thế nào chương trình sinh ra kết quả như vậy. Debuggers cho bạn
những cái nhìn sâu hơn về những gì chương trình làm khi nó đang thực thi. Debuggers
được thiết kế để cho phép developers có thể đo lường (measure) và điều khiển (control)
trạng thái bên trong và thực thi của một chương trình.
Debuggers cung cấp thông tin về một chương trình mà ta có thể rất khó hoặc là không thể
khi sử dụng disassembler. Disassemblers cung cấp một snapshot về chương trình trước
khi thực thi câu lệnh đầu tiên. Debuggers cung cấp một cái nhìn "động" về một chương
trình như là nó run. Một ví dụ nhé, debuggers có thể show các giá trị memory addresses

như chúng thay đổi xuyên suốt quá trình thực thi của một chương trình.
Khả năng đo lường và điều khiển thực thi của một chương trình cung cấp những hiểu biết
quan trọng trong suốt quá trình phân tích malware. Debuggers cho phép bạn nhìn thấy
mọi memory location, register, và argument đến mọi function. Debuggers còn giúp bạn
thay đổi bất cứ thứ gì về thực thi chương trình vào bất cứ lúc nào. Cho ví dụ, bạn có thể
thay đổi giá trị của một biến vào bất cứ thời điểm nào - tất cả những thứ bạn cần đó là
thông tin đầy đủ về biến đó, bao gồm cả location của nó.
Source-Level và Assembly-Level Debuggers
Hầu hết software developers đều quen thuộc với source-level debuggers, những gì cho
phép một programmer debug trong khi coding. Kiểu debugger này được tích hợp sẵn
20 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
trong integrated development environments (IDEs). Source-level debuggers cho phép bạn
đặt breakpoints, việc đặt breakpoints làm dừng thực thi chương trình trên các dòng của
source code, để kiểm tra trạng thái của các biến phía bên trong và đi qua (step through)
thực thi của chương trình mỗi lần một dòng.
Assembly-level debuggers, thỉnh thoảng được gọi là low-level debuggers, hoạt động trên
assembly code thay vì source code. Cũng như với source-code debuggers, bạn có thể sử
dụng assembly-level debugger để step through một chương trình mỗi lệnh tại mỗi thời
điểm, đặt breakpoints để dùng lại tại các dòng assembly code xác định, và phân tích
memory locations.
Malware analysis thường sử dụng assembly-level debuggers bởi vì họ thường không có
sẵn source code của một chương trình.
2.5.2. Ollydbg
Ollydbg hay gọi tắt là Olly, là một chương trình Debugger nổi tiếng rất dễ sử dụng, trực
quan. Thích ứng cho mọi cấp độ CrackEr khác nhau.
Olly bao hàm rất nhiều tính năng mà nếu sử dụng riêng l¡ ta phải cần đến nhiều chương
trình kết hợp lại
Hình 2.5.2-6: Giao diện Ollydbg
Như hình trên ta thấy olly được chia thành 5 cửa sổ chính

21 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
• CPU: hầu hết thời gian chúng ta tập trung vào đây. Cửa sổ này chia làm 4 ô nhỏ. Ta
xét từ trái sang phải
o Ô thứ nhất: Hiển thị địa chỉ của code.
o Ô thứ hai: chính là mã lệnh. Khi ta double-click vào nó thì có nghĩa ta đặt BreakPoint
tại đó. Và khi double-click lần nữa thì xoá bỏ điểm đặt BreakPoint này.
o Ô thứ ba: code Assembler. Đây là ô rất quan trọng trong suốt quá trình trace code.
Khi ta double-click vào nó thì sẽ hiện lên ô “Assemble at XXXXXXXX”, chúng ta có
thể sửa code của chương trình thông qua ô này.
o Ô thứ tư: hiển thị thông tin của chương trình. Chúng ta sử dụng ô này để tìm các
chuỗi đặt biệt. Và khi chúng ta chuyển sang cửa sổ “Text String reference” thì mọi
thông tin của cửa sổ này chính là thông tin của ô này. Khi ta double-click vào nó thì
sẽ hiện lên ô “Add comment at XXXXXXXX” cho chúng ta ghi chú lại thông tin, chú
giải cần thiết để sử dụng cho lần sau.
• Registers [FPU, MMX, 3DNow!]: Cửa sổ thứ hai nằm bên phải cửa sổ thứ nhất. Cửa
sổ này hiển thị các thanh ghi và cờ trong Assembly. Cửa sổ này cần thiết để chúng ta
theo dõi sự thay đổi giá trị của các thanh ghi, các lệnh toán học ….
• Cửa số thứ ba: Cửa sổ nhỏ nằm ngay bên dưới của sổ thứ nhất.Cửa sổ này sẽ thông
báo cho ta biết địa chỉ thực, giá trị tính toán trước khi đưa vào hiển thị ở Cửa Sổ
Thứ Hai. Trong cửa sổ này, khi ta right click vào một dòng thì có thể xuất hiện cửa sổ
phụ với các tùy chọn ( tối đa là 4 tuỳ chọn ) Modify data, Follow address in Dump,
Follow value inDump và Appearance.
• Address, Hex dump, ASCII hay UNICODE: Cửa sổ thứ tứ nằm bên dưới cửa sổ thứ
ba. Cần thiết để ta quan sát sự thay đổi các giá trị tính toán của chương trình. Trong
một vài trường hợp ta có thể tìm thấy chuỗi SERIAL ở đây.
• StackCửa sổ thứ năm nằm bên dưới của sổ thứ hai và ngay bên phải cửa sổ thứ ba.
Đây là bộ nhớ tạm của chương trình. Các thông số của một hàm trước khi xử lý sẽ
được lưu tạm vào trong STACK này. Theo dõi chặt chẽ sự thay đổi các vùng nhớ và
giá trị của cửa sổ này sẽ giúp ích rất nhiều trong quá trình tìm ra chuỗi SERIAl thực.

22 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
KẾT LUN
Với sự phát triển mạnh mẽ liên tục được cải tiến của phần mềm đôc hại, chúng
ngày càng là mối đe dọa là hiểm họa cho người sự dụng máy tính. Việc thưc hiện
phân tích phần mềm độc hại là một con đường gian nan và cần nhiều công sức và
đam mê. Thông qua bài báo cáo trên em mong rằng mọi người sẽ có được cái nhìn
tổng quan về các loại phần mềm độc hại, mối nguy hiểm của nó cũng như việc
phân tích phần mềm độc hại để từ đó phát triển mở rộng tìm hiểu nghiên cứu
chuyên sâu tiếp. Bài luận đạt được môt số kết quả sau:
• Tìm hiểu khái niệm phần mềm độc hại, phân tích phần mềm độc hại, cũng
như các loại phần mềm độc hại, các loại phân tích phần mềm độc hại….
• Tâp trung tìm hiểu về các loại công cụ hỗ trợ phân tích cũng như xây dựng
môi trường làm việc với phần mềm độc hại
• Đi sâu vào tìm hiểu những kỹ thuật phân tích phần mềm độc hại: phân tích
động và phân tích tĩnh. Đặc biệt là các kỹ năng phân tích tĩnh nâng cao
23 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C
SVTT: ĐỖ NHẬT ANH GVHD: TS. HOÀNG XUÂN DẬU
TÀI LIỆU THAM KHẢO
 Một số tài liệu:
PRAISE FOR PRACTICAL MALWARE ANALYSIS – Michael Sikorski and Andrew
Honig
 Một số link tham khảo
/> /> /> /> />24 | T Ì M H I Ể U V Ề P H Â N T Í C H M Ã Đ Ộ C

×