A09.使用RASP对金戈企业网站进行安全防护

使用RASP对金戈企业网站进行安全防护

基于RASP技术的OpenRASP

早在2014年,Gartner公司提出了RASP(Runtime Application Self-Protection,应用运行时自我保护)的理念,并将其列为应⽤安全领域的“关键趋势”。

百度的OpenRASP将RASP技术进行了开源实现,OpenRASP 抛弃了传统WAF依赖http请求特征检测攻击的模式,直接注入到被保护应用的服务中提供函数级别的实时防护,可以在不更新策略以及不升级被保护应用代码的情况下检测/防护未知漏洞。OpenRASP直接将其保护引擎集成到应用程序服务器中。它可以监控各种事件,包括数据库查询、文件操作和网络请求等。

与 WAF等边界控制解决方案不同,当攻击发生时,WAF将恶意请求与其签名匹配并阻止它。OpenRASP采用不同的方法,通过Hook(挂钩)敏感函数,检查/阻止传递给它们的输入。这意味着OpenRASP比WAF工作在更底层,无论是什么样的请求,最终都要传递给动态程序语言的函数去处理,OpenRASP通过挂钩敏感函数,监测恶意行为。

目前,OpenRASP仅支持Java和PHP两种开发语言。可以在Linux操作系统中的PHP5.35.6,7.07.3,RHELL/CentOS 6 以及更高版本环境中安装。OpenRASP详细介绍文档请参阅:

https://rasp.baidu.com/download/OpenRASP Internals.pdf

OpenRASP的自动化安装

注:此处过程示例金戈网站使用的PHP版本为5.5.38。

首先,下载OpenRASP,官方地址:https://packages.baidu.com/app/OpenRASP/release/,下载前需要检查PHP的Thread Safety选项。我们之前实验环境的PHP版本都是nts版本,即非Thread Safety版本。但还是通过phpinfo确认一下Thread Safety选项的值,如果是disabled,就下载nts版本rasp-php-linux.tar.bz2。此次实验选用的是1.36版本。

那么ts和nts是什么意思?
ts(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其它线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染,php以ISAPI方式加载的时候选择这个版本。
nts(None-Thread Safe)即非线程安全,就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的是脏数据,php以fast-cgi方式运行的时候选择这个版本,具有更好的性能。

此外,安装OpenRASP需要以下PHP扩展:pdo、pcre、json,请通过phpinfo查看是否安装了这三个扩展。

下载OpenRASP的安装文件rasp-php-linux.tar.bz2,再上传输到Linux上,也可以在Linux上使用wget直接下载。

tar.bz2格式的压缩包需要使用命令:tar -jxvf rasp-php-linux.tar.bz2来解压。

如果提示以上内容,bzip2:cannot exec,则是没有安装bzip2扩展,使用命令:yum -y install bzip2安装bzip2后再执行命令:tar -jxvf rasp-php-linux.tar.bz2即可正常解压。进入解压后的文件夹之后的内容应该如下图所示:

执行以下命令,开始自动化安装。

php install.php -d /opt/rasp

其中,-d /opt/rasp是指定安装目录,用于存储检测插件、报警日志等等,可根据实际情况调整。在某些情况下,php cli和php-fpm使用的ini不同,自动安装程序可能会失败。

如遇以下情况,则需使用命令setenforce 0临时关闭Selinux,然后重新执行安装命令。

待重新执行命令后,正常返回应该是以下的情况:

最后一点告诉我们安装完成,没有错误,请重启PHP服务。

安装完成之后,默认的是观察模式,发现非法请求只会写入日志文件,不拦截。因此需要手动开启拦截功能。编辑official.js文件,将 all_log 的值从true改为 false,打开拦截模式。

vi /opt/rasp/plugins/official.js

编辑完成后,保存文件并重启服务。

在web根目录创建一个phpinfo.php文件,其内容为:

<?php phpinfo();?>

在浏览器中访问此网页,搜索OpenRASP,如果查询到OpenRASP表明已经安装成功。

验证OpenRASP的防护效果

在测试OpenRASP之前,我们对金戈网站进行SQL注入,是可以正常获取想要的内容的:

http://192.168.142.146/new.php?id=0 union select 1,2,3,4,root_name,root_pass from root

安装完OpenRASP后,再次使用以上SQL注入语句进行效果测试,结果如下图所示。

OpenRASP检测到了恶意行为,将网页重定向到了这个页面,并提示“您的请求包含恶意行为,已被服务器拒绝”。

OpenRASP的自动化卸载方法如下:

进入 rasp 安装包解压目录,例如rasp-php-2021-02-07,并执行如下命令

php uninstall.php -d <openrasp安装目录>

然后重新启动web服务。完成卸载。之后通过phpinfo的输出确认openrasp已经卸载成功。

由于接下来,我们要进行OpenRASP手动安装的实验,因此需要卸载。或者也可以使用虚拟机快照技术恢复到没有安装OpenRASP之前的状态。

手动安装OpenRASP

注:此处过程示例金戈网站使用的PHP版本为5.3.29。

手动安装前,需要找到当前php的扩展安装目录和php配置文件的目录。

在浏览器中访问phpinfo.php文件打开这个页面,使用搜索功能,快捷键Ctrl+F搜索关键词:extension_dir,定位到PHP扩展安装目录,从下图中可以看到,我的PHP扩展安装目录是:

/usr/local/phpstudy/soft/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626

然后需要找到php.ini配置文件的路径,通过搜索关键词:Loaded Configuration File,即可定位到php配置文件目录,从下图中可以看到,我的PHP配置文件目录是:/usr/local/phpstudy/soft/php/php-5.3.29/etc/php.ini

确定好这两个目录后,开始安装OpenRASP。将已经下载好OpenRASP压缩包上传到Linux,并解压并进入其目录,找到与PHP对应版本的OpenRASP.so文件。

选择与当前环境PHP版本相符合的openrasp.so所在目录并进入,然后使用以下命令,将openrasp.so文件复制到php的扩展目录内:

cp openrasp.so /usr/local/phpstudy/soft/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/openrasp.so

通过ls命令查看PHP拓展目录,确认openrasp.so复制完成。

还需要给openrasp.so文件755权限:

chmod 755 /usr/local/phpstudy/soft/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/openrasp.so

然后,需要建立OpenRASP的安装目录,我们这里还是使用官方默认目录:/opt/rasp,这个目录将会用于存储检测插件、报警日志、插件日志等内容,需要手动创建,并保证 PHP 进程可以写入:

[root@localhost ~]# mkdir -p /opt/rasp
[root@localhost ~]# chmod 777 -R /opt/rasp

最后,修改 php.ini配置文件,添加如下内容:

vi /usr/local/phpstudy/soft/php/php-5.3.29/etc/php.ini
[openrasp]
extension=openrasp.so
openrasp.root_dir=/opt/rasp

保存退出后,我们还需要安装检测插件,进入下载并解压后的OpenRASP目录,直接将plugins目录移动到/opt/rasp目录下:

cd rasp-php-2021-02-07/
mv plugins/ /opt/rasp/plugins

同样地,还需要编辑official.js文件,并将将“all_log: true,”更改为“all_log: false,”,因为默认发现非法请求只会写入日志文件,打开这个功能就是为了拦截非法请求。

vi /opt/rasp/plugins/official.js

然后重启PHP服务,并使用浏览器打开phpinfo页面,使用搜索功能搜索关键词:openrasp,即可查询到openrasp已启用。之后再次使用SQL注入语句,测试拦截功能是否生效。

总结

我们只使用了少量的测试方法,初步展示了WAF和OpenRASP的防护效果。有兴趣的读者可以使用一些网站漏洞综合扫描工具,如Acunetix WVS、AppScan、Netsparker、OWASP ZAP、OpenVAS等,对网站进行综合扫描,全面测试WAF和OpenRASP的防护效果。

posted @ 2026-05-05 08:00  putiji  阅读(28)  评论(0)    收藏  举报