刚入职就写了个Bug,把几万用户搞蓝屏了...

开发 前端 开发工具
这几天看到公司有校招的同学不断入职,抬头一看,不算实习,正式工作已经满 7 年了,7 年光阴,弹指一挥间。七年前,签订劳动合同加入我的第一家公司:百度。

 [[411900]]

图片来自 Pexels

说来也挺奇怪,我本来校招投递的岗位是 C/C++ 开发岗,结果由于面试过程中,面试官看我在内核技术、逆向分析技术和底层系统编程上上有一些经验,于是把我分到了内核攻防组,做驱动开发。

那时候我们团队分了两个方向:

01漏洞安全攻防

2014 年,正是微软宣布停止对 Windows XP 技术支持的时候,为了守护国内数量众多的 XP 用户(说是守护,其实就是抢占市场),各个安全厂商都开始推出 XP 安全防御产品,其中比较出名的就是 360 的 XP 盾甲。

国内的信安评测机构 CNCERT 搞了一个 XP 安全挑战赛,隔几个月就来一次 PK,在不同的 XP 电脑上分别装上各家的安全产品,然后使用一些漏洞 EXP 进行攻击,看看谁守得住。

主要的几个玩家就是 360、腾讯电脑管家、金山毒霸、北信源,还有就是百度。

咱们团队中的漏洞安全攻防组就是负责这个方向,把 XP 上能使用的漏洞基本上全都撸了一遍。

然后把更高系统 Win7、Win8 上的一些安全机制(比如 DEP、ASLR 等等)通过内核驱动的方式移植到 XP 上去,以增强 XP 的安全能力,抵御安全攻击,赢得比赛。

我记得 360 的 XP 盾甲做了一个功能,Windows XP 启动时,伴随启动进度条的出现,会出现经典的 LOGO,360 把这个 logo 改了,居然改成了 360 的 logo,当时年轻的我被震的一愣一愣的,居然还有这种骚操作。

不过很快,身边的同事就拿到 ntldr 进行了逆向分析,找到了 360 这一招的原理,我们也照猫画虎,把这个 LOGO 换成了咱们百度的,不过没有推到产品上,估计会被喷的,只当是技术研究罢了。

团队中的成员好多都是从 360 挖过来的大牛,那段时间,跟着这些大佬们学到了许多东西,我在二进制漏洞方面入门差不多就是那个时候。

02竞品攻防对抗

我主要的精力是放在这一块的。如果说前面第一个方向是和漏洞攻击做对抗,那这个方向就是和竞争对手打交道,这一部分更加有意思。

竞品对抗分为三块:

  • 安装
  • 启动与优化
  • 反卸载

安装:就是竞争对手会想进一切技术手段对我们的产品进行围追堵截,如果你的电脑上安装了竞品,可能你下载了一个百度杀毒的安装包,安装莫名报错,各种依赖缺失,甚至连安装包都下载不成功,各种情况都有。

实际上,是竞争对手的产品在背后作祟,当它识别到百度的产品在安装时,会各种使绊子,一开始通过文件 MD5 来识别,我们官方发布的每一个安装包的 MD5 都会第一时间被竞争对手拉入黑名单,一遇到直接就被干。

后来我们改了策略,安装包下载自动随机生成,每一次下载的MD5都不一样,这样才勉强逃过绞杀。

不过对手也不是吃素的,后面又改成文件特征识别,比如文件内部含有“baidu”等字符串,就列入黑名单,那段时间,百度网盘和百度音乐等几款客户端软件还因此被殃及过。

没办法,我们只好再次抹掉这些特征,或者进行加密,不让它们明文出现。

再后来,对手改成了通过文件图标来识别对手,提取 PE 文件的图标识别是不是我们,总之,在这个过程拉锯了很多回,非常有意思,各种损招都有。

启动与优化,这是更有意思的部分。躲过了安装这才是闯过了第一关,接下来的日子,每一天都充满了危机。

可能某一天,用户什么也没做,我们的产品就起不来了,这叫开机启动使绊子,让我们起不来。

还可能竞品可能弹个窗告诉你:内存吃紧,赶紧优化。然后你一点加速球,对手就把我们的进程干掉了,甚至把我们直接都卸载了,文件、进程、注册表啥也没了,消失的悄无声息。

那我需要做的当然就是对抗竞品的这些骚操作,卸载必须由用户手动通过控制面板或者我们自己的卸载软件发起,需要识别竞品的卸载行为,拦截删文件、杀进程、删注册表等一系列操作。

任何一个安全产品都有主动防御的功能,直接调用系统API进行上面的操作肯定会被我们的主动防御拦截掉,对手也深知这一点。

所以,想要干掉我们,对手得在内核模式下,用驱动调一些比较底层的函数绕过我们的安全防御。

那我们要做的就是和它进行对抗,直接的内核硬碰硬不是好办法,一不小心容易把电脑干蓝屏,我们选择了比较巧妙的一招:拦截通信。

对手要搞我们,他们处于 Ring3 模式下的应用程序总得和他们的 Ring0 模式下的内核驱动程序通信吧,就是 DeviceIOControl。

所以我们逆向了他们的通信协议,一旦发现要搞的目标是我们,就把这条消息拦截掉,这样他们的驱动收不到消息,也就不知道要搞我们了。

在这一部分,我们进行了好几个月的对抗,对手不断变化通信协议,不断变化通信的设备名称,甚至加密传输,我们也就见招拆招,兵来将挡,水来土掩。

后来发现我们总是拦截他们的通信,他们决定不再通信了,先把这事情记录起来,记录到文件、注册表等各种地方。

等到关机的时候,我们的驱动程序已经停掉了,他们再来干这事,或者放到开机的时候,他们的驱动比我们先加载,我们还没起来就被干掉。

于是战场又转移到了关机和开机时刻,驱动停止顺序上,比谁后卸载,最后留下来的就有后发优势,可以进行复活操作,两边互相抢,结果就是用户的电脑可能关机关半天都关不了。

除了关机顺序,还会逆向分析它到底把信息记录到了哪里,把这个信息删掉,也能自保。

在这过程中,又对抗拉锯了好几个月,比较有意思的是,对手似乎和我们达成了某种"默契",专挑每周五下班的时候,更新他们新的策略,让我们加班,真是太不讲武德了。

随着我们 DAU 的不断增长,除了一味的防守,我们也开始尝试给竞品使使绊子,也让他们尝尝这种滋味儿,正所谓以彼之道,稍加修改,还施彼身,其乐无穷,我们也来卸载他们,删他们文件,杀他们进程,删他们注册表。

刚刚入职就参与这种项目,着实对技术是有非常大的挑战,不管是逆向分析,加解密技术,还是内核攻防技术,调试分析技术,编程功底都是非常大的考验。

那段时间写代码非常谨慎,因为一个不小心,可能就会导致成千上万的用户电脑蓝屏。

没错,我就因为写了一个 Bug,好像是一个指针释放后未及时置空,导致上万的用户电脑蓝屏了,把刚刚入职不久的我吓得半死。

故事的结尾,可能大家想不到,我们一直和竞品 A 做对抗,和另一个竞品 B 联合对抗 A,颇有种三国时代,联吴抗曹的味道。

但在临近年关的时候,竞品 B 突然在背后狠狠捅了我们一刀,全面卸载我们,一个周末,DAU 掉了近千万,年终目标顷刻化为乌有。

那段日子,百度为了推广他的安全产品,做了不少过分的事情,各种捆绑,全家桶,很多中高层领导为了 KPI,宁愿牺牲口碑。因为和竞品做对抗,导致产品怎么也卸载不掉,被用户骂的很惨。

据说竞品 B 要搞我们的原因就是不小心推广到了他们公司一个高管的电脑上,还死活卸载不掉,于是才有了后面的事情,当然这只是道听途说,不知真假。

后来,我也厌倦了这样的产品和工作,如果是和病毒木马做斗争倒也罢了,拿用户的电脑当战场互相拼杀,实在不是什么光彩的事情。

恰逢我也想谋求技术转型,于是开始转向新的方向,咱们下次再聊。

作者:轩辕之风

编辑:陶家龙

出处:转载自公众号编程技术宇宙(ID:xuanyuancoding)

 

责任编辑:武晓燕 来源: 编程技术宇宙
相关推荐

2023-02-09 15:30:35

特斯拉AI

2020-10-21 11:20:42

MySQL数据库Bug

2021-10-18 07:30:50

抽奖系统架构

2020-04-22 10:48:20

移动运营商服务

2021-05-17 08:11:44

MySQL数据库索引

2011-12-26 15:31:33

2022-09-05 11:25:22

恶意浏览器Chrome恶意扩展

2019-06-19 10:57:48

新人入职代码

2020-04-08 07:55:08

MySQLSLA数据

2023-01-31 17:07:06

2023-06-13 15:55:54

2020-07-29 15:09:56

Dave数据泄露数据库泄露

2015-02-09 10:14:33

2009-02-01 21:11:13

Facebook存储数据中心

2010-05-04 22:32:37

手机木马网络安全360手机卫士

2021-04-15 07:53:15

ParkMobile数据泄露网络犯罪

2021-04-02 11:09:35

MobiKwik 移动支付数据泄露

2021-08-10 08:54:31

Firefox用户浏览器

2022-12-12 17:11:32

P6SpySQL

2012-03-19 11:21:22

QQ电脑管家
点赞
收藏

51CTO技术栈公众号