Contents
Khi các nhà phát triển cần mở rộng chức năng của một chương trình mà họ không có mã nguồn, họ thường sử dụng kỹ thuật DLL hooking. Đây là một phương pháp không chính thống để làm cho chương trình thực hiện những hành động mà nó không được thiết kế để làm. Tuy nhiên, các hacker cũng sử dụng kỹ thuật này với những mục đích sai trái, như biến các ứng dụng vô hại thành vũ khí hoặc crack phần mềm. Vậy DLL hooking là gì và nó hoạt động như thế nào?
DLL Là Gì?
Các tệp DLL trong Windows
Mỗi ứng dụng đều phụ thuộc vào một số tệp bên ngoài mã nguồn cơ bản để chạy. Những tệp này chứa mã và dữ liệu mà chương trình cần để hoạt động đúng cách. Khi bất kỳ tệp nào trong số này bị thiếu, chương trình có thể gặp vấn đề về ổn định hoặc từ chối chạy hoàn toàn.
Trong hệ điều hành Windows, những tệp bên ngoài này được gọi là DLL hoặc thư viện liên kết động. Thư viện liên kết động là thành phần thiết yếu của hệ điều hành Windows, cung cấp mã và tài nguyên có thể tái sử dụng được chia sẻ giữa nhiều ứng dụng.
Tệp bên ngoài trên Windows được gọi là thư viện. Có hai loại thư viện: động và tĩnh. Thư viện động được tải vào thời điểm chạy và thư viện tĩnh được tải vào thời điểm biên dịch. DLL là một thư viện động.
DLL Hooking Là Gì?
Tiêm DLL độc hại
DLL hooking là một kỹ thuật bao gồm việc ngăn chặn và thay đổi các lệnh gọi hàm mà các chương trình hoặc quá trình thực hiện đến một DLL. Về cơ bản, một thiết lập kiểu “Man-in-The-Middle” được thiết lập, nơi một hook nằm giữa chương trình và các DLL mà nó gọi. Tất cả hoặc các lệnh gọi hàm mục tiêu sau đó sẽ được theo dõi và thay đổi.
Dưới đây là ví dụ về luồng công việc của một cuộc tấn công DLL hooking:
- Kẻ tấn công phân tích các lệnh gọi hàm được thực hiện bởi chương trình và các tệp DLL mà nó phụ thuộc vào.
- Kẻ tấn công tạo ra một hook bằng cách sử dụng một trong nhiều kỹ thuật triển khai như IAT hooking, inline hooking, COM hooking, v.v.
- Thực thi mã tùy ý xảy ra.
- Lệnh gọi hàm gốc có thể được thực thi hoặc không.
- Kẻ tấn công che giấu dấu vết bằng cách xóa hook và hoàn nguyên tất cả các thay đổi đã thực hiện.
DLL hooking là một kỹ thuật tinh vi có thể được sử dụng cho cả mục đích tốt (như mở rộng chức năng chương trình, gỡ lỗi và ghi nhật ký) hoặc cho mục đích xấu (như vượt qua các biện pháp bảo mật, đánh cắp dữ liệu nhạy cảm, thực thi mã tùy ý và viết hack cho trò chơi điện tử).
DLL Hooking Hoạt Động Như Thế Nào?
Trước khi đi sâu vào việc triển khai DLL hooking, điều quan trọng là phải làm rõ các nguyên tắc cơ bản. Hãy lùi lại một bước và hiểu những gì xảy ra khi một lệnh gọi hàm được thực hiện đến một DLL bởi một chương trình.
Khi một chương trình gọi một hàm trong DLL, hệ điều hành đầu tiên tìm kiếm tên hàm trong Bảng Địa Chỉ Nhập (Import Address Table) của chương trình và lấy địa chỉ hàm từ Bảng Địa Chỉ Xuất (Export Address Table) của DLL.
Khi địa chỉ của hàm được giải quyết, chương trình có thể nhảy đến địa chỉ của hàm để truy cập và thực thi nó. DLL hooking xoay quanh việc ngăn chặn quá trình này và chuyển hướng lệnh gọi hàm đến một hàm khác. Có nhiều cách để triển khai DLL hooking. Hãy xem xét các kỹ thuật phổ biến nhất để triển khai nó.
Điều này có thể khá kỹ thuật, vì vậy có thể hữu ích nếu bạn là người dùng Windows có kinh nghiệm hoặc nếu không thì có hiểu biết mạnh mẽ về nội bộ của Windows.
IAT Hooking
Sơ đồ IAT hooking
IAT hooking là một kỹ thuật hiệu quả được sử dụng rộng rãi bởi các tác giả phần mềm độc hại để vượt qua các biện pháp bảo mật và tránh bị phát hiện. Bảng Địa Chỉ Nhập (IAT) là một cấu trúc dữ liệu được tải vào bộ nhớ mỗi khi một quá trình mới được tạo. IAT chứa tên của tất cả các lệnh gọi hàm được nhập và địa chỉ bộ nhớ của chúng.
Khi một chương trình gọi một hàm trong DLL, tên hàm đầu tiên được tìm kiếm trong IAT và nếu địa chỉ bộ nhớ của hàm đó không được tìm thấy trong IAT thì nó sẽ được thiết lập từ Bảng Địa Chỉ Xuất của DLL.
Đây là một cấu trúc dữ liệu nơi tất cả các hàm được xuất bởi DLL được ánh xạ đến địa chỉ bộ nhớ của chúng. Trong IAT hooking, một kẻ thù có thể thay đổi IAT của một quá trình và thay thế các ánh xạ hàm hợp pháp bằng các ánh xạ độc hại, từ đó làm gián đoạn hoạt động dự định và làm cho chương trình thực thi mã tùy ý.
Dưới đây là những gì luồng tấn công chung trong IAT hooking trông như thế nào:
- Một chương trình thực hiện một lệnh gọi hàm.
- Địa chỉ hàm được tìm thấy trong IAT.
- Vì IAT đã bị hook; địa chỉ hàm đã bị thay đổi, và địa chỉ bộ nhớ của một hàm độc hại được tải.
- Chương trình nhảy đến vị trí của hàm độc hại và mã tùy ý được thực thi.
- Cuối cùng, lệnh gọi hàm gốc được thực thi.
Inline Hooking
Sơ đồ inline hooking
Inline hooking là một kỹ thuật DLL hooking liên quan đến việc thay đổi mã nguồn của một hàm mục tiêu để chuyển hướng việc thực thi của nó đến một hàm đặc biệt. Inline Hooking, khác với IAT hooking, thay đổi trực tiếp mã của hàm mục tiêu, cho phép kẻ tấn công kiểm soát chính xác hơn cách hàm mục tiêu hoạt động.
Trong sơ đồ trên, hãy quan sát cách hàm hợp pháp đã bị can thiệp để chỉ đến một hàm độc hại. Khi tất cả các hướng dẫn trong hàm độc hại được thực thi, một lệnh nhảy được thực hiện để quay lại hàm hợp pháp để hoàn thành việc thực thi.
Kẻ thù sử dụng inline hooking để thực hiện những thay đổi lâu dài cho một chương trình như thay đổi các tham số hoặc giá trị trả về của một hàm.
Microsoft Detours
Mã C++ triển khai thư viện Detours
Microsoft Research đã phát triển một gói DLL hooking nội bộ, Detours. Nó cho phép các lập trình viên theo dõi và thay đổi các lệnh gọi hàm được thực hiện bởi một chương trình. Detours có thể được sử dụng cho nhiều nhiệm vụ khác nhau, bao gồm nhưng không giới hạn ở: đo lường, kiểm tra và sửa lỗi.
Kẻ thù sử dụng Detours để thực hiện các cuộc tấn công tiêm và hooking DLL, và các nhà phát triển thường sử dụng nó để mở rộng chức năng của ứng dụng của họ. Bạn có thể tìm hiểu thêm về gói Detours trên kho lưu trữ GitHub chính thức.
-
DLL hooking có hợp pháp không?
DLL hooking có thể hợp pháp khi được sử dụng cho mục đích phát triển phần mềm và gỡ lỗi, nhưng việc sử dụng nó để tấn công hoặc làm hỏng phần mềm khác thì không hợp pháp và có thể bị truy tố. -
Làm thế nào để phát hiện DLL hooking?
Các công cụ bảo mật như phần mềm chống vi-rút và các công cụ giám sát hệ thống có thể phát hiện các hành vi bất thường liên quan đến DLL hooking. -
Có cách nào để bảo vệ chương trình khỏi DLL hooking không?
Bạn có thể bảo vệ chương trình bằng cách sử dụng các kỹ thuật như mã hóa, xác thực và giám sát liên tục để phát hiện và ngăn chặn các cuộc tấn công DLL hooking. -
DLL hooking có thể được sử dụng để làm gì?
Nó có thể được sử dụng để mở rộng chức năng chương trình, gỡ lỗi, ghi nhật ký, nhưng cũng có thể bị lạm dụng để vượt qua các biện pháp bảo mật, đánh cắp dữ liệu nhạy cảm và thực thi mã tùy ý. -
Microsoft Detours là gì?
Microsoft Detours là một thư viện DLL hooking do Microsoft Research phát triển, cho phép các lập trình viên theo dõi và thay đổi các lệnh gọi hàm của chương trình. -
IAT hooking và inline hooking khác nhau như thế nào?
IAT hooking thay đổi địa chỉ trong Bảng Địa Chỉ Nhập để chuyển hướng lệnh gọi hàm, trong khi inline hooking thay đổi trực tiếp mã của hàm mục tiêu để chuyển hướng thực thi. -
Làm thế nào để bảo vệ hệ thống khỏi các cuộc tấn công DLL hooking?
Cập nhật phần mềm thường xuyên, sử dụng phần mềm bảo mật mạnh mẽ và tuân thủ các thực hành bảo mật tốt nhất có thể giúp bảo vệ hệ thống khỏi các cuộc tấn công DLL hooking.
Tìm hiểu thêm về bảo mật tại Tạp Chí Mobile
Khám phá thêm các bài viết về Security tại Tạp Chí Mobile Security
Bạn Đã Biết DLL Hooking Hoạt Động Như Thế Nào
DLL hooking là một kỹ thuật tinh vi mà khi được sử dụng với mục đích đúng đắn, có thể nâng cao khả năng của ứng dụng của bạn hoặc giúp bạn gỡ lỗi và tối ưu hóa phần mềm. Thật không may, hooking thường được thấy nhiều hơn trong việc sử dụng như một kỹ thuật đối kháng hơn là một kỹ thuật phát triển. Vì vậy, điều quan trọng là bạn phải áp dụng và tuân thủ các thực hành bảo mật tốt nhất để đảm bảo rằng các ứng dụng của bạn an toàn và không bị tấn công như hooking và tiêm.