OpenRASP技术分析

Open­RASP 将新兴的RASP(Run­time Ap­pli­ca­tion Self-Pro­tec­tion)安全防护技术普及化,使其迅速成为企业Web安全防护中的一个重要武器,有效增强防御体系纵深和对漏洞防护的适应能力。本文主要针对OpenRASP进行原理介绍和应用。

OpenRASP介绍

百度云分析团队开源的自适应安全产品

https://rasp.baidu.com/    文档 https://rasp.baidu.com/doc/

目前只支持JAVA; 以-javaagent 方式启动Tomcat。

安装

java –jar  raspInstall.jar <app_homedir>可源码安装;

攻击检测告警日志(XSS):

安全基线检查告警日志:

 

OpenRASP – 初始化流程

OpenRASP – 类字节码修改流程(instrument方式)

OpenRASP – 攻击检测流程

在进入到被修改类的函数时,调用事先注入的检测函数,最终调用pluginCheck函数。

1.pluginCheck(CheckParameter.Type type, Object params);

(type为检查的挂载点类型,params为函数原始调用参数)

2.遍历执行该挂载点类型的所有JavaScript检测函数;

3.如果检测函数没有返回block,继续执行;

4.否则记录攻击日志到alarm.log中,并执行Block操作(重定向到一个提示异常的页面)

(重定向的异常页面可通过配置修改)

OpenRASP防护原理

Tomcat安全基线检查

启动Tomcat时检查允许环境和配置是否符合安全规范

检测类:org/apache/catalina/startup/Catalina

检测函数:start (Tomacat的启动函数)

检测挂载点:startup

检测方法:没有使用js插件函数,直接通过代码检测。

                   是否以admin启动

                  是否开启http only

                  tomacat管理员是否有弱密码

                 是否删除默认webapps

SQL权限控制

检测类:java/sql/DriverManage

检测函数:getConnection

检测挂载点:sql(但没有使用)

检测方法:没有使用js插件函数,直接通过代码检测。

解析数据库类型、登录用户,限制通过管理员用户登录。

SQL慢查询检测

  • SELECT 语句执行时间超过 3s(尚未实现)
  • SELECT 语句一次读取数据行数超过配置的阈值

检测类:select查询结果返回的类,每种数据库的类不同,如PostgreSql的ResultSet类

检测函数:next(取下一条记录的函数)

检测挂载点:sql_result_set (但没有使用)

检测方法:没有使用js插件函数,直接通过代码检测。

如果返回结果大于配置值,认为是慢查询,提示告警:

SQL注入检测

检测类:sql语句执行类,每种数据库的类不同,如PostgreSql的PgStatement类

检测函数:execute/executeUpdate

/executeQuery/addBatch

检测挂载点:sql

检测方法:使用js插件函数检测

如下params.query为sql语句

params.server为sql数据库类型

context.parameter为http请求实体

SQL注入检测

方法一:结合Hook截获的http请求参数做检测

如果请求参数中包含了sql语句,认为是webshell-数据库管理器,block掉

从SQL语句中去掉用户输入,再和原语句进行比较,关键字个数相差太多则认为查询逻辑变化,block掉

方法二:数据库语句异常检测

禁止多条sql语句;

禁止16禁止字符串;

禁止MySQL版本号注释/*!

禁止常量比较操作

禁止执行敏感函数

方法三:简单正则匹配检测     /\bupdatexml\s*\(|\bextractvalue\s*\(|\bunion.*select.*(from|into|benchmark).*\b/i

任意文件上传检测

原理:

攻击者通过上传木马文件,直接得到WEBSHELL

形成原因:

代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。

危害:

可以得到WEBSHELL;

上传木马文件,可以导致系统瘫痪

检测类:org/apache/commons/fileupload/disk/DiskFileItem

检测函数:setHeaders

检测挂载点:fileUpload

检测方法:使用js插件函数检测,判断文件名后缀是否合法

var scriptFileRegex = /\.(jspx?|php[345]?|phtml)\.?$/i

var ntfsRegex       = /::\$(DATA|INDEX)$/i // 其他的stream都没啥用

远程命令执行检测

检测类:java/lang/ProcessBuilder

检测函数:start

检测挂载点:command

检测方法:使用js插件函数检测

             (不允许远程执行命令)

XSS跨站攻击检测

检测类:apache/catalina/core/ApplicationFilterChain

检测函数:doFilter

检测挂载点:request

检测方法:使用js插件函数检测

          (检查http参数中是否含有特殊字段)

反序列化用户输入检测

检测类:java/io/ObjectInputStream

检测函数:resolveClass

检测挂载点:deserialization

检测方法:使用js插件函数检测

          (检查反序列化的类名是否合法,使用黑名单检验)

ObjectOutputStream类的writeObject()方法实现序列化;ObjectInputStream类的readObject()方法用于反序列化。

Struts 2的Ognl表达式执行漏洞检测

OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

检测类:ognl/Ognl

检测函数:parseExpression(在此函数中执行表达式)

检测挂载点:ognl

检测方法:使用js插件函数检测

          (检查struct payload中是否含有非法信息)

SIEM

security information and event management(安全信息和事件管理)

OpenRASP 支持两种类型的SIEM插件,分别是 Splunk 和 Kibana,它们采集OpenRASP的日志并展示。

支持邮件告警

OneASP

总结

ØOpenRASP框架已完成,并支持大部分攻击类型的检查

Ø可新增JS插件和HooK类进行二次开发

Ø深入了解每种攻击类型,常见攻击方法,再丰富插件和代码

Ø对应用程序的性能影响需要测试

Ø管理平台:  探针的管理、插件的管理、WEB展现

Ø结合自身与WAF的优点,联合WAF进行防护

 

发表评论