Sử dụng OllyDbg trong phân tích mã độc Phần 1 – SecurityBox

Chúng tôi rất vui mừng được chia sẻ kiến thức sâu sắc về từ khóa Ollydbg la gi để tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với chiến lược và công cụ hữu ích. Hy vọng thông tin này sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog để cập nhật kiến thức mới nhất.

Trước lúc trở thành trứ danh trong giới phân tích mã độc, OllyDbg được sử dụng chủ yếu để crack phần mềm. OllyDbg từng là lựa chọn debugger hàng đầu so với các Chuyên Viên phân tích mã độc và Chuyên Viên khai thác lỗ hổng phần mềm cho đến lúc mã nguồn của OllyDbg 1.1 được thâu tóm về bởi Immunity và thay tên thành ImmDbg. ImmDbg được phát triển nhằm vá các lỗi trong OllyDbg, thêm vào trong 1 trình thông dịch Python và hướng tới các Chuyên Viên khai thác lỗ hổng phần mềm, nhiều người ưa thích ImmDbg hơn OllyDbg. Như vậy tức là OllyDbg 1.1 không hơn gì ImmDbg, các thao tác cơ bản trên OllyDbg trong chương này cũng luôn có thể vận dụng tương tự trên ImmDbg, nhưng một số plug-in trên OllyDbg sẽ không còn thể sử dụng dễ dàng trên ImmDbg. ImmDbg có ưu điểm riêng của nó, chẳng hạn tương trợ tốt các Python API.

Bạn Đang Xem: Sử dụng OllyDbg trong phân tích mã độc Phần 1 – SecurityBox

Đừng ngại sử dụng OllyDbg phiên bản tiên tiến nhất. Chuyên Viên bình an mạng Nguyễn Việt Anh của SecurityBox đã thực hiện một nội dung bài viết ngắn hướng dẫn các bạn làm quen và sử dụng OllyDbg trong phân tích mã độc.

Nạp một mã độc vào OllyDbg

Có nhiều phương pháp để nạp một mã độc vào OllyDbg. Ta có thể nạp trực tiếp file thực thi hoặc DLL. Trong trường hợp mã độc đang làm việc trên khối hệ thống, ta có thể gán tiến trình của nó vào OllyDbg..

Mở một file thực thi

Cách tốt nhất để debug một mã độc là tạo một tiến trình mới cho nó. Chọn File > Open và điền thông số nguồn vào nếu cấp thiết. Ta chỉ có thể truyền thông số dòng lệnh tại bước này.

ảnh 1

Sau đó, loader của OllyDbg sẽ nạp file thực thi tương tự như OS loader. Mặc định, OllyDbg sẽ dừng tại entry point chỉ định bởi lập trình viên, như WinMain chẳng hạn, nếu nó xác định được vị trí của entry point đó. Nếu không, OllyDbg sẽ dừng tại entry point khái niệm trong PE header. Ta có thể thiết lập một số tùy chọn phát động trong bảng chọn Debuggin Option (Options > Debugging Options). Chẳng hạn, để ngắt ngay trước lúc thực thi bất kì dòng code nào nào Khóa học, ta chọn System Breakpoint…

ảnh 2

Gán một tiến trình đang làm việc vào OllyDbg

File > Attach và chọn process để attach. Nếu có hơn một process có cùng một tên, cần phân biệt qua PID. OllyDbg sau này sẽ ngắt và dừng Khóa học cùng mọi thread của nó.

ảnh 3

Code của thread đang rất được thực thi sẽ tiến hành hiển thị trên màn hình hiển thị OllyDbg. Ta rất dễ dừng thread đúng vào lúc nó đang thực thi code từ một DLL khối hệ thống. Tất nhiên, ta không bao giờ muốn phân tích một thư viện Windows làm gì và cách đơn giản để tránh trường hợp này là đặt một breakpoint tại code section. Khóa học sẽ tiến hành ngắt tại lần tới khi nó truy cập code section.

Giao diện của OllyDbg

Sau khoản thời gian nạp một Khóa học, giao diện chính của OllyDbg như hình phía bên dưới.

ảnh 5

Xem Thêm : Vacuum Pump Là Gì – Bơm Chân Không (Dry Running Vacuum Pumps)

Hành lang cửa số dịch ngược – góc trái-trên – hiển thị con trỏ lệnh và vùng lệnh thực thi của Khóa học được debug xung quanh vị trí con trỏ. Để sửa đổi lệnh hoặc tài liệu hay thêm lệnh mới, click vào dòng xoáy lệnh và nhấn dấu spacebar.

ảnh 6

Hành lang cửa số thanh ghi – góc phải-trên – hiển thị trạng thái ngày nay của đa số thanh ghi mà Khóa học được debug đang sử dụng. Các thanh ghi này sẽ chuyển màu từ đen sang đỏ nếu lệnh vừa thực thi sửa đổi giá trị của thanh ghi.Ta có thể sửa đổi tài liệu trong hành lang cửa số thanh ghi bằng phương pháp double click vào giá trị của thanh ghi tương ứng.

ảnh 7

Hành lang cửa số stack – góc phải-dưới – thể hiện trạng thái ngày nay của stack trong bộ nhớ. Hành lang cửa số này luôn hiển thị đỉnh stack của một thread nhất định. Ta có thể quản lý stack bằng phương pháp click phải vào vị trí hoặc giá trị của vùng nhớ và chọn Modify. OllyDbg cũng tự động hóa thêm comment (cột bên phải giá trị vùng nhớ) cho một số giá trị stack để mô tả các thông số trước lúc chúng được truyền qua một lời gọi hàm.

ảnh8

Hành lang cửa số memory dump – góc trái-dưới – thể hiện trạng thái bộ nhớ của process đang rất được debug. Để sửa đổi giá trị một ô nhớ, click phải vào giá trị ô nhớ đó và chọn Edit (Ctr+E). Cách này hữu ích khi cần sửa đổi giá trị một biến toàn cục hoặc tài liệu mà mã độc chỉ lưu trữ trên RAM.

ảnh 9

Memory Map

View > Memory (Alt+M), hiển thị mọi memory block cấp phép cho Khóa học được debug.

Memory map giúp ta quan sát cách Khóa học được bố trí trên bộ nhớ. Trong hình, trình thực thi được gán nhãn với những code section và data section. Mọi DLL và các section của chúng cũng được thể hiện trong memory map. Ta chỉ việc double click tại bất luận dòng nào để trong memory map để xem memory dump của section đó. Ta cũng luôn có thể chuyển hướng đến section đó trên hành lang cửa số dịch ngược bằng phương pháp click phải và chọn View in Disassembler.

ảnh 11

Năm 2018 xu hướng tiến công thông qua phần mềm ô nhiễm và độc hại không tập tin lên ngôi

Rebasing

Memory map có thể giúp ta hiểu một PE file được rebase trong lúc thực thi ra làm sao. Rebasing là thao tác xẩy ra khi một module trong Windows không được nạp vào địa chỉ base address chỉ định của nó.

Base Address

Xem Thêm : CHRO Là Gì? Vai Trò Và Kỹ Năng Của Giám Đốc Nhân Sự

Mọi file PE trong Windows đều sở hữu một base address chỉ định, được khái niệm là giá trị image base trong PE header.

Image base không phải là địa chỉ mà mã duy nhất thiết phải được nạp vào đó, mã độc chỉ ưu tiên địa chỉ đó. Phần nhiều các trình thực thi được thiết kế để nạp vào bộ nhớ tại địa chỉ 0x00400000, là địa chỉ mặc định được sử dụng mởi nhiều trình biên dịch trên Windows. Developer có thể chọn một địa chỉ khác làm base image.

ASLR (address space layout randomization – bố trí không gian nhớ tình cờ)

Cấp phép lại (relocation) vùng nhớ là cấp thiết vì một ứng dụng có thể import nhiều DLL, mỗi DLL lại dùng một base address chỉ định mà nó muốn được nạp vào bộ nhớ tại địa chỉ đó. Nếu 2 DLL được nạp và chúng đều chỉ định ưu tiên nạp vào địa chỉ 0x10000000, chúng không thể cùng được nạp vào địa chỉ đó. Windows sẽ nạp một DLL vào địa chỉ đó và sau đó cấp phép lại một vùng nhớ khác cho DLL còn sót lại.

Hồ hết các DLL có sẵn trong Windows OS đều sở hữu base address chỉ định khác nhau và chúng sẽ không còn bị xung đột. Tuy nhiên, các ứng dụng bên thứ ba thường chỉ định chung một base address.

Địa chỉ tuyệt đối và Địa chỉ tương đối (Absolute-Relative)

Thủ tục cấp phép lại phức tạp hơn là chỉ việc nạp đoạn code vào trong 1 địa chỉ khác. Nhiều lệnh chỉ định tới những địa chỉ nhớ tương đối nhưng một số lệnh lại thao tác làm việc với những địa chỉ nhớ cụ thể.

anhe 12

3 lệnh trên đều được thực thi trơn tru mà không quan tâm chúng được nạp vào bộ nhớ ra sao vì chúng dùng địa chỉ tương đối. Nhưng lệnh truy cập tài liệu tại 0x40120C sẽ không còn thể thực hiện được vì nó dùng địa chỉ tuyệt đối để truy cập tới một vùng nhớ. Nếu file thực thi được nạp vào bộ nhớ tại một vùng nhớ khác với base location chỉ định, lệnh 0x40120C sẽ chạy sai. Phần nhiều DLL được đóng gói với một list vùng nhớ hiệu chỉnh trong .reloc section của PE header.

Các DLL được nạp sau .exe và không cần theo một trình tự nào khác. Như vậy ta không thể dự đoán trước được DLL nào sẽ tiến hành rebase trong bộ nhớ ra sao. Nếu một DLL vừa bị thiếu relocation section vừa mới được nạp không đúng với base address chỉ định của nó, DLL sẽ không còn được nạp.

Thủ tục cấp phép lại bộ nhớ cho những DLL có hiệu suất thấp và làm lê dài thời kì nạp DLL. Trình biên dịch thường dùng chung một địa chỉ làm base address mặc định cho mọi DLL khiến việc cấp phép lại vùng nhớ gần như thể điều thế tất. Một lập trình viên giỏi cần lưu ý tới điều này và chỉ định một base address riêng cho DLL của mình để né tránh việc phải cấp phép lại vùng nhớ mỗi một khi DLL được nạp.

Hình phía bên dưới minh họa cơ chế cấp phép lại vùng nhớ, quan sát qua Memory map của OllyDbg so với file QUnpack.exe. Ở đây ta có một file thực thi và hai DLL. QUnpack sử dụng địa chỉ nạp chỉ định là 0x00400000, nó được nạp vào bộ nhớ trước tiên. PEiDLL cũng được chỉ định địa chỉ nạp 0x00400000 trong lúc vùng nhớ khai mạc bằng địa chỉ 0x00400000 đã được cấp phép cho QUnpack, nên DLL này sẽ tiến hành cấp phép lại vùng nhớ khai mạc bằng địa chỉ 0x00630000. DLL PESniffe sử dụng địa chỉ nạp chỉ định là 0x10000000 và tại thời khắc nó được nạp, vùng nhớ khai mạc bằng địa chỉ này không được cấp phép cho DLL nào khác nên nó được nạp vào vùng nhớ đúng với base address chỉ định (0x10000000). Trong trường hợp này, tất cả địa chỉ tuyệt đối được sử dụng trong PEiDLL phải được hiệu chỉnh lại để các hàm trong nó chạy đúng.

ảnh 15

Nếu quan sát PEiDLL trong IDA trong lúc đang debug Khóa học QUnpack, các địa chỉ trong PEiDLL là không thống nhất giữa IDA và debugger vì IDA không có cơ chế phân tích hiện tượng lạ rebasing trong thời kì thực thi. Để tránh phải thường xuyên hiệu chỉnh lại các địa chỉ tuyệt đối của PEiDLL trong IDA, ta cần thực hiện nạp thủ công (manual load) tại bước nạp DLL này vào IDA.

ĐÓN ĐỌC: Chuyên đề phân tích mã độc của Chuyên Viên Nguyễn Việt Anh TẠI ĐÂY

XEM THÊM: Sử dụng OllyDbg trong phân tích mã độc Phần 2

You May Also Like

About the Author: v1000