OpenRASP是百度安全推出的一款开源、免费的自适应安全产品,目前与国际知名非盈利安全组织 OWASP(Open Web Application Security Project)达成深度合作,现已加入到OWASP全球技术项目中,将在全球范围内进行大规模推广。OpenRASP将新兴的RASP(Runtime Application Self-Protection)安全防护技术普及化,使其迅速成为企业Web安全防护中的一个重要武器,有效增强防御体系纵深和对漏洞防护的适应能力。

据上一个版本发布相隔约2个月,百度安全此次发布为OpenRASP v0.40版本。


What's New


正式支持PHP 7.X

 

在 v0.40 版本里,我们加入了对PHP  7.0 ~ 7.2 版本的支持,支持范围依然是 apache + php 模块、nginx + php-fpm、php -S 命令行服务器三种形式。

 

在开始之前,我们先来了解下PHP 7自身在安全方面有什么变化:

  • unserialize() 增加了 allowed_classes 参数,可以白名单化允许的类

  •  preg_replace() 不在支持 /e 参数

  •  assert() 函数改为OPCODE,不能再用于实现一句话后门

  •  

 

有兴趣可以查看官方的迁移文档,http://php.net/manual/en/migration70.php,里面详细的说明了PHP 7的新语法和新特性。下面我们来看下 OpenRASP 在 v0.40 版本里,都有哪些变化。

 

检测能力增强

 

在保证性能的同时,我们修复了多个用户反馈的绕过问题。

 

首先,我们增加了SQL PreparedStatement 的检测支持。以今年4月份爆出的 ThinkPHP 5.X inc 注入漏洞为例,

 

http://127.0.0.1/index.php/index/index/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1


在增加了对 PDO::prepare 的监控后,OpenRASP 用户输入匹配算法可以正常检测这个SQL注入:

image.png

报警消息为,

“SQLi - SQL query structure altered by user input, request parametername: username”


其次,我们增加了对 rename 的监控。以最近 wisdomtree爆出的 Dedecms V5.7 后台文件重命名[CVE-2018-9134]漏洞为例,

image.png

(图片引自先知社区)

虽然前台不允许上传PHP脚本文件,但是利用漏洞,你可以先上传一个 zip文件,再重命名为php文件,这就间接的上传了webshell。其中,最后一步重命名的请求如下,

 

http://localhost/dede/file_manage_control.php?fmdo=rename&oldfilename=uploads/userup/1/15324bc8-1343.zip&newfilename=shell.php


由于OpenRASP 监控了 rename 操作,并拒绝将非脚本文件重命名为脚本文件,所以正常的拦截了个这个攻击:image.png

报警消息为“File upload - Renaming a non-script file to server-sidescript file, source file is /var/www/html/uploads/userup/1/15324bc8-1343.zip”

 

最后,我们根据用户反馈,修复了一些绕过问题。感谢 Leesec、Ezreal、隐形人真忙、dos_man等白帽子(按照反馈时间排序)对OpenRASP的支持和测试,一些值得关注的修复有:

  • SQLi 增加对 INTO OUTFILE 的检测

  • SSRF 增加对 php:// 的检测

  •  文件目录遍历修复一个 /../../ 检测绕过的问题

更多内容请翻到最下方,查看我们的发版纪要。


Loopback


从今年2月份开始,我们陆陆续续的收到一些国际友人的邮件和Github ISSUE,其中一些还比较有意思,给大家分享下。


第一封 - RuchirGupta,一个擅长机器翻译的小伙

image.png

简而言之,Ruchir希望帮助OpenRASP维护一个英文版的仓库,然后他说我已经帮你翻译好了,你快来看看我的作品!看到这封邮件的时候我表示非常惊讶,毕竟仓库里有30w行代码、Kibana配置、Splunk插件、单元测试,这是一个团队一个月都不可能完成的工作量。

在打开仓库的一瞬间,我崩溃了:

image.png

原来是机器翻译,早该想到的。但是,这并不是高潮。我将上面这句“配置是否成功”贴到谷歌翻译里之后,这个翻译居然是正确的!

image.png

所以,小伙你到底是用的什么工具? 


第二封 – 自告奋勇的DanielRuf

image.png

Daniel就比较实在了,不会中文就不会中文嘛!没什么丢脸的。DanielRuf想帮我们开发 nodejs 版本,不过由于我们的代码和注释大多是中文的,要花一些时间翻译,编写项目计划和新语言开发指南。


话说回来,作为国际化的第一步,我特意在 v0.40 里将所有的报警和调试消息全部改为了英文,并在下个版本增加多语言支持。在这里,我们希望能够招募一些志愿者,帮我们一起翻译文档、代码等等,有兴趣可以直接在QQ群(259318664)联系群主。