Phân tích mã độc - Bootkit

Thảo luận trong 'Virus/Malware' bắt đầu bởi Malware, 06/05/15, 09:05 AM.

  1. Malware

    Malware Wh------

    Tham gia: 08/01/15, 11:01 AM
    Bài viết: 56
    Đã được thích: 39
    Điểm thành tích:
    48
    Giới thiệu về Bootkit
    Bootkit là loại rootkit có khả năng can thiệp và thay đổi quá trình khởi động của hệ điều hành, nhằm mục đích chèn các thành phần mã độc của nó vào hệ thống một cách lén lút. Bootkit thường lây nhiễm vào các đoạn mã khởi động trên đĩa cứng như: MBR, VBR hoặc boot sector. Việc này giúp Bootkit chiếm được quyền thực thi từ rất sớm, trước khi hệ điều hành được nạp lên. Vì thế Bootkit thường rất khó bị phát hiện và cho dù có phát hiện ra được Bootkit nhưng việc gỡ bỏ nó ra khỏi hệ thống cũng không phải là điều đơn giản.
    Sau đây mình sẽ tiến hành phân tích một bootkit mới được phát hiện gần đây, bootkit Gapz.

    Thông tin mẫu
    File size: 201 KB
    File type: PE 32
    File MD5: 33D154D84E830AA18973B04E64879466
    Malware Name: Trojan.Gapz

    Tổng quan về bootkit Gapz
    Gapz là dòng bootkit mới được phát hiện, nó sử dụng một kỹ thuật lây nhiễm mới khiến cho nó khó phát hiện hơn mà chưa được biết đến trước đây.
    Loại bootkit này có thể lây nhiễm vào các hệ điều hành :
    - x86 : XP SP2 và cao hơn (trừ win Vista và Vista SP1)
    - x64 : Vista SP2 và cao hơn
    Chiếm được quyền điều khiển từ khi boot của ổ đĩa, qua nhiều bước leo thang Gapz có thể thực thi mã độc trên các dịch vụ của hệ điều hành như truy cập ổ đĩa, cấp phát vùng nhớ, tạo luồng,…

    Phân tích chi tiết
    Gapz có 2 cách lây lan được phát hiện :

    [​IMG]

    Cách lây nhiễm MBR đã được nhiều dòng virus trước đây thực hiện bằng việc sửa trực tiếp code nằm trong MBR.
    Cách lây bằng VBR là phương pháp mới của dòng Bootkit, nó sửa VBR của partition được active thay vì sửa MBR. Trong phương pháp này, mã độc chỉ cần thay đổi 1 trường của BPB để có thể kiểm soát quá trình boot của đĩa cứng. Là trường “Hidden Sectors”, nó cho phép mã độc giả mạo đoạn code IPL (Init Program Loader).

    [​IMG]
    Hình ảnh của phân vùng khi trường “Hidden Sectors chưa bị thay đổi”

    [​IMG]
    Sau khi sửa Hidden Sectors, đoạn mã bootkit ở cuối phân vùng sẽ thay thế IPL

    Vùng mã Bootkit màu đỏ trên hình bắt đầu bằng VBR gốc của phân vùng trước khi bị lây nhiễm, rồi nối thêm đoạn mã độc. Đoạn mã ngay sau này được gọi đến khi thực thi xong code trong VBR :
    [​IMG]
    Như vậy ta thấy bootkit chỉ cần sửa 4 byte của BPB là đã có quyền điều khiển khi boot, làm cho việc phát hiện ra nó thêm phần khó khăn. Đoạn mã thay thế IPL của bootkit có nhiệm vụ hook ngắt 13h :
    [​IMG]

    Rồi từ đó mã độc được thực thi theo nhiều giai đoạn khác nhau :

    [​IMG]

    Bootkit gồm hàng loạt các thành phần để leo thang độ cao của mình trong hệ thống để sử dụng các dịch vụ của hệ điều hành,…
    Đoạn mã đầu tiên được chạy là fake IPL để hook ngắt 13h, sau nó lần lượt hook các hàm :
    [​IMG]

    Hook các hàm nằm trên ntldr hoặc bootmgr sẽ kích hoạt mã độc khi Kernel Image được nạp.
    Tiếp theo là hook hàm IoInitSystem – được gọi khi hệ điều hành tiến hành khởi tạo cho kernel. Đây là bước quan trọng để bootkit có thể sử dụng các dịch vụ của hệ điều hành để truy cập ổ cứng, cấp phát vùng nhớ, tạo luồng,….
    Cuối cùng, sau khi gọi hàm IoInitSystem gốc bootkit đọc phần còn lại của nó trên ổ đĩa, tạo luồng thực thi và trả quyền điều khiển cho kernel.
    Trên đây là bài phân tích của mình. Bài phân tích còn nhiều thiếu xót, rất mong nhận được sự góp ý của các bạn.
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan