2019独角兽企业重金招聘Python工程师标准>>>
早些年曾经参加过一场安全讲座,讲座上安恒大佬介绍了疼痛金字塔这个理论,当时大感欣喜,之前一直没有一套支撑自己安全防御建设的基础性思想,而在听完讲座之后那一天开始打下了安全建设理论体系的基础。
先介绍下疼痛金字塔
如图所示金字塔内的文字代表了安全建设使用的手段,右边则代表了攻击者在攻击中的难易程度,最高达到了非常牢固的程度,让攻击者感到了“疼痛”。
之后的工作我就开始摸索,我要做的防御建设到底是怎么样的一套体系化的建设工作?当时我使用各种技术手段开始设计自己的SDL架构:我改造了mybatis彻底封堵了SQL注入这个技术漏洞,还把jvm进程执行命令的通道彻底切断到达了同时抵御XXE、反序列化、命令执行一系列0day漏洞的目的。
在那段时间里,在沾沾自喜之余,我从没有向今天这样思考自己的工作的深层次含义。
这次又来到了北京这片福地,这是我人生第二次一个人在远离家乡、在偏远的郊区一个人思考工作。你会发现你真的可以心静下来,脱离工作的繁琐的事务,好好思考自己到底在做一些什么?还有问问自己,你做的事情到底有多少的价值?
首先我思考的是0day。
0day大家都了解的很清楚了,几十万到几百万美元的一小段代码,可以远程攻入一台路由器或者操作系统,只要几秒钟就能简简单单的撕开一个大型上市企业的信息系统的口子获取进一步的权限。
我们要问问我们自己,尤其是甲方防御安全的朋友们,我们能避免吗?
若干位好友都曾给我建议,建议我挖0day,可以一战成名,从此走向人生巅峰,哈哈。
顺便说一句,这其实也是我厌恶的现在中国安全圈的现状,大家都在想办法出名:挖0day或者写各种无法落地的安全体系构想,想尽办法在各种安全大会上展示自己的ppt编写能力,国外黑帽安全大会大部分议题都会在会议文档最后附上议题对应的github代码,但是国内的安全议题讲完以后绝大部分居然连议题的ppt都敝帚自珍,不愿意分享出来。请问这样的安全生态有何意义?而且最好玩的是,我自己整理了一下,越是有含金量的议题ppt越容易获得,因为作者非常愿意分享,越是那些没头没脑的假大空ppt你越拿不到,大概是因为心虚吧:-)。侯亮大哥有句话说的好:在每次分享的同时,深深发现,原来分享,才是我最好的老师。
抛开浮躁的心思,静下心来,看看过去的那些一次次的安全事件,我发现我自己过去一直存在一个巨大的问题:喜欢抱怨安全预算不足和获得的支持力度不足。不过今天思考一番之后开始发现了自己以往的幼稚的思想,安全预算到底多少才是足够的?多大的支持力度才是足够的?我发现我自己都不清楚,防御体系的资金成本和管理成本核算简直就是个无底洞一样,而这种措施的逐步推进,会对企业的业务运行带来多大的效率上的影响?我也不知道。怎么解决?我更不清楚。
说真的我花了一个多小时,对自己过去这种的无脑的思想进行了自我嘲讽,就差到街对面纹身店在自己脑门上纹上“XX”两个字。我有一个特殊能力,就是自己和自己聊天,在长达一个小时的自我对话过程里,我感受到了自己安全思想真的不堪一击的原因。我压根不知道什么才是“做正确的事”,这也是为啥我31岁还是个工程师,而成都有一个20多岁的大佬已经当上了集团cso的缘故吧:-)。
也就是因为通过对自己的抨击和嘲讽,我重新把视线转向了0day,也就是刚刚接触到疼痛金字塔思想的时候最关注的一个点。
什么是0day?
传统上对0day的解释是:是指那些没有公开过,因而也没有补丁的漏洞,也就是通常所说的“未公开漏洞”。
由于我学过法律,我引用一个法律中的概念,叫做扩大解释,所以我现在定义0day为:未知的风险(本文对未知风险的具体解释为无法明确预判细节并且还未发生的安全事件:包括人员风险、物理风险等一系列安全事件,不再是仅仅技术风险导致的安全事件)。
学过cisp、cissp的同志们肯定对未知的风险很熟悉了,经常挂在嘴边对内对外的进行沟通或宣导。
不过如果我们把抵挡未知风险当做是一种工作的指南、或者说工作的核心精神呢?
重新翻看历史,你看看人类是如何建设防御工事的?从简单的篱笆、深深的战壕、宏伟的城墙。
不同的发展时期,不同的运作的轨迹,防御的思想都是不断的在变化的,而历史上的人类是如何思考并设计这类防御工事呢?其本质的核心思想和疼痛金字塔没有本质的区别,就是让攻击者感到难受甚至疼痛,不断的提高攻击者的成本。
Opps! 好眼熟啊,这不就是owasp的切断攻击链的理论如出一辙吗?owasp top 10 之所以成为行业内的事实性安全标准,就是因为其背后的理论支撑和案例支撑,owasp基金会对于防御的核心思想也不正是如此吗,切断攻击者的各类攻击手法,让攻击者无法形成一整条攻击链路,攻击者也不正是会在攻击行动中如此感受到了痛楚吗?
感到自己摸到了门槛,但是好像还差点什么。我年纪大了喜欢回顾历史,于是开始想自己以前的时光。
年轻的时候,刚刚入行还啥都不懂,当时系统基本上都是C/S结构为主,随之而来正是盗版横行。所以反破解反逆向成为了当时的一个热点技术领域,从简单的压缩壳、算法强度越来越私有化的加密壳、利用操作系统特性的双进程保护壳、偷取程序原始代码的各类强壳、一直到最为难以解密的基于字节码和虚拟机的强保护壳,整个发展过程从非常多的反调试手法作为反破解反逆向的技术路线逐渐向不断提高破解、逆向的成本发生转变。
之后的安全领域毋庸置疑就是B/S技术路线的web领域了,web漏洞的横行也造就了大量的web漏洞大牛和相关的黑产孕育而生,所以很长的一段时间里,waf防火墙成为了行业的炽手可热的产品,waf防火墙轻耦合、热更新的优点,将大量的脚本小子挡在了web攻防的圈子之外。可惜好景不长,绕过waf规则的各类知识开始大面积扩散开来,waf从金刚盾变成了豆腐渣,乃至于不少乙方公司内部的waf安全工程师发现自家产品的缺陷后开始到处刷使用自家waf产品的企业的src赚取人民币,等钱赚的差不多了再提交产品线才开始弥补产品缺陷,其实这样的行业弊端已经基本宣告了waf这个产品已经开始走向了衰亡。而最近几年真正开始解决这个行业弊端的技术就是rasp技术,国内其实还刚刚兴起,国外已经有大量的商业公司开始提供rasp产品了,不得不说我们落后国外真的好多年啊....。rasp从底层应用函数上解决owasp top 10的其中几类漏洞,大大增加了攻击者的成本,甚至可以让一些对外的应用明明有0day漏洞,但是你使用对应的exp却发现无法进行任何恶意操作,可以说是彻底堵死了攻击者的恶意行为。
最近几年各类行业的垂直电商领域以及很多金融领域的各类细分公司迅速崛起,风控又成为了安全领域的超级热点,各类机器学习、人工智能技术也随着这个热点开始迅速使用起来。说起来北京真的是我的福地,鄙人简历很差,但是有幸参加了某行业排名第一的电商公司的技术面试,当时cto终面的时候,问了我一个问题:如何解决电商羊毛党带来的经济损失?我当时的回答是我利用我黑产圈的人脉资源,核算出一个羊毛党进行行动的成本值,我只要提供给运营人员我的情报数据和成本值结果,运营人员利用这类数据控制运营的营销力度,就能极大的减少羊毛党的行动欲望,甚至保持羊毛党行动是不赚钱的,从结果看起来这个答案是获得认可的。
我是学二进制起步的,想多讲讲二进制安全领域的事儿。二进制安全领域大家研究的热度随着B/S结构的大面积使用变成了一个很小的安全领域。比如说网游,网游反外挂的技术不仅仅在内存、内核反外挂驱动上有了大面积的技术突破,甚至不少游戏将游戏的运算放到了云端,导致游戏外挂开发者成本畸高,甚至某些游戏可以说是无从下手,因为部分逻辑运算已经到达了云端,不再是本地可以依靠修改内存或者修改寄存器的某些值就可以完成外挂的研发。举个例子,steam的eac反外挂系统,对内存的保护已经到了外挂开发者挠头的地步,再加上部分游戏逻辑云端化,外挂开发者生活真的举步维艰于是纷纷转行。这里也分享一个鄙人年轻时候的经历,我也是学汇编和C/C++开始起步的,也是对二进制安全发展历史中的病毒、木马的整个发展历史有着很深的接触。从一开始特征码免杀的时代,当时真的是杀毒软件追着病毒木马跑。随着启发式算法开始慢慢流行,杀毒软件开始对于未知的恶意软件开始形成了基本的辨别能力,到云查杀开始流行的时期,几乎是一瞬间就颠覆了反恶意软件的市场,我有幸经历了整个发展的历史时期。整个发展过程中,杀毒软件从高额收费到免费,各种原来昂贵的杀毒软件使用从本地电脑运行转变成由云查杀云端完成,个人用户使用防护的成本从高额收费到0成本。而免杀工作者或者恶意软件原生作者们简直就是从天堂到地狱,刚刚开发出来的免杀的恶意软件只要一接入网络被云上传,要不了多久全网就会报毒,尤其是免杀制作者发现,云查杀的出现,导致自己不仅仅要免杀一个杀毒引擎,必须完成多个杀毒软件的免杀工作,否则不完成所有杀毒引擎的免杀,只是做了一堆无用功,免杀工作的成本以及难度出现了指数级的增长。
历史告诉我们,多么惊人的相似啊!owasp基金会的攻击链理论、疼痛金字塔理论、rasp技术对waf技术的替代性优势、风控领域的解决恶意行为的思路、反外挂的技术和反恶意软件的技术转变,都体现在了同一个点:抵御未知风险的建设过程中要专注提高攻击者的行动成本上,当攻击者成本畸高,付出和产出无法获得利益或者是付出伴随着高额的各类风险的时候,攻击行为就会得到遏制甚至消亡。
那么对于人呢?其实最近几年就很看得出来了,征信系统的建立以及大规模的背景调查的使用,都在很大程度上压缩了在职场上投机取巧的机会。尤其是参加过某位安全专家的讲座,他由于是公安背景的安全专家,在审讯和心理学上有着极高的造诣,在面试过程中曾经直接准确判断出一位伪装成DBA的面试者其实是数据窃取者的案例,这位数据窃取者长期到处跳槽面试,利用收集到的DBA技巧以及专门训练出来的面试技巧混入大型互联网公司窃取数据。正因为背调的大规模应用和严格推进,商业间谍不可能为了窃取数据在一家公司长期工作两年以上,再跳槽到目标公司窃取数据。因为本人经历过阿里的面试,了解到对于敏感岗位的招聘都要求求职者的职业生涯中所有工作的经历都必须在一家公司连续工作两年甚至两年以上(不过据我所知还是有一个黑产大佬现在在阿里集团某公司上班中:-)哈哈)。
有时候回过头看看安全领域的很多防御性的知识其实也很贴合增加攻击者成本这个概念的,比如:
前段时间候亮大哥公开了很多技术性的文档,深有感触,其实域控加固还是三板斧:1.杀毒软件必须装,还得用靠谱的那种(推荐诺顿或nod32,国产杀软的对后渗透手段都很不行,很多绕过手法,起码2019年是如此),同时补丁要及时打反正现在杀软也都能自动化的帮着打补丁,使用起来很方便。 2.定期换域控服务器的密码,密码复杂度必须要高并且起码12位以上,最好一个月能换一次密码,换密码的时候连续更换两次密码以保证所有票据刷新(参看微软文档:域控KRBTGT替换密码策略,打开链接搜索“两”这个字能看到),就算有攻击者已经窃取到了票据也能保证立刻失效(不管是外部攻击者还是内网里的内鬼)。 3.能关闭多少域控服务器的无关服务就关闭多少,保证最小化原则。你看看攻击者就难受了吧,起码我认识的一个域控大佬已经觉得这样如果能落地,就不好对付了。
还看到过一个微软的新闻《过去12年,微软产品有七成漏洞是内存安全问题》,文中大意是C/C++不是内存安全的编程语言,导致写出来的操作系统七成漏洞和内存安全有关。我自己做了个调查,发现确实现代编程语言先天性就是拥有的一个标准就是必须为内存安全的。我最喜欢的语言就是RUST,对各种溢出漏洞、竞态漏洞、UAF漏洞都有着先天性的免疫性,虽然RUST这门编程语言不好学,不过根据PingCAP的工作记载来看,只不过是前期C++程序员会需要一段时间的学习使用RUST,等这个学习窗口期过去,程序员可以规避掉C++语言的各种内存泄漏和指针问题等带来的无休止的调试和bug追踪分析的时间。从企业来说,我多花一个月的学习窗口期减少未来若干年的隐形成本(包括内存安全带来的排错成本和安全成本)真的是何乐而不为?
饿死了,写了好几个小时,哈哈,总结来说对于安全建设来说,首先要看自己能创造的价值,价值可以通过缩减成本或者扩大收益来获取的,每一位甲方安全建设者都要面临一个巨大的问题就是你带来了多少的价值?而这个价值越高,代表着你的建设工作的有效性。而安全建设具体落地的时候,我未来的方向会定位就是按照过去的成功历史经验,使攻击者的行动成本畸高,导致攻击者的行动付出和回报不成正比,以此作为解决企业安全建设的核心思想。
有感而发,人生就一次,没有重来,请读者多关注健康,不要996再进icu,更要多陪陪在乎你的人,2019年4月5日,北京沙河郊区有感。