一、部署问题
前置准备:
1.安装docker环境(20.06.0+)
2.安装docker-compose环境(v2.4.1+)
3.拉取最新仓库代码,执行安装
https://github.com/HXSecurity/DongTai.git
cd DongTai/deploy/docker-compose/
./dtctl install
输入指定的端口访问即可!
1.1 Docker & Docker-compose
1.1 存储问题:出现下列报错是服务器存储满了
*.ibd: no space left on device
修复方式:
查看一下docker存储目录
docker info
查看一下docker的存储目录是否已经满了,可以使用修改docker存储加硬盘的方式解决这个问题
df -TH
修改docker存储目录为/data/的方法
1.创建以下文件。
#vi /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
2.关闭docker,转移旧数据
#systemctl stop docker
#cp -r /var/lib/docker /data/
3.启动docker完成存储目录转移
systemctl start docker
验证已完成存储目录更换,OK!
df -TH
1.2 docker版本不对的常见报错为
Failed to register layer: Error processing tar file(exit status 1): unexpected EOF

解决方案:安装docker环境(20.06.0+)
1.3 docker-compose版本不对的常见报错为
ERROR: The Compose file '/dev/fd/63' is invalid because:

解决方案:安装docker-compose环境(v2.4.1+)
1.4 部署时直接暂停
参考链接 https://zone.huoxian.cn/d/1306-180
[Info]
[Info] start to get latest tag of dongtai/dongtai-web
安装环节直接停止在此
用户已 git pull 最新仓库内容,使用 dtctl install 安装时报的错误。
用户环境:Linux ubuntu-virtual-machine 5.13.0-51-generic #58~20.04.1—Ubuntu
Docker 版本:20.10.12
docker-compose 版本:2.4
---
Anw:用户反馈内部代理的问题,部署时要确认部署设备对外联网是正常的
1.5 开源版如何离线部署1.8.3
1.下载镜像
找一台可以连接网络的机器, pull 如下镜像
docker pull registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3
docker pull registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-web:1.8.3
docker pull registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-mysql:1.8.3
docker pull registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-redis:1.8.3
docker pull registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-logrotate:1.8.3
docker pull registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-logstash:1.8.3
2.打包镜像
docker save registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3 \
&& registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-web:1.8.3 \
&& registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-mysql:1.8.3 \
&& registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-redis:1.8.3 \
&& registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-logrotate:1.8.3 \
&& registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-logstash:1.8.3 \
&& > iast1.8.3.tar
3.将 iast1.8.3.tar 上传至需要部署的服务器
//导入
docker load < iast1.8.3.tar
//上传代码
git clone https://github.com/HXSecurity/DongTai.git
cd DongTai/deploy/docker-compose/
//修改 docker-compose.yml.example 文件
mv docker-compose.yml.example docker-compose.yml
//打开文件 docker-compose.yml 将文件中的 {ChangeThisVersion} 全部替换为 1.8.3
//启动完成后访问 127.0.0.1:8000 即可!
docker-compose -p dongtai up -d
fix:需要在当前目录执行docker-compose启动命令
备注: docker-compose.yml 参考模版
version: "2"
services:
dongtai-mysql:
image: registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-mysql:1.8.3
restart: always
ports:
- "3306:3306"
volumes:
- "mysql-vol:/var/lib/mysql:rw"
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-redis:
image: registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-redis:1.8.3
restart: always
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-web:
image: registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-web:1.8.3
restart: always
ports:
- "8000:80"
volumes:
- "./nginx.conf-1.8.0:/etc/nginx/nginx.conf"
depends_on:
- dongtai-server
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-server:
image: "registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3"
restart: always
sysctls:
net.core.somaxconn: 1024
volumes:
- ./log/:/tmp/logstash/
- ./config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-worker-task:
image: "registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3"
restart: always
entrypoint: ["/opt/dongtai/deploy/docker/entrypoint.sh", "beat"]
volumes:
- ./config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-worker-beat:
image: "registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3"
restart: always
entrypoint: ["/opt/dongtai/deploy/docker/entrypoint.sh", "worker-beat"]
volumes:
- ./config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-worker-high-freq:
image: "registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3"
restart: always
entrypoint: ["/opt/dongtai/deploy/docker/entrypoint.sh", "worker-high-freq"]
volumes:
- ./config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-worker-other:
image: "registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-server:1.8.3"
restart: always
entrypoint: ["/opt/dongtai/deploy/docker/entrypoint.sh", "worker-other"]
volumes:
- ./config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-logrotate:
image: registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-logrotate:1.8.3
restart: always
user: root
volumes:
- "./log/:/tmp/logstash/"
logging:
driver: "json-file"
options:
max-size: "10m"
dongtai-logstash:
image: registry.cn-beijing.aliyuncs.com/huoxian_pub/dongtai-logstash:1.8.3
restart: always
user: root
environment:
- DATABASE=dongtai-mysql:3306/dongtai_webapi
- USERNAME=root
- PASSWORD=dongtai-iast
volumes:
- "./log/:/tmp/logstash/"
logging:
driver: "json-file"
options:
max-size: "10m"
volumes:
mysql-vol:
1.2 Mysql
1.1 使用自定义数据库时字符集问题,出现如下类似报错

应该使用如下字符集创建数据库
CREATE DATABASE `您的数据库` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
如果是现有的数据想要修改字符集,请执行下列语句。
//修改数据库字符集
ALTER DATABASE `数据库` CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
//修改表字符集,需要每个表都执行。
ALTER TABLE `数据表` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
1.2 运行时间长,出现mysl存储空间满的情况
需要执行下列清空数据表命令,会对重放功能影响,其他一切正常。
⚠️注:存储满的情况下无法执行下面语句,需要先删除一些存储空间,比如日志文件等。
mysql>use dongtai_webapi
mysql>SET @NormalpoolId = (SELECT (MAX(id) + 1) AS auto_increment FROM iast_agent_method_pool);
mysql>truncate table iast_agent_method_pool;
mysql>SET @qry = CONCAT('ALTER TABLE iast_agent_method_pool AUTO_INCREMENT = ', @NormalpoolId); PREPARE stmt FROM @qry; EXECUTE stmt;
避免以后出现同样情况,同时登陆IAST修改自动清理时间设置为1天。

1.3 第一次部署数据库启动超时问题
因数据库存储太大,导致在硬盘读写速率不高的情况下会有启动超时问题,
只需稍微等待一会,执行下列命令即可
./dtctl remove
./dtctl install

1.4 升级时,出现如下类报错
- Error 1060(42S21): duplicate column name 'uri_sha'

推测不是使用./dtctl install 安装的,所以无法使用dtctl更新,无法复现,没有1.4.2版本

处理方式:
docker info
查看一下docker存储目录
df -TH
查看一下docker的存储目录是否已经满了,可以使用修改docker存储的方式解决这个问
1.5 发现检测能力变弱了,可能是自定义规则表数据乱了,可进入数据库执行如下sql重置
可能是升级后规则表乱了,可以下载执行一下这个sql
https://huoqi-public.oss-cn-beijing.aliyuncs.com/iast/sql/1.8.0-guize.sql
1.6 admin用户密码重置为初始密码
//进入mysql容器
docker exec -it 数据库容器名 bash
//登陆数据库
mysql -uroot -p'dongtai-iast'
//重置为初始化密码
UPDATE `dongtai_webapi`.`auth_user` SET `password` = 'pbkdf2_sha256$260000$7VQQhiSGpr1HmyRzMoC7Hh$qdMVOQFcpwKfmq6a87MeEq7bVL+hTf9oZ6Sn5JNQRWU=' WHERE `id` = 1;
1.7 漏洞页面超时
//进入mysql容器
docker exec -it 数据库容器名 bash
//登陆数据库
mysql -uroot -p'dongtai-iast'
//删除提示级别漏洞
DELETE from iast_vulnerability where level_id=5;
二、Agent问题
1.1 agent占用cpu、内存资源比较多
Agent 资源占用一直是洞态 IAST 非常关注的点,在 1.8.0 版本我们修复了常见的资源异常的场景,如果您目前使用的版本低于 1.8.0,建议先升级到 1.8.0+。
如果您升级到最新洞态IAST版本后仍然遇到cpu资源占用较多的情况,请提供如下数据:
提供资源占用较多时洞态IAST的debug日志
提供资源占用较多时cpu、内存等占用的趋势图
我们会在第一时间跟进排查,并给出解决方案。
1.2 agent频繁降级,甚至未触及降级指标时也触发降级
目前agent降级的指标是按服务器总cpu计算,请先确认cpu计算方式是否一致。
如扔有问题,需提供以下数据
提供有降级行为时,洞态IAST的日志(是否开启debug模式都ok)
提供对应时间段内,cpu、内存等触发降级指标的资源占用曲线图
我们会在第一时间跟进排查。
1.3 agent如何获取debug日志?
- 修改启动参数,agent启动添加下面两个参数即可以DEBUG方式启动
//因DEBUG对性能影响比较大,只推荐在需要调试时开启
-Ddongtai.log.level=debug -Ddongtai.log=true
- agent启动后,前往洞态agent页面,点击下载日志按钮 下载指定agent日志。

注:若需要手动下载,请登录部署agent探针的服务器,前往目录文件夹
//jar包方式启动
/tmp/项目名称-项目版本-UUID/dongtaiJavaAgentLogs/dongtai_javaagent.log
//tomcat方式启动
tomcat8/temp/项目名称-项目版本-UUID/dongtaiJavaAgentLogs/dongtai_javaagent.log
1.4 agent添加后应用无法启动
agent启动添加如下参数,30的单位是秒,正常应该设置大于项目原本的启动时间
-Diast.engine.delay.time=30
1.5 agent和其他apm工具产生冲突
解决方案:把iast的-javaagent:dongtai-agent.jar 命令放在其他的的-javaagent:sky-agent.jar 的后面启动。
原因:后加载的agent会把先加载的agent做字节码处理,iast对apm工具做了大部分兼容。
1.6 agent没有开启熔断自动进入停止状态
参考链接🔗:https://zone.huoxian.cn/d/1299-agent
1.7 agent没有开启熔断状态显示暂停问题
参考链接🔗:https://zone.huoxian.cn/d/1304-agent
再进行排查,这个状态有可能日志量过大没上传完整,需要从用户的应用那里去看 log~*


1.8 接口出现了 StackOverflowError,是否可以下列关闭片段代码?关闭后会有什么样的影响


答:可以关闭,这段代码关闭后会无法对用户自定义对象污点进行跟踪。根据报错信息,用户需注解下列这段代码后,再重新编译打包。
注意:这段代码是在 dongtai-core 里面,启动的时候,都是从openapi 下载 dongtai-core,用户需进入 Server 容器,替换容器内 /tmp/iast_cache/package 文件夹下的 core 包即可。

1.9 自动安装(attach)的 Agent 会有进程吗?需要从哪里查看 Agent 的存活状态?
Agent 会 Attach 到应用的进程中,不会有新的进程;除了在控制台上看,也可以在本地的 Agent 日志里查看。
1.10 自动安装(attach)的 Agent 如何卸载?
java -jar agent.jar -m uninstall -p [pid]
1.11 在同一台服务,项目名称一样,安装 10 个 Agent,页面上只会展示一个 Agent。这情景下有什么做法可以区分 Agent?


可以通过参数 engine.name 区分 Agent 名字,启动式配置:-Dengine.name=xxx
1.12 为什么不是Java直接attach目的进程而是Java命令执行一个c应用再attach目标应用。增加这个中间层jattach-Linux的目的是什么呢?
如果用attach的话依赖jdk的tool.jar这个包,而这个包在jdk1.8之后被移除了,虽然jdk在1.8之后依然能够attach,但是会有版本不兼容的问题导致attach失败。例如用jdk1.8构建agent时,用jdk11以及更高版本会出来ClassNotFound的异常,异常原因就是缺少tool.jar包。jattach很好的解决的这个问题,他重新实现了一套attach的功能,解决了版本冲突。
1.13 请问一下,运行时attach方式,uninstall后iast类会gc回收掉吗?
会回收的,但是1.9版本好像有bug,导致没有被回收和卸载不干净的问题。
三、Server问题
1.1 使用https点击项目直接跳转登陆页面问题
解决方案:修改config-tutorial.ini,在后面加入自己的需要https访问的域名,如,.huoxian.cn
[security]
csrf_trust_origins = .example.com,.huoxian.cn
1.2 新版本k8s环境下如何创建一个pvc
创建一个nas存储,如nfs,填入下列yaml中,执行即可在dongtai名称空间中创建
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
name: app-agent-pvc
namespace: dongtai
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2G
volumeMode: Filesystem
volumeName: app-agent-pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/bound-by-controller: "yes"
name: app-agent-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 500Mi
mountOptions:
- nolock,tcp,noresvport
nfs:
path: /data/k8s
server: 这里是您的nfs地址,如:127.0.0.1
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
1.3 如何升级我的server(不支持自定义数据库升级)
注:升级失败请手动恢复数据库备份,降低镜像版本后再重新升级。
正常升级流程
./dtctl remove
//拉取最新main代码:
git pull
./dtctl install
./dtctl upgrade
低版本升级注意事项:
因1.8.0改动比较大,必须先升级1.8.0版本
./dtctl remove
git pull
./dtctl install
./dtctl upgrade -t 1.8.0
随后再升级最新版即可
./dtctl upgrade
1.3 组件页面报错

server日志

显示找不到这个表,原因是系统上存在旧版本数据,旧版本的数据volume没删,
可以通过docker volume ls 查看
处理方法为:
先执行 dtctl rm -d
再重新 dtctl install 就好了
1.4直接./dtctl install遇到报错
[Info] Data dir:mysql-vol
ERROR: Top level object in '/dev/fd/63' needs to be an object not '<class 'NoneType'>'.
查看自身的默认shell
echo $SHELL
若不是返回/bin/bash,则自行制定shell启动,如:bash dtctl install
1.5Server界面上点击组建和搜索后,页面没反应
检查 docker logs server 和 mysql
确定 server 和 mysql 容器没问题的情况下,清除浏览器缓存再重试
1.6如何修改 net.core.somaxconn
遇到 server 启动日志出现报错
system max net.core.somaxconn (128) .
物理机修改:执行命令
sysctl -w net.core.somaxconn=1024
Docker-compose修改:添加net.core.somaxconn: 1024
dongtai-server:
image: "registry.cn-beijing.aliyuncs.com/secnium/dongtai-server-entri:1.8.3"
restart: always
sysctls:
net.core.somaxconn: 1024
volumes:
- iast-vol:/tmp/logstash/
- ./config-tutorial.ini:/opt/dongtai/dongtai_conf/conf/config.ini
logging:
driver: "json-file"
options:
max-size: "10m"
k8s修改:添加init容器
initContainers:
- image: busybox
command:
- sh
- -c
- echo 1024 > /proc/sys/net/core/somaxconn
imagePullPolicy: Always
name: setsysctl
securityContext:
privileged: true
网页打不开,本地可以curl到外部访问不同
请检查防火墙的状态,并且是否开启了ip转发功能
cat /proc/sys/net/ipv4/ip_forward
若为0 则关闭了ip转发 无法将docker内部的地址映射到外部,修复方案:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #插入这行 保存
sysctl -p
四、检测问题
1.Python agent检测必须依赖框架么
答案:是的,参考https://doc.dongtai.io/docs/getting-started/agent/install-python-agent,支持Django: 3.0 - 3.2,Flask: 1.0 - 1.2
2.漏洞重放找不到验证的数据包
低版本的洞态 IAST (开源版 v1.4.0 含之前) 不会保留所有数据包造成的
3. XSS漏洞检测误报的原因
IAST只能判断后端代码调用链层面,xss的判断逻辑是接口输入和输出的是否相同并且没有做任何过滤。但是如果前端拿到响应后并不在页面做展示,或者只去部分字段做逻辑处理,xss并不会被触发。
从最终的检测结果上看xss确实会有误报,因为iast是拿不到前端对数据的处理逻辑的。所以,根据不同的业务场景,可以选择是否开启xss检测。
4.为什么IAST检测规则只有五百多条?
这是由IAST的检测原理决定的,IAST的检测规则是包含接口和抽象类的规则的,所有实现了接口方法以及继承了抽象类的方法都会被HOOK到,而且现有规则均偏底层,通过HOOK很少的底层函数就可以拿到完整的代码调用链。
5.部分场景的漏洞没有检测出来?
提供具体的场景,最好是代码示例,我们来跟进测试。
6. Fastjson 检测问题
执行了这个sql以后,换了个项目名就 fastjson 组建漏洞就正常检出了:https://huoqi-public.oss-cn-beijing.aliyuncs.com/iast/sql/fastjson-patch.sql
五、兼容性问题
- 运行在Tomcat 7下会报错,目前兼容Tomcat 8、9、10。

六、产品问题
- 并不是所有的项目都能自动化的梳理出api导航
只有spring系列的软件可以自动化的梳理出url,其他的均会访问时记录下来。
七、其它问题
FAQ文档在逐步完善,没有考虑到的点或者非预期的问题可能还有很多。如果您在使用过程中遇到问题。请在微信群联系我们,我们会在24小时内为您解答问题,或将问题提个issue至github后端同学将会在48小时内回复您。
问题提交格式
JDK版本:
中间件、框架使用版本情况:
IAST-Server版本:
IAST-Agent版本:
以及debug日志信息:
问题情况:
如有代码问题请在提交时附上完整的代码demo便于复现排查