31

OpenRASP梳理总结

 4 years ago
source link: https://www.tuicool.com/articles/q2Ezqmz
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

https://rasp.baidu.com/doc/install/compat.html

http://blog.oneapm.com/apm-tech/270.html

*本文作者:贝斯柯德伯爵,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK