图片来自Pexels说来也怪,本来应聘的是C/C++开发岗位,但是面试过程中,面试官看到我在内核技术、逆向分析技术、底层系统编程方面有一定的经验,就把我分配到内核攻防组做驱动开发。当时我们团队分为两个方向:01漏洞安全攻防2014年,微软宣布结束对WindowsXP的技术支持,为了保护中国大量的XP用户(据说是保护,其实是抢占市场),各家安全厂商纷纷推出XP安全防御产品,其中最著名的就是360的XPShield。国内信用安全评估机构CNCERT举办了XP安全挑战赛。他们每隔几个月就会互相竞争。他们在不同的XP电脑上分别安装了各个公司的安全产品,然后利用一些漏洞EXP进行攻击,看谁来防范。可以住。主要玩家有360、腾讯电脑管家、金山杀毒、北新园、百度。我们团队的漏洞安全攻防组就是负责这个方向的,基本查遍了XP上可以利用的所有漏洞。然后通过内核驱动将更高系统Win7、Win8上的一些安全机制(如DEP、ASLR等)移植到XP中,增强XP的安全能力,抵御安全攻击,赢得比赛。我记得360的XP盾做了一个功能。WindowsXP启动时,随着启动进度条的出现,会出现经典的LOGO,小时候的我愣了一下,还有这么花心的操作。不过很快,身边的同事就拿到了ntldr进行逆向分析,发现了360的原理。我们也照猫画虎,把这个LOGO换成了我们的百度,但是没有推送到产品上。喷的只是技术研究。团队很多成员都是从360招来的高手。那段时间,我从这些大师那里学到了很多东西。大约是那个时候,我开始了解二进制漏洞。02与竞品的攻防对抗我主要关注这块。如果说第一个方向是对抗漏洞攻击,那么这个方向就是对付竞争对手,比较有意思。竞品对决分为三部分:安装优化反卸载安装:竞品将使用一切技术手段对我方产品进行追杀拦截。如果你的电脑安装了竞品,可能下载了百度杀毒的安装包,安装的时候莫名其妙的报错,缺少各种依赖,甚至连安装包都下载不成功。有各种各样的情况。其实背后是竞争对手的产品。当它识别出正在安装百度的产品时,就会造成各种绊脚石。一开始会通过文件MD5来识别。我们正式发布的每一个安装包的MD5都会是第一个他被竞争对手拉黑了一段时间,一遇到他就被他妈的。后来我们换了策略,安装包下载是自动随机生成的,而且每次下载的MD5都不一样,才勉强逃过绞杀。不过对手也不是吃素的,后来改成了文件特征识别。比如文件中包含“baidu”等字符串,就会被列入黑名单。受到影响。没办法,我们又得把这些特征抹掉,或者加密,不让它们以明文形式出现。后来对方改成通过文件图标来识别对方,提取PE文件的图标来识别是不是我们。启动和优化,这是比较有意思的部分。只有避免安装,才能通过第一道关卡。接下来的日子,每一天都充满了危机。也许有一天,用户什么都不做,我们的产品就不会启动。也有可能竞品会弹窗告诉你:内存紧张,赶紧优化吧。那么如果你球加速,对方就会杀掉我们的进程,甚至直接卸载我们。文件、进程、注册表都不见了,无声无息地消失了。那么我要做的当然是打击这些竞品的风骚操作。卸载必须由用户通过控制面板或我们自己的卸载软件手动启动。需要识别竞品卸载行为,拦截删除文件,kill进程,删除注册表等一系列操作。任何安全产品都有主动防御的功能,直接调用系统API进行上述操作肯定会被我们的主动防御拦截,而对手对此心知肚明。因此,如果我们想要干掉我们,对手就必须通过驱动调用一些更底层的函数来绕过我们在内核态的安全防御。那么我们要做的就是与之抗争。与内核直接硬碰硬不是好办法。一不小心,很容易造成电脑蓝屏。我们选择了一个更巧妙的技巧:拦截通信。如果对方想惹我们,他们在Ring3模式下的应用程序必须和他们在Ring0模式下的内核驱动通信,也就是DeviceIOControl。于是我们逆向了他们的通信协议,一旦发现目标是我们,我们就拦截消息,让他们的司机收不到消息,就不知道他们要来惹我们了。在这一部分,我们已经战斗了几个月。对手不断更改通信协议、通信设备名称,甚至加密传输。后来发现我们总是截断他们的通讯,他们就决定不再通讯了。他们先把这件事记录下来,记录在档案、登记表等各个地方。当我们关机的时候,我们的driver已经停止了,他们又会这样,或者开机的时候,他们的driver会比我们先加载,我们还没起床就被kill了。于是战场转移到了关机再开机的时刻。在驱动程序停止的顺序上,将在比赛结束后卸载。最后留下来的会有后发优势,可以进行复活操作。双方相互较量。不。除了关机顺序,它还会逆向分析它记录信息的位置,删除这些信息以保护自己。在这个过程中,我们来来回回打了几个月。更有意思的是,对方似乎和我们达成了某种“默契”。他们只有在每周五下班的时候才选择更新新策略,让我们加班。真的。不多谈武功。随着我们DAU的不断增长,除了一味的防守,我们也开始尝试去绊倒竞品,让他们尝尝这种滋味,很好玩,让我们卸载它们,删除它们的文件,杀掉它们的进程,删除它们的注册表。刚进公司就参与这种项目,对技术确实是一个非常大的挑战。无论是逆向分析、加解密技术,还是内核攻防技术、调试分析技术、编程能力都是非常大的考验。那段时间,我写代码非常谨慎,因为一不小心,可能会导致成千上万的用户蓝屏。没错,因为我写了一个bug,好像一个指针发布后没有及时清除,导致上万用户电脑蓝屏,把我刚入职的我吓个半死。故事的最后,大家可能想不到,我们一直在和竞品A斗,又和另一个竞品B斗A,挺像三国时代联吴抗曹的。但是临近年关,竞品B突然在背后捅了我们一刀,把我们卸载的一干二净。一个周末,DAU下降近千万,年终目标瞬间化为泡影。当年,为了宣传自己的安全产品,百度做了很多过分的事情,各种捆绑,全家桶,很多中高层为了KPI宁愿牺牲口碑。因为和竞品对抗,产品无论如何也卸载不了,被用户骂得很惨。据说竞品B之所以要搞我们,是因为不小心升级到他们公司某高管的电脑上,他们无法卸载,所以就发生了下面的事情。当然,这只是传闻,不知道真假。后来,我也厌倦了这样的产品和工作。要是和病毒、木马作斗争就好了。把用户的电脑当成战场,互相厮杀,实在不是什么光荣的事情。正好我也想寻求技术改造,于是开始转向新的方向,下次再说吧。作者:轩辕志峰编辑:陶佳龙来源:转载自公众号编程科技宇宙(ID:xuanyuancoding)
