前记
好久没写文章了,一是由于本身的知识较为零散,另外一个就是比较懒了,大多都零碎记录在了本地。
好久没有登陆osc,登陆的时候发现帐号被冻结了,激活才能使用,这个安全功能给个赞,不过貌似存在邮件轰炸功能,可测,不表于此。
今天就简单说下最近遇到的一次业务jenknis docker容器被黑后排查的故事。
初步分析
1. 进入主机,排查history文件,进程,系统命令,常见文件,网络通讯等基本方面。
2. ps/netstat/psof等系统命令文件被替换、存在异常进程名、存在大量异常端口通讯、/tmp、/etc等目录存在可疑文件。
3. 从以上等特征初步分析为gates系列木马变种,含挖矿与ddos功能。
4. 根据业务已有对外网开放的服务及其余方面确认,这次被黑是由于5月份出现的jenknis反序列化漏洞致使,因此在history文件也就没有找到太多有价值的东西。
专向docker
既然系统自己没有太多日志,并且鉴于漏洞的利用方式,转向排查docker jenknis容器的日志或系统的syslog日志(syslog日志不排除被删)。
docker logs
# 查看容器2eb09877d1b0的运行日志,默认来自系统的/dev/stderr和/dev/stdout
docker logs 2eb09877d1b0
# 查看容器2eb09877d1b0 2017-06-17日开始的100条日志
docker logs -f -t --since="2017-06-17" --tail 100 2eb09877d1b0
# 上面语句可能存在一个问题,没法导出含stderr的docker logs、没法grep查看docker logs日志
# grep查看含有特定字符的日志行
docker logs 2>&1 | grep hello
docker logs 2>/dev/null | grep hello
# 导出docker logs,查找docker 容器日志存放目录
docker inspect --format='{{.LogPath}}' 2eb09877d1b0
调查结果
从docker容器日志里能够详细看到每一次jenknis报错信息中含有的攻击者执行的命令字符串,至此基本肯定了最先的攻击时间和攻击流程。
未完成的遗憾
一次完美的溯源应该是查清谁于什么时间经过什么方式黑进来,作了什么事情。
而这次溯源中出现了一点不完美是由于docker logs没有记录源ip。
后来查询官方文档后,自定义了docker logs记录的数据来源与日志格式,详细参考:
https://github.com/nginxinc/docker-nginx/blob/8921999083def7ba43a06fabd5f80e4406651353/mainline/jessie/Dockerfile#L21-L23
https://docs.docker.com/engine/admin/logging/view_container_logs/