一个土鳖安全工程师如何用十年时间打造自己的安全帝国?

2026-04-02 00:421阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计6534个文字,预计阅读时间需要27分钟。

一个土鳖安全工程师如何用十年时间打造自己的安全帝国?

2008年,我阅读《我的华为十年》一文,进入这家公司。当时我的总监就是这篇文章的作者。转眼云烟,第一份工作做到现在。菜鸟入职我入职的时候,公司规模远没现在大。

2008 年,我是看着《我的华为十年》这篇文章进入这家公司的,当时我的总监就是这篇文章的作者家骏。转眼云烟,第一份工作做到了现在。菜鸟入职我入职的时候,公司规模远没有现在这么大,北京地区的研发零星分散

2008 年,我是看着《我的华为十年》这篇文章进入这家公司的,当时我的总监就是这篇文章的作者家骏。转眼云烟,第一份工作做到了现在。

菜鸟入职

我入职的时候,公司规模远没有现在这么大,北京地区的研发零星分散在中关村的几个写字楼,包括理想国际、普天大厦和银科大厦。

我是在普天大厦入职的,记得当时是 12 月份,第一次冬天来北京的我,领会到了啥叫冰火两重天。

在武汉是没有暖气的,屋外四度,屋里也是四度。北京是有暖气的,屋外零下十度,屋里起步价二十度。

公司里不少大姐大哥在公司里面穿的和夏天一样,出门套个大棉袄正合适。

我没经验,带着一身毛衣毛裤来的,结果在外面还是冻死,在公司里热死。

我大二的时候开始给华为三康做一些项目,在公司里面是不能上外网,而且都是又重又大的台式机。

一个土鳖安全工程师如何用十年时间打造自己的安全帝国?

入职的时候,行政小哥发给我个笔记本,我当时一激动就问了一句,这个回家加班可以用不?

行政小哥一脸懵逼,为啥不可以呀。

刚到北京的第一个月我是住在南二环的亲戚家,公司在拥挤的宇宙中心中关村,每天基本我就跟取经一样,天蒙蒙灰就出门,天漆漆黑回家。

 

第一个任务:防火墙双机上线

每一个自己觉得自己很牛逼的公司,都会有一个精心设计的新员工培训,有的像传销,有的像传教,有的讲情怀,有的忆苦思甜。我对新员工培训唯一的印象就是别在公司抽烟和养宠物,其他随便。可见当初一定有个在公司抽烟又养宠物的人把大佬惹毛了。虽然我不抽烟,但是我想养个小乌龟小金鱼,也只能放弃。

我的第一个任务是做防火墙双机上线,首先感谢组织信任,其次觉得专业好像有点不对口,我是个 rd 呀,虽然我懂点网络,不过也是写过交换机的软件而已。于是我硬着头皮看白皮书,看配置命令,幸好一起升级的还有经理黄姐和一个老员工永校,感觉自己打下手应该问题也不大。第一个任务总不能搞砸嘛,我还蛮认真的画了网络拓扑和配置回滚方案。其实仔细想想,双机以前不就是一个防火墙吗,现在就是再放一台上去呗。

为了不影响业务,我们选择在元旦凌晨上线。上线的过程确实非常顺利,简单描述,就是把新防火墙放上机架,插上电,配置灌进去,接线,搭完收工。十分钟不到搞定了,我都准备撤了。

老员工说,这才哪到哪呀,我们要验证可以自动切换。新防火墙和老防火墙之间有两根心跳线,汇聚层有大概 6 台汇聚层交换机,分别会连到两台防火墙上,要验证诸如心跳线段,上联线段的情况。另外国内众所周知的原因,分为南北网,联通电信互通很差劲,防火墙上联四根运营商的链路,还要测试这几根线路断的情况下的自动切换。于是乎,不停插拔网线,ping 新浪 ping 搜狐。测试完凌晨 4 点了,总算搞得差不多了。我记得我走出普天大厦的时候,居然看到了 2009 年的第一个日出了。

 

第一个项目:准入系统 BNAC

我的第一个项目是开发准入系统。所谓的准入系统,简单讲,就是上网认证,主机安全检查加上网络权限控制。满足一定安全基线要求的终端才允许接入公司办公网,并且根据不同的部门和职位,赋予不同的网络访问权限。

公司当时已经买了号称全球顶尖的准入系统,不过在易用性和可定制性上差强人意。另外一个原因,我们总监最初在华为就做了第一套准入系统,他对准入的理解非常深刻,从他的角度来看,目前这个国外的准入系统,有线无线不能自动切换,不能和微软的域管理集成,权限管理过于死板,最坑爹是对网络设备有要求,捆绑销售他们的防火墙。

这些在传统企业不是太大问题,但是在互联网公司就是硬伤了。于是我入职前基本就拍下来要自己研发准入系统。他老人家是理解深刻,我理解不深刻呀,从网上搜了个遍,还是一知半解。还好有个老安全工程师志刚领路,介绍了一些厂商进行交流,总算整明白咋回事了。于是开工干活,整个系统分为客户端,策略管理平台,测试管理服务器和防火墙。防火墙由系统部的一个大拿负责写网络控制模块,现在这哥们是我们公司 CDN、流量清洗这些基础设施的负责人。

客户端的主机检查模块由我们另外一个安全工程师负责,他现在也是 BAT 某公司的高 P 了。其他都是我弄的,第一次写网页还有点小兴奋,尤其是自己画 logo,尽显人文修养。我在学校用 delphi 写了系的教师考评系统,在那个年代 dephi + sqlserver 是绝配,access 也面对小 case 也是 ok 的,因此我们考核系统也是 cs 架构的。惯性思维,我的客户端也是用 delphi 写的。为了支持使用 linux 办公的同学,还开发了 linux 客户端。

网页完全是新接触,用了当时比较新的 groovy。这个时期我接触了大量新知识,这些开发语言还是其次,主要是认识了不少网络设备,接入层的从啥 hub 到二层交换机,三层交换机,还有啥无线 AP 和 AC。和部署实施比起来,开发这个阶段是多么美好的回忆,事实上我差不多 3 个月开发完了第一版,为了验证有效性,我们打算在部分办公区部署。于是我们开始杀熟,先在我们部门使用,我待人和气的好脾气也是这个阶段养成的。

我们把我们部门的办公区的接入交换机和汇聚层交换机之间传入了防火墙。所谓的防火墙其实就是台服务器,最早用的是 dell 的 2850。现在看起来 2850 的配置确实差的可怜,四核八G内存,六块七十三 G 的大硬盘,还齁沉齁沉的。我一个人搬它还很费劲,经常要和一个叫大肉的老员工一起搬。

由于当时交换机的机柜就在办公区,我们的防火墙也只能放办公区。别看 2850 配置不行,风扇确极其彪悍,一开机地动山摇,半层楼能听见。经常可以听到旁边部门骂,谁这么缺德把服务器放办公区,还让不让人上班生孩子啥的。

我们公司没有花名这一说,但是我处于怕人知道我真名骂我,我很早就用花名了。差不多那个时候开始叫麦兜了,至少名字这么可爱,大家骂的时候也有所估计,后来岁数大了开始叫兜哥了,这也是我网名的由来。

总被骂,确实也觉得对不起大家,所以一直到现在也待人客气。还好除了吵,基本没出现过断网的问题,偶尔出现过奇葩软件和客户端不兼容的情况,也很快解决了。在那个蠕虫病毒泛滥的年代,我们通过准入系统强制电脑安装杀毒、安装补丁、开启防火墙等等,简直就是功德无量,很多年都没有发生过大面积的病毒感染,一直服役到现在,差不多有 9 年了。我到现在还记得家俊在部门会上说某某厂做准入几百人,我们就搭进去个麦兜。

 

枪版网工生活

2009 年,全部门的重点就是建设新大厦,所谓的新大厦,就是现在我们叫的老大厦,就是西二旗旁边那个某大厦。当时网络工程师就三个人,大肉,秀英和永校,人手不够就把我也搭上了。我是革命一块砖,哪里需要新员工哪里搬。

这次真成网络工程师了。小时候觉得工程师很牛逼,工作后发现其实叫网工更合适,就和电工一样。好在安全工程师说起来还有点黑客帝国的感觉,即使简称安工,也感觉和同仁堂的救命神药安宫硫磺一样牛逼哄哄的。不过我们这几位网工可牛逼了,一个是 3com 和华为研发出身的,另外一个是 2008 奥运会的网络建设负责人之一,相比我就是渣渣了,而且还是业余渣渣。

给我的第一个任务是生成全部网络设备的配置,大概是 500 多台有线交换机,200 多台无线 ap 和交换机的配置。当时在奥运会的时候,他们是规划好 IP 地址后,通过一个 java 的程序手工配置参数后生成一个设备的配置,然后通过 securecrt + js 脚本 + 串口把配置文件灌入设备。有多少台设备就要手工配置多少次,不过这个已经比手工写配置文件牛逼很多了。

当时对我的预期是把思科设备的文件改成华为设备的。我对网络设备的配置完全是工作后学的,半桶水都不到,也是这个时期我学会了思科和华为设备的使用和配置方法。我看懂了原来的程序后,发现其实把网络规划体现到电子表格后,通过程序读取数据,可以一次性生成全部配置。而且这都是纯文本的活,用 perl 更合适。于是我重头开始写,差不多一周多业余时间完成了 demo,当时我还写准入在。

中间也出过不少问题,比如关键字写错了,思科的一些命令没改,有些参数写死了,最后又改了几次才能用,虽然被骂的也挺惨,不过最后对我评价是超出预期,大大节省了网工的工作量,唰唰唰 10 分钟可以生成全部配置。尤其是有次网工发现自己电子表格写错了,要是以前他需要一台一台配置去生成,但是我这边重新 run 一下就好了。

那段时间我还在陪大肉升级交换机 OS 和灌配置的过程中自学了 CCNA 和 CCNP,现在也很怀念和大肉在信威大厦里面灌配置的日子。那段时间玩命加班,几乎 3 个月没有咋过双休,最后竣工的时候居然有了 19 天调休。一直到现在,如果面有网路经验的安全工程师时,我总能扯好久,一直可以问傻别人,也是这段时间积累的。

 

内部安全建设黄金时代

这个时期是我们公司内部安全建设的黄金时代,很大一个原因是我们有了级别非常高的 CIO John Gu。John 长期在国外工作,一直做到几个巨型企业的 CIO。相对国内私企,国外企业对安全重视很多。和 John 不用太多介绍安全的重要性,而是想好怎样做好安全就可以了。为了有更好的视野,我们还挖来了埃森哲的架构师欧阳。大概有 2-3 年的时间,我们都有非常充足的预算的进行安全建设,我也开始带 team。这段时间我的工作才开始接近我理解的安全工程师和甲方安全。

这段时间我比较系统的建设了内部安全体系,从企业杀毒、终端补丁管理、DLP、邮件安全网关、IPS、漏洞扫描器、上网行为审计、APT 检测到终端安全加固、软 token、堡垒机、应用虚拟化、硬盘加密、文件加密等。那个时期,负责互联网公司的国外安全厂商的销售,应该大部分认识我。这段时间,是我安全知识面扩展非常快的一个时期。一直到现在,我跟许多解决方案架构师沟通很顺畅,也是得益于这个时期积累的知识。我后面可以承担 PGM 的工作,有相当一部分原因是我对安全产品需求的感觉,这种感觉的培养其实也来自于我这段经历。

 

云安全部成立

在很长一段时间,我们没有安全部,安全的职责分散在技术体系下不同部门的几个组里面。早期问题并不大,大家各司其职,但是当公司发展到一定程度后,对外的产品线日趋繁杂,内部的协同配合压力日趋变大。于是在某年某月的某一天,我们几个分散的小组合并成立一个新部门,曰云安全部。人员合并后按照每个人的技能重组团队,我负责基础架构安全的 team,曰 isec,职责范围包括内部网和生产网。我的核心 team 成员也是从那个时候一直和我到现在,现在想想也真不容易。

与内网相比,生产网有趣很多,安全工程师的压力也大很多。物理服务器的数量达到数万甚至数十万,虚拟机以及容器数量起步价也是百万级了,出口带宽几百 G 的机房遍布全球,涉及的产品线更是复杂到令人发指,只要想的到的业务几乎都有,想不到的没准也有。相对内部网,生产网攻击面大很多,毕竟这些业务是 7 乘 24 对数亿网名提供服务的。我们面对的最大挑战就是如何在业务不中断,不损失访问流量的情况下保障业务的安全。因此我们的重点一个是安全加固,一个是入侵检测,其中入侵检测是我很喜欢的一个领域。在国内,入侵检测经常被理解为 IDS/IPS 这样的安全设备。在以 web 浏览访问以及手机 app 访问为主要业务形式的互联网公司,入侵检测覆盖分范围非常广泛。

我首先遇到的一个问题其实不是技术上的,如何衡量我们所做的努力对公司安全状况的贡献。换句话来说,就是如何描述我们做的事的产出。在大多数公司,甲方安全都是地道的成本中心,纯成本消耗。如何证明安全团队的价值是非常重要的,即使是在一个超大型互联网公司。我观察到有些同学其实干的也很苦逼,情绪低落,总是抱怨。确实他负责很多小项目,每个事情看似很重要,但是确实也看不到啥产出,感觉做不做其实也一样。于是明显的恶性循环也产生了,一个事情没做成业绩,就继续做另外一个,结果下一个也没做出成绩,继续做下一个,手上一堆烂尾楼,还要抱怨辛苦没人看到。

在那个时候,某知名漏洞平台还在,上面报的漏洞公司层面还是非常重视的。于是我想到一个重要的衡量指标,就是安全事故的主动发现比例。比如拿到服务器的 webshell,SQL 注入点和敏感文件下载,这些都是影响大且容易量化的。如果能够通过我们开发的入侵检测系统,提高我们主动发现入侵事件的比例,这个贡献是非常容易体现的。我们在相当长的一段时间就是从各个维度想办法提高这些指标,其中印象深刻的就是 webdir 和 dbmon。

 

webdir&dbmon

webdir 和 dbmon 是我们内部取的名字,简单讲 webdir 分析 web 服务器上的文件,及时发现后门文件,dbmon 分析数据库日志,及时发现 SQL 注入点以及拖库行为。通过这两个项目,我的 team 从一个安全技术团队开始向一个安全产品团队衍变,除了负责应急响应和渗透测试的的安全工程师,开始出现有安全背景的研发工程师以及负责 storm 和 hive 的大数据工程师,人数也开始两位数了。

webdir 在一期的时候,主要是依赖收集的样本提炼的文本规则,简单有效,在部署的初期发现了不少 case,部署的范围主要集中在重点产品线,量级在一万台左右。我们在二期的时候,重点工作是一方面提高检测能力,一方面是减少发现的延时,另外一个方面是全公司部署,这三方面都是为了提高 webshell 的主动发现比例。

在检测能力方面,主要是提高准确率和召回率,关于这两个指标的含义,有兴趣的同学可以看下我机器学习的书,里面用小龙虾和鱼来做了形象的比喻。基于文本特征的 webshell 检测,很难在这两个指标之间做平衡,尤其是我们这种超大规模的公司,即使是每天新增的文件也可能上亿,实验室环境看着还蛮不错的检测效果,误报也会被放大。因此大多数安全工程师的选择就是写极其精准的规则,所谓精准,就是根据搜集的样本写的过于严格苛刻的规则,用于大大降低误报。这导致的结果是,误报确实少了,但是漏报也非常严重。

我们仔细研究了下问题所在,主要是由于 php 语言的高度灵活性,一个很简单的功能可以用多种方式实现,还有不少装逼的语法。单纯在语言文本特征层面做非常吃力。通过调研,我们发现不管文本特征层面如何做绕过我们的检测,最后 webshell 还是要以 php 和 java 的语法来实现,如果我们可以实现 php 和 java 的语法,就可以在更底层提取特征,与黑产进行对抗。

这个思路也一直影响了我们后面的流量分析产品以及基于机器学习的 webshell 识别,不过这个是后话了。这个思路也成为我们二期的主要提升点,当时根据我们搜集的数千样本,挑选了专业的安全产品进行测试对比,我们的两个指标综合领先。我们另外的一个挑战是工程上的,我们仅在国内就有大量的机房,每个机房之间的带宽不尽相同,而且使用率也大不相同,即使是固定的两个机房,带宽使用也有明显的时间特征。

另外互联网公司大多把服务器的性能压榨的非常腻害,运维部门对我们的性能指标限制的非常死,甚至超过一定的 CPU 或者内存就会自动把我们进程挂起甚至 kill。为了尽可能降低服务器的性能消耗,我们使用云模式,负责的语法解析与规则匹配放到云端,服务器上仅需要完成非常简单的处理和上传逻辑。但是几十万个服务器如果因为上线新版本同时出现新文件需要检测,也可能会出现带宽的异常消耗,于是我们也使用了去中心化的部署方式。

一群只玩过单机版 syslog-ng 分析日志的土鳖,一下子可以有上百台服务器,还用上了大型消息队列和自研的沙箱集群,想想确实很有成就感。二期上线后,无论从部署范围还是检测能力上,都上了一个新台阶,并且由于检测技术上的创新以及客观的评测结果,这个项目获得了公司层面的创新奖。在这个项目上另外一个收获是开发服务器端的程序的经验,在一个如此大规模的集群上部署客户端,还要做到性能消耗小,考虑各种异常情况的处理,考虑各种兼容性问题,这些都是干过才能积累的。

dbmon 在一期的时候,依托于公司运维部的 DBA 团队的现有系统,离线分析公司部门产品线托管的 mysql 查询日志。检测的效果确实不理想,一堆暴力破解的报警,仔细一查都是密码过期了。检测的重点没有放到 SQL 这些上,而是更像针对数据库的异常访问检测了,这个其实从实践角度,安全人员很难去定位问题,小同学弄两次就烦了,所以效果一直很差,最后运维系统的同学根本不想看报警了。

二期的时候我们聚焦到 SQL 检测上,相对于 waf 和流量层面,SQL 日志层面做 SQL 注入点检测非常合适,因为在 www.558idc.com/yz.html提供,感恩】

本文共计6534个文字,预计阅读时间需要27分钟。

一个土鳖安全工程师如何用十年时间打造自己的安全帝国?

2008年,我阅读《我的华为十年》一文,进入这家公司。当时我的总监就是这篇文章的作者。转眼云烟,第一份工作做到现在。菜鸟入职我入职的时候,公司规模远没现在大。

2008 年,我是看着《我的华为十年》这篇文章进入这家公司的,当时我的总监就是这篇文章的作者家骏。转眼云烟,第一份工作做到了现在。菜鸟入职我入职的时候,公司规模远没有现在这么大,北京地区的研发零星分散

2008 年,我是看着《我的华为十年》这篇文章进入这家公司的,当时我的总监就是这篇文章的作者家骏。转眼云烟,第一份工作做到了现在。

菜鸟入职

我入职的时候,公司规模远没有现在这么大,北京地区的研发零星分散在中关村的几个写字楼,包括理想国际、普天大厦和银科大厦。

我是在普天大厦入职的,记得当时是 12 月份,第一次冬天来北京的我,领会到了啥叫冰火两重天。

在武汉是没有暖气的,屋外四度,屋里也是四度。北京是有暖气的,屋外零下十度,屋里起步价二十度。

公司里不少大姐大哥在公司里面穿的和夏天一样,出门套个大棉袄正合适。

我没经验,带着一身毛衣毛裤来的,结果在外面还是冻死,在公司里热死。

我大二的时候开始给华为三康做一些项目,在公司里面是不能上外网,而且都是又重又大的台式机。

一个土鳖安全工程师如何用十年时间打造自己的安全帝国?

入职的时候,行政小哥发给我个笔记本,我当时一激动就问了一句,这个回家加班可以用不?

行政小哥一脸懵逼,为啥不可以呀。

刚到北京的第一个月我是住在南二环的亲戚家,公司在拥挤的宇宙中心中关村,每天基本我就跟取经一样,天蒙蒙灰就出门,天漆漆黑回家。

 

第一个任务:防火墙双机上线

每一个自己觉得自己很牛逼的公司,都会有一个精心设计的新员工培训,有的像传销,有的像传教,有的讲情怀,有的忆苦思甜。我对新员工培训唯一的印象就是别在公司抽烟和养宠物,其他随便。可见当初一定有个在公司抽烟又养宠物的人把大佬惹毛了。虽然我不抽烟,但是我想养个小乌龟小金鱼,也只能放弃。

我的第一个任务是做防火墙双机上线,首先感谢组织信任,其次觉得专业好像有点不对口,我是个 rd 呀,虽然我懂点网络,不过也是写过交换机的软件而已。于是我硬着头皮看白皮书,看配置命令,幸好一起升级的还有经理黄姐和一个老员工永校,感觉自己打下手应该问题也不大。第一个任务总不能搞砸嘛,我还蛮认真的画了网络拓扑和配置回滚方案。其实仔细想想,双机以前不就是一个防火墙吗,现在就是再放一台上去呗。

为了不影响业务,我们选择在元旦凌晨上线。上线的过程确实非常顺利,简单描述,就是把新防火墙放上机架,插上电,配置灌进去,接线,搭完收工。十分钟不到搞定了,我都准备撤了。

老员工说,这才哪到哪呀,我们要验证可以自动切换。新防火墙和老防火墙之间有两根心跳线,汇聚层有大概 6 台汇聚层交换机,分别会连到两台防火墙上,要验证诸如心跳线段,上联线段的情况。另外国内众所周知的原因,分为南北网,联通电信互通很差劲,防火墙上联四根运营商的链路,还要测试这几根线路断的情况下的自动切换。于是乎,不停插拔网线,ping 新浪 ping 搜狐。测试完凌晨 4 点了,总算搞得差不多了。我记得我走出普天大厦的时候,居然看到了 2009 年的第一个日出了。

 

第一个项目:准入系统 BNAC

我的第一个项目是开发准入系统。所谓的准入系统,简单讲,就是上网认证,主机安全检查加上网络权限控制。满足一定安全基线要求的终端才允许接入公司办公网,并且根据不同的部门和职位,赋予不同的网络访问权限。

公司当时已经买了号称全球顶尖的准入系统,不过在易用性和可定制性上差强人意。另外一个原因,我们总监最初在华为就做了第一套准入系统,他对准入的理解非常深刻,从他的角度来看,目前这个国外的准入系统,有线无线不能自动切换,不能和微软的域管理集成,权限管理过于死板,最坑爹是对网络设备有要求,捆绑销售他们的防火墙。

这些在传统企业不是太大问题,但是在互联网公司就是硬伤了。于是我入职前基本就拍下来要自己研发准入系统。他老人家是理解深刻,我理解不深刻呀,从网上搜了个遍,还是一知半解。还好有个老安全工程师志刚领路,介绍了一些厂商进行交流,总算整明白咋回事了。于是开工干活,整个系统分为客户端,策略管理平台,测试管理服务器和防火墙。防火墙由系统部的一个大拿负责写网络控制模块,现在这哥们是我们公司 CDN、流量清洗这些基础设施的负责人。

客户端的主机检查模块由我们另外一个安全工程师负责,他现在也是 BAT 某公司的高 P 了。其他都是我弄的,第一次写网页还有点小兴奋,尤其是自己画 logo,尽显人文修养。我在学校用 delphi 写了系的教师考评系统,在那个年代 dephi + sqlserver 是绝配,access 也面对小 case 也是 ok 的,因此我们考核系统也是 cs 架构的。惯性思维,我的客户端也是用 delphi 写的。为了支持使用 linux 办公的同学,还开发了 linux 客户端。

网页完全是新接触,用了当时比较新的 groovy。这个时期我接触了大量新知识,这些开发语言还是其次,主要是认识了不少网络设备,接入层的从啥 hub 到二层交换机,三层交换机,还有啥无线 AP 和 AC。和部署实施比起来,开发这个阶段是多么美好的回忆,事实上我差不多 3 个月开发完了第一版,为了验证有效性,我们打算在部分办公区部署。于是我们开始杀熟,先在我们部门使用,我待人和气的好脾气也是这个阶段养成的。

我们把我们部门的办公区的接入交换机和汇聚层交换机之间传入了防火墙。所谓的防火墙其实就是台服务器,最早用的是 dell 的 2850。现在看起来 2850 的配置确实差的可怜,四核八G内存,六块七十三 G 的大硬盘,还齁沉齁沉的。我一个人搬它还很费劲,经常要和一个叫大肉的老员工一起搬。

由于当时交换机的机柜就在办公区,我们的防火墙也只能放办公区。别看 2850 配置不行,风扇确极其彪悍,一开机地动山摇,半层楼能听见。经常可以听到旁边部门骂,谁这么缺德把服务器放办公区,还让不让人上班生孩子啥的。

我们公司没有花名这一说,但是我处于怕人知道我真名骂我,我很早就用花名了。差不多那个时候开始叫麦兜了,至少名字这么可爱,大家骂的时候也有所估计,后来岁数大了开始叫兜哥了,这也是我网名的由来。

总被骂,确实也觉得对不起大家,所以一直到现在也待人客气。还好除了吵,基本没出现过断网的问题,偶尔出现过奇葩软件和客户端不兼容的情况,也很快解决了。在那个蠕虫病毒泛滥的年代,我们通过准入系统强制电脑安装杀毒、安装补丁、开启防火墙等等,简直就是功德无量,很多年都没有发生过大面积的病毒感染,一直服役到现在,差不多有 9 年了。我到现在还记得家俊在部门会上说某某厂做准入几百人,我们就搭进去个麦兜。

 

枪版网工生活

2009 年,全部门的重点就是建设新大厦,所谓的新大厦,就是现在我们叫的老大厦,就是西二旗旁边那个某大厦。当时网络工程师就三个人,大肉,秀英和永校,人手不够就把我也搭上了。我是革命一块砖,哪里需要新员工哪里搬。

这次真成网络工程师了。小时候觉得工程师很牛逼,工作后发现其实叫网工更合适,就和电工一样。好在安全工程师说起来还有点黑客帝国的感觉,即使简称安工,也感觉和同仁堂的救命神药安宫硫磺一样牛逼哄哄的。不过我们这几位网工可牛逼了,一个是 3com 和华为研发出身的,另外一个是 2008 奥运会的网络建设负责人之一,相比我就是渣渣了,而且还是业余渣渣。

给我的第一个任务是生成全部网络设备的配置,大概是 500 多台有线交换机,200 多台无线 ap 和交换机的配置。当时在奥运会的时候,他们是规划好 IP 地址后,通过一个 java 的程序手工配置参数后生成一个设备的配置,然后通过 securecrt + js 脚本 + 串口把配置文件灌入设备。有多少台设备就要手工配置多少次,不过这个已经比手工写配置文件牛逼很多了。

当时对我的预期是把思科设备的文件改成华为设备的。我对网络设备的配置完全是工作后学的,半桶水都不到,也是这个时期我学会了思科和华为设备的使用和配置方法。我看懂了原来的程序后,发现其实把网络规划体现到电子表格后,通过程序读取数据,可以一次性生成全部配置。而且这都是纯文本的活,用 perl 更合适。于是我重头开始写,差不多一周多业余时间完成了 demo,当时我还写准入在。

中间也出过不少问题,比如关键字写错了,思科的一些命令没改,有些参数写死了,最后又改了几次才能用,虽然被骂的也挺惨,不过最后对我评价是超出预期,大大节省了网工的工作量,唰唰唰 10 分钟可以生成全部配置。尤其是有次网工发现自己电子表格写错了,要是以前他需要一台一台配置去生成,但是我这边重新 run 一下就好了。

那段时间我还在陪大肉升级交换机 OS 和灌配置的过程中自学了 CCNA 和 CCNP,现在也很怀念和大肉在信威大厦里面灌配置的日子。那段时间玩命加班,几乎 3 个月没有咋过双休,最后竣工的时候居然有了 19 天调休。一直到现在,如果面有网路经验的安全工程师时,我总能扯好久,一直可以问傻别人,也是这段时间积累的。

 

内部安全建设黄金时代

这个时期是我们公司内部安全建设的黄金时代,很大一个原因是我们有了级别非常高的 CIO John Gu。John 长期在国外工作,一直做到几个巨型企业的 CIO。相对国内私企,国外企业对安全重视很多。和 John 不用太多介绍安全的重要性,而是想好怎样做好安全就可以了。为了有更好的视野,我们还挖来了埃森哲的架构师欧阳。大概有 2-3 年的时间,我们都有非常充足的预算的进行安全建设,我也开始带 team。这段时间我的工作才开始接近我理解的安全工程师和甲方安全。

这段时间我比较系统的建设了内部安全体系,从企业杀毒、终端补丁管理、DLP、邮件安全网关、IPS、漏洞扫描器、上网行为审计、APT 检测到终端安全加固、软 token、堡垒机、应用虚拟化、硬盘加密、文件加密等。那个时期,负责互联网公司的国外安全厂商的销售,应该大部分认识我。这段时间,是我安全知识面扩展非常快的一个时期。一直到现在,我跟许多解决方案架构师沟通很顺畅,也是得益于这个时期积累的知识。我后面可以承担 PGM 的工作,有相当一部分原因是我对安全产品需求的感觉,这种感觉的培养其实也来自于我这段经历。

 

云安全部成立

在很长一段时间,我们没有安全部,安全的职责分散在技术体系下不同部门的几个组里面。早期问题并不大,大家各司其职,但是当公司发展到一定程度后,对外的产品线日趋繁杂,内部的协同配合压力日趋变大。于是在某年某月的某一天,我们几个分散的小组合并成立一个新部门,曰云安全部。人员合并后按照每个人的技能重组团队,我负责基础架构安全的 team,曰 isec,职责范围包括内部网和生产网。我的核心 team 成员也是从那个时候一直和我到现在,现在想想也真不容易。

与内网相比,生产网有趣很多,安全工程师的压力也大很多。物理服务器的数量达到数万甚至数十万,虚拟机以及容器数量起步价也是百万级了,出口带宽几百 G 的机房遍布全球,涉及的产品线更是复杂到令人发指,只要想的到的业务几乎都有,想不到的没准也有。相对内部网,生产网攻击面大很多,毕竟这些业务是 7 乘 24 对数亿网名提供服务的。我们面对的最大挑战就是如何在业务不中断,不损失访问流量的情况下保障业务的安全。因此我们的重点一个是安全加固,一个是入侵检测,其中入侵检测是我很喜欢的一个领域。在国内,入侵检测经常被理解为 IDS/IPS 这样的安全设备。在以 web 浏览访问以及手机 app 访问为主要业务形式的互联网公司,入侵检测覆盖分范围非常广泛。

我首先遇到的一个问题其实不是技术上的,如何衡量我们所做的努力对公司安全状况的贡献。换句话来说,就是如何描述我们做的事的产出。在大多数公司,甲方安全都是地道的成本中心,纯成本消耗。如何证明安全团队的价值是非常重要的,即使是在一个超大型互联网公司。我观察到有些同学其实干的也很苦逼,情绪低落,总是抱怨。确实他负责很多小项目,每个事情看似很重要,但是确实也看不到啥产出,感觉做不做其实也一样。于是明显的恶性循环也产生了,一个事情没做成业绩,就继续做另外一个,结果下一个也没做出成绩,继续做下一个,手上一堆烂尾楼,还要抱怨辛苦没人看到。

在那个时候,某知名漏洞平台还在,上面报的漏洞公司层面还是非常重视的。于是我想到一个重要的衡量指标,就是安全事故的主动发现比例。比如拿到服务器的 webshell,SQL 注入点和敏感文件下载,这些都是影响大且容易量化的。如果能够通过我们开发的入侵检测系统,提高我们主动发现入侵事件的比例,这个贡献是非常容易体现的。我们在相当长的一段时间就是从各个维度想办法提高这些指标,其中印象深刻的就是 webdir 和 dbmon。

 

webdir&dbmon

webdir 和 dbmon 是我们内部取的名字,简单讲 webdir 分析 web 服务器上的文件,及时发现后门文件,dbmon 分析数据库日志,及时发现 SQL 注入点以及拖库行为。通过这两个项目,我的 team 从一个安全技术团队开始向一个安全产品团队衍变,除了负责应急响应和渗透测试的的安全工程师,开始出现有安全背景的研发工程师以及负责 storm 和 hive 的大数据工程师,人数也开始两位数了。

webdir 在一期的时候,主要是依赖收集的样本提炼的文本规则,简单有效,在部署的初期发现了不少 case,部署的范围主要集中在重点产品线,量级在一万台左右。我们在二期的时候,重点工作是一方面提高检测能力,一方面是减少发现的延时,另外一个方面是全公司部署,这三方面都是为了提高 webshell 的主动发现比例。

在检测能力方面,主要是提高准确率和召回率,关于这两个指标的含义,有兴趣的同学可以看下我机器学习的书,里面用小龙虾和鱼来做了形象的比喻。基于文本特征的 webshell 检测,很难在这两个指标之间做平衡,尤其是我们这种超大规模的公司,即使是每天新增的文件也可能上亿,实验室环境看着还蛮不错的检测效果,误报也会被放大。因此大多数安全工程师的选择就是写极其精准的规则,所谓精准,就是根据搜集的样本写的过于严格苛刻的规则,用于大大降低误报。这导致的结果是,误报确实少了,但是漏报也非常严重。

我们仔细研究了下问题所在,主要是由于 php 语言的高度灵活性,一个很简单的功能可以用多种方式实现,还有不少装逼的语法。单纯在语言文本特征层面做非常吃力。通过调研,我们发现不管文本特征层面如何做绕过我们的检测,最后 webshell 还是要以 php 和 java 的语法来实现,如果我们可以实现 php 和 java 的语法,就可以在更底层提取特征,与黑产进行对抗。

这个思路也一直影响了我们后面的流量分析产品以及基于机器学习的 webshell 识别,不过这个是后话了。这个思路也成为我们二期的主要提升点,当时根据我们搜集的数千样本,挑选了专业的安全产品进行测试对比,我们的两个指标综合领先。我们另外的一个挑战是工程上的,我们仅在国内就有大量的机房,每个机房之间的带宽不尽相同,而且使用率也大不相同,即使是固定的两个机房,带宽使用也有明显的时间特征。

另外互联网公司大多把服务器的性能压榨的非常腻害,运维部门对我们的性能指标限制的非常死,甚至超过一定的 CPU 或者内存就会自动把我们进程挂起甚至 kill。为了尽可能降低服务器的性能消耗,我们使用云模式,负责的语法解析与规则匹配放到云端,服务器上仅需要完成非常简单的处理和上传逻辑。但是几十万个服务器如果因为上线新版本同时出现新文件需要检测,也可能会出现带宽的异常消耗,于是我们也使用了去中心化的部署方式。

一群只玩过单机版 syslog-ng 分析日志的土鳖,一下子可以有上百台服务器,还用上了大型消息队列和自研的沙箱集群,想想确实很有成就感。二期上线后,无论从部署范围还是检测能力上,都上了一个新台阶,并且由于检测技术上的创新以及客观的评测结果,这个项目获得了公司层面的创新奖。在这个项目上另外一个收获是开发服务器端的程序的经验,在一个如此大规模的集群上部署客户端,还要做到性能消耗小,考虑各种异常情况的处理,考虑各种兼容性问题,这些都是干过才能积累的。

dbmon 在一期的时候,依托于公司运维部的 DBA 团队的现有系统,离线分析公司部门产品线托管的 mysql 查询日志。检测的效果确实不理想,一堆暴力破解的报警,仔细一查都是密码过期了。检测的重点没有放到 SQL 这些上,而是更像针对数据库的异常访问检测了,这个其实从实践角度,安全人员很难去定位问题,小同学弄两次就烦了,所以效果一直很差,最后运维系统的同学根本不想看报警了。

二期的时候我们聚焦到 SQL 检测上,相对于 waf 和流量层面,SQL 日志层面做 SQL 注入点检测非常合适,因为在 www.558idc.com/yz.html提供,感恩】