Một công cụ mới để tiêm mã vào các tệp nhị phân ELF (Executable and Linkable Format) đã thu hút sự chú ý của các nhà nghiên cứu bảo mật và lập trình viên, làm nổi bật cả những thách thức kỹ thuật trong việc chỉnh sửa tệp nhị phân và các mối lo ngại về bảo mật tiềm ẩn. ELF Injector cho phép người dùng chèn các đối tượng chia sẻ có thể tái định vị vào các tệp thực thi đang chạy, mở ra các cuộc thảo luận về việc sử dụng hợp pháp so với các ứng dụng độc hại.
Công cụ này hoạt động bằng cách chỉnh sửa các tệp thực thi Linux ARM 32-bit tại thời điểm chạy, tiêm mã vào các phần .text hoặc .data của các tệp nhị phân đích. Khả năng này đã được so sánh với các kỹ thuật được sử dụng trong cả phát triển phần mềm hợp pháp và tạo malware.
Thông Số Kỹ Thuật ELF Injector
- Nền Tảng Đích: Các tệp thực thi Linux ARM 32-bit
- Loại Tệp Được Hỗ Trợ: Chỉ các tệp ELF ET_EXEC
- Phương Thức Tiêm:
- Tiêm vào phần text (tệp .so)
- Tiêm vào phần data (tệp .bin)
- Yêu Cầu: Mã độc lập vị trí (-fPIC) cho các payload
- Địa Chỉ Bộ Nhớ:
- 0x400000: Điểm bắt đầu của .text/.data trong tệp thực thi đang chạy
- 0x600000: Địa chỉ bắt đầu của stack
- 0x00008000: Không gian offset cho ánh xạ bộ nhớ
Triển khai kỹ thuật nhận phản ứng trái chiều
Các thành viên cộng đồng đã chia sẻ kinh nghiệm của riêng họ với những thách thức chỉnh sửa tệp nhị phân tương tự. Một lập trình viên đã ghi nhận công việc của họ từ một thập kỷ trước về các bộ đóng gói thư viện Android , mô tả cách họ phải di chuyển các tiêu đề chương trình để tạo không gian cho các đoạn mã mới. Cách tiếp cận này thường dẫn đến việc lãng phí padding đáng kể do các yêu cầu căn chỉnh.
ELF Injector hiện tại sử dụng một chiến lược khác, sử dụng hệ thống thunk tránh được phần lớn sự phức tạp liên quan đến việc di chuyển các tiêu đề phân đoạn. Phương pháp này tiêm các đoạn mã nhỏ vào padding có sẵn ở cuối phân đoạn text, giảm nguy cơ phá vỡ các tham chiếu đến dữ liệu tĩnh.
ELF (Executable and Linkable Format): Một định dạng tệp tiêu chuẩn cho các tệp thực thi, mã đối tượng, thư viện chia sẻ và core dumps trong các hệ thống giống Unix.
Mối lo ngại về tương thích và kiểm thử
Các câu hỏi đã nảy sinh về khả năng tương thích của công cụ trên các tệp ELF khác nhau. Hiện tại, injector chỉ hoạt động với các tệp ELF loại ET_EXEC, và việc kiểm thử mở rộng có vẻ hạn chế. Nhà phát triển thừa nhận rằng các ELF động đặt ra những thách thức đặc biệt, vì chúng thường phân tích cấu trúc của chính mình tại thời điểm chạy, khiến chúng nhạy cảm hơn với các thay đổi bố cục.
Quá trình tiêm yêu cầu xem xét cẩn thận các ranh giới phân đoạn và ràng buộc padding. Việc thêm mã vượt quá không gian padding có sẵn có thể dịch chuyển các phân đoạn tiếp theo, có khả năng phá vỡ chức năng của tệp thực thi.
Tác động bảo mật và phát hiện
Cộng đồng bảo mật đã nêu lên mối lo ngại về tiềm năng lạm dụng của công cụ. Các kỹ thuật tiêm nhị phân thường được liên kết với các bộ đóng gói malware và phương pháp làm rối, dẫn đến việc bị phần mềm bảo mật gắn cờ một cách tích cực. Mặc dù nhà phát triển chưa kiểm thử công cụ với các máy quét virus, các dự án tương tự thường phải đối mặt với thách thức phát hiện.
Tuy nhiên, các cách sử dụng hợp pháp tồn tại trong phát triển phần mềm, gỡ lỗi và kỹ thuật đảo ngược. Kỹ thuật này có điểm tương đồng với các phương pháp đã được thiết lập được sử dụng trong các công cụ chỉnh sửa video game và các framework instrumentation nhị phân động.
Cách tiếp cận thay thế và cải tiến
Phản hồi từ cộng đồng đã làm nổi bật một số lĩnh vực cần cải thiện. Công cụ hiện tại sử dụng argv[0] để định vị tệp thực thi đích, điều này có thể không đáng tin cậy vì các tiến trình cha kiểm soát nội dung vector đối số. Một cách tiếp cận mạnh mẽ hơn sẽ liên quan đến việc sử dụng /proc/self/exe trên các hệ thống Linux , mặc dù phương pháp này có những hạn chế riêng trong môi trường container.
Luôn thú vị khi thấy mọi người hack ELF ! Tôi thấy bạn đang sử dụng argv[0] để tìm tệp thực thi. Điều này dễ vỡ vì nội dung vector đối số là tùy ý và được kiểm soát hoàn toàn bởi tiến trình cha.
Một số lập trình viên đã khám phá các cách tiếp cận thay thế, chẳng hạn như tận dụng các phân đoạn ELF để kernel tự động ánh xạ dữ liệu vào bộ nhớ, loại bỏ nhu cầu thao tác I/O tệp trong quá trình thực thi.
ELF Injector đại diện cho một khám phá thú vị về các kỹ thuật chỉnh sửa tệp nhị phân, thể hiện cả tính linh hoạt của định dạng ELF và những thách thức liên quan đến việc chỉnh sửa an toàn các tệp thực thi. Mặc dù công cụ này phục vụ như một dự án học tập có giá trị, các ứng dụng thực tế của nó vẫn bị hạn chế bởi các ràng buộc tương thích và cân nhắc bảo mật.
Tham khảo: ELF Injector