洞态IAST在某互联网甲方的落地实践

IAST作为开展SDL中黑白盒测试的有效补充,还是很有必要去了解使用的。笔者为了完善公司的SDL流程,调研了开源的IAST产品进行测试和内部推广

刚开始,笔者测试百度OpenRASP的IAST功能(主动式IAST),OpenRASP的IAST通过对agent采集到的流量数据进行重放,根据hook点信息做选择性的扫描;与主动式漏扫相比,这种方式减少了很多请求,但是也会存在少量的脏数据,对测试不是很友好;OpenRASP的扫描器支持配置URL白名单,笔者通过对eidt、add、logout等接口加白,基本上解决了脏数据的问题,但是出现了很多漏报,而且基于重放HTTP请求的检测方式,对存在签名、防重放之类,无法进行HTTP请求重放的接口来说,基本无法进行扫描。

然后,看到火线开源了洞态IAST(被动式IAST),本地化部署及测试之后,发现比较符合预期,于是开始做各业务线的推广,与DevOps流程进行集成,目前已实现了新上线项目的IAST自动化部署。

关于洞态IAST介绍,可以直接查看[官方文档][0],接下来,主要分享一下IAST部署及其与DevOps集成的方案。

一、云端服务介绍及部署

1. 洞态IAST的架构图

在这里插入图片描述

2. IAST的基础服务

“火线~洞态IAST”共有五个模块,分别是DongTai-webapi、DongTai-openapi、DongTai-engine、DongTai-web、agent,其中:

  • agent为各语言的数据采集端,从安装探针的项目中采集相对应的数据,发送至DongTai-openapi服务
  • DongTai-web 为“火线~洞态IAST”的前端项目,负责页面展示
  • DongTai-webapi用于与DongTai-web交互,负责处理用户相关的API请求
  • DongTai-openapi用于与agent通信,处理agent上报的数据,向agent下发策略,控制agent的运行等
  • DongTai-engine用于对DongTai-openapi接收到的数据进行分析、处理,计算存在的漏洞和可用的污点调用链等

五个服务之间存在依赖关系,部署时,需按照以下顺序进行部署:

  • DongTai-webapi
  • DongTai-openapi
  • DongTai-engine
  • DongTai-web
  • agent
3. 本地部署洞态IAST的云端服务

服务器信息

操作系统:CentOS Linux release 7.9.2009 (Core)
CPU:4核
内存:8G
硬盘:100G

拉取洞态项目代码后,执行build.sh脚本,一键部署docker环境(因为网络问题,代码总是拉取失败,根据shell脚本手动部署一下)

1. 拉取5个项目源码
# 拉取最新的代码
git clone git@github.com:HXSecurity/DongTai.git
# DongTai-webapi
# DongTai-openapi
# DongTai-engine
# DongTai-web
2. 创建虚拟网络
docker network rm dongtai-net || true
docker network create dongtai-net
3. 启动MySQL服务
# 进入DongTai项目下,使用docker启动mysql
cd docker/mysql
docker build -t huoxian/dongtai-mysql:5.7 .
docker stop dongtai-mysql || true
docker rm dongtai-mysql || true
docker run -d --network dongtai-net --name dongtai-mysql --restart=always huoxian/dongtai-mysql:5.7

# 或者使用外部mysql,确保版本一致
cd docker/mysql
wget https://xxxx.xxxx.xxxx.xxxx/sca.sql
wget https://xxxx.xxxx.xxxx.xxxx/rule.sql
mysql -uroot -p"dongtai-iast" < /opt/db.sql
mysql -uroot -p"dongtai-iast" < /opt/rule.sql
mysql -uroot -p"dongtai-iast" < /opt/sca.sql
4. 启动redis服务
# 进入DongTai项目下,使用docker启动redis
cd docker/redis
docker build -t huoxian/dongtai-redis:latest .
docker stop dongtai-redis || true
docker rm dongtai-redis || true
docker run -d --network dongtai-net --name dongtai-redis --restart=always huoxian/dongtai-redis:latest

# 或者使用外部redis
redis-server /DongTai/docker/redis/redis.conf
5. 启动dongtai-webapi服务
# 进入DongTai-webapi项目下
cd DongTai-webapi
git pull

cp conf/config.ini.example conf/config.ini
sed -i "s/mysql-server/dongtai-mysql/g" conf/config.ini >/dev/null
sed -i "s/mysql-port/3306/g" conf/config.ini >/dev/null
sed -i "s/database_name/dongtai_webapi/g" conf/config.ini >/dev/null
sed -i "s/mysql_username/root/g" conf/config.ini >/dev/null
sed -i "s/mysql_password/dongtai-iast/g" conf/config.ini >/dev/null
sed -i "s/redis_server/dongtai-redis/g" conf/config.ini >/dev/null
sed -i "s/redis_port/6379/g" conf/config.ini >/dev/null
sed -i "s/redis_password/123456/g" conf/config.ini >/dev/null
sed -i "s/broker_db/0/g" conf/config.ini >/dev/null
sed -i "s/engine_url/dongtai-engine:8000/g" conf/config.ini >/dev/null
sed -i "s/api_server_url/<dongtai-openapi ip>:8000/g" conf/config.ini >/dev/null

docker build -t huoxian/dongtai-webapi:latest .
docker stop dongtai-webapi || true
docker rm dongtai-webapi || true
docker run -d --network dongtai-net --name dongtai-webapi -e debug=false --restart=always huoxian/dongtai-webapi:latest
6. 启动dongtai-openapi服务
cd DongTai-openapi
git pull

cp DongTai-webapi/conf/config.ini conf/config.ini

docker build -t huoxian/dongtai-openapi:latest .
docker stop dongtai-openapi || true
docker rm dongtai-openapi || true
docker run -d --network dongtai-net -p 8000:8000 --name dongtai-openapi --restart=always huoxian/dongtai-openapi:latest
7. 启动dongtai-engine服务
cd DongTai-engine/
git pull 

cp DongTai-webapi/conf/config.ini conf/config.ini
docker build -t huoxian/dongtai-engine:latest .
docker stop dongtai-engine || true
docker rm dongtai-engine || true
docker run -d --network dongtai-net --name dongtai-engine --restart=always huoxian/dongtai-engine:latest
8. 启动dongtai-engine-task服务
cd DongTai-engine/
docker run -d --network dongtai-net --name dongtai-engine-task --restart=always huoxian/dongtai-engine:latest bash /opt/iast/engine/docker/entrypoint.sh task
9. 启动dongtai-web服务
cd DongTai-web
git pull

cp nginx.conf.example nginx.conf

sed -i "s/lingzhi-api-svc/dongtai-webapi/g" nginx.conf >/dev/null
# 因为npm一直build失败,直接使用项目中的dist

docker build -t huoxian/dongtai-web:latest .
docker stop dongtai-web || true
docker rm dongtai-web || true
docker run -d -p 80:80 --network dongtai-net --name dongtai-web --restart=always huoxian/dongtai-web:latest
4. 登陆管理后台

确保安全组或防火墙开启80、8000端口

浏览器访问:[http://x.x.x.x][0] 访问dongtai-web服务(默认用户名/密码:admin、admin),登陆后及时修改密码,在系统配置 - 密码修改处修改密码,然后做好安全组策略,防止恶意扫描

img

组织管理中,可以新增子部门及普通用户,方便后续分工;子部门用于区分应用所属业务线,每个业务线分别生成属于自己的agent

二、IAST agent部署与测试

管理后台部署完成后,接下来就需要带着分管安全的leader去找每条业务线研发leader、测试、应用运维,去了解一下现有的网络架构,笔者公司的测试服务均跑在K8S上,Java版本为1.8。

1. 生成agent

进入管理后台,右上角部署IAST

img

选择应用运行环境,目前我们Java的服务都通过maven打包成jar包,通过java -jar 命令的方式启动,项目名称可以保持默认,我们所有的服务均在CD阶段通过传参的方式指定

img

最后获取下载脚本,这里去掉projectNmae参数,下载agent

curl -X GET "http://x.x.x.x:8000/api/v1/agent/download?url=http://x.x.x.x:8000&jdk.version=Java%201.8" -H 'Authorization: Token xxx' -o agent.jar -k
2. 本地测试

2.1 启动命令添加配置,启动洞态IAST

java -javaagent:./agent.jar -Dproject.name=test -Diast.server.mode=local -jar app.jar

2.2 出现Engine opened successfully日志时,表示洞态IAST启动成功

[cn.huoxian.dongtai.iast] The engine configuration file is initialized successfully. file is \config\iast.properties
[cn.huoxian.dongtai.iast] Check if the engine needs to be updated
{"status": 202, "msg": "不需要更新或正在更新中", "data": null}
[cn.huoxian.dongtai.iast] Engine does not exist in local cache, the engine will be downloaded.
current jdk version is : 1.8.0_251
[cn.huoxian.dongtai.iast] The remote file http://x.x.x.x:8000/api/v1/engine/download?package_name=iast-inject&jdk.version=1 was successfully written to the local cache.
[cn.huoxian.dongtai.iast] The remote file http://x.x.x.x:8000/api/v1/engine/download?package_name=iast-core&jdk.version=1 was successfully written to the local cache.
2021-05-12 14:13:33.089 [cn.huoxian.dongtai.engine] INFO  The engine is about to be installed, the installation mode is agent
2021-05-12 14:13:33.147 [cn.huoxian.dongtai.engine] INFO  Initialize the core configuration of the engine
2021-05-12 14:13:33.603 [cn.huoxian.dongtai.engine] INFO  The engine's core configuration is initialized successfully.
2021-05-12 14:13:33.606 [cn.huoxian.dongtai.engine] INFO  WebServer [ name=Tomcat/8.x, path=\apache-tomcat-8.5.12\bin ]
2021-05-12 14:13:33.607 [cn.huoxian.dongtai.engine] INFO  Start the data reporting submodule
2021-05-12 14:13:33.608 [cn.huoxian.dongtai.engine] INFO  The data reporting submodule started successfully
2021-05-12 14:13:33.608 [cn.huoxian.dongtai.engine] INFO  Register spy submodule
2021-05-12 14:13:33.615 [cn.huoxian.dongtai.engine] INFO  Spy sub-module registered successfully
2021-05-12 14:13:33.616 [cn.huoxian.dongtai.engine] INFO  Install data acquisition and analysis sub-modules
2021-05-12 14:13:35.856 [cn.huoxian.dongtai.engine] INFO  The sub-module of data acquisition and analysis is successfully installed
2021-05-12 14:13:35.861 [cn.huoxian.dongtai.engine] INFO  The engine is successfully installed to the JVM, and it takes 2773ms
2021-05-12 14:13:46.476 [cn.huoxian.dongtai.engine] INFO  Turn on the engine
2021-05-12 14:13:46.480 [cn.huoxian.dongtai.engine] INFO  Engine opened successfully
[cn.huoxian.dongtai.iast] Successfully opened the engine, and it takes  22s
{"status": 202, "msg": "不需要更新或正在更新中", "data": null}

2.3 打开管理后台,选择项目配置 - 新建项目,配置项目名称为test,添加扫描策略

img

Note: 启动服务时,配置了参数-Dproject.name=test,所以,agent会自动关联至test`项目中,不需要人工配置

3. 与CI/CD集成

目前IAST项目是以业务线进行分组,在管理后台 - 项目配置 - 新建项目,添加项目,项目名称对应各个业务线简称,在启动服务时,通过配置-Dproject.name=$业务线 将agent自动关联至项目中

3.1 配置jenkins

将agent打包到公共基础镜像,按照jenkins原来的基础镜像进行选择即可,基础镜像 java:1.8-sec-agent

Dockerfile = "FROM reg.xx.com/base/java:1.8-sec-agent”##### 3.2 配置启动命令

cd /data/build/k8s/test/$业务线/
vim $appid.yml

# 增加以下这段commad参数:  "-javaagent:/agent.jar","-Dproject.name=$业务线","-Diast.server.mode=local"
3.3 重新构建jenkins
3.4 测试服务功能是否正常

经测试,服务运行均正常

5. 针对增量服务

笔者与运维开发沟通后,修改自动化发布流程及脚本,对测试环境中新增的Java服务,将自动集成洞态IAST,确保agent覆盖率,目前已基本实现测试服务的覆盖。

极简简约动态分割线本周六快手联合火线 举办线下「观火」白帽沙龙活动 ↓扫描二维码火速了解一下!

解码未来活动banner (1)

【火线Zone】

火线Zone是**[火线安全平台]运营的封闭式社区,社区成员必须在[火线安全平台]提交有效漏洞才能申请免费加入,**符合要求的白帽子可联系[火小表妹]免费加入~

我们不希望出现劣币驱逐良币的结果,我们不希望一个技术社区变成一个水区!

欢迎具备分享精神的白帽子加入火线Zone,共建一个有技术氛围的优质社区!

指纹识别简约卡片动态二维码 (2)

引导分享点赞在看GIF引导三连

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是洞态IAST内网私有化部署的详细方案: 1. 确认服务器环境 首先需要确认部署洞态IAST的服务器环境是否符合洞态IAST的要求。具体要求可以参考洞态IAST官方文档。需要注意的是,服务器环境需要满足以下要求: - 操作系统:CentOS 7.2及以上版本,或者Ubuntu 16.04及以上版本。 - 内存:至少8GB。 - 硬盘:至少100GB,建议使用SSD硬盘。 - CPU:建议使用4核及以上的CPU。 2. 下载离线包 在确认服务器环境符合要求之后,需要下载洞态IAST的离线包。可以在洞态IAST官方网站上下载,或者联系洞态IAST的销售团队获取。 需要注意的是,离线包的大小较大,下载可能需要一定的时间和带宽。 3. 安装数据库 洞态IAST需要使用数据库来存储扫描结果等信息,因此需要先安装数据库。可以选择使用MySQL或者PostgreSQL等关系型数据库。 安装过程可以参考数据库官方文档。 4. 安装洞态IAST 在安装洞态IAST之前,需要确认服务器已经安装了Java环境。可以通过以下命令检查: ```bash java -version ``` 如果没有安装Java环境,则需要先安装Java环境。 在安装洞态IAST之前,需要在服务器上创建一个新的非root用户,并授权该用户访问数据库。 然后将下载的离线包上传到服务器,并解压缩到指定目录。进入解压缩后的目录,执行以下命令: ```bash ./install.sh ``` 接着按照提示进行安装,需要输入数据库连接信息、管理员账号密码、安装路径等信息。 安装完成后,可以使用以下命令启动洞态IAST: ```bash systemctl start iast.service ``` 5. 配置代理 如果部署在内网环境中,可能需要配置代理才能让洞态IAST访问外网。可以在洞态IAST的安装目录下的`iast.properties`文件中进行配置,将代理地址和端口号填入即可。 需要注意的是,如果代理需要进行身份验证,则需要在配置文件中同时填入用户名和密码。 6. 配置扫描信息 在进行应用程序扫描之前,需要配置扫描信息。可以通过洞态IAST的Web界面进行配置。 登录洞态IAST的Web界面,进入“扫描管理”页面,点击“新建扫描任务”,填写扫描任务的相关信息。需要注意的是,需要填写正确的应用程序地址和端口号,才能保证扫描结果的准确性。 7. 进行应用程序扫描 在配置好扫描信息之后,就可以进行应用程序扫描了。可以在洞态IAST的Web界面中查看扫描结果。 需要注意的是,扫描过程可能会占用较多的服务器资源,因此建议在空闲时间进行扫描,并根据具体情况进行资源调整。 以上就是洞态IAST内网私有化部署的详细方案,希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值