云锁在V3版本当中加入了RASP技术来防止未知攻击,支持java .net php,JAVA/NET官方已经给出了详细的说明,但是PHP却没有,经过博主一番使用下来,总结了以下内容:

RASP“Runtime application self-protection”应用运行时自我保护技术,是奇安信椒图云锁服务器安全管理系统(简称云锁)web攻击防护的核心组件之一,是构建在WEB语言解释器中的异常行为检测引擎。
在2014年的时候,Gartner引入了“Runtime Application Self-Protection”一词,简称为RASP。它是一种新型应用安全保护技术,将保护程序像疫苗一样注入到应用程序中,与应用程序融为一体,能实时检测和阻断安全攻击,使应用程序具备自我保护能力,当应用程序遭受到实际攻击伤害,就可以自动对其进行防御,而不需要进行人工干预。云锁在2015年时即集成了RASP能力,是国内最早研究并应用RASP技术的安全产品。

RASP通过HOOK函数的方式,可以细粒度的监控应用脚本的行为及函数调用上下文信息,及时发现恶意代码和漏洞利用行为,缩小攻防信息不对称的时间差,有效降低未知安全威胁造成的破坏。

实现原理如下:

Module init 埋钩子,HOOK全局函数/内部函数

Hook内部函数:

判定webshell及利用工具,如菜刀/冰蝎/哥斯拉/cknife/weevely

文件包含类攻击

Hook全局函数:

命令执行、文件上传、任意文件读写、SSRF

为什么这里要提到这个呢?因为云锁的“高级防护”功能需要RASP的支持,如果对应的系统在开通高级防护后没有安装RASP插件,则”高级防护“的大部分功能会使失效状态。

版本要求

1.云锁公有云版需要V3.1.20.24及以上版本;
2.php版本>=5.2,<=7.4。

安装插件

linux安装

默认一键安装

云锁防护界面如果可以识别到php进程,可以直接一键安装,如图:

点击RASP图标,云锁会自动完成php语言RASP插件的加载,和php的重启,完成后即可使用。

手动安装

当你同时安装了多个版本的php时,云锁自动完成第一个php版本的RASP加载之后,就无法再从这里一键加载了(可能是bug),我们可以通过手动方式加载RASP插件,如果宝塔的php位置只有关闭端口选项,也可尝试手动加载。

1.先确认php是运行在安全模式下还是非安全模式(nts)下,还是安全模式下(ts),如果是宝塔面板就是nts;
2.拷贝php拓展插件到php拓展库目录。
云锁php.so存放位置:/usr/local/yunsuo_agent/php/,php拓展存放位置:php安装目录/lib/php/extensions/no-debug-non-zts-xxxx,复制到这里,请注意是nts还是ts;
3.编辑php配置文件,php安装目录/etc/php.ini
在“Module Settings”下输入如下配置:

extension=****

*替换为复制的那个.so的文件名

4.保存后重启php,然后刷新云锁应用防护查看phpRASP插件按钮是否已经亮起(由灰色变为绿色)

Windows安装

IIS自动安装

当你的服务器使用IIS时,在安装IIS防护插件时,经过实测云锁会自动完成php插件的安装,但如果你的服务器中安装了多个版本的php时,只会加载当前系统的php版本的插件,你可以在php.ini文件中搜索secmod,如果能搜索到“extension=php_secmod.dll”则说明使用该版本的php可以享受到RASP带来的保护,如果搜索不到就说明没有RASP,需要自己手动安装。

如果你是IIS用户,在php配置文件里无法搜索到“extension=php_secmod.dll”,请尝试手动安装。

手动安装

如果你安装了多个php版本或者使用的是apache httpd(经过实测,安装apache插件的时候,不会自动触发php插件的安装),总之,就是php.ini里搜不到“extension=php_secmod.dll”的都可以尝试手动安装,安装方法:

1.首先你要确定自己的php是32位版本还是64位版本,可以到phpinfo中去查看,如果是32为版本,则插件存在于云锁安装根目录下,如果是64位版本则插件存在于云所安装目录的x64目录下,在相应位置找到secmod开头的dll文件,那就是了;云锁默认安装路径为C:/Program Files (x86)/YunSuo/YunSuoAgent;

2.确定php版本是安全线程版本(ts)还是非安全线程版本(nts),查看方法可自行百度,这里不再赘述,在插件存放位置找到对应版本的插件,如php5.6非安全线程版本对应的插件文件为“secmod_5.6.x_nts.dll”

3.将dll文件拷贝到php程序目录/ext/目录下并重命名为“php_secmod.dll”;

4.打开php.ini文件,搜索“Module Settings”,在下方输入

extension=php_secmod.dll

4.保存php.ini文件并重启php,windows下不会再应用防护里显示,开通高级防护后,防护会实时生效。

开通高级防护

云锁RASP需要开启高级防护(150元/月),开启后,通过在脚本解释器中插入RASP探针,可以对应用系统的流量、上下文、行为进行持续监控,识别及防御已知及未知威胁。能有效防御SQL注入、命令执行、文件上传、任意文件读写、反序列化、Struts2等基于传统签名方式无法有效防护的0day应用漏洞,支持php 、.net、asp、java语言。

具体防护项目包含以下内容:

防护项目规则项
命令执行禁止所有WEB请求执行命令
禁止通过反射执行命令
禁止通过反序列化执行命令
禁止通过表达式执行命令
禁止通过请求参数执行命令
禁止通过 Webshell 执行命令
禁止通过特定规则执行命令
任意文件读取禁止通过反序列化读取文件
禁止通过表达式读取文件
禁止通过请求参数读取文件
禁止通过 Webshell 读取文件
禁止通过特定规则读取文件
任意文件写入禁止通过反射写文件
禁止通过反序列化写文件
禁止通过表达式写文件
禁止通过请求参数写文件
禁止通过 Webshell 写文件
禁止通过特定规则写文件
任意文件上传禁止通过 multipart/form-data 方式上传脚本文件
XXE外部实体加载禁止外部实体加载
禁止 ftp:// 等异常协议加载外部实体
禁止通过反序列化加载外部实体
SSRF 请求伪造防护禁止伪造 http 请求
禁止伪造 gopher 请求
SQL注入漏洞防护禁止 SQL 注入漏洞利用

如果安装RASP插件后,没有开通高级防护,当云锁检测到未知攻击后,将只报警不拦截,若开通高级防护后没有安装RASP插件,则防护无法生效,云锁RASP拦截到的攻击不会在云锁PC端上查询到,而是会在云中心生成事件报告,你需要登录到云锁云中心web端查看事件报告(查看报告需要开通事件管理,150元/月/账户)。

云锁防护模式

1.什么是RASP

RASP“Runtime application self-protection”应用运行时自我保护技术,是奇安信椒图云锁服务器安全管理系统(简称云锁)web攻击防护的核心组件之一,是构建在WEB语言解释器中的异常行为检测引擎。RASP通过HOOK函数的方式,可以细粒度的监控应用脚本的行为及函数调用上下文信息,及时发现恶意代码和漏洞利用行为,缩小攻防信息不对称的时间差,有效降低未知安全威胁造成的破坏。

2.云锁的RASP工作原理

通过上图我们可以看到云锁大致的工作流程,

①WEB攻击流量,首先经过⑥系统层监控及防护模块内置的防火墙模块后到达web中间件(IIS、apache、nginx、tomcat等)时会经过WAF探针模块的监控及过滤,通过防护规则(基于签名)可以有效的防御已知安全漏洞攻击,用户也可以自定义防护规则。

②WEB流量在中间件内部会被转发给语言解释器内部运行的WEB业务脚本文件,此时RASP探针模块开始工作,探针会对WEB流量以及③文件操作及数据库操作等行为进行监控,基于无签名的方式对已知及未知威胁进行监控及防护。同时⑥系统层监控及防护模块也会对WEB进程的危险行为进行监控及防御。

④⑤当RASP探针模块以及系统层监控及防护模块检测到异常脚本行为时,首先通过本地基于特征库的WebShell引擎进行检测,当本地引擎无法检出时,会将脚本文件上传到私有云中心上的WebShell检测沙箱进行检测,并根据检测结果及当前的防护模块的工作模式进行处置,防护模式下,会对WebShell文件进行自动隔离(可恢复)。

注:WebShell沙箱是基于脚本虚拟机的无签名Webshell检测技术,工作在云中心上,可以有效检测一句话木马,以及加密、变形的Webshell。

以上内容摘选自:https://mp.weixin.qq.com/s/Aq_qe-_AELLCGnc9qLOCxg

防护测试

怎么知道RASP是否已经工作了呢?很简单,直接将PHP大马上传到服务器上,并执行php木马,看一下会不会拦截就知道了,如下是本站所做的验证测试,我强烈建议你随便找一个免杀马上传到服务器里进行测试,以确保防护是生效了的,不然即没有安全防护,钱也白花了。

1.本次准备的php大马如下:

php大马功能强大且完善,并且核心代码加密以躲避杀毒软件查杀,常规检测手段对已知木马有较好防护效果,但对未知的木马防护效果较差。

注:此木马云锁基础防护即可拦截(已被特征库收录特征,因此会被云锁查杀),此处为验证RASP,我们关闭了webshell实时监控和网页浏览实时防护功能,这样,就完全是RASP本身在防护。

“未知Webshell防护”为基于沙箱的防护以及污点追踪等方式进行防护,对于加密、变形的木马,云锁可以实现不依赖webshell引擎的动态实时防护,需要表现出恶意行为才会拦截,直接访问是不会拦截的,当云锁通过行为检测出是未知webshell时,会阻止运行并隔离木马文件,当此项被绕过后,其他的防护项可以尽量缓解恶意行为对服务器及网站带来的安全威胁,如SQL注入、命令执行等。

运行截图:

可以看在无防护的情况下,该木马已成功运行。

在无防护手段的情况下,木马可以读取系统目录文件并进行读取、修改、删除,木马可以执行命令,反弹shell等进一步对服务器进行提权、植入二进制后门、挖矿程序、勒索病毒等。

一、测试云锁拦截命令执行
在命令执行时,云锁会在命令执行时拦截命令执行,请保持高级防护的“命令执行漏洞防护”为开启状态、

可见,当webshell尝试执行命令时,无论是低危命令还是高危命令,云锁都会将其拦截,保护服务器不被进一步入侵。

二、云锁拦截任意文件上传漏洞,当应用存在上传漏洞时,攻击者可以直接上传webshell文件到服务器,是非常危险的,云锁可以通过RASP获取到应用的流量及行为信息,在webshell上传时将其拦截,为保证防护效果,请保持云锁的“未知上传漏洞防护”为开启状态。

从图中我们可以看到,当通过程序的上传上传php及其他可执行程序时,云锁会立刻阻断。

三、对于云锁的“未知webshell实时防护”功能,在这里解释下,经过实测,他其实是不依赖云端(无规则脚本虚拟机)的,由于资料缺乏,只能凭借云锁此前的发布会和公开资料猜测,这项功能应该是基于动态污点追踪、符号执行检测实现的,检测到疑似webshell活动时,会立即阻断访问并隔离木马文件。

拦截webshell执行会显示如下页面,并将webshell程序自动隔离:

注:云锁的”高级防护“并不是万能的,RASP虽然极难被绕过也极难被免杀,但仍有被绕过的可能,因此不要过分依赖,关注开发安全、及时修复漏洞、结合威胁情报、WAF、系统加固、权限控制等形成纵深防御体系才是王道。

查看日志

如上面的示例,当云锁高级防护拦截时,日志会在云中心记录,不会再云锁客户端上查询到。

登录到云中心:https://console.yunsuo.qianxin.com,可以看到云锁已经生成事件日志,并自动回溯攻击过程。

事件摘要
事件摘要

事件详情
事件详情

同时,通过IOC可以看到攻击过程、判定为未知木马的原因、执行命令等情况:

参考资料

1.RASP在攻防实战中的应用(https://mp.weixin.qq.com/s/VIxQmcvnsFMzUd4w6PocoQ
2.大马小马内存马 椒图全部都通杀(https://mp.weixin.qq.com/s/XCTAqUdoLizGXSNVmAaYIQ
3.【防护技术】奇安信云锁RASP防护能力说明及常见使用场景(https://mp.weixin.qq.com/s/f-uEEvKuhUD4UF0FgsgCQw
4.椒图科技李栋:主机的未知安全威胁检测与防御(https://mp.weixin.qq.com/s/Aq_qe-_AELLCGnc9qLOCxg
5.云锁_RASP_高级防护(https://yunsuo.qianxin.com/cloud/advanced
6.砍了澳洲战斗机的「中国菜刀」该如何防范(https://mp.weixin.qq.com/s/egXpeLPVOdsg30e3ffjOTA
7.吴康 《利用沙盒(无规则脚本虚拟机)检测加密及未知Webshell》