0%

Sqreen初探

Sqreen 作为一款IAST产品,用户在项目中导入他们的agent,之后可在控制台查看检测到的安全风险,并进行防御(RASP)。

技术介绍

如下图所示,Sqreen主要由三个组件组成,MicroAgent、Security Engine和Sqreen Platform,Security Engine部署于MicroAgent内部,开发者只要在启动应用时倒入MicroAgent即可,Platform主要用于接收Agent信息并且可视化给用户。

img

可见MicroAgent是其主要部件,主要有以下功能:

  • 动态插桩
  • 监控程序并收集信息
  • 根据安全引擎指示执行安全响应
  • 与Platform通信

防御技术

从下图可以看到Sqreen使用多层次保护应用程序,这里主要介绍In-App WAF 和 RASP。

img

In-App WAF

应用内WAF是第一道防线,和外部防火墙一样,主要通过模式匹配来检测和阻止恶意流量,但与外部WAF不同的是,应用内WAF可以根据当前应用的数据库、框架和编程语言应用不同的规则,提高效率。

如下图,在新建一个规则时,可以选择匹配报文的哪些字段(其实感觉跟外部WAF一样)

image-20200604191023036

接着可以选择对字段的匹配规则

image-20200604191224862

其中hasSQLinjection和hasXSSinjection这两个实际上是预定义的正则,类似下图所示:

image-20200604192113549

下图可以看出In-App WAF与外部WAF的区别,即与本应用无关的其他技术被Disabled:

image-20200604191940016

RASP(Runtime Application Self-Protection)

RASP是存在很久的概念了(目前还没深入学习,后期会补上技术原理),这里系统支持以下漏洞的防御:

image-20200604171427705

In-App WAF v.s. RASP

从技术原理上可以看到两者的区别,In-App WAF本质还是WAF,通过正则规则匹配拦截恶意流量,而RASP则是hook了关键api,通过动态污点分析等方式实现高精度的防御。

用法

  1. 申请适用后,点击“Connect a new application”:

    image-20200604164240814

  2. 进入部署引导界面,选择语言和项目名称,点击“show instructions”后可以看到部署的java agent:

    image-20200604164525671

    按右侧指示操作即可,同时可以看到对于java是使用javaagent实现的,估计是hook了一些函数。

  3. 对于Java项目,下载agent,并加参数重启应用(产品上线时可以用SDK集成的方案,详情见https://docs.sqreen.com/java/user-monitoring/):

    1
    2
    curl https://download.sqreen.com/java/sqreen.jar -o sqreen.jar
    java -javaagent:sqreen.jar -Dsqreen.token=env_org_dd05c0b8eb3317bbbc7857420ec86abe2ea5aa347ffc6c3efc8ef060 -Dsqreen.app_name=JavaDemo -jar java-sec-code-1.0.0.jar
可以看到Web页面最下面,有应用上线了:

![image-20200604170231764](iast-Sqreen初探/image-20200604170231764.png)

试用结果

Java方面尝试了一下JavaSecCode,反射型/存储型XSS、SQLi、命令注入、XXE都没能检测到,估计是WAF那边估计是规则问题,RASP因为文档里没有介绍具体原理,不好给出解释。

Nodejs方面原本想尝试用NodeSecCode试一下的,但是测试发现Sqreen并不支持egg框架,在app.js加入require后会报如下错误:

1
2
3
4
5
6
7
8
It seems that the following modules have been required before Sqreen:
- /mnt/d/nodejsSecCode/backend/node_modules/debug/src/index.js
- /mnt/d/nodejsSecCode/backend/node_modules/graceful-process/index.js
- /mnt/d/nodejsSecCode/backend/node_modules/egg-logger/index.js
- /mnt/d/nodejsSecCode/backend/node_modules/egg/index.js
Sqreen may not be able to protect the whole application.
If you think this is an error, please report it to Sqreen team.
Read more on https://doc.sqreen.io/docs/nodejs-agent-installation

于是手写一简单的express服务,含一个反射xss代码,SqreenAgent可以成功部署,但是仍没有发现该漏洞。

总结

Sqreen 主要利用动态插桩技术实现了IAST,但是实际测试来看效果并不是很好(不论Java还是Nodejs都没有发现漏洞),官方推荐是配合Nikto进行扫描,也就是说,本产品由于规则和设计等原因,还是需要结合传统黑盒扫描的爬虫或Payload才能有效果。

相关资料