RASP的诞生
RASP英文为 Runtime application self-protection,即运行时应用程序自我保护。“运行时应用程序自我保护”的概念由Gartner在2014年提出,含义是:对应用服务的保护不应该依赖于外部系统,应用应该具备自我保护的能力。这意味着,RASP在程序执行期间运行,使程序能够自我监控并识别有害的输入和行为。OpenRASP 是该技术的开源实现,它改变了防火墙依赖请求特征来拦截攻击的模式。
RASP 运行在应用程序的内部,监听每一个与应用程序交换的节点,覆盖所有应用程序的访问节点,包括:用户、数据库、网络和文件系统,从而实时监测并拦截漏洞攻击。RASP 的亮点在于“自我保护“,能够在运行时结合上下文采取相应的保护方案。
受RASP保护的应用程序对防火墙等外部设备提供的安全保护的依赖较小,当检测到威胁时,RASP可以防止威胁被利用,并且采取其他操作进行阻止,如终止用户会话,关闭应用程序,警告安全人员并向用户发送警告等。RASP旨在缩小应用安全测试和网络边界控制所留下的空白地带,深入应用运行环境内部,实时了解数据和事件流,以监测或阻止开发过程中无法预见的新威胁。
通俗来讲,RASP将安全保护代码嵌入到运行中的服务器应用程序,它会实时拦截所有的系统调用并确保调用安全,最终实现应用程序自我保护。
OpenRASP VS WAF
首先,形式化的理解WAF与OpenRASP的区别。如果将要保护的应用程序比作一个办公楼,那么WAF的形象就是一个门卫。每当大楼走进一个人,他只会将其拦下来检查这个人的特征,对比特征库,如果这个人不是“在案”的坏蛋,就放行。虽然特征库在不停升级,但是从坏人的角度来看,这样的门卫并非无懈可击。因为一旦坏人换了一顶帽子、穿了马甲,有些技术水平一般的门卫(WAF)就不能识别了。对于智能程度高一些的门卫(WAF),对方可以通过“整容”、“换人”等方式,加大成本再次骗过门卫(WAF)的眼睛。
因此,如果想有效地阻止坏人,WAF 必须以非常高的频率升级特征库,但即使是这样,它仍然无法摆脱两个弊端:
1、永远追在敌人后面跑。2、高居不下的误报率。
OpenRASP相当于在这栋大楼的每个办公室里都设置了一位管家。坏人进入大楼,肯定是要做坏事的。所以 OpenRASP的思路是:你长了一张什么脸我并不关心,重要的是你有没有在房间里做出“攻击动作”。
根据之前的介绍,OpenRASP是在运行时结合上下文采取相应的保护方案,而WAF掌握的是应用程序的入口流量。这意味着这两种安全系统可供判断的信息量是不一样的。
按照之前的例子,在 WAF 所代表的“门卫模型”中,如果一个人带着锤子进入办公楼,门卫无权拦截他,因为这个人并没做什么伤天害理的事情,而且依照规章,带锤子进入办公室也未尝不可。而对于 OpenRASP 所代表的“管家模型”中,同样还是这个人,进入办公室之后,却猛地用锤子砸向文件柜上面的锁,那么毋庸多言,管家直接撂倒便是。
门卫不敢拦下这个拿锤子的人,是因为他不掌握这个人接下来的行动信息。而房间里的管家,却是有充足的信息从而做出判断的。
实际上,OpenRASP 身处应用内部,还有诸多的好处。总结下来,围绕以下四个关键词:
误报率低
从广义的角度来讲,黑客的“攻击”包括两个方面:扫描和实际进攻。这就像是窃贼在盗窃之前对应我们的例子就是坏人的“踩点”和“盗窃”。“踩点”并不违法,甚至不必在意。办公楼被各种人打量,并不意味这一定会被盗窃。黑客使用一种典型的“广种薄收”的策略,借助自动化工具,进行扫描,如果你的系统没有攻击价值,或没有他掌握的漏洞,黑客根本就不会对你采取下一步动作。也就是说,黑客进行的扫描行为可能是实际进攻行为的万倍或亿倍之多。
自动化程序进行的扫描,可能是一个根本不存在的路径。但是由于 WAF 不掌握应用内部的信息,它没办法判断扫描的危害性有多大,因此保险起见只能报警。OpenRASP知道应用内部的路径,所以就会选择不报警。因此,OpenRASP误报率低。
兼容性强
一个正常的应用,在URL里面用“&”来分割请求参数,但是,在有些语言中,也可以用“;”来分割。如果不知道参数还可以这样写,那么就一定会漏掉一些攻击的代码。WAF 存在于应用之外,它不知道也不关心应用本身是什么语言写成的。这就很难完全兼容后端应用的特性,而OpenRASP的开发团队根据Java、PHP等每一种语言来独立开发,虽然会耗费很多时间和精力,但是换来了非常好的兼容性。
防护快成本低
正如上文的例子,WAF无法识别针对同一类漏洞、但是经过不同伪装的攻击。WAF无法识别这些相似攻击的内在联系,因此只能针对每一种攻击逐一添加规则。这样做不只“笨”,而且“慢”。因为一旦黑客成功突破进入系统,就有可能迅速安插后门。后门设置成功,就相当于多了一条供他来去自由的密道,根本不用再走大门。WAF 再想发现他的难度就大大增加。
OpenRASP在应用内部监控实时数据,将攻击动作抽象为一种“OGNL表达式”,只要是利用原理相同的攻击手法,无论外表怎么翻新,都可以被直接识别。从某种程度上说,它可以防护“未知攻击”。
规范应用编码安全
OpenRASP还可以起到做好内部安全规范的作用,比如机密文件不能随意放置,不要把钥匙挂在锁上等等。将OpenRASP嵌入到应用中,随着系统开发流程,可以警告和纠正编码规范问题造成的漏洞;可以辅助服务器调整安全基线,例如服务器的某些安全策略是不是被开启,是不是存在弱密码等等问题。
最后,RASP的不足:
开发难度
RASP 是针对应用程序的,每个应用程序都必须有独立的探针,不能像防火墙一样只在入口放置一个设备就可以了。这样增加了部署困难和防范不完整的风险。不过,目前在我行的tomcat服务器和Websphere服务器上都可以成功安装。
性能损耗
由于在每个应用内部都强势安插了很多“内线”,OpenRASP最初版本CPU 性能损耗可达20%。该团队为解决性能损耗过高的问题,最后选择用火狐最新版的 Rhino 引擎替代之前的谷歌 V8 引擎来编写代码。目前已将CPU的性能损耗迅速降到了1%-5%的可用水平。
漏洞依然存在
使用 RASP 并不是真正建立一个安全的应用,系统中存在的漏洞还是存在。应用RASP,只是临时提供一个虚拟补丁修补上已知漏洞,如果不用RASP,这些漏洞还是存在。另外RASP也不能修复所有的漏洞,漏洞时刻在更新。因此,将RASP和扫描工具结合起来将会更有价值。
部署RASP
搭环境主要分为两部分:服务端和客户端
一、服务端(Linux环境)
环境需要
至少2G内存,java环境,创建一个非root用户(后面会叙述)
根目录下四个压缩包:jdk-8u192-linux-x64.tar.gz、elasticsearch-5.6.8.tar.gz、mongodb-linux-x86_64-3.6.9.tgz、rasp-cloud.tar.gz。
(一)配置环境变量
1.解压缩
tar -xzvf jdk-8u192-linux-x64.tar.gz
2.修改jdk文件权限
chmod -R 755 /jdk1.8.0_192
3.配置环境变量
用文本编辑器打开 /etc/profile,在profile文件末尾加入
export J**A_HOME=/jdk1.8.0_192
export PATH=$J**A_HOME/bin:$PATH
export CLASSPATH=.:$J**A_HOME/lib/dt.jar:$J**A_HOME/lib/tools.jar
生效命令
source /etc/profile
(二)安装ES并运行
1.解压缩
tar -xzvf /elasticsearch-5.6.8.tar.gz
2.创建一个非root用户
useradd rasp
su rasp
注:这是因为elasticsearch不能用root启动
3.启动ES
(1)进入解压缩后的elasticsearch文件夹(以解压缩后的名字为准)
cd /elasticsearch-5.6.8
(2)测试ES是否可以正常运行
bin/elasticsearch
此时可以看到是否启动成功,如果启动成功请ctrl+c停止,进一步使用命令在后台启动。
(3)正式后台启动
bin/elasticsearch -d
注:可按<tab>补全文件名:敲了ela后按<tab>它自动补全
(三)安装mongodb并运行
1.解压缩mongodb-linux-x86_64-3.6.9.tgz
tar -xzvf /mongodb-linux-x86_64-3.6.9.tgz
2.创建用作存储的文件目录
mkdir -p /data/db
3.启动mongod
(1)进入解压缩后的mongodb文件夹(以解压缩后的名字为准)
cd /mongodb-linux-x86_64-3.6.9
(2)正式后台启动
bin/mongod --fork --logpath /data/log --dbpath /data/db
(四)运行管理后台
1.解压缩rasp-cloud.tar.gz
tar -xzvf /rasp-cloud.tar.gz
2.启动管理后台
(1)进入解压缩后的rasp-cloud文件夹(以解压缩后的名字为准)
cd /rasp-cloud-2019-08-31
(2)正式后台启动
./rasp-cloud -d
(五)检查是否运行成功
1.查看端口号
netstat -anpt
:9200es
:27017mongo
:8086rasp后台
2.访问管理后台
http://服务器ip:8086
账号:openrasp
初始密码:admin@openrasp
二、探针端(客户端)
环境需要
java环境(jdk),rasp支持的中间件
一个压缩包:rasp-java.tar.gz。
(一)配置环境变量
尽量使用程序本身的java环境
Linux配置java环境说明:https://www.cnblogs.com/yjd_hycf_space/p/7885099.html
windows配置java环境说明:https://www.cnblogs.com/zella/p/8309646.html
(二)安装探针
1.解压rasp-java.tar.gz
tar -xzvf rasp-java.tar.gz
2.安装探针
(1)进入解压缩后的rasp文件夹(以解压缩后的名字为准)
cd rasp-2019-07-11
(2)安装rasp
java -jar RaspInstall.jar -install /path/to/tomcat -appid XXXXXXXX \ -appsecret XXXXXXXXXXXXX -backendurl http://管理后台IP:8086/
注:/path/to/tomcat 为 tomcat程序目录,XXXX与管理后台IP具体内容命令请登陆http://管理后台IP:8086/ 点击 添加主机 查看。
(3)重启tomcat生效服务
cd /path/to/tomcat
bin/shutdown.bat # 关闭tomcat服务
bin/startup.bat # 启动tomcat服务 或 catalina.bat run启动
(三)检查探针是否安装成功
登陆http://管理后台IP:8086/ 点击 主机管理 查看运行状态。
附录
参考:
https://www.freebuf.com/articles/web/164413.html
http://blog.nsfocus.net/?s=rasp
https://blog.csdn.net/wangpeng198688/article/details/50341217
*本文作者:贝斯柯德伯爵,转载请注明来自FreeBuf.COM