1、最近时常收到阿里云安全中心的告警信息-服务应用执行可疑命令,如下图所示
现在有时间后,可以好好研究下这个问题了。
命令行: docker-untar /home/xxx/docker/devicemapper/mnt/735440904d99308126bfc001df5750783fdd2f7f72a209c33e8d16fb9f53de72/rootfs/home/tutor/.ssh/authorized_keys null
摘自互联网:
docker-untar , 通过reexec机制来解包,打包数据流以stdin的方式传入。该实现使用Docker的reexec机制,所以必有注册的地方,来看/pkg/chrootarchive/init_unix.go:
func init() {
reexec.Register("docker-applyLayer", applyLayer)
reexec.Register("docker-untar", untar)
}
所以docker的”docker-untar”由untar()函数完成功能执行,untar定义在/pkg/chrootarchive/archive_unix.go中:
func untar() {
runtime.LockOSThread()
flag.Parse()
var options *archive.TarOptions
//read the options from the pipe "ExtraFiles"
if err := json.NewDecoder(os.NewFile(3, "options")).Decode(&options); err != nil {
fatal(err)
}
if err := chroot(flag.Arg(0)); err != nil {
fatal(err)
}
//***从stdin中获取***//
if err := archive.Unpack(os.Stdin, "/", options); err != nil {
fatal(err)
}
// fully consume stdin in case it is zero padded
if _, err := flush(os.Stdin); err != nil {
fatal(err)
}
os.Exit(0)
}
untar()会调用archive包的Unpack()实现从Stdin中解包数据。Unpack()会把数据流解包到容器指定目录中。
父进程命令行: /usr/bin/docker -d --debug=true --storage-opt dm.loopdatasize=500G --storage-opt dm.loopmetadatasize=8G --storage-opt dm.mountopt=nodiscard --storage-opt dm.blkdiscard=false --selinux-enabled=false -H fd:// -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --api-enable-cors=true -g /home/xxx/docker -p /home/xxx/docker/docker.pid --insecure-registry=hub.xxx.com:5000
通过分析告警信息,初步判断是docker进程在操作authorized_keys触发阿里云HIDS得告警