历史上的重大软件BUG启示录 第6篇---蠕虫“冲击波”


(图片来源于网络)

         RPC(远程过程调用)是一种进程间通讯机制,最初由 Sun 公司提出,目前为 IETF 标准协议。RPC 协议允许一台计算机上的程序执行另一台远程系统上的代码。Windows的RPC服务也是以RPC为基础开发的。

         2003年某个时候,LSD研究小组发现RPC中存在一个缓冲区溢出漏洞:当发送一个特定包时,会导致Windows RPC服务无提示的崩溃掉!

         LSD小组向微软提交了这个漏洞,2003年7月16号,微软发布补丁程序,用于修复这个缓冲区溢出漏洞。

         9天后,也就是2003年7月25日,中国的一个安全研究小组Xfocus发布了利用该漏洞的攻击测试代码(http://www.xfocus.net/vuls/200307/3878.html)。据说,Xfocus小组内成员对微软提供的补丁程序进行了逆向分析,从而发现了漏洞原理以及相应的攻击方法,并将其公之于众。

         26天后,即8月11日,利用RPC漏洞的蠕虫“冲击波”首次在互联网上传播。24小时后,冲击波感染了336000台计算机。截止到8月14日,冲击波已经感染了超过100万台计算机。

         “冲击波”通过TCP/IP进行传播,一旦攻击成功,就会将一个病毒(msblast.exe)传送到对方计算机中进行感染,如果不能感染系统,则使系统操作异常、不停重启、甚至导致系统崩溃。一旦感染成功,该病毒会建立一个远程shell进程“后门”,该后门监听端口4444,从而允许攻击者远程控制被感染的系统。此外,该病毒还会在一个特定时间对微软的系统升级网站(windowsupdate.com)进行拒绝服务攻击,导致该网站堵塞,使用户无法通过该网站升级系统。

         根据保守估算,“冲击波”蠕虫造成的经济损失至少达到5亿美元!

         “冲击波”蠕虫利用的是一个代码逻辑缺陷,问题代码如下所示(这段代码由微软提供):

error_status_t _RemoteActivation( ...,WCHAR *pwszObjectName,...)
{*phr= GetServerPath(pwszObjectName, &pwszObjectName);...
}HRESULT GetServerPath(WCHAR *pwszPath,WCHAR **pwszServerPath)
{WCHAR*pwszFinalPath = pwszPath;WCHARwszMaxhineName[MAX_COMPUTTERNAME_LENGTH_FQDN+1];hr= GetMachineName(pwszPath, wszMachineName);*pwszServerPath= pwszFinalPath;
}HRESULT GetMachineName ( WCHAR*pwszPath, WCHARwszMachineName[MAX_COMPUTTERNAME_LENGTH_FQDN+1]) 
{ WCHAR*pwszServerName = wszMachineName; WCHAR*pwszTemp = pwszPath + 2; while( *pwszTemp != L’\\’ )           /* 这句代码循环结束条件不充分*/ *pwszServerName++=*pwszTemp++; /*…*/ 
} 

         错误位于第20~21行,我们单独把这两行代码拿出来:

         while( *pwszTemp != L’\\’ )           /* 这句代码循环结束条件不充分*/ *pwszServerName++=*pwszTemp++; 

         第一行代码使用while循环从一个长字符串中解析主机名字,结束标志为两个反斜杠(‘\\’)。这里有一个逻辑漏洞,while循环的结束条件并不充分,考虑这样一个情况:攻击者故意发送的字符串中如果没有两个反斜杠,会怎样?结果是程序会一直执行代码*pwszServerName++= *pwszTemp++;,但是指针pwszServerName指向的缓冲区有效长度只有MAX_COMPUTTERNAME_LENGTH_FQDN+1个字节,一旦超过这个区段,则发生缓冲区溢出。如果精心设计溢出部分的数据,化数据为指令,就可以利用缓冲区溢出的数据修改PC指针的值,使之指向我们希望执行的代码,提升权限等。

         这个造成至少5亿美元损失的BUG,修复只改了一行代码!修复后的代码如下所示,仅仅对while循环设置了充分的结束条件:

WCHAR *end_addr = pwszServerName+MAX_COMPUTTERNAME_LENGTH_FQDN; 
while ((*pwszTemp != L’\\’ )&& (*pwszTemp != L’\0’) &&(pwszServerName<end_addr))                /*充分终止条件*/ *pwszServerName++=*pwszTemp++; 

         编程是一件细致活,容不得一丝疏忽。即便是编写Windows操作系统的那些非常聪明的人,也会在不经意间埋下一颗逻辑炸弹。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2219577.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

技术活-一阶后向差分

众所周知&#xff0c;角度是比较容易测量的物理量&#xff0c;但是角速度通常难以直接测量&#xff0c;而此时通常采用的方法是一阶差分来近似求解。 本例程用来讲解基于Siemens S7-1200 PLC实现角度速的测量。所用到的硬件&#xff1a; 1200PLC&#xff1a; CPU 1214 AC/DC/Rl…

MVVM?继续搞一波

前言 又是好久不见了&#xff0c;真的不是因为我懒&#xff0c;是因为公司目前活确实有点着急&#xff0c;所以每天在忙公司的事情。 在五月下旬的时候写过一篇MVVM的文章&#xff1a;MVVM&#xff1f;瞎搞一波&#xff1f;。当时写的时候内心其实很慌&#xff0c;怕写的不好…

华为:活下来!或将卖掉 X86 服务器业务?

点击关注公众号&#xff0c;回复“1024”获取2TB学习资源&#xff01; 2021 年 8 月 6 日&#xff0c;华为公司公布上半年公司整体经营业绩数据&#xff0c;净利润是实现增长的。 数据显示&#xff0c;2021 年上半年&#xff0c;华为实现销售收入 3204 亿元&#xff0c;同比下降…

FFT快速傅立叶变换在示波器中的用法

大多数示波器上都有个FFT功能,也叫快速傅立叶变换,但很多人不了解这个功能是做什么用的,百度以后又会遇到各种各样的高数公式,看的一头雾水,遂而放弃这块知识。 我们来看百度百科的解释: FFT,即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、…

一大波硕士即将来袭

前几天有一个读者朋友,也是程序员,在微信和我说:研究生扩招了,他要不要把专科学历提高一下? 我查了一下新闻,确实:2020 年硕士研究生扩招 18.9 万人,扩招向临床医学、公共卫生、人工智能等专业倾向。 今天和大家说说硕士研究生扩招这事。 1. 一直在扩招 硕士研究生(…

高斯滤波在图像处理中的应用

卷积&#xff1a; 相信很多时候&#xff0c;当我们在看到“卷积”时&#xff0c;总是处于一脸懵逼的状态&#xff0c;不但因为它的本义概念比较难理解&#xff0c;还因为它在不同的应用中发挥出的变幻莫测的作用也时常让人迷糊。但这些应用其实本质上都是同一种东西&#xff0…

示波器FFT频谱分析的使用方法和注意点

对信号中的频率分量进行分析是十分重要的&#xff0c;因为他们常常会在设计中引起噪声&#xff0c;一旦超出允许的公差&#xff0c;就可能进而导致器件发生故障功能失常。严重的还可能导致电压尖峰&#xff0c;损坏器件。如果我们在设计的时候没有进行正确的测试&#xff0c;那…

第四讲:详谈波分设备在双活方案中应用

容灾通信链路设计是保障用户在合理的通信成本下成功实现容灾系统建设的重要步骤。不同的通信链路有不同的属性,如距离支持、带宽能力等,而不同的容灾技术和容灾应用对通信链路的要求并不相同。 容灾通信链路的选择 对于容灾方案,无论采用哪种容灾通信链路,都需要从信息系…

生成两路PWM波相位差90°的方法

1、需要一个定时器两个通道&#xff0c;定时器模式设置为输出比较模式&#xff08;还有另外一种模式---PWM模式&#xff09; 输出比较模式下不关心CNT比 CCR值大还是小&#xff0c;只关心CNT和CCR值什么时候相等&#xff0c;两个值相等时&#xff0c;就翻转输出电平。在PWM模式…

智能运营新功能,多波次营销全触达

推送触达率不高&#xff0c;转化效果不好&#xff1f; 消息推送时下已经是APP日常运营的重要工具&#xff0c;好的消息推送能够有效地增强用户黏性、提升用户体验&#xff0c;然而一切好的消息推送都是建立在能够到达用户终端为前提的&#xff0c;所以消息推送的到达率尤为重要…

基于python+openCV的中值滤波

先直接来一个33的吧 def median(src_img, filter_size, channels):# 首先&#xff0c;定义一个大小为9的0数组# list [[0, 0, 0, 0, 0, 0, 0, 0, 0],# [0, 0, 0, 0, 0, 0, 0, 0, 0],# [0, 0, 0, 0, 0, 0, 0, 0, 0]]list np.zeros([3, 9])# print(list[1][4]…

如何用FPGA输出正弦波、三角波等

如何用FPGA输出正弦波、三角波等 一、开发工具二、步骤1、设置ROM IP核2、程序编写 一、开发工具 1、 软件平台&#xff1a;Quartus ll 2、芯片&#xff1a;不重要 二、步骤 1、设置ROM IP核 设置ROM IP核&#xff0c;根据使用的DA芯片选择对应的位数和数据量&#xff0c;选…

示波器的三种触发模式详解

一、什么是示波器的触发模式&#xff1f; 示波器的“触发”就是使得示波器的扫描与被观测信号同步&#xff0c;从而显示稳定的波形。为满足不同的观测需要&#xff0c;需要不同的“触发模式”。示波器的基本触发模式有三种&#xff1a; 第一种是“自动模式&#xff08;AUTO&am…

Unity Shader-后处理:屏幕水波效果

一.简介 最近在打黑魂,被虐得死去活来,每次都是想砸电脑的节奏,然而还是忍不住想玩,唉。下面步入正题,黑魂的传送技能之前会播放一个帅帅的屏幕特效-屏幕水波,从屏幕中间向四周扩散开来,很有赶脚。下面附上一张截图: 正好最近在学习shader,决定研究一下这种效果怎样实…

第一讲:双活容灾技术和方案概述

容灾建设在我国已有十多年的历史了&#xff0c;尤其是2007年发布国标GB/T20988-2007《信息系统灾难恢复规范》后&#xff0c;各行各业对容灾建设都非常重视&#xff0c;各种新的容灾技术和产品也得到了快速的发展和应用。在我国容灾发展的前十年&#xff0c;主要都是基于保护IT…

傅里叶变换与小波分析

从毕设中期答辩以后,本人开始着力于信号处理方面知识的学习,这里面的玄机确实说不清道不明,剪不断理还乱。 在学习过程中,发现很多值得去探索和分析的地方,而且好多前辈都很无私的分享了。 愚目的很简单:就是想把这阶段所学的知识整理整理思路,希望能得到大神指点。 …

Matlap生成正弦波以及正弦波转为方波代码示例

首先了解什么是正弦波&#xff1a; 正弦波是频率成分最为单一的一种信号&#xff0c;因这种信号的波形是数学上的正弦曲线而得名 公式&#xff1a;ysin X 正弦波就是长以下的样子&#xff1a; 接下来我们用Python中的Matlap以及Numpy函数库来模拟实现正弦波&#xff0c;直接上…

汽车毫米波雷达

汽车毫米波雷达 汽车前碰撞预警毫米波雷达是专用于机动车驾驶辅助系统ADAS&#xff08;Advanced Driving Assistant System&#xff09;的微波雷达传感器&#xff0c;主要用于主动碰撞避免或预碰撞系统&#xff08;Collision avoidance system或Precrash system&#xff09;、自…

容积脉搏波的采集原理

一 前言 从脉搏波中提取人体的生理病理信息作 为临床诊断和治疗的依据&#xff0c;历来都受到中外医 学界的重视。脉搏波所呈现出的形态、强度、 速率和节律等方面的综合信息&#xff0c;在很大程度上 反映出人体心血管系统中许多生理病理的血流 特征&#xff0c;因此对脉搏波采…

VueRouter与expres/koa中间件的关联

ueRouter: runQueue 路由守卫都是有三个参数to,from,next。其中next就是下方的fn执行时候传入的第二个参数(回调函数)&#xff0c;只有该回调执行后才会挨个遍历queue内的守卫。 中间件的作用 隔离基础设施与业务逻辑之间的细节。详细的内容位于《深入浅出Node.js》P210 另外一…