这几天看到公司有校招的同窗不断入职,抬头一看又是7月9号了呀。面试
昨天7月9号,不算实习,正式工做满7年了,7年光阴,弹指一挥间。编程
七年前的昨天,签定劳动合同加入个人第一家公司:百度。安全
说来也挺奇怪,我原本校招投递的岗位是C/C++开发岗,结果因为面试过程当中,面试官看我在内核技术、逆向分析技术和底层系统编程上上有一些经验,因而把我分到了内核攻防组,作驱动开发。markdown
那时候咱们团队分了两个方向:函数
一、漏洞安全攻防优化
2014年,正是微软宣布中止对Windows XP技术支持的时候,为了守护国内数量众多的XP用户(说是守护,其实就是抢占市场),各个安全厂商都开始推出XP安全防护产品,其中比较出名的就是360的XP盾甲。加密
国内的信安评测机构CNCERT搞了一个XP安全挑战赛,隔几个月就来一次PK,在不一样的XP电脑上分别装上各家的安全产品,而后使用一些漏洞EXP进行攻击,看看谁守得住。主要的几个玩家就是360、腾讯电脑管家、金山毒霸、北信源,还有就是百度。spa
我们团队中的漏洞安全攻防组就是负责这个方向,把XP上能使用的漏洞基本上全都撸了一遍,而后把更高系统Win七、Win8上的一些安全机制(好比DEP、ASLR等等)经过内核驱动的方式移植到XP上去,以加强XP的安全能力,抵御安全攻击,赢得比赛。指针
我记得360的XP盾甲作了一个功能,Windows XP启动时,伴随启动进度条的出现,会出现经典的LOGO,360把这个logo改了,竟然改为了360的logo,当时年轻的我被震的一愣一愣的,竟然还有这种骚操做。调试
不过很快,身边的同事就拿到ntldr进行了逆向分析,找到了360这一招的原理,咱们也照猫画虎,把这个LOGO换成了我们百度的,不过没有推到产品上,估计会被喷的,只当是技术研究罢了。
团队中的成员好多都是从360挖过来的大牛,那段时间,跟着这些大佬们学到了许多东西,我在二进制漏洞方面入门差很少就是那个时候。
二、竞品攻防对抗
我主要的精力是放在这一块的。若是说前面第一个方向是和漏洞攻击作对抗,那这个方向就是和竞争对手打交道,这一部分更加有意思。
竞品对抗分为三块,安装、启动与优化、反卸载。
安装,就是竞争对手会想进一切技术手段对咱们的产品进行围追堵截,若是你的电脑上安装了竞品,可能你下载了一个百度杀毒的安装包,安装莫名报错,各类依赖缺失,甚至连安装包都下载不成功,各类状况都有。
实际上,是竞争对手的产品在背后做祟,当它识别到百度的产品在安装时,会各类使绊子,一开始经过文件MD5来识别,咱们官方发布的每个安装包的MD5都会第一时间被竞争对手拉入黑名单,一遇到直接就被干。
后来咱们改了策略,安装包下载自动随机生成,每一次下载的MD5都不同,这样才勉强逃过绞杀,不过对手也不是吃素的,后面又改为文件特征识别,好比文件内部含有“baidu”等字符串,就列入黑名单,那段时间,百度网盘和百度音乐等几款客户端软件还所以被殃及过。没办法,咱们只好再次抹掉这些特征,或者进行加密,不让它们明文出现。
再后来,对手改为了经过文件图标来识别对手,提取PE文件的图标识别是否是咱们,总之,在这个过程拉锯了不少回,很是有意思,各类损招都有。
启动与优化,这是更有意思的部分。躲过了安装这才是闯过了第一关,接下来的日子,每一天都充满了危机。
可能某一天,用户什么也没作,咱们的产品就起不来了,这叫开机启动使绊子,让咱们起不来。
还可能竞品可能弹个窗告诉你:内存吃紧,赶忙优化。而后你一点加速球,对手就把咱们的进程干掉了,甚至把咱们直接都卸载了,文件、进程、注册表啥也没了,消失的悄无声息。
那我须要作的固然就是对抗竞品的这些骚操做,卸载必须由用户手动经过控制面板或者咱们本身的卸载软件发起,须要识别竞品的卸载行为,拦截删文件、杀进程、删注册表等一系列操做。
任何一个安全产品都有主动防护的功能,直接调用系统API进行上面的操做确定会被咱们的主动防护拦截掉,对手也深知这一点。因此,想要干掉咱们,对手得在内核模式下,用驱动调一些比较底层的函数绕过咱们的安全防护。
那咱们要作的就是和它进行对抗,直接的内核硬碰硬不是好办法,一不当心容易把电脑干蓝屏,咱们选择了比较巧妙的一招:拦截通讯。
对手要搞咱们,他们处于Ring3模式下的应用程序总得和他们的Ring0模式下的内核驱动程序通讯吧,就是DeviceIOControl,因此咱们逆向了他们的通讯协议,一旦发现要搞的目标是咱们,就把这条消息拦截掉,这样他们的驱动收不到消息,也就不知道要搞咱们了。
在这一部分,咱们进行了好几个月的对抗,对手不断变化通讯协议,不断变化通讯的设备名称,甚至加密传输,咱们也就见招拆招,兵来将挡,水来土掩。
后来发现咱们老是拦截他们的通讯,他们决定再也不通讯了,先把这事情记录起来,记录到文件、注册表等各类地方,等到关机的时候,咱们的驱动程序已经停掉了,他们再来干这事,或者放到开机的时候,他们的驱动比咱们先加载,咱们还没起来就被干掉。
因而战场又转移到了关机和开机时刻,驱动中止顺序上,比谁后卸载,最后留下来的就有后发优点,能够进行复活操做,两边互相抢,结果就是用户的电脑可能关机关半天都关不了。除了关机顺序,还会逆向分析它到底把信息记录到了哪里,把这个信息删掉,也能自保。
在这过程当中,又对抗拉锯了好几个月,比较有意思的是,对手彷佛和咱们达成了某种"默契",专挑每周五下班的时候,更新他们新的策略,让咱们加班,真是太不讲武德了。
随着咱们DAU的不断增加,除了一味的防守,咱们也开始尝试给竞品使使绊子,也让他们尝尝这种滋味儿,正所谓以彼之道,稍加修改,还施彼身,其乐无穷,咱们也来卸载他们,删他们文件,杀他们进程,删他们注册表。
刚刚入职就参与这种项目,着实对技术是有很是大的挑战,不论是逆向分析,加解密技术,仍是内核攻防技术,调试分析技术,编程功底都是很是大的考验,那段时间写代码很是谨慎,由于一个不当心,可能就会致使成千上万的用户电脑蓝屏。没错,我就由于写了一个bug,好像是一个指针释放后未及时置空,致使上万的用户电脑蓝屏了,把刚刚入职不久的我吓得半死。
故事的结尾,可能你们想不到,咱们一直和竞品A作对抗,和另外一个竞品B联合对抗A,很有种三国时代,联吴抗曹的味道。但在临近年关的时候,竞品B忽然在背后狠狠捅了咱们一刀,全面卸载咱们,一个周末,DAU掉了近千万,年终目标顷刻化为乌有。
那段日子,百度为了推广他的安全产品,作了很多过度的事情,各类捆绑,全家桶,不少中高层领导为了KPI,宁愿牺牲口碑。由于和竞品作对抗,致使产品怎么也卸载不掉,被用户骂的很惨。听说竞品B要搞咱们的缘由就是不当心推广到了他们公司一个高管的电脑上,还死活卸载不掉,因而才有了后面的事情,固然这只是道听途说,不知真假。
后来,我也厌倦了这样的产品和工做,若是是和病毒木马作斗争倒也罢了,拿用户的电脑当战场互相拼杀,实在不是什么光彩的事情。
恰逢我也想谋求技术转型,因而开始转向新的方向,我们下次再聊。