甲方安全防御体系建设的随笔(二)

2019-05-01 3,506

书接上文:甲方安全防御体系建设的随笔

我以为我写完上文后,我未来几年内都写不出东西来了,所以打开侯亮大哥的pdf重新学起来了。其实不瞒大家说,我本来这段时间给自己定的okr是重新学习二进制安全,但是学到一个新技术的时候发现学不下去了,那就是Address Sanitizer。


Address Sanitizer的主要思路是先利用编译过程中对程序内存进行插桩,然后QA对程序进行各类的动态测试和模糊测试,如果程序发生了crash则可以非常精确的得到程序各类内存Buffer Overflow问题的根源的一种技术手段。咦?这怎么看起来有点眼熟呢?emmmm,这不就是web领域的IAST技术吗?
这里附上一片写的非常不错的AddressSanitizer的资料AddressSanitizer算法及源码解析


IAST的技术思路和Address Sanitizer的核心思路完全一致,就是利用技术手段对运行的程序进行插桩,在完成插桩后QA展开多维度的测试,依照插桩代码输出的日志,程序员可以非常有效的跟踪程序自身的问题尤其是安全问题并进行修改。想起老人的一句话来:户枢不蠹、流水不腐,动态的审计行为能发现非常隐蔽的问题。IAST技术由于现在有不少商业化的产品了,搜索一下PPT有一大把我就不推销了,不想在随笔中做广告,因为这不道德。


这里顺便谈谈静态审计行为。相较于动态的安全防护技术,静态代码审计固然能规范一些编写规范,但是这种静态的审计行为做到顶点也只能是让程序员的代码风格高度一致,让程序员保持在一种完成填空题的状态。有一位好友是在某银行任职安全的,他曾经十分自豪的告诉我们圈子里的安全友人:我们银行的java代码每一个变量都能做到数据校验!对,你没看错是每一个!一个数据接口的流转过程中从输入到输出以及所有的中间变量都是严格按照流转过程中的业务逻辑要求进行校验的。我不禁思考:为什么他们能做到如此的仔细?思来想去,除了严格的管理还有就是非常体系化的应用开发架构,每一位程序员都在一个高度规范化的开发体系中进行着填空题作业,程序员的心智负担高度收敛到业务逻辑上,所以保证了整套体系严密的质量,尤其是金融应用对脏数据问题的敏感性,必须保证应用本身不可能产生脏数据以及脏数据带来的误差。


依照OWASP的项目测试结果,市面上最好的静态代码审计产品有着一个突出的问题:过高的误报率。其实我一直觉得,能把静态代码审计做到如此高的检出率我也是蛮佩服了,虽然超过50%的误报率这个问题真的不忍直视....。我个人还是挺赞同这个银行的设计思想的,利用体系化的、规范化的代码编写标准同时配合某商业化代码审计工具的审计能力,将程序员编写代码的规范高度统一化、规范化,而这将极大的缩减企业代码由于不统一带来的隐形成本(包括重构、维护、审计)最终将业务线的健壮性达到一个工业级别标准。


我个人就职的公司2018年下半年的时候公司经营困难,公司给我下最后通牒:未来一个月就不发工资了。所以我当时出去找工作,在这一个月寻找工作的时间段中遇到一个很有意思的事情:我宣导我对rasp技术的了解以及rasp技术的各种好处,但是遇到的面试官有好几个似乎都对WAF情有独钟,我真的当时欲哭无泪,现在回想起来自己那个时候就是个傻瓜蛋,但是当时面临失业的危机确实压力很大,整个人非常痛苦。


这段经历给我很大的冲击,一直到现在我都会回想起那段时间,接触连续21家公司不断地被拒绝或者面试完了无音讯,有大量的企业的hr只是看了我的简历留下一个已读,甚至还遇到一个公司面试我的时候当面羞辱我。我前天的随笔中为何提到0day以及对0day做扩大解释,就是因为经过这个经历我体会到了:任何一件事情都是从做基实的地方开始做起的,安全行业都喜欢说短板效应,那我们自身考虑过自己的短板吗?一个企业会因为一个人员的“0day”被窃取商业机密,或者因为一个技术的“0day”被直接攻入信息系统的堡垒,那我们自己呢?我们会被什么短板给打败?那屏幕面前的你呢?你的短板在哪里呢?


我喜欢玩应用,我觉得应用的漏洞特别有意思,所以我思考0day的思路确实和rasp不谋而合,曾记得我还年轻的时候,在吐司上看到一篇文章,当时一个黑客提问:有没有办法绕过php脚本的waf,因为那些商业化的waf实在太好绕了,但是一旦遇到应用层本身的WAF规则他就束手无策了(参考360的360_safe3.php),也是因为这件事我对rasp技术非常的着迷,自己反复调试并且阅读源代码,最后着迷到我每次面试都喜欢宣导我多么了解rasp,结果发现确实是一个十分幼稚的行为。不过单纯从技术来说,rasp未来会成为应用安全的标配那是肯定没跑了,因为rasp堵住了应用的那块短板:抵御0day攻击和高危漏洞的能力。一个java应用的底层代码被rasp修改了,整个进程彻底无法执行命令,请问攻击者如何编写exp进行RCE操作?一个应用对SQL构造的每一个参数都进行了正则校验,攻击者如何构造SQL注入?等等诸如此类的规则导致OWASP的攻击链将会变成了历史上的东西,未来甚至还能对输入输出的数据进行检查,防止身份证、手机号等满足数据敏感度的数据输入输出等等。所以我一直说,我们web安全工程师可以下岗了,真的没啥要做的了,除了保证工作执行落地就可以了,哈哈。


其实看到这里,大家会不会觉得上面那段我去年面试经历的那段文字特别的突兀?和rasp抵御0day和高危漏洞有什么关系,这其实涉及到一个数据调查:去掉管理员权限 97%的Windows漏洞可免疫 看过我前文的朋友知道,我是二进制安全起步的,我对当时的本地溢出漏洞感到了一种特殊的感觉,就像是可以随意控制世界那样。同时,我对这个调查的结果也是非常的吃惊,不是因为攻击者特别厉害,大量的攻击事件的本质是:我们权限用的不对。


亮哥说:内网渗透的本质是信息搜集。我特别的赞同,那些成功的攻击事件不管是apt还是银行劫匪那可都是踩点踩的好的:-)。我个人对攻击的体会就是:如果你要获取你没有权限接触到的信息,就是不断搜集信息,然后辨析其中的问题,最终脑中逐步勾勒出一个攻击链,一鼓作气逐个击破,达到你最终的攻击行为的目的。那么既然如此,我们如何正确的使用我们手中的权限?不管是应用的权限,系统权限,还是你招聘的权限?我们如何抵御那些未知的风险?


又要谈谈历史了,我会把过去的一些技术的发展线索都分析一下,保证各个技术路线的同志都能看懂我对安全的理解。


二进制安全:

我以前做过外挂,我觉得外挂挺有意思的,就基本上是改内存中的核心点数据(包括可执行数据或者静态数据)当然也有不少直接篡改cpu寄存器的值的手段,保证达到作弊的目的(其中这种作弊行为可以抽象为权限的提升,大家仔细思考下)。大家发现没有,外挂的本质都是对关键数据的篡改,这些关键数据的量级可能占整个游戏空间不到1%,但是可以让游戏公司痛不欲生。相对应的操作系统级别的各类提权漏洞那真的是和武侠小说似的,找到了一个高手的死穴,点一下,高手挂了....,不管你操作系统如何巨大,如何先进,在茫茫的运行逻辑中找到一个关键点进行篡改或者攻击,就能直接让这个庞然大物听你的号令。所以,对应的反外挂技术应运而生,各种内存校验,驱动内存保护,之后win7开始禁止无签名驱动进入内核后,那就真的是各种大仙的表演时间了,过内核校验,绕过反外挂的各类黑科技纷纷亮相。操作系统不管是win还是linux对于各类提权攻击也同样采取了措施,对各类内存漏洞都出了保护技术,DEP、ASLR、GS等等我们就用内存安全技术代称吧,不管是windows还是linux都对权限的管控逻辑也做了更加严格的保护措施,使用内存安全技术和增强权限逻辑很好地限制了提权的攻击的发生。

你发现了没有?

攻击的最终目的似乎没有发生变化...

攻击者依然在寻找那些核心点数据,并且想办法攻击那不到1%的数据,linux是为了那个提权后的0(root),windows是为了拿到system,外挂是为了篡改那点点数据...。

不着急,再来接着看。


web安全:

web安全我觉得已经可以说被讨论的太多了,我就不献丑了,我们就看看这几年waf的发展历史吧,一个充分解耦的产品,只要架设在web应用服务器前面,就能抵挡攻击,好好哦!但是也正是因为攻击者实在太聪明了,各种绕过waf的技术层数不穷。好彩好彩,我们以后可以用rasp了。

那么攻击者最终是为了?

我们来看web应用执行流程中的逻辑数据被攻击或者web应用的鉴权逻辑被越权,虽然web应用背后有大量的数据,但是一个应用漏洞发生所对应的逻辑执行数据或者一个鉴权出现问题对于的逻辑执行数据其实也只是占整个应用数据的不到1%。


企业安全:

鄙人职业生涯中遇到好多次内鬼,有的是其他公司派来的,有的是利欲熏心把数据卖给黑产的,其实我算是对谷歌的0信任很有体会的一个人了,因为不管如何,人嘛,都是会叛变的,哈哈哈。最近几年,很多企业都在做等保、iso27001的审计、合规工作,我觉得非常不错,不过确实其中有不少企业真的是流于表面在执行了,因为大量企业自身对企业需要防护的漫长战线都觉得望洋兴叹(当然也有企业是连风险识别都没做好,都不知道风险点在哪里)。

企业要保护的也不就是那些核心数据,以及最终保护核心数据所关联的企业业务命脉吗?而那些有问题的员工更是不到1%。

如果说我们把公式展开:
内存安全技术 == WAF防护 == 等保和ISO
请问我们的技术层面的手段层出不穷的时候,我们在企业安全建设方面真的做到了升级换代了吗?同样是保护那1%的核心,我们做了什么新的举措吗?

内存安全技术从简单的内存使用规范如今已经进化到了动态内存安全实时检测的时代。
WAF防护我上篇随笔中也说了,已经不是技术问题了,真的算是一个体制的问题了,囧。
可是我们在打造企业安全体系的时候,我们的手段还停留在十多年前的方针,是不是特别的有问题呢?

我们的安全技术也好安全管理也好,针对的都是我们要对核心数据执行所谓的CIA原则(机密性、完整性、可用性),尤其对企业来说这是企业运行的命脉,如果我们现如今的企业在打造企业安全体系的时候,我们是不是首先思考,我们的1%在哪里?

对了!没有错!这1%就是安全圈已经讲烂的短板效应!

我一直在企业的基层混,企业安全大量依赖开源,也十分依赖各种免费的安全情报,我的圈子里的朋友都大致如此,某个安全新闻站上面有大量的开源安全系统的部署和使用教程,说实话我们现在都懒得看了,各种不维护或者bug满天飞的所谓的安全系统部署起来到底有什么意义?除了部署完以后用来忽悠领导自己完成了kpi,其他的意义其实一点用处都没有,我管这个叫做自 慰式防御。

我的一个安全leader朋友和我深聊,就像我去年找不到工作的核心问题就是我的面试能力这个短板。那么我们一个企业在构建安全体系的时候,也首先应该审视自己,我的短板在哪里?一个企业的1%在哪里?因为防护好这1%,很大程度上就将系统加固到了一个新的阶段,现在很多体系建设宽泛而没有重点,并且推动的难度之大令人咂舌,甚至有不少甲方安全的朋友每次到了新单位,第一件事情就是先要挖企业各种漏洞,否则难以服众更没有抓手,推动安全的工作简直就像螳臂当车一样无力,只有遇到了非常好的老大才能有久旱逢甘霖那种感觉,但是遇到这种机会的朋友犹如茫茫人海中那些获得知遇之恩的才子一般真的是凤毛麟角,国内大部分领导都喜欢看宽泛而漫长的防护体系,但是真的落地的程度就甘苦自知了。这也导致中国大部分安全从业者还是“一个人的安全部”的状态,用意志力抵挡黑产的金钱诱惑和黑产从业者的讥讽,用0预算和开源防护手段抵抗着那些看不到影子的敌人。

有一位朋友是国内某大型国企的安全从业者,低薪、不被重视,但是他保护的数据是重要的财务类数据,拒绝了好多次黑产的合作邀请,用一堆开源产品在做防护,我有一种深深的悲哀,曾经很多朋友想给他介绍安全工作,但是他选择留在那里,他当时说了一句话我很感动:我走了,我们企业就不会再招安全了,我还是留下吧。

1%?

是数据吗?

我认识一个好友,前几天他告诉我,安全最大的问题是:

人。

谨以此文送给那些靠着信仰、意志在岗位上坚持的1%。


Tags:
评论  (0)
快来写下你的想法吧!

一只大熊猫

文章数:2 积分: 18

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号