RPC(Remote Procedure Call)Buffer Overrun蠕蟲漏洞,微軟于7月16日發(fā)布此漏洞的安全補(bǔ)丁(MS-0326)。漏洞原理及攻擊代碼最早為Flashsky發(fā)布在安全焦點(diǎn),發(fā)布時(shí)并有安全專家預(yù)測會(huì)有針對(duì)此漏洞的蠕蟲病毒,2個(gè)星期之后病毒代碼被病毒作者利用寫出MSBlast蠕蟲病毒。還沒等用戶更新此安全補(bǔ)丁,就己經(jīng)導(dǎo)致MSBlast蠕蟲病毒在全球范圍內(nèi)大規(guī)模傳播,相信這幾天MSBlast蠕蟲病毒將會(huì)導(dǎo)致更多使用者受此病毒的攻擊。微軟公司針對(duì)此漏洞進(jìn)行詳細(xì)講解。
微軟針對(duì)缺陷的安全補(bǔ)丁: http://www.microsoft.com/technet/treeview/?url=/technet/security/bulletin/MS03-026.asp
病毒淺析:
該病毒使用C編寫,病毒可執(zhí)行使用UPX軟件壓縮之后總長度為6176字節(jié),在病毒程序中包含F(xiàn)lashsky編寫的漏洞攻擊代碼,說明該病毒是利用Flashsky編寫的攻擊代碼。此攻擊代碼主要針對(duì)Windows 2000操作系統(tǒng)而編寫,攻擊代碼中包含絕大部分Widnows 2000溢出文件偏移地址,針對(duì)NT4 XP 2003溢出攻擊都不會(huì)成功,因?yàn)椴僮飨到y(tǒng)版本不相同,溢出文件偏移地址也不相同,溢出不成功將會(huì)導(dǎo)致Remote Procedure Call (RPC)服務(wù)停止,文件復(fù)制貼粘無法使用,COM屬性無法正常使用。NT4 XP 2003操作系統(tǒng)溢出不成功將會(huì)導(dǎo)致RPC服務(wù)被終止,而PRC服務(wù)進(jìn)程被異常終止之后可能會(huì)導(dǎo)致計(jì)算機(jī)重新啟動(dòng)。PRC服務(wù)通訊則依賴TCP/135端口進(jìn)行通訊。
病毒執(zhí)行之后將會(huì)在%SystemRoot%\system32\目標(biāo)下生成msblast.exe病毒可執(zhí)行文件。并在注冊表添加自運(yùn)行鍵值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,鍵值項(xiàng)目名稱為windows auto update,鍵值會(huì)批向%SystemRoot%\system32\msblast.exe目錄下,病毒程序進(jìn)程名為msblast.exe。蠕蟲病毒成功執(zhí)行后并在本機(jī)創(chuàng)建TFTP UDP/69服務(wù)端,如果溢出攻擊成功,則利用cmd.exe綁定目標(biāo)主機(jī)TCP/4444端口,發(fā)送TFTP命令將病毒文件msblast.exe復(fù)制到目標(biāo)操作系統(tǒng)。病毒程序?qū)⑾虍?dāng)前IP地址C段發(fā)送SYN封包掃描。完成C段IP掃描之后病毒程序?qū)?huì)隨機(jī)產(chǎn)生IP地址向外部進(jìn)行掃描,病毒程序在進(jìn)行掃描過程中會(huì)消耗大量網(wǎng)絡(luò)資源及系統(tǒng)資源。
蠕蟲病毒攻擊代碼針對(duì)Windows XP 2003操作系統(tǒng)并不會(huì)成功,但會(huì)造成Windows XP 2003 PRC服務(wù)停止,導(dǎo)致操作系統(tǒng)重新啟動(dòng)。
發(fā)現(xiàn)蠕蟲病毒中文本數(shù)據(jù): billy gates why do you make this possible ? Stop making money and fix your software!
感染步驟:
首先A主機(jī)感染之后向B主機(jī)發(fā)送攻擊代碼:
如果攻擊成功:
(1)開啟B機(jī)器TCP/4444端口,發(fā)送TFTP命令將A主機(jī)上的病毒文件復(fù)制到B主機(jī)并執(zhí)行。執(zhí)行之后B機(jī)器又會(huì)向其它IP地址進(jìn)行掃描并進(jìn)行溢出攻擊。
如果攻擊失?。?
(1) B主機(jī)屏蔽135端口,A主機(jī)無法發(fā)送攻擊代碼至B主機(jī),導(dǎo)致溢出攻擊失敗。
(2) B主機(jī)被溢出攻擊之后,因文件偏移地址不同,導(dǎo)致溢出不成功。并會(huì)將RPC服務(wù)停止,文件復(fù)制貼粘無法使用,COM屬性無法正常使用,XP操作系統(tǒng)攻擊之后會(huì)造成機(jī)器重啟。重新啟動(dòng)操作系統(tǒng)會(huì)恢復(fù)正常,但極易再次受到溢出攻擊。
解決對(duì)策:
針對(duì)解決對(duì)策強(qiáng)烈建議你安裝微軟MS-0326操作系統(tǒng)補(bǔ)丁,因MSBlast蠕蟲病毒是利用微軟這個(gè)操作系統(tǒng)缺陷進(jìn)行攻擊。
Windows Me 98
Windows Me 98不受此病毒的影響,建議安裝防火墻產(chǎn)品防止病毒及入侵者進(jìn)攻。
WinNT 4
針對(duì)Windows NT4操作系統(tǒng)己經(jīng)發(fā)布針對(duì)此漏洞進(jìn)行修正補(bǔ)丁,補(bǔ)丁地址為:
http://microsoft.com/downloads/details.aspx?FamilyId=2CC66F4E-217E-4FA7-BDBF-DF77A0B9303F&displaylang=en
Windows 2000
針對(duì)Windows 2000操作系統(tǒng)己經(jīng)發(fā)布針對(duì)此漏洞進(jìn)行修正補(bǔ)丁,補(bǔ)丁地址為:
http://microsoft.com/downloads/details.aspx?FamilyId=C8B8A846-F541-4C15-8C9F-220354449117&displaylang=en
Windows XP
針對(duì)Windows XP操作系統(tǒng)己經(jīng)發(fā)布針對(duì)此漏洞進(jìn)行修正補(bǔ)丁,補(bǔ)丁地址為:
32位操作系統(tǒng)
http://microsoft.com/downloads/details.aspx?FamilyId=2CC66F4E-217E-4FA7-BDBF-DF77A0B9303F&displaylang=en
64位操作系統(tǒng)
http://microsoft.com/downloads/details.aspx?FamilyId=2CC66F4E-217E-4FA7-BDBF-DF77A0B9303F&displaylang=en
Windows 2003
針對(duì)Windows 2003操作系統(tǒng)己經(jīng)發(fā)布針對(duì)此漏洞進(jìn)行修正補(bǔ)丁,補(bǔ)丁地址為:
32位操作系統(tǒng)
http://microsoft.com/downloads/details.aspx?FamilyId=2CC66F4E-217E-4FA7-BDBF-DF77A0B9303F&displaylang=en
64位操作系統(tǒng)
http://microsoft.com/downloads/details.aspx?FamilyId=2CC66F4E-217E-4FA7-BDBF-DF77A0B9303F&displaylang=en
清除工具:
清除病毒之后需要了解病毒感染原理,針對(duì)MSBlast蠕蟲病毒晚上寫了一個(gè)清除工具,包含殺死病毒進(jìn)程,清除病毒可執(zhí)行文件。建議先斷開網(wǎng)絡(luò),安裝操作系統(tǒng)補(bǔ)丁重啟操作系統(tǒng)之后運(yùn)行清除工具即可。如文中有表達(dá)錯(cuò)誤的地方還請您的指教!謝謝~
program KillRPC;
uses
Windows,SysUtils, tlhelp32,registry;
procedure Kill;
var
ID:DWORD;
I: string;
Ret: Boolean;
tmp:string;
SnapshotHandle: THandle;
PE32: tProcessEntry32;
hh: HWND;
begin
I := lowercase('msblast.exe');
SnapshotHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PE32.dwSize := SizeOf(PE32);
Ret:= Process32First(SnapshotHandle, PE32);
while Integer(ret) <> 0 do
begin
tmp:=lowercase(PE32.szExeFile);
if pos(i,tmp)>0 then
begin
Id := PE32.th32ProcessID;
hh := OpenProcess(PROCESS_ALL_ACCESS, True,Id);
TerminateProcess(hh, 0);
end;
Ret:=Process32Next(SnapshotHandle,PE32);
end;
end;
function getdir:string;
var
reg:tregistry;
begin
result:='';
reg:=tregistry.create;
with reg do
begin
rootkey:=HKEY_LOCAL_MACHINE;
openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);
result:=readstring('windows auto update')
end;
reg.free;
end;
procedure clearrun;
var
reg:TRegistry;
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey ('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
reg.DeleteValue('windows auto update');
Reg.CloseKey;
end;
begin
kill;
deletefile(extractfilepath(getdir)+'\msblast.exe');
clearrun;
end.