660 likes | 821 Views
恶意软件(病毒)的分析与 防范 Defence & analysis of malware. 计算机学院 傅建明 Fujms@sina.com. 恶意软件. 开设本课程的目的是使学生了解并掌握计算机恶意代码所涉及的基本知识和防范技术,提高计算机安全保护意识,具备防范恶意代码的基本能力. 教学安排. 恶意软件概述和基础知识 传统的计算机病毒 网络蠕虫 网页(移动)恶意代码(木马) 后门 木马 rootkit. 网络蠕虫. 什么是蠕虫? 为什么使用蠕虫? 蠕虫的简史 蠕虫的组成 蠕虫传播的障碍 蠕虫的发展 蠕虫的防治. 什么是蠕虫.
E N D
恶意软件(病毒)的分析与防范Defence & analysis of malware 计算机学院 傅建明 Fujms@sina.com 1
恶意软件 • 开设本课程的目的是使学生了解并掌握计算机恶意代码所涉及的基本知识和防范技术,提高计算机安全保护意识,具备防范恶意代码的基本能力 2
教学安排 • 恶意软件概述和基础知识 • 传统的计算机病毒 • 网络蠕虫 • 网页(移动)恶意代码(木马) • 后门 • 木马 • rootkit 3
网络蠕虫 • 什么是蠕虫? • 为什么使用蠕虫? • 蠕虫的简史 • 蠕虫的组成 • 蠕虫传播的障碍 • 蠕虫的发展 • 蠕虫的防治 4
什么是蠕虫 • 计算机蠕虫可以独立运行,并能把自身的一个包含所有功能的版本通过网络传播到另外的计算机上的程序代码。 • 蠕虫的定义中强调了自身副本的完整性和独立性 5
蠕虫 6
为什么使用蠕虫 • 技术的体现 • 接管大量系统 • 使得追踪困难 • 可以发动其他攻击--DDOS 7
蠕虫的简史 • Xerox PRAC, 1980年 • Morris Worm, 1988年11月2日 • WANK Worm, 1989年10月16日 • ADM Worm, 1998年5月 • Millennium, 1999年9月 • Ramen Worm, 2001年1月 • Lion Worm, 2001年3月23日 • Adore Worm, 2001年4月3日 • Cheese Worm, 2001年5月 • Sadmind/IIS Worm, 2001年5月 • CodeRed Worm, 2001年7月19日 • Nimda Worm, 2001年9月18日 • Slapper, 2002年9月14日 • Slammer, 2003年1月25日 • Dvldr32, 2003年3月7日 • MSBlaster, 2003年8月12日 • Nachi, 2003年8月18日 8
蠕虫的简史 • MyDoom.C2004年2月9日 • Witty Worm 2004年3月20日 • Sasser Worm 2004年4月30日 • Santy Worm2004年12月21日 9
蠕虫的行为特征 1 .主动攻击 2 .行踪隐蔽 3 .利用系统、网络应用服务漏洞 4 .造成网络拥塞 5 .降低系统性能 6 .产生安全隐患 7 .反复性/破坏性 10
蠕虫的组成 11
蠕虫的组成 弹头 传播引擎 目标算法 扫描引擎 有效载荷 12
弹头 如何获得控制权(打开传输通道): • 缓存区溢出探测; • 文件共享攻击; • 电子邮件; • 其它的错误配置; 13
传播引擎 • FTP • TFTP • HTTP • SMB • 其它UDP/TCP 14
目标选择算法 • 电子邮件列表 • 主机列表(hosts) • 被信任的系统(MAC/IP) • 邻域网 • 域名服务查询 • 任意选择一个目标网络地址(A/B/C,32bits) 15
扫描引擎 检测有效的目标: • NMAP; • Xscan; …… Ref: http://www.xfocus.net/tools/1.html 16
有效荷载 • 打开一个后门 • 安装代理/肉鸡 • 执行一些运算 …… 17
蠕虫的工作流程 随机生成IP地址--〉探测地址--〉主机是否存在--〉漏洞是否存在--〉攻击、传染和现场处理 18
案例分析--Nimda 弹头: (2001年9月,他既是蠕虫,也是病毒) • Microsoft的IIS web服务器漏洞:可以执行不位于web目录下的文件; • 感染浏览器所在的主机:访问有漏洞的IIS; • Outlook漏洞:MIME的头等; • Windows文件共享; • 探测其他蠕虫留下的后门:Code Red II等; 19
案例分析--Nimda 传播引擎: • Web—HTTP; • Outlook—SMTP; • File share—SMB; • IIS—TFTP; 20
案例分析--Nimda 目标选择算法: • 电子邮件—地址簿/html; • 随机生成一系列的目标IP地址,探测漏洞; 21
案例分析--Nimda 有效荷载: • 共享c盘; • 激活guest账号; 22
MyDoom • 2004年2月发现,该蠕虫病毒利用自带的SMTP引擎来发送病毒邮件,利用点对点工具(KaZaA)的共享目录来欺骗下载。 • 病毒发作时会启动64个线程进行DoS(www.sco.com)攻击,造成系统和网络资源的严重浪费。 23
Sasser • 2004年4月30,利用WINDOWS平台的 Lsass 漏洞进行广泛传播,开启上百个线程不停攻击其它网上其它系统,堵塞网络。病毒的攻击行为可让系统不停的倒计时重启。 • 该病毒并不通过邮件传播,而是通过命令易受感染的机器下载特定文件并运行,来达到感染的目的。 24
Sasser • Sasser是直接在SHELLCODE里面完成了一个FTP程序,BIND一个5554端口,支持几种最基本的FTP命令。 • Lsass认证进程中的溢出 25
Santy蠕虫 • 描述: • 2004年12月21日发现,截止到12月22日,google可以统计到被santy蠕虫破坏的网站已经达到26000多; • 利用论坛系统phpBB的漏洞传播; • 智能特性: • 从搜索引擎google得到攻击站点列表; • 存在形式: • 脚本代码; 26
Santy蠕虫 • 如何检测智能蠕虫? • 不需扫描,流量无明显异常; • 查询条件的无穷组合; • 脚本代码的任意变化; 27
蠕虫的爆发周期越来越短… 最佳时机 及时 太晚了 攻击代码 蠕虫爆发 控制 清除 漏洞发现 越来越长,越来越难 越来越短 28
蠕虫的传播模型 29
蠕虫传播的原因 • 网络体系结构 • 漏洞(弱配置,缓冲区溢出) 30
网络系统的特性--网络系统的形成过程 …… 31
互联网的自然特性 • 成长性:网上资源不断膨胀和更迭的特性。 • 自治性:网上资源局部自治、没有集中管理的特性。 • 异构性:网上资源存在着广泛差异的特性。 32
自然特性带来的好处 • 促使互联网迅速成长为覆盖全球的廉价的通信平台; • 促使互联网逐步演变为覆盖全球的灵活的计算平台; • 人类的信息处理能力将突破时空局限,实现质的飞跃。 33
互联网的一个图景 34
成长性+优先连接 35 摘自“Scientific American”2003年第5期
无尺度网络 航空网 36 摘自“Scientific American”2003年第5期
随机网络 公路网 37 摘自“Scientific American”2003年第5期
随机网络的容错 38 摘自“Scientific American”2003年第5期
无尺度网络的容错能力 39 摘自“Scientific American”2003年第5期
无尺度网络与恶意攻击 挑战:无尺度网络极易被恶意攻破。 40 摘自“Scientific American”2003年第5期
无尺度网络与病毒传播 挑战:无尺度网络易于病毒的快速传播。 41
复杂网络的特性 • 复杂网络是研究系统结构和行为的关键,它由节点和边来分别表示复杂系统中的功能元素以及各元素间的相互关系。 • 特点:节点数目庞大,节点间的关系复杂。 • 研究对象:通信网,电力网,交通网,人际关系网,神经网络,疾病传播网 42
复杂网络的特性 复杂网络的研究主要集中在: 1〉寻找能够表征复杂网络的结构和行为,如尺度分布、路径长度等,并提出合理的测量; 2〉创建能够有利于人们理解这些特性的网络模型 3〉根据对所定义的网络特性的测量结果,预测网络的动态行为(病毒/蠕虫传播行为)。 43
复杂网络的特性 三个主要特性: 1〉特征路径长度,用l定义= N表示网络中的节点数,i/j为网络中的节点,di,j为节点i,j的最短路径长度。(Characteristic path length ) 在朋友(熟人)网络中,特征路径长度就是联系两个人的朋友个数。 在数学家的合作论文中,合作者之间存在Erdös 值(Erdös Number),统计结果表明,任何数学家,他同Erdös 关联起来的平均值即Erdös 值为3 44
复杂网络的特性 2> 度值分布:节点的度值是指与该节点相连接的边数。用Pk表示为随机选择一个节点其度值为k的概率。 45
复杂网络的特性 3〉聚合系数(Clustering coefficient): 假设某个节点有k条边,则这k条边连接的节点(k个)之间最多可能存在的边数为k(k-1)/2,用实际存在的边数除以最多可能存在的边数得到的分数值,定义为这个节点的聚合系数。所有节点的聚合系数的均值定义为网络的聚合系数。很明显,聚合系数是网络的局部特征。在朋友(熟人)网络中,聚合系数反映了相邻两个人之间朋友圈子的重合度。 ki为节点i的边数,i为节点间实际存在的连接数 46
复杂网络的特性 Small world: 网络具有较短的特征路径,和较高的聚集系数。 47
缓冲区溢出 • 缓冲区溢出攻击的基本原理是向缓冲区中写入超长的、预设的内容,导致缓冲区溢出,覆盖其它正常的程序或数据,然后让计算机转去运行这行预设的程序,达到执行非法操作、实现攻击的目的。 • 存在条件:不对缓冲区、数组及指针进行边界检查,如strcpy(), strcat(), sprintf(), gets()等 48
静态缓冲区溢出机理 stack低端 内存低端 …… 局部变量 (Ebp for debug) 返回地址 Argc的值 Argv的地址 程序段 数据段 堆栈 Stack的使用 内存高端 stack高端 49
For example • void foo(const char*input) • { char buf[10]; • strcpy(buf,input); • printf("my name is foo\r\n");} • void bar(void) • { printf("You have been hacked\n");} • int main(int argc, char* argv[]) • { • char buf[33]={"AAAABBBBCCCCDDDD • EEEEFFFFGGGGHHHH"}; • unsigned long bar_add; • bar_add=(unsigned long)bar; • memcpy(&buf[12],&bar_add,4); • foo(buf); • return 0; • } 执行foo,也就执行了Bar 50