我在华为当“黑客”
作者个人照
01
转身“白帽子”
“欢迎新同学加入华为,从今天开始,你们就要成为‘白帽子’了!”
进入部门第一天,主管在欢迎会上对我们几个新员工说。
“白帽子?”我和身边同为新员工的小伙伴面面相觑,这是什么?
看出了大家的疑惑,主管解释道:公司对产品安全性的重视程度不断提升,从开发到交付、运维全周期看护产品安全性。目前产品内部的安全测试,特别是白盒、渗透测试这一块还稍显不足,所以部门成立攻防实验室,组建蓝军渗透测试团队,从蓝军视角对产品进行安全渗透测试,挖掘待发布产品潜在的安全漏洞,也就是俗称的“白帽子”。希望我们作为新鲜血液注入,为客户输出安全可信的产品。
原来是这样!但其实这么多概念猛然袭来,大家一时还是不知所措。彼时是2019年7月,我刚从学校毕业来到华为松山湖研究所,和无数热爱代码的程序员一样,心怀热忱想为这万物互联的智能世界贡献自己的一砖一瓦。刚毕业时想法很简单,用自己的代码构建出优秀的产品,服务于大众。进入部门第一天,我就成为了“白帽子”,还是一个自己不太熟悉的领域。
恶补一波之后,稍稍摸到点门道的我发现,原来安全这个领域只要留心皆学问,是另外的一片星辰大海!
大的来讲,要懂操作系统、Web、密码学、虚拟化、移动等等知识,每块都是一门学科。细了讲,又有XSS、SQL注入、XXE、本地提权、上传下载等专题。每一次的攻防博弈,考验的都是你对这些知识的理解程度。
踏上“白帽子”之路,仿佛踏入技术知识的海洋,我们不仅需要掌握安全知识,开发知识也是必不可少的。而且不同于针对单个模块的开发,我们必须从整个产品的视角出发,了解产品的架构和实现。产品十分庞大,亿级代码量,单从语言上说,就糅合了Java、c/c++、Python、 Go、shell、js等开发语言。用到的各种自研、开源框架和技术,更是数不胜数。不了解个中原理,便不可能挖掘出隐藏的漏洞。
士不可以不弘毅,任重道远,我深感想成为一名优秀的“白帽子”很有挑战。每个我们不了解的模块或者技术,都可能会出现严重的安全问题,一旦泄漏到现网,对产品和公司的声誉都可能造成无法挽回的影响。导师曾对我们说过,“我们就是产品的最后一道防线”,必须时刻紧绷这根安全的弦,确保产品上线安全运行质量。而我最大的压力还是来自于自身能力的不足,不过我明白千里之行始于足下,路还是得一步步走。
02
挑“硬骨头”啃
都说师傅领进门、修行靠个人。我深知要想有所成长,就没有捷径可走,需要下一番苦功。但是从哪里发力呢?
一次导师在跟我们交流沟通中提到:“‘Sudo( 以超级用户执行 )提权’漏洞是危害较大的一类漏洞,一旦攻击者通过这种漏洞拿到系统最高权限,就可以完全控制服务器,做任何想做的‘坏事’了。”这就像一个地球上的普通生物,突然进化成为灭霸,一个响指就能毁灭世界。
“同时这类漏洞的挖掘难度较大,是产品的安全顽疾。”导师提到这微皱的眉头,让我意识到这肯定是块“硬骨头”,我暗自想着:“何不挑战一把?”
前期学习Sudo提权专题,对我而言是一个比较痛苦的过程。因为此种类型的漏洞不仅挖掘难度较大,也很灵活,需要深入理解代码的逻辑,同时还需要有一些“创造性”来构造出攻击场景,达成攻击效果。
纸上得来终觉浅。部门组织了一次训战,将我们可信实验室的新员工作为种子,联合产品线的攻防实验室,参与到A产品的渗透测试实战中。这次训战,既能学习攻防实验室的渗透测试流程,也是对我们前期所学知识的一次检验。我们每个人都将自己所选专题作为主要关注点,争取能在产品中发现相应的漏洞。我开始也是信心满满,拿起产品的代码就开始边学边实践。然而看花容易绣花难,真正去看shell(脚本程序)代码的时候,别说挖漏洞,连看懂代码都不是一件容易的事,几乎每看一行都要上网查阅一下资料,过程十分漫长。我多次发现疑似的漏洞,却在尝试攻击时屡屡碰壁,产品代码里的安全防御将我的每次进攻,都扼杀在它坚固的城墙之下。日子一天天过去,同事们都在所选专题中发现漏洞,而我还是零产出,对比之下,焦虑值暴涨,一度都想挖其他漏洞去了。
不过随着尝试的次数越多,我审视脚本的速度也越来越快,而且我相信没有密不透风的城堡,终于还是在一个庞大的脚本中发现了可以利用的漏洞,并成功利用该漏洞提升权限,用低权限账户获取到了系统的最高权限。我到现在还记得那天在回家班车上的那种喜不自胜,甚至觉得平日里最讨厌的堵车,都成为生活的一剂调味品。
随着测试的逐渐深入,开发人员在与我的攻防博弈中不断提升防护措施,现有的攻击方法已经都被识别和防御,发现漏洞的难度越来越大,挖着、挖着,我感觉真的挖不动了,我也一度以为对Sudo的学习差不多是物到极时必有终了。
不过脑中始终有个声音提醒我:“会不会是我自身能力的不足让我陷入瓶颈期。”之后,我在学习一个外部漏洞的时候,发现有的安全防御是可以被出其不意的方法攻克的,这一下点醒了我:还有没有一些我尚未接触过的攻击手段?我也对以前认为的一些安全防御手段产生了怀疑,就像人脸识别,万一系统错将一个跟我长得十分相似的人错认成我呢?
带着这些疑问,我开始了新一轮的学习和尝试。果不其然,我通过查阅内外网相关资料,学习到很多方法和案例,进一步思考如何绕过一些系统常用的防御手段。为了进一步验证我的想法,我重新审视过去验过的一些脚本,像是发现新大陆一般,发现了很多隐藏的漏洞。在测试过程中,我通过多个难度较大的攻击手段,突破了多达四五层的重重防守,用新的方法突破了被开发人员多次改良的防御方式……有开发的同事曾对我说:“我们已经花了大功夫设置各种校验了,想不到还是被你绕过了!”还有开发人员无奈地对我说:“上次的漏洞还知道咋改,这次就彻底不知道了。”听到他们的“吐槽”,我也会和他们探讨修改漏洞的方案,一起来提升产品的安全质量。
在对难题进行深入学习、实战总结、推动解决的过程中,我收获到技术和情绪的双重价值。每次啃下“硬骨头”,我内心都会产生强烈的成就感;我将自己逐渐积累的攻击手段和测试技巧分享给周边的安全测试人员,收获了来自团队专家的认可;我积极推动设计和开发的改进,设计测试工具,一同提升产品安全质量,助力产品在外部送检中大大降低此类本地提权漏洞。这些都能让我从心底热爱我的这顶“白帽子”。
03
只有不努力的黑客,没有攻不破的系统
本以为我们已经成为当之无愧的“白帽子”,主管却对我们说:“挖再多的漏洞,产品和开发也不一定有感觉,要拿出实实在在的攻击案例,实现模拟黑客视角对产品的攻破,才能真正以攻促防。”这一席话,让我不禁进一步思考,作为一名蓝军攻击方,怎么才能证明我们的能力和价值,让产品更加重视安全问题呢?
一想到要“真刀实枪”地攻击,我的压力感顿时就被拉满了。可以这么说,攻破系统,是每一个渗透测试人员或者是“黑客”的最高目标,也是一件很困难的事情。一来,我们的产品经过层层的安全纵深防御设计,并且经过这么多版本安全团队和外部各种送检的捶打,安全性已经很高,想像黑客一样攻破产品的难度很大。二来,想要达到攻克的效果,一般都需要多个漏洞组合利用形成完整的端到端攻击路径,我们这几个接触安全领域刚一年的“新兵蛋子”,有这种能力吗?
由于测试周期紧张,不容多想,我们梳理了下思路就开始“硬刚”产品安全了。产品看起来就像一座坚固的堡垒,怎么打开堡垒的突破口是最关键的一步。想实现从0到1的突破,就得从系统暴露面入手。我第一个想到的就是产品的登录认证机制,但事实证明自己还是太年轻,“红军”已经预判了我的预判,对常见的暴露面都做了层层加固和防护,我们的测试无功而返。
接着,我调整了下思路,既然堡垒的几个大门都很坚固,突破不了,那就切换到系统全局的视角,看看堡垒有没有什么“小窗户”之类的薄弱点。于是我开始关注一些防御侧面,审视产品的每一个“出入口”。之后,我果然在一个不起眼的小功能中,找到了突破点。
举个例子说明一下这个问题:我们每天上班要进入公司园区的时候,本来门岗应该检查工牌,确认是公司员工才能让我们进来。但是现在门岗只要看到我们脖子上的工卡带,就默认我们是员工,准予放行。这个是有风险的,因为工卡带很容易被伪造。
于是,我利用这个漏洞,通过构造一段特殊的请求,绕过了系统认证大门,直接拿到了系统前台的管理员权限,成功进入到系统内部。不放弃就会有希望,堡垒的突破口终于被打开了!
实现这个从0到1的突破时,我别提有多兴奋了,恨不得马上拿这个成果去结项。冷静片刻后,我意识到,这只是第一步,即便渗透到了系统前台,系统后台和各类数据还是没办法获取,还说不上是一个端到端的攻击案例,静下心来继续挖洞吧。
为了进一步扩大战果,我对业务功能进行分析和测试,发现系统前台存在一个漏洞,只要利用这个漏洞,我们就可以往系统后台去植入一个恶意的木马文件,通过这个恶意文件就能由前台渗透到后台,获取到后台操作系统的权限。再顺藤摸瓜,通过我拿手的本地提权漏洞,我成功获取后台操作系统的最高权限。
就这样,我通过这三个漏洞的组合,形成了一条完整的端到端攻击路径,实现了从无权限攻破系统、获取系统前后台最高权限的挑战目标。这个攻击案例出来之后,产品的关键角色也来找我了解详情,现场直接演示的效果无疑是很震撼的,我也因此获得了来自产品的高度认可。开发的同事结合这次的演示对产品安全性进一步加固,发布的产品顺利通过了全球权威安全性评估标准CC EAL4+认证,并在关键运营商客户邀请的第三方渗透测试中表现良好,获得了客户的信赖。
在这场攻防博弈中,我越发能感受到漏洞挖掘的乐趣,在代码中和开发人员进行无声的攻防较量,在这一来一回中共同进步、一起看护产品安全,确保我们产品的高质量交付。
04
深入红军:联合打造固若金汤的安全防线
“作为产品内部的安全团队,我们的目标是更好地看护产品的安全质量。”在一次会议上,领导的这句话提醒了我。是呀,作为产品内的“白帽子”,我们的最终目的是要落入到“防御”上的。挖掘攻击路径难,但是把系统打造成坚不可摧的“城堡”,更难。
对产品的渗透测试,不能仅仅局限于攻击者视角。前期的积累,让我知道了怎么“攻”,知“攻”才能知“防”,我们要多做一步,帮助产品开发的兄弟一起为系统地提升产品安全质量做出努力。
在之后的测试中,我们改变了做法。在送一次送检保障测试中,我到武汉出差,和产品的安全保障团队在会议室集中办公,红蓝军深度联合,共同作战。
武汉的夏天热浪奔腾,屋外是副热带高压带来的40度高温炙烤,室内是“安全考试”的紧张氛围,因为如果送检出问题,大家之前做的努力都会被否定。对于我们而言,发现漏洞不是目的,消灭漏洞才是!瞄着这个共同的目标,我们这支有设计、有开发、有测试的安全保障战队,一同并肩作战。后端发现问题,大家快速讨论问题影响、根因,和设计、开发人员对齐排查方案,并迅速进行举一反三式的排查。争取发现一个问题,消灭一类问题,并且不断重复着这个过程。
长时间待在窗帘紧闭的会议室中,我有时候会有点恍惚现在是白天还是黑夜,直到研究所响应武汉供电网号召在夜间减少空调开放。大家为了消暑,会打开窗户,我看着外面生机盎然的景色,心想:“植物不怕酷暑,正是因为经历了酷暑的烘烤,它们才快速成长。等过了这段作战的日子,我也出去走走,去感受一下这座英雄城市的烟火和生机。”经过一个来月的共同保障,产品的安全质量持续变好,挖掘漏洞的难度越来越大,产品安全质量有了质的改变,最终以“0 DI”的优异成绩顺利通过送检。过程虽然艰辛,但是我们能感受所有人为了同一个目标共同努力的充实感。
单方面持续地挖掘漏洞可能还不够,授人以鱼不如授人以渔。产品的安全质量和安全测试人员的技术能力有很大关系。如何去尽力克服由人员差异带来的安全风险呢?我也思考了当前安全测试流程的优化方案:通过开发测试工具,提升安全测试效率;通过在研发流程中引入关键控制点,有效管控新增需求的安全风险;通过构建风险场景库和攻击模式库,将安全专家们存储在“脑子”里的经验和干货,固化到文档和流程中,帮助产品进一步提升威胁分析全面性,降低渗透测试门槛……
从蓝军思想转变到红军思想,我理解到打造一个安全的系统,是一件不容易、也更加神圣的事情。在“白帽子”这条路上,还有太多的领域等待我们进一步探索和深耕。华为三年,安全三年,我也明白自己和专家们的差距所在,路漫漫其修远兮,唯有热爱可跨越山川湖泊、徜徉星辰大海。
最后借用在溪村新星营培训时导师叶sir对我们说过的一句话:“让自己成为一个靠谱的人”。
“白帽子”,加油吧!
来源 | 心声社区
↓↓ 点击"阅读原文" 【加入云技术社区】
相关阅读:
周鸿祎:99%国家级攻击皆由360独立发现,回避“看见”谈安全都是假把式
Gartner 您需要了解的17个网络安全概念和缩略语:网络安全架构、零信任架构、安全访问服务边缘、防火墙即服务等
Gartner 2022年网络安全的八大趋势:网络安全网格、精通网络的董事会、身份优先安全、入侵和攻击模拟、增强隐私的计算技术等
Gartner 2022年重要战略技术趋势:生成式人工智能、数据编织、云原生平台、超级自动化、隐私增强计算、网络安全网格等
Gartner 2021年八大安全和风险管理趋势:网络安全网格、身份优先安全机制、安全厂商整合、隐私增强计算、机器身份管理等
Gartner 2021年重要战略科技趋势:分布式云、网络安全网格、人工智能工程化等
Gartner 2020中国ICT技术成熟度曲线:数据中台、中台架构、云安全技术、电商直播等入选
RightScale 2019年云状况调查报告:35% 的云支出被浪费「附50页PDF下载」
更多文章请关注
文章好看点这里[在看]👇