Phân tích kỹ thuật lây file sử dụng Relocation và mẫu virus lây file W32.FamVT.RelocationResur.PE
I. Mục đích bài viết
- Tiếp tục tìm hiểu chủ đề về virus lây file, trong bài trước chúng ta đã tìm hiểu về kỹ thuật delta. Trong bài tiếp theo này chúng ta sẽ phân tích một kỹ thuật khác đó kỹ thuật Relocation dựa trên một mẫu Virus thực tế.
1. Các kiến thức yêu cầu khi đọc bài viết:
- Kiến thức về kiến trúc máy tính.
- Cấu trúc file PE.
- Windows API
2. Các thuật ngữ sử dụng trong bài viết:
- File host: là file sạch chưa bị nhiễm virus
- Code virus: đoạn chương trình của virus.
- EntryPoint: là câu lệnh đầu tiên được thực thi của 1 chương trình.
- API: là các hàm trong các thư viện chuẩn của windows
- ImageBase: địa chỉ ưu tiên mà chương trình được load lên bộ nhớ.
II. Giới thiệu về file PE và bảng Relocation table
1. Giới thiệu chung về file PE
PE (Portable Executable) là định dạng của hầu hết các file thực thi trên hệ điều hành windows (trừ các tập tin VxDs và các file Dll 16 bit).
Cấu trúc cơ bản của một file PE:
Hình 1: Cấu trúc file PE
2. Giới thiệu về Relocation table
Khi một chương trình được build ra từ một trình linker, nó đã được chuẩn bị sẵn một địa chỉ ưu tiên là ImageBase, đó là địa chỉ mà nó được nạp lên bộ nhớ. Dựa vào điều này, trình linker sẽ đặt địa chỉ thật của đoạn mã và các mục dữ liệu vào trong file thực thi. Nếu vì một lý do nào đó (đã có một chương trình khác được nạp tại vị trí đó) mà chương trình không được nạp đúng tại địa chỉ ưu tiên đó thì những địa chỉ được trình linker đặt vào trong file sẽ không còn đúng nữa. Lúc này trình PE loader sẽ dựa vào bảng Relocaion để fix lại các địa chỉ đó khi mà file đã được load lên bộ nhớ. Do đó các địa chỉ trên file lại đúng và file thực thi bình thường.
Trong trường hợp file được load đúng lên vùng nhớ ưu tiên thì bảng Relocation sẽ không cần phải dùng tới.
Các mục trong bảng relocation được tổ chức theo dạng danh sách.
Hình 2: Bảng Relocation
Ở bảng trên là danh sách các Block (mỗi Block là 0x1000 byte) có Relo items.
Bảng dưới là danh sách chi tiết các vị trí cần Relo trong Block đó. Khi muốn fix lại địa chỉ cho đúng với vùng nhớ hiện tại trên bộ nhớ, PE Loader sẽ tính toán xem file đã được load chênh lệch so với địa chỉ ưu tiên ra sao, sau đó tới từng vị trí mà địa chỉ đã được lưu trong bảng Reocation để fix lại các giá trị địa chỉ.
Nhờ có bảng Relocation mà cho dù có được load lên vị trí nào thì code của file vẫn chạy được bình thường.
III. Phân tích kỹ thuật lây file sử dụng bảng Relocation với mẫu virus W32.FamVT.RelocationResur.PE
1. So sánh với kỹ thuật delta:
- Kỹ thuật delta dùng địa chỉ tương đối cộng với độ chênh lệch vị trí của code virus so với đầu file để để đưa ra được địa chỉ chính xác của các bị trí bộ nhớ.
- Kỹ thuật sử dụng bảng Relocation mục đích cũng muốn xác định chính xác được các địa chỉ này. Vì bảng Relocation lưu lại các vị trí cần sử dụng tới địa chỉ nên chỉ cần dựa vào đó là có thể tìm đến và fix lại cho chính xác với code virus trong file mới lây nhiễm.
- Ta có thể hình dung, kỹ thuật delta là trong quá trình code virus chạy thì mới fix tính lại địa chỉ còn kỹ thuật Relocation lại fix lại các địa chỉ đó ngay khi đang tiến hành lây nhiễm vào file.
2. Nguyên lý thực hiện.
- Các bước chính khi Virus tiến hành lây nhiễm vào một file khác (dựa trên hành vi của mẫu W32.FamVT.RelocationResur.PE):
· Đi tìm bảng Relocation của file host và nối thêm Relocation của mình vào.
· Thêm các section của mình vào cuối file host.
· Thay thế bảng Import của file host bằng bảng import của virus.
· Sửa lại các vị trí mà bảng relocation của virus trỏ tới.
- Các bước chính khi virus thực thi:
· Thực thi code virus.
· Dựa vào bảng Import cũ của file host, virus load các thư viện và lấy các địa chỉ hàm API cho file gốc.
· Trả lại quyền điều khiển cho file host.
Một chi tiết đáng chú ý là: ngược với kỹ thuật delta, các thư viện và API của virus sẽ được PE loader load lên do bảng đang là của virus, nhưng virus sẽ phải đi load thư viện và tìm API cho file gốc. Đây là một điểm rất hây và thú vị.
3. Chi tiết kỹ thuật với mẫu W32.FamVT.RelocationResur.PE.
· Thêm phần Relocation của virus vào file host:
Hình 3: File host bình thường
Hình 4: File host sau khi bị lây nhiễm
Hình 5: Bảng Relocation Virus thêm vào
· Thêm các section của virus vào file host.
Hình 6: Virus thêm các section vào cuối file host
4 Section cuối là của virus.
· Sửa lại bảng Import:
Hình 7: Vị trí và các hàm trong bảng import của file host
Hình 8: Bảng Import bị thay thế bằng bảng Import của Virus
· Load thư viện và tìm hàm API cho file gốc.
Hình 9: Đoạn code virus thực hiện load các thư viện của file host
Hình 10: lấy địa chỉ các hàm API cho file host
· Duyệt file để lây nhiễm
Hình 11: Tìm các ổ đĩa trong máy
Hình 12: Duyệt các file để lây nhiễm
· Cấy mã virus vào file.
Hình 13: Ghi code virus vào file host
IV. Xử lý virus
Sau khi phát hiện File nhiễm Virus, ta có thể tiến hành các bước sau để khôi phục lại file gốc:
- B1: Khôi phục lại code gốc của file host nếu bị virus mã hóa
- B2: Khôi phục lại Entrypoint trỏ vể chương trình của file host.
- B3: Khôi phục lại địa chỉ bảng Import cho đúng với file gốc.
- B4: Cắt bỏ phần virus bao gốm phần code virus và phần trong bảng Relocation.
- B5: Khôi phục lại các trường quan trọng của PE Header.
V. Tổng kết
- Bài viết mang tính phân tích kỹ thuật giúp mọi người có thể hiểu về virus lây file sử dụng kỹ thuật Relocation. Từ những dấu hiện này, mọi người có thể phát hiện được file nhiễm virus và có thể khôi phục lại file gốc cho mình.
- Các trường hợp nếu người đọc sử dụng kiến thức trong bài viết vào mục đích xấu phải chịu hoàn toàn trách nhiệm và thiệt hại đã gây ra.
- Tiếp tục tìm hiểu chủ đề về virus lây file, trong bài trước chúng ta đã tìm hiểu về kỹ thuật delta. Trong bài tiếp theo này chúng ta sẽ phân tích một kỹ thuật khác đó kỹ thuật Relocation dựa trên một mẫu Virus thực tế.
1. Các kiến thức yêu cầu khi đọc bài viết:
- Kiến thức về kiến trúc máy tính.
- Cấu trúc file PE.
- Windows API
2. Các thuật ngữ sử dụng trong bài viết:
- File host: là file sạch chưa bị nhiễm virus
- Code virus: đoạn chương trình của virus.
- EntryPoint: là câu lệnh đầu tiên được thực thi của 1 chương trình.
- API: là các hàm trong các thư viện chuẩn của windows
- ImageBase: địa chỉ ưu tiên mà chương trình được load lên bộ nhớ.
II. Giới thiệu về file PE và bảng Relocation table
1. Giới thiệu chung về file PE
PE (Portable Executable) là định dạng của hầu hết các file thực thi trên hệ điều hành windows (trừ các tập tin VxDs và các file Dll 16 bit).
Cấu trúc cơ bản của một file PE:
Hình 1: Cấu trúc file PE
2. Giới thiệu về Relocation table
Khi một chương trình được build ra từ một trình linker, nó đã được chuẩn bị sẵn một địa chỉ ưu tiên là ImageBase, đó là địa chỉ mà nó được nạp lên bộ nhớ. Dựa vào điều này, trình linker sẽ đặt địa chỉ thật của đoạn mã và các mục dữ liệu vào trong file thực thi. Nếu vì một lý do nào đó (đã có một chương trình khác được nạp tại vị trí đó) mà chương trình không được nạp đúng tại địa chỉ ưu tiên đó thì những địa chỉ được trình linker đặt vào trong file sẽ không còn đúng nữa. Lúc này trình PE loader sẽ dựa vào bảng Relocaion để fix lại các địa chỉ đó khi mà file đã được load lên bộ nhớ. Do đó các địa chỉ trên file lại đúng và file thực thi bình thường.
Trong trường hợp file được load đúng lên vùng nhớ ưu tiên thì bảng Relocation sẽ không cần phải dùng tới.
Các mục trong bảng relocation được tổ chức theo dạng danh sách.
Hình 2: Bảng Relocation
Ở bảng trên là danh sách các Block (mỗi Block là 0x1000 byte) có Relo items.
Bảng dưới là danh sách chi tiết các vị trí cần Relo trong Block đó. Khi muốn fix lại địa chỉ cho đúng với vùng nhớ hiện tại trên bộ nhớ, PE Loader sẽ tính toán xem file đã được load chênh lệch so với địa chỉ ưu tiên ra sao, sau đó tới từng vị trí mà địa chỉ đã được lưu trong bảng Reocation để fix lại các giá trị địa chỉ.
Nhờ có bảng Relocation mà cho dù có được load lên vị trí nào thì code của file vẫn chạy được bình thường.
III. Phân tích kỹ thuật lây file sử dụng bảng Relocation với mẫu virus W32.FamVT.RelocationResur.PE
1. So sánh với kỹ thuật delta:
- Kỹ thuật delta dùng địa chỉ tương đối cộng với độ chênh lệch vị trí của code virus so với đầu file để để đưa ra được địa chỉ chính xác của các bị trí bộ nhớ.
- Kỹ thuật sử dụng bảng Relocation mục đích cũng muốn xác định chính xác được các địa chỉ này. Vì bảng Relocation lưu lại các vị trí cần sử dụng tới địa chỉ nên chỉ cần dựa vào đó là có thể tìm đến và fix lại cho chính xác với code virus trong file mới lây nhiễm.
- Ta có thể hình dung, kỹ thuật delta là trong quá trình code virus chạy thì mới fix tính lại địa chỉ còn kỹ thuật Relocation lại fix lại các địa chỉ đó ngay khi đang tiến hành lây nhiễm vào file.
2. Nguyên lý thực hiện.
- Các bước chính khi Virus tiến hành lây nhiễm vào một file khác (dựa trên hành vi của mẫu W32.FamVT.RelocationResur.PE):
· Đi tìm bảng Relocation của file host và nối thêm Relocation của mình vào.
· Thêm các section của mình vào cuối file host.
· Thay thế bảng Import của file host bằng bảng import của virus.
· Sửa lại các vị trí mà bảng relocation của virus trỏ tới.
- Các bước chính khi virus thực thi:
· Thực thi code virus.
· Dựa vào bảng Import cũ của file host, virus load các thư viện và lấy các địa chỉ hàm API cho file gốc.
· Trả lại quyền điều khiển cho file host.
Một chi tiết đáng chú ý là: ngược với kỹ thuật delta, các thư viện và API của virus sẽ được PE loader load lên do bảng đang là của virus, nhưng virus sẽ phải đi load thư viện và tìm API cho file gốc. Đây là một điểm rất hây và thú vị.
3. Chi tiết kỹ thuật với mẫu W32.FamVT.RelocationResur.PE.
· Thêm phần Relocation của virus vào file host:
Hình 3: File host bình thường
Hình 4: File host sau khi bị lây nhiễm
Hình 5: Bảng Relocation Virus thêm vào
· Thêm các section của virus vào file host.
Hình 6: Virus thêm các section vào cuối file host
4 Section cuối là của virus.
· Sửa lại bảng Import:
Hình 7: Vị trí và các hàm trong bảng import của file host
Hình 8: Bảng Import bị thay thế bằng bảng Import của Virus
· Load thư viện và tìm hàm API cho file gốc.
Hình 9: Đoạn code virus thực hiện load các thư viện của file host
Hình 10: lấy địa chỉ các hàm API cho file host
· Duyệt file để lây nhiễm
Hình 11: Tìm các ổ đĩa trong máy
Hình 12: Duyệt các file để lây nhiễm
· Cấy mã virus vào file.
Hình 13: Ghi code virus vào file host
IV. Xử lý virus
Sau khi phát hiện File nhiễm Virus, ta có thể tiến hành các bước sau để khôi phục lại file gốc:
- B1: Khôi phục lại code gốc của file host nếu bị virus mã hóa
- B2: Khôi phục lại Entrypoint trỏ vể chương trình của file host.
- B3: Khôi phục lại địa chỉ bảng Import cho đúng với file gốc.
- B4: Cắt bỏ phần virus bao gốm phần code virus và phần trong bảng Relocation.
- B5: Khôi phục lại các trường quan trọng của PE Header.
V. Tổng kết
- Bài viết mang tính phân tích kỹ thuật giúp mọi người có thể hiểu về virus lây file sử dụng kỹ thuật Relocation. Từ những dấu hiện này, mọi người có thể phát hiện được file nhiễm virus và có thể khôi phục lại file gốc cho mình.
- Các trường hợp nếu người đọc sử dụng kiến thức trong bài viết vào mục đích xấu phải chịu hoàn toàn trách nhiệm và thiệt hại đã gây ra.