百度安全的 OpenRASP 项目,究竟是什么?
百度安全的 OpenRASP 项目,究竟是什么?
本文作者史中,首发自公众号【浅黑科技】,欢迎合理转载共享知识,也请尊重版权标注作者和出处(浅黑科技)。
聊到最后,c0debreak 打开了一个“机密文档”给我看。这是一个宅男积累多年的秘密,我眯着眼好奇地凑过去,里面密密麻麻的都是。。。。对最新网络安全技术的研究笔记。
“我让你给我展示一下和工作无关的‘业余爱好’,XX都X了,你就给我看这个?”我怒道。
“对啊,这就是和工作无关的业余爱好啊。因为这些技术现在都还用不到工作里。” c0debreak 一脸呆萌。
瞬间,我特别想见见那个马上就要和他结婚的妹子,据说她也是个程序员。我强烈怀疑他们的蜜月旅行会是:在用马尔代夫海滩做桌面的电脑上敲代码。
c0debreak,百度安全工程师,一个比百度工程师还像百度工程师的百度安全工程师。其实,c0debreak 还有另一个身份,那就是 OpenRASP 项目负责人。
OpenRASP,看到这个名字时,估计很多人也像我一样升腾起不明觉厉的感觉。(我觉得凡是名字里带有五个大写字母的项目都挺有前途,例如:CPPCC,不知道的童鞋可自行百度)其实,OpenRASP 是一个百度安全旗下的免费开源安全项目,全称应该是:Opensource Runtime Application Self-Protection 开源实时程序自保护系统。它隶属于百度 OAESE 智能终端安全生态联盟,是其中五大开放技术之一。
作为一个把复杂科技讲简单的媒体,我总结这套系统的功能就是——检测网络入侵,从而发现漏洞。
在这类功能的系统中,最著名的要数 WAF,也就是 Web 应用防火墙。WAF 被设置在应用的外部边界上,可以通过特定的规则和模式识别出恶意请求,并且把它们拒之门外,是一种被广泛应用,连程序员家的猫都知道的网络安全系统。
我们就是想颠覆 WAF!
难以想象,一个不爱说话只对你呵呵笑的宅男工程师在沉默了五秒之后突然认真地看着你,没有一点过度直接说出这么一句“豪言壮语”。
一、颠覆 WAF 的 OpenRASP 到底是神马?
在 c0debreak 看来,传统 WAF 存在一个非常大的问题,概括起来就是:“因为不够深,所以不够爽”。为了对比二者的技术实现方式,下面我们以一幢办公楼的安保来举个例子:
WAF——门卫模型
WAF代表大楼的门卫,很遗憾这里的门卫并没有朝阳大妈那种柯南般的智慧。每当走进一个人,他只会拦下来问:“来者何人?”并且把这个人的形态样貌和手里的册子(特征库)一一核对。如果不是“在案”的坏蛋,就一律放行。
虽然特征库在不停升级,但是从坏人的角度来看,这样的门卫并非无懈可击。如果我是小偷,我今天来的时候可以戴一顶红帽子,明天可以换一顶绿帽子,后天甚至男扮女装。对于技术水平一般的 WAF 来说,很可能“穿上马甲你就不认识我了”。而智能程度高一些的 WAF,可以利用技术识别出一些“变装”伎俩,但这时对方同样可以用“整容”甚至“换人”的方法,加大成本再次骗过门卫的眼睛。
如果想有效地阻止坏人,WAF 必须以非常高的频率升级特征库,但即使是这样,它仍然无法摆脱两个弊端:1、永远追在敌人后面跑。2、高居不下的误报率。
OpenRASP——管家模型
RASP 技术,干脆选择了另一个思路,它把防护系统跑在每一个应用内部。还是以大楼作比喻,这相当于在每个办公室里都设置了一位管家(就是上图这个 Superman)。无事不登三宝殿,坏人进入大楼,肯定是要做坏事的。所以 RASP 的思路是:你长了一张什么脸我并不关心,重要的是你有没有在房间里做出“攻击动作”。
c0debreak 给我看了 OpenRASP 的技术文档,里面列举了25类“攻击动作”。
这其中包括:数据库 SQL 注入、数据库慢查询、任意文件上传、敏感文件下载等等。。。
每一个攻击场景,都有具体的代码描述,而这种描述,相比 WAF 上繁复的规则要简单许多。正如世界上的骗局有千万种,但最后无外乎是把你口袋里的钱掏出来;世界上越狱的方法有千万种,但最终的动作都是离开牢房;汉子们对姑娘的花言巧语永远在翻新,但最终目标都是【此处省略三个字】。只要你能站在事件的逻辑中心,分辨出真伪善恶就相对容易很多。
利用对“攻击动作”的判断,OpenRASP 可以比较精准地揪出恶意攻击行为,有了恶意行为,就可以由此回溯,找到未被发现的漏洞。
二、OpenRASP 厉害在什么地方?
如果不考虑技术实现的难度和成本,显然为每间办公室单独设置一个管家比在大门口设置门卫的模式更为安全,因为管家们可以看到门卫看不到的“详情”。类比到 WAF 和 OpenRASP 上,这意味着两种安全系统可供判断的信息量是不一样的。
WAF 掌握的是软件的“入口流量”,
而 OpenRASP 却掌握了内部所有动作的“上下文联系”。
这同样可以用一个例子来说明:
在 WAF 所代表的“门卫模型”中,如果一个人带着锤子进入办公楼,门卫无权拦截他,因为这个人并没做什么伤天害理的事情,而且依照规章,带锤子进入办公室也未尝不可。
在 OpenRASP 所代表的“管家模型”中,同样还是这个人,进入办公室之后,却猛地用锤子砸向文件柜上面的锁,那么毋庸多言,管家上来一个扫堂腿撂倒便是。
你看,之所以门卫不敢拦下这个拿锤子的人,就是因为他不掌握这个人接下来的行动信息。而房间里的管家,却是有充足把握做出判断的。
实际上,OpenRASP 身处应用内部,还有诸多的好处。为了说明 OpenRASP 技术的优点,c0debreak 用了四个关键词:
1、误报
广义的黑客“攻击”,应该包含两个方面:1、扫描;2、实际进攻。这大概对应着窃贼的“踩点”和“盗窃”两个步骤。
这里有一个重要的认知:“踩点”本身是不违法的,甚至对你来说是不用在意的。
为什么这样说呢?看过阿凡提的叔叔阿姨们应该记得,有一集讲的是盗贼挨家挨户踩点,最终选定了几家作为盗窃对象,并且在门口标记了记号准备晚上“光临”。(当然阴谋被神勇的阿凡提发现了并且把每一家门口都画上了同样的记号)
科普一下窃贼在你门口做标记的含义
我想说的是,你家大门被各种人打量,并不意味着你一定会被盗。说回黑客攻击,借助自动化工具,黑客进行的扫描行为可能是实际进攻行为的万倍或亿倍之多。这是一种典型的“广种薄收”的策略,绝大多数扫描仅仅停留在扫描。如果你的系统没有攻击价值,或没有他掌握的漏洞,黑客根本就不会对你采取下一步动作。
有了这个背景知识,你就可以进一步感受 WAF 和 OpenRASP 的区别了。
c0debreak 给我举了个栗子:
如果有人扫描了一个根本不存在的路径,这很可能就是自动化程序进行的扫描,产生威胁的可能性非常小。但是由于 WAF 不掌握应用内部的信息,它没办法判断扫描的危害性有多大,因此保险起见只能报警。
这时 OpenRASP 的优势就非常明显,它知道应用内部的路径,所以就会选择不报警。
这就是 OpenRASP 误报率低的原理之一。
2、兼容
如果你看过《唐人街探案2》或者更早的《不见不散》,你可能记得里面都出现了中国人教美国警察说汉语的细节。为啥美国的警察要学说汉语?很简单,因为作为安全保卫者,需要和你的被管理者有语言交流。
一个正常的应用,在URL里面用“&”来分割请求参数,但是,在有些语言中,也可以用“;”来分割。如果你不知道参数还可以这样写,那么你一定会漏掉一些攻击的代码。
c0debreak 说。
还是之前的原理,WAF 存在于应用之外,它不知道也不关心应用本身是什么语言写成的。这就很难完全兼容后端应用的特性,而 c0debreak 和团队,根据 Java、PHP 等每一种语言来独立开发。这虽然会耗费很多时间和精力,但是换来了非常好的兼容性。
3、应用热补丁
正如之前所说,同一类漏洞,在黑客手里可能被披上各种伪装来使用。这些相似的攻击方法,在 WAF 看来却没有内在联系,对于每一种都要逐一添加规则。其实,这样做的最大问题并不在于“笨”,而是在于“慢”。
一旦黑客成功突破进入系统,就有可能迅速安插后门。后门设置成功,就相当于多了一条供他来去自由的密道,根本不用再走大门。WAF 再想发现他的难度就大大增加。
而 OpenRASP 在应用内部,把攻击动作抽象成为一种“OGNL表达式”,大意就是透过现象看本质,任你千路来,我只一路去。只要是利用原理相同的攻击手法,无论外表怎么翻新,都可以被直接识别。
这就是 c0debreak 所说的“应用热补丁”,从某种程度上说,它可以防护“未知攻击”。
最近三年,Struts 漏洞被爆出三十多个,但是针对这些漏洞的利用方法,其实都收录在我们的25条攻击套路之内。根据我们的测试数据,是完全可以拦截的。
他说。
4、安全编码
既然把 OpenRASP 比作是“办公室”里的管家,那么除了“抓贼”的作用以外,他一定还有帮你做好内部安全规范的作用,比如机密文件不能随意放置,不要把钥匙挂在锁上等等。。。
在企业服务器里,这种情形同样存在:
数据库查询的时候,有哪些字符串的拼接是不能出现的;哪些敏感的函数是不能让数据库自己使用的,等等这些编码规范问题造成的漏洞,应该在研发阶段就消灭在萌芽里。如果 OpenRASP 被嵌入在应用里,随着系统开发流程,这些错误都能被警告和纠正。
c0debreak 说。
另外,OpenRASP 还可以辅助服务器调整安全基线,例如服务器的某些安全策略是不是被开启,是不是存在弱密码等等问题。
从这几点来看,OpenRASP 确实很有前途。
三、“OpenRASP”的“Open”
其实,有关 RASP 的理念,早在2014年就已经被提出,并且被世界顶级咨询公司 Gartner列为应⽤安全领域的“关键趋势”。
这就让我想到两个问题:
1、为什么四年以来,RASP 仍然没能取代 WAF 的江湖地位?
2、百度安全现在推动这种技术,是否有前途呢?
这两个问题,还真不太好回答,不如来看三个小故事。
1st
CPU 性能损耗 20%。
“卧槽!”c0debreak 看着这样的数据,内心其实是崩溃的。
此刻是2017年9月,这就是 OpenRASP 最初版本的性能。
其实他内心比谁都清楚,性能本来就是 RASP 技术相比传统 WAF 的最大劣势。毕竟在每个应用内部都强势安插了那么多“内线”,这些进程人吃马喂,哪个不向 CPU 要粮饷?
一个安全进程消耗了 CPU 20% 的性能,就好比你请的管家要花掉全家五分之一的收入,不用说,连我都知道不会有人买单。(不过 OpenRASP 是开源项目,本来就不需要花钱。即使这样,这种指标还是意味着帮倒忙。)
他知道,自己和团队掉进了一个所有 RASP 技术开发者都曾经掉进的坑。这样的性能指标拿出去,百度丢人,百度安全也丢人。更可怕的是,为了降低社区参与的门槛,团队采用了之前没人在这类产品上使用的 JavaScript(JS)语言编写了所有的检测逻辑。以至于连可参考的前人经验教训都没有。
项目上线的几个月的时间里,团队都在为解决这个问题发愁。走投无路的时候,他们甚至都已经决定放弃之前的所有代码,把编程语言换成 Lua 重新开发。实际上,他们已经着手开始做新的 Demo 了。
很巧,某日一位团队小伙伴忽然抬起头,用百度程序员特有的冷静语气对 c0debreak 说:那个,我好像找到了解决的办法。。。
他的办法就是,用火狐最新版的 Rhino 引擎替代之前的谷歌 V8 引擎来编写代码。
就是这个从来没有人尝试过用的 JS+Rhino 组合,把 CPU 的性能损耗迅速降到了1%-5% 的可用水平,作为 RASP 产品中唯一开源的一个,OpenRASP 的性能开始超越市面上大多数的商业产品。这让 c0debreak 和团队大松一口气。因为就在几个月以前,项目还是“生死未卜”的状态。
2nd
时间倒回2017年8月。
此时的 c0debreak 还在焦灼地等待一个“判决”。
一个月以前,他就把 OpenRASP 的项目计划书递交领导审核了,百度安全实验室的负责人韦韬从技术角度很快开了绿灯,现在项目就放在百度安全总经理马杰的桌面上,等待他最后拍板。
但是一个月的时间过去了,没有音信,c0debreak 慌了:“我感觉当时这个项目要被砍了,觉得蛮可惜的。”
而另一边,马杰面对 OpenRASP 的计划确实有些犹豫。但让他拿不定注意的最主要原因,不是“RASP”,而是“Open”。
久经沙场的安全“老炮儿”马杰非常明白,要运营一个开源项目,靠的可不是头脑一热。
首先,开源项目需要投入很大精力来宣传和经营,如果发出去就不管了,那么命运肯定是死路一条,这些年轻人是否能坚持下去是个未知数。
其次,开源项目是免费的,需要通过建设生态来实现效益,而 OpenRASP 团队没人有开源项目的经验,未来要面对的挑战确实不小。
但是,沉默寡言的 c0debreak 在这件事上表现出少见的坚持,他三天一个表决心,五天一个问进度,一副赴汤蹈火永不言败的姿态。
纵然有所推迟,但马杰最终给这个年轻人投出信任票;c0debreak 拿到批复,没有多说一个字,火速开工。这是一个典型的属于百度的温情故事。
3rd
其实“开源”两个字,很能代表最近两年百度身上发生的变化。
从开源深度学习平台 PaddlePaddle 到开源自动驾驶平台 Apollo,看上去百度要在开源这条路上越走越远了。
OpenRASP 也是这条路上的一份子。
某种程度上说,一个开源项目的运营,靠的不仅仅是核心技术团队,而是认同这个项目的社区中的每个人。
除了技术开发本身,让这个项目获得更多的认同,也是 c0debreak 迫切要做的事情。
他在百度内部各个部门“奔走呼号”,先说服几个部门灰度测试了 OpenRASP 系统;几个月来,他还在公众平台上不断发布 OpenRASP 的技术解析文章,“以死相逼”让身边的技术大牛转发宣传;他甚至找来一些比较成功的开源项目,从他们的代码提交记录里一点点学习运营开源项目的经验。
功夫不负有心人,百度安全实验室老大韦韬转发的一篇文章引起了OWASP(开放式Web应用程序安全项目组织)的关注,几天后,OpenRASP 的介绍出现在了OWASP 的网页上。
也就是在这些日子,OpenRASP 的技术交流 QQ 群不断涌进来很多人。c0debreak 马上带着三个同事客串客服,忙得不亦乐乎。
一开始人们问的都是怎么安装怎么配置的问题,到后来,问题就变成了支持什么型号的服务器,支持什么架构。项目主页上用于点赞的“Star”按钮,也开始有人点击。
OpenRASP 项目在 GitHub 上的主页
几个月的时间里,c0debreak 和同事每天盯着 Star 的个数。每多一个 Star,他们都感觉爽爆了。
2018年2月4日,对他和团队来说是一个值得纪念的日子。这一天,OpenRASP 收到了第一份“Pull Request”,也就是代码合并请求。“社区中有人对项目的代码进行了升级,并且想合并到主代码中,这意味着有人开始主动为社区做贡献了,开源的意义真正被体现出来了!”他兴奋地说。
就在一个星期以后,团队又收到了一封来自西班牙的邮件,那位程序员用英语询问 OpenRASP 什么时候可以支持 PHP 语言。c0debreak 满怀激动地认真回复了邮件,要知道,他们甚至还没来得及把技术文档翻译成英文,目前只有官网上有一些简单的英文Q&A。
c0debreak 觉得,这个项目的发展甚至超过了自己最好的预期。短短几个月时间里,唯品会、苏宁、携程、科大讯飞、绿盟等等大企业都已经开始内部测试这套系统,并且根据这套开源代码定制自己需要的版本。
和这些用户交流,询问他们的意见和需求,现在成为了 c0debreak 重要的工作之一。
他盯着屏幕上已经累积到300多的“Star”,严肃地说:“看来未来几年,我都要全心投入在这个项目上了。”
在 Github 页面上,标注了项目的路线图和里程碑
三个故事讲完了。
可能你心中的疑问被解开了,也可能你有了更多疑问。
c0debreak 和百度安全的同事们创造了 OpenRASP,并且奋力让它成长至今。他们想要的东西很简单,那就是让更多人了解 OpenRASP,认可 OpenRASP,愿意为 OpenRASP 做点什么。
打开网络空间搜索引擎 Shodan,里面已经可以查到很多第三方公司利用 OpenRASP 做的安全项目。至于他们是谁,具体怎样使用 OpenRASP,c0debreak 并不了解,但他感到很幸福。“润物细无声”,这正是开源的魅力所在。
在 Shodan 上,搜索到“OpenRASP”的地区,就会被标为红色,现在地图上只有四个国家。我问 c0debreak 未来的计划,这个技术宅楞了一下,然后把手一挥,说:“全变成红色。”
我突然明白,对于开源世界来说,最好的姿态莫过于:
心怀梦想,信马由缰。
再自我介绍一下吧。我叫史中,是一个倾心故事的科技记者。我的日常是和各路大神聊天。如果想和我做朋友,可以关注微博:@史中方枪枪,或者搜索微信:shizhongst。
不想走丢的话,你也可以关注我的自媒体公众号“浅黑科技”。