新年虫漏洞丨大东话安全
2022/3/17 中科院之声
一、 小白剧场
大东:小白,网上对于程序员的有一句调侃,你知道程序员身上最需要具备的特质是什么吗?
小白:这个我知道,哈哈哈哈,毕竟我可是预备役程序员。那就是,要做好随时加班的准备。
大东:但其实各行各业的工作人员需要在有临时任务时候去加班奋斗,为何就单单成为了程序员的特质?
小白:因为大家一直调侃程序员的工作作息是007,996之类的。
大东:原来如此。
小白:话说我们为什么突然聊起来这个程序员加班的话题了?
大东:因为最近安全圈有一个新闻,微软的员工跨年夜加班回去修bug,又让大家调侃起程序员加班的事情了。
小白:这是因为什么原因呢?东哥你可以讲一下吗?
大东:当然可以。
小白:好的好的,搬来我的小板凳。
二、 话说事件
大东:跨年夜大家都会发信息给亲朋好友发祝福,有的人会倾向使用即时性通讯软件,有的人会倾向使用email方式。
小白:小白我就是使用微信的用户人群。
大东:很多使用微软 Exchange 的用户发现,自己写好的新年祝福等邮件突然无法发出,并且都会收到一条错误提醒。
小白:欸,啥情况?
错误提示(图片来源于网络)
大东:而且包括2016和2019等在内的不少Exchange Server版本中都出现了相同的问题。
(图片来源于网络)
小白:一个多版本的通用bug呀,这个问题最开始是谁先发现的呢?
大东:是一个网名叫“miketheitguy”的网友最先发现的,并且这个网友在22年1月1日上午在推特上公开了这个发现。
用户twitter截图(图片来源于网络)
小白:那么微软的程序员就失去假期了,国外似乎没有咱们这边农历年的习俗,所以1月1日对于他们的含义应该和我们国内看待大年初一差不多吧。
大东:没错,大家都疯了,大过年的还要加班都怪这个bug,这个bug也遭到了广大码农不分国界的疯狂吐槽。在Reddit 上,相关话题热度上千,许多程序员表示“年都没跨好就在这修bug”。
小白:加班,看来是国内外程序员的共同特质啊。哈哈。那这个bug到底是因为什么原因造成的呢?
大东:别急,我们这就开始讲。
小白:好耶。
三、 大话始末
大东:其实呢,这是一个由于“2022年”的到来而导致的bug。
小白:啊,这和2022年有什么关系,欸,我知道了,是不是和千年虫漏洞很相似!
大东:你好机智啊,给你点赞。
小白:因为东哥咱们之前讲过千年虫,所以我还有印象,嘻嘻。
大东:要想探究最根本的原因,我们要先了解一个微软的系统。
小白:是什么系统呢?
大东:是一套邮件过滤管理系统,英文名是“FIP-FS”。
小白:我好想知道这个系统,是微软Exchange上面的吧。
大东:没错。我们要关注的就是这套系统存储日期的格式,这个格式其实也是编程程序员比较常见的格式——“yymmddHHMM”,并使用有符号变量(Int32,也就是long)实现。
小白:所以是数的存储带来的问题?
大东:对的,先来看这种日期的存储意义,这个对于广大程序员应该很熟悉了。yymmddHHMM分别指代用两位来存储年(years)、月(months)、日(days)、小时(Hours)、分钟(Minutes)。
小白:这样存储好像也没啥问题呀。
大东:小白,你思考下有符号的int32数的存储范围是多少呢?
小白:有符号的Int32最多只能存储-2147483647到+2147483647的数据。
大东:你看,答案就在眼前。
小白:对,从22年开始,就变成了22XXXXXXXX,从2022年1月1日0时开始,就超过了Int32所能存储的数据最大范围。
大东:所以这个漏洞也被网友称为“2022 版千年虫”,也被一些Exchange管理员命名为Y2K22。
小白:看来变量虽小,却不能忽视啊。在程序设计的时候一定要考虑到实际应用中数的取值范围的问题。微软对此是如何应对的呢?
大东:嗯…首先就是紧急叫了一波程序员回去加班奋战了。
小白:又cue到了辛勤的打工人。
大东:微软同时也发布了公告,在公告中声明,他们会发布一个Exchange Server更新,里面将用一个更大的变量类型来保存日期。
小白:这次应该波及挺大的吧,估计有好多邮件都滞留邮箱了。
大东:是的,你想,设置在2022年新年发送的邮件会在许多公司的邮箱服务器内滞留,据了解,有的公司邮箱服务器中滞留的邮件甚至已经达到数十万封。
小白:这,这是肯定存不下的啊!
大东:是啊。
小白:微软有没有说有什么临时解决的办法?
大东:微软团队表示,如果有非常紧急的邮件需要发送,需要先关掉Exchange中的FIP-FS功能。可以通过使用 Set-MalwareFilteringServer -BypassFiltering $True -identity 禁用 Exchange 服务器上的反恶意软件扫描器,并重新启动 Microsoft Exchange Transport 服务。
小白:对啦,这个FIP-FS具备什么功能呢?
大东:刚刚我们已经提到过它的中文全名了“邮件过滤管理器”,小白你来猜猜看呢?
小白:我想想啊,那它是用来过滤垃圾邮件的吗?
大东:是的,不仅垃圾邮件,它还可以一定程度上检测恶意邮件,并过滤出去。
小白:这样操作很可能导致公司邮箱“可能收到更多垃圾邮件”。
四、小白内心说
大东:还有网友调侃,我们简单点直接把有符号变量改成无符号变量吧。
小白:哈哈,这么简单粗暴的吗?直接让范围奔向0~4294967295!
大东:我不怀好意地想一下,如果真的这样搞,Exchange邮箱应该是可以用到2043年啦,哈哈。
小白:哈哈哈,那这就是千年虫病毒的2043版。
大东:还有一些网友说要不我们把日期回滚到2021年吧,可以暂时解决此问题。
小白:哈哈哈,网友都在积极出谋划策。
大东:最后微软还是给出了自己官方的结局方案。
小白:是什么呢?
大东:它们紧急发布了一个临时修复程序——“Reset-ScanEngineVersion.ps1”。
小白:我猜是PowerShell脚本?
大东:是的。
小白:那我们要怎么操作这个临时修复程序呢? 直接执行PowerShell脚本就可以了吗?
大东:是的。“Reset-ScanEngineVersion.ps1”脚本执行时,Microsoft过滤管理和Microsoft Exchange传输服务都会被停止,随后会删除旧的防病毒引擎文件,并下载新的防病毒引擎,最后再次启动这些服务。
小白:大东东,能再讲得具体一点吗?
大东:那我们来一步一步讲。第一步、从https://aka.ms/ResetScanEngineVersion下载 Reset-ScanEngineVersion.ps1 脚本 。第二步、打开提升的 Exchange 命令行管理程序。第三步、通过运行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned更改 PowerShell 脚本的执行策略 。第四步、运行脚本。
小白:明白了!
大东:微软还提示,如果之前禁用了扫描引擎,需要使用Enable-AntimalwareScanning.ps1脚本再次启用它 。
小白:嗯嗯,大家可以按照这个方法进行设置啦。
大东:小白,你听完这个故事有没有什么感想呢?
小白:欸,感觉变量这件事看起来微不足道,实际上出问题之后影响还是蛮大的。写程序的时候一定要多多考虑啊!
大东:没错,小白努力做一个优秀的程序员吧。
参考资料:
1. 微软Exchange惊现2022“新年虫”,紧急修复 https://www.77169.net/html/286136.html
2. 微软2022年首个大Bug出现,大量程序员连夜加班 https://new.qq.com/omn/20220106/20220106A04BMF00.html
3. 微软开年就出大 bug,大量程序员连夜加班:年都没跨好 https://blog.csdn.net/bjweimengshu/article/details/122388858
来源:中国科学院信息工程研究所
温馨提示:近期,微信公众号信息流改版。每个用户可以设置 常读订阅号,这些订阅号将以大卡片的形式展示。因此,如果不想错过“中科院之声”的文章,你一定要进行以下操作:进入“中科院之声”公众号 → 点击右上角的 ··· 菜单 → 选择「设为星标」
源网页 http://weixin.100md.com
返回 中科院之声 返回首页 返回百拇医药