o Sau khi tìm được các chuỗi đặc trưng của mẫu mã độc, viết luật để pháthiện malware.exe là mã độc viết ít nhất 3 đặc trưng của mã độc− Kết thúc bài lab: + Trên terminal đầu tiên sử dụng
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
Các thành viên: Phạm Tiến Dũng - B21DCAT070
Nguyễn Tiến Thành - B21DCAT178
Lê Văn Bằng - B21DCAT042
Trang 2Không chỉ phát hiện phần mềm độc hại, chúng còn có khả năng xác địnhnhiều loại hiện vật kỹ thuật số khác nhau, từ các tập tin thông thường đến cácchuỗi hex phức tạp trong các tập dữ liệu nhị phân Mỗi quy tắc YARA được cấutrúc xung quanh các tập hợp chuỗi , biểu thức chính quy và logic điều kiện Cácthành phần này được thiết kế tỉ mỉ để phát hiện các chuỗi byte hoặc hành vi cụthể trong các mẫu được phân tích Do độ chính xác và khả năng thích ứng,khuôn khổ YARA được các chuyên gia an ninh mạng, nhà nghiên cứu phầnmềm độc hại và nhà phân tích mối đe dọa ưa chuộng, hỗ trợ cả điều tra pháp y
kỹ thuật số và phát hiện mối đe dọa theo thời gian thực
Trang 3- Meta: Phần meta chứa thông tin mô tả về quy tắc Đây là phần không bắt buộcnhưng rất hữu ích để cung cấp ngữ cảnh cho quy tắc Một số trường thông dụngtrong phần meta bao gồm:
● author: Tên của tác giả viết quy tắc
● description: Mô tả ngắn gọn về mục đích của quy tắc
● date: Ngày tạo hoặc cập nhật quy tắc
● reference: Thông tin tham khảo hoặc liên kết tới tài liệu liên quan
- Strings: Các chuỗi hoặc mẫu cần tìm trong tệp tin Đây có thể là các chuỗi vănbản, chuỗi nhị phân, hoặc các chuỗi có dạng hex Các chuỗi này có thể là:
● Chuỗi văn bản: Được đặt trong dấu ngoặc kép đôi
● Chuỗi hex: Được đặt trong dấu ngoặc nhọn và chứa các byte dưới dạnghex
● Chuỗi nhị phân: Có thể sử dụng ký tự đại diện (?) để chỉ bất kỳ byte nào
- Condition: Điều kiện để xác định xem tệp tin có khớp với quy tắc hay không.Điều kiện này thường dựa trên sự xuất hiện của các chuỗi trong phần Strings.Các điều kiện thường gặp bao gồm:
● Sự xuất hiện của chuỗi: any of them, all of them, hoặc cụ thể hơn như
Trang 4● Độ dài tệp tin: filesize < 1MB.
● Tổ hợp các điều kiện: Sử dụng các toán tử logic như and, or, not
II Nội dung thực hành
- Khởi động bài lab:
+ Vào terminal, gõ:
imodule https://github.com/mei3011/ptit-yara
Labtainer ptit-yara+ Nhiệm vụ 1: Đọc file “rule.yar” để xem các luật có sẵn
o Trên terminal yara sử dụng lệnh “nano rule.yar” để xem các
luật có sẵn
nano rule.yar
Trang 5+ Nhiệm vụ 2: Phát hiện IP độc hại trong file “example.txt” với yara
o Sau khi xem qua các luật, mở file example.txt sẽ thấy có 1 địa chỉ ip,thêm địa chỉ ip này vào luật trong file rule.yar
Trang 6o Dùng yara để phát hiện ip trong file example.txt
yara rule.yar example.txt
Trang 7o Lưu file và chạy lại yara với file example.txt
+ Nhiệm vụ 4: Phát hiện được mẫu mã độc cho trước với yara
Trang 8o Sau khi hiểu cách hoạt động của yara, tiến hành thử nghiệm phát hiệntrên mẫu mã độc malware.exe
o Tìm kiếm các chuỗi đặc trưng của malware.exe
strings malware.exe
Trang 9o Sau khi tìm được các chuỗi đặc trưng của mẫu mã độc, viết luật để pháthiện malware.exe là mã độc (viết ít nhất 3 đặc trưng của mã độc)
− Kết thúc bài lab:
+ Trên terminal đầu tiên sử dụng câu lênh sau để kết thúc bài lab:
stoplab yara
Trang 10+ Khi bài lab kết thúc, một tệp zip lưu kết quả được tạo và lưu vào một vị tríđược hiển thị bên dưới stoplab.
III Kết luận
Qua bài thực hành, em hiểu được cách sử dụng YARA để phát hiện mã độc,biết cách viết và áp dụng quy tắc YARA, hiểu cách dùng các tùy chọn YARA nhưnocase: Tùy chọn nocase cho phép tìm kiếm mà không phân biệt chữ hoa và chữthường, giúp linh hoạt trong việc phát hiện chuỗi, đặc biệt khi mã độc có thể thayđổi hình thức biểu diễn để né tránh phát hiện Em còn hiểu được cách thực hànhphân tích và viết quy tắc phát hiện mã độc thực tế
Trang 11Volatility là một công cụ dựa trên Python cho phép trích xuất thông tin từ bộnhớ đệm, như các quá trình, kết nối mạng, khóa registry, mật khẩu, khóa mã hóa, vànhiều hơn nữa Volatility cũng có thể thực hiện các nhiệm vụ nâng cao, như pháthiện phần mềm độc hại, phân tích dòng thời gian, khắc phục lỗi bộ nhớ, và tiêm
mã Volatility hoạt động bằng cách sử dụng các plugin cụ thể cho mỗi hệ điều hành
và định dạng bộ nhớ Bạn cũng có thể tạo ra các plugin của riêng mình hoặc sửdụng các plugin do cộng đồng đóng góp
1.2 Yêu cầu đối với sinh viên
Sinh viên cần có kiến thức cơ bản về hệ điều hành Linux và các khái niệm cơbản về phân tích malware để hiểu và áp dụng công cụ Volatility Hiểu biết về cáccông cụ như VirusTotal có thể hữu ích để bổ sung kiến thức trong quá trình sử dụngVolatility
Trang 12Các nhiệm vụ:
- Task 1: Xác định thông tin mẫu
+ Sau khi khởi động xong 1 terminal ảo sẽ xuất hiện Ở thư mục hiện tại đã cómột mẫu bộ nhớ là cridex.vmem
+ Có thể sử dụng plugin “imageinfo” để có thông tin về mẫu bộ nhớ
volatility -f cridex.vmem imageinfo
Trang 13 Profile của mẫu bộ nhớ này là WinXPSP2Ax86
+ Thông tin này cho khởi đầu cần thiết để thực hiện lệnh phân tích tiếp theobằng các plugin khác Cần phải ghi nhớ Suggested Profiles để thay thế vào các lệnhsau này
profile=WinXPSP2 86x
- Task 2: Xác định tiến trình độc hại
+ Có một số plugin trong Volatility cho phép xem các tiến trình đang chạy.Một số trong số này bao gồm: psscan, pstree, pslist, psxview
+ Có thể xem những tiến trình đã được chấm dứt trước đó và những tiến trìnhnào đã bị rootkit hủy liên kết bằng cách sử dụng “psscan”
volatility -f cridex.vmem profile=WinXPSP2x86 psscan
Trang 14+ Plugin “pslist” hiển thị địa chỉ bắt đầu, tên tiến trình, PID, PPID, số lượngluồng, số lượng handles, và ngày/giờ.
volatility -f cridex.vmem profile=WinXPSP2x86 pslist
+ Ngoài ra,cũng có thể sử dụng plugin “pstree” như một phương thức thay thếcho pslist nhưng với cấu trúc cây để thể hiện mối quan hệ giữa các tiến trình:
volatility -f cridex.vmem profile=WinXPSP2x86 pstree
Trang 15 Trong danh sách này có 2 tiến trình lạ đó là reader_sl.exe và alg.exe
PID của reader_sl.exe là 1640 cha là explorer.exe; PID của alg.exe là 788cha services.exe
+ Trước khi tiếp tục, hãy chạy plugin “psxview” để tham chiếu chéo các tiếntrình với nhiều danh sách khác nhau “psxview” được sử dụng để xem và phân tíchcác tiến trình ẩn và các kỹ thuật che giấu khác trên hệ thống
volatility -f cridex.vmem profile=WinXPSP2x86 psxview
Trong kết quả có phát hiện ra tiến trình ẩn nào không? Tại sao?
Trang 16+ “cmdline” là plugin được sử dụng để trích xuất và hiển thị các đối số củadòng lệnh được sử dụng khi khởi động các tiến trình trong hệ thống.
volatility -f cridex.vmem –profile=WinXPSP2x86 cmdline
Đường dẫn của tiến trình độc hại là : C:\Program Files\Adobe\Reader9.0\Reader\Reader_sl.exe
- Task 3: Xác định kết nối mạng độc hại
+ Để xem các kết nối mở trên máy tính Có thể chạy các plugin như “sockets”
volatility -f cridex.vmem profile=WinXPSP2x86 sockets
Trang 17+ Ngoài ra, “connscan” là một công cụ quét các kết nối TCP và sockets sẽ pháthiện các socket đang lắng nghe cho bất kỳ giao thức nào (TCP, RAW, UDP, vv).
volatility -f cridex.vmem profile=WinXPSP2x86 connscan
Có kết nối explorer.exe (PID 1484) đang được sử dụng bởi PID vừa tìmđược ở nhiệm vụ trên
Local Address:172.16.112.128:1038 kết nối với Remote Address:41.168.5.140:8080 qua PID 1484; Local Address: 172.16.112.128:1037 kếtnối với Remote Address: 125.19.103.198:8080 qua PID 1484
- Task 4: Trích xuất tiến trình và bộ nhớ độc hại
+ Hoạt động bất thường từ hai tiến trình (explorer.exe và reader_sl.exe) Đểkiểm tra độ chính xác,có thể sử dụng plugin “malfind” để xác nhận
Trang 18volatility -f cridex.vmem profile=WinXPSP2x86 malfind
Trang 19+ Tiếp theo,có thể phân tích sâu hơn bằng cách sử dụng các plugin
“memdump” và “procdump” để trích xuất tiến trình và bộ nhớ
volatility -f cridex.vmem profile=WinXPSP2x86 procdump -p 1640 dump-dir
Trang 20volatility -f cridex.vmem profile= WinXPSP2x86 memdump -p 1640 dump-dir
volatility -f cridex.vmem profile= WinXPSP2x86 memdump -p 1484 dump-dir
+ Để phân tích các lệnh file dmp, sinh viên có thể sử dụng “strings” và “grep”
để tìm mối tương quan với địa chỉ IP 41.168.5.140
strings 1640.dmp | grep -Fi"41.168.5.140" -C 5
Trang 21strings 1484.dmp | grep -Fi"41.168.5.140" -C 5
Trang 22+ Nếu chạy “strings” và “less”, chúng ta có thể tìm thấy một lượng đáng kểcác tên miền ngân hàng và tài chính.
strings 1640.dmp | less
Trang 24strings 1484.dmp | less
Trang 26 Tên miền và các địa chỉ IP đáng nghi có trong bộ nhớ: 41.168.5.140:8080
+ Còn 2 file exe vừa trích xuất được, để phân tích chi tiết hơn thì chúng ta cần
làm phân tích tĩnh và động chuyên sâu Tuy nhiên, sinh viên có thể tạo mã hash vàkiểm tra trên các trang công cụ phân tích online như VirusTotal hay Intezer để biếtthêm thông tin
md5sum (executable.1640.exe và executable.1484.exe)
2 chương trình bất thường kia là loại mã độc : trojan.multiop ;
trojan.multiop/amvb
+ Sau đó,kết nối đến 1 container khác thông qua ssh bằng lệnh sau:
ssh ubuntu@192.168.0.20
Trang 28stoplab ptit- volatility
- Khi bài lab kết thúc, một tệp zip lưu kết quả được tạo và lưu vào một vị tríđược hiển thị bên dưới stoplab
1.2 Yêu cầu đối với sinh viên
Có kiến thức cơ bản về cách thức quản lý tệp tin, bộ nhớ, quy trình của hệ điềuhành Windown, ngôn ngữ lập trình Assembly, biết cách sử dụng công cụdebugging như OllyDBG để theo dõi, phân tích một chương trình máy tính
1.3 Chuẩn bị môi trường để có thể làm bài thực hành
• Sinh viên tải và cài đặt một ảo Windown 10 được cung cấp sẵn để cóthể thực hiện bài thực hành với máy Labtainer Link tải máy windows7cho Vmware:
Trang 29Settings -> System -> Remote Desktop -> Enable Remote Desktop -> On
Sau khi thiết lập chức năng Remote Desktop trên máy ảo Windown 10,sinh viên tiến hành kiểm tra kết nối giữa hai máy thông qua lệnh:
Trên máy Terminal của máy Labtainer gõ lệnh:
ping 192.168.92.136(địa chỉ ip của máy Windown 10)
1.4 Nội dung thực hành
Khởi động bài lab:
o Vào terminal, gõ:
labtainer ptit-ollydbg
Trang 30(Chú ý: sinh viên sử dụng mã sinh viên của mình để nhập thông tin email người thực hiện bài lab khi có yêu cầu, để sử dụng khi chấm điểm)
Sau khi khởi động xong một terminal ảo sẽ xuất hiện, đại diện cho máy
ptit-ollydbg
• Trên terminal ptit-ollydbg sử dụng câu lệnh"remmina" để khởi chạy ứng
dụng điều khiển máy tính từ xa Remmina
• Cửa sổ ứng dụng Remmina hiện ra, sinh viên tiến hành tạo mộtRDP(Remote Desktop Protocol) với các tham số như :
- Name: ThucHanhATTT
- Group: là nhóm của kết nối
- Protocol: là giao thức kết nối
- Sever: địa chỉ IP máy Windown
- User name: Lab
- User password: 1234@qwer
▪ Nhấn Save&Connect để lưu và kết nối đến máy tính Windown 10
Trang 31• Sinh viên làm các nhiệm vụ dưới đây để hoàn thành bài lab: o
oNhiệm vụ 1: Cài đặt OllyDBG và open file EasyCrackMe.exe ▪
OllyDBG là một công cụ gỡ lỗi (debugger) phổ biến được sử dụngrộng rãi trong cộng đồng phát triển phần mềm và phân tích malware.Với OllyDBG, người dùng có thể phân tích và thao tác với các chươngtrình máy tính chạy trên hệ điều hành Windows một cách chi tiết vàlinh hoạt Công cụ này cung cấp một loạt các tính năng mạnh mẽ nhưxem và chỉnh sửa mã máy, theo dõi giá trị của các biến, gỡ lỗi đa luồng,tìm kiếm và thay đổi mã máy, phân tích mã, và hỗ trợ plugin mở rộng
Trang 32▪ Disassembler window: Hiển thị các đoạn mã của chương trình dưới
dạng mã assembly và các chú thích kèm theo tại các dòng mã đó
▪ Register window: Hiển thị danh sách các thanh ghi và giá trị của chúng
trong quá trình thực thi chương trình
▪ Tip window: Cung cấp các thông tin bổ sung và gợi ý cho một dòng mã
cụ thể, hữu ích trong quá trình debug
▪ Dump window: Cho phép người dùng xem và chỉnh sửa các giá trị
trong bộ nhớ của chương trình đang được debug
▪ Stack window: Hiển thị thông tin về stack của chương trình, bao gồm
các giá trị và địa chỉ trên stack
Bảng 1.1: Một số lệnh trong OllyDBG
Run (F9) Bắt đầu thực thi chương trình
Pause (F12) Tạm dừng thực thi chương trình
Step Into (F7) Thực hiện lệnh hiện tại và di chuyển đến lệnh tiếp theo, bao
gồm cả trong các hàm con
Trang 33Hiển thị cửa sổ Stack, nơi bạn có thể xem nội dung của stack.
▪ Sau khi hoàn thành bước truy cập từ xa được vào máy Windown, sinhviên khởi chạy công cụ OllyDBG v1.10
Trang 34▪ Sử dụng OllyDBG mở file chương trình Easy_CrackMe.exe bằng cách
nhấn: F3 -> Downloads -> Easy_CrackMe.exe
Trang 35▪ Sinh viên quan sát các cửa sổ của ứng dụng OllyDBG khi mở filechương trình
Trang 36o Nhiệm vụ 2: Sử dụng OllyDBG để unpack chương trình
● Sau khi mở file chương trình xong, nhấn F9 để chạy chương trình,khi chạy chương trình sẽ hiện ra một cửa sổ, nhập vào mật khẩu chochương trình Ví dụ: B20DCAT001
▪ Sau khi nhập mật khẩu, thông báo của chương trình sẽ được đưa ra, đếnbước này sinh viên sẽ cần phải tìm các thông tin của đoạn chuỗi vănbản thông báo hiện ra màn hình như địa chỉ bộ nhớ, đoạn mã assembly,text
Trang 37▪ Sinh viên bấm chuột trái tại cửa sổ Dissambler window -> Search for -> All referenced text string
Trang 38▪ Tại cửa sổ hiện ra, trỏ đến đoạn text thông báo ra màn hình trước đó
rồi thực hiện: Chuột trái -> Copy to Clipboard -> Whole line để sao
chép thông tin của đoạn chương trình này
▪ Ghi lại đoạn nội dung trên vào dưới phần “Nhiem vu 2:” trong file
ATTT.txt
o Nhiệm vụ 3: Thực hiện Debug chương trình
▪ Click double vào chuỗi “Incorrect Password” để đi đến đoạn codetrong chương trình sử dụng chuỗi này, quan sát thấy có hai trường hợp
xử lý khi người dung nhập thông tin vào message box đó là
“Congratulation” và “Incorrect Password”.
Trang 39“Incorrect Password” có địa chỉ 0x00401135 để đi đến lệnh JNZ đầu tiên: Chuột trái -> Go to -> JNZ form
▪ Quan sát các câu lệnh của chương trình ta thấy có câu lệnh:
CALL DWORD PTR DS:[<&USER32.GetDlgItemTextA>]
Với dòng comment được bôi đỏ có nội dung GetDlgItemTextA
⇨Có thể đây chính là câu lệnh thực hiện nhiệm vụ đọc password khi tanhập vào
Đặt một breakpoint tại địa chỉ 0x004010AA bằng cách nhấn F2, rồisau đó chạy lại chương trình, nhập mật khẩu, ấn nút “??” ta sẽ thấychương trình dừng tại breakpoint vừa đặt.Nhấn F8 để chạy được qua
hàm GetDlgItemTextA, quan sát Stack(Stack SS:[0019F7E1]=32 ('2'))
và câu lệnh hiện tại thấy có sự so sánh giá trị giữa ESP+5 và 0x61,trong đó địa chỉ ESP+5 là kí tự thứ 2 trong password nhập vào
Trang 40▪ Tiếp tục nhấn F8 và điều chỉnh cờ Z trong cửa sổ Registers(FPU)
bằng việc double click vào giá trị0 ở cờ Z, giá trị được sét lại giá trị 1
để di chuyển đến câu lệnh
LEA ECX,DWORD PTR SS:[ESP+A]
Quan sát Stack thấy có sự so sánh giá trị giữa ESP+A với chuỗiASCII của chương trình, trong đó ESP+A là các kí tự thứ 3 và 4
Trang 41▪ Lưu lại đoạn mã code so sánh, trên dưới phần “Nhiem vu 3:” vào file
ATTT.txt
o Nhiệm vụ 4: Tìm chuỗi nội dung của Message Box
▪ Tiếp tục nhấn F8 và điều chỉnh cờ Z trong cửa sổ Registers(FPU)
bằng việc double click vào giá trị0 ở cờ Z, giá trị được sét lại giá trị 1
để di chuyển đến câu lệnh
LEA EAX,DWORD PTR SS:[ESP+10]
Quan sát Stack thấy có sự so sánh giữa ESP+10 với chuỗi ASCIIcủa chương trình, trong đó địa chỉ ESP+10 là các kí tự thứ 5 trở đicủa chuỗi password nhập vào
▪ Qua quá trình trên , ta đã tìm được các kí tự thứ 5 trở đi của mật khẩuchương trình
Trang 42Lưu lại đoạn mã code so sánh, các kí tự ASII được so sánh trong code
chương trình dưới phần “Nhiem vu 4:” vào file ATTT.txt
Trang 43▪ Tiếp tục nhấn F8 và điều chỉnh cờ Z trong cửa sổ Registers(FPU)
bằng việc double click vào giá trị0 ở cờ Z, giá trị được sét lại giá trị 1
▪ Chạy lại chương trình, bỏ breakpoint và nhập mật khẩu vừa lấy
được.Nếu thông báo hiện “Congratulation” thì mật khẩu của chương
trình đúng, nếu ngược lại mật khẩu của chương trình là sai và sinhviên cần thực hiện lại các bước trên
▪ Ghi lại mật khẩu của chương trình và lưu file ATTT.txt