人生第二次遇到黑客。我有一个部署在 Oracle Cloud 上的 Elasticsearch,用来存放我的一个服务发送的审计日志。今天打开发现12月3日之前的数据都丢失了,从 Elasticsearch 的日志看到,那天 index 被删除了。查了各种代码和脚本,没有任何与删除 index 有关的调用,正百思不得解,看到多出了一个叫 read-me 的索引,里面只有一条数据,内容是说数据已被存档,打款比特币就可以取回…原来是着了黑客的道。
目前还没想明白漏洞出在哪里,大家有兴趣的话可以想想攻破的思路。已知:
- 安装 ES 的服务器在创建之后就修改 ssh 设置关闭了 root 登录、密码登录,只能通过我本地的 private key 访问
- ES 运行在 docker 中,暴露端口 9200 到宿主机,本身没有设置密码
- ES 的访问方式为域名 + HTTPS, 通过 nginx 反代 本地 9200 端口,在 nginx 上设置 basic auth 认证
- basic auth 的用户名和密码没有写在代码中,只出现在访问 ES 的服务的 .env 文件里,通过 Google 和 GitHub 搜索确认没有泄露
目前还没想明白漏洞出在哪里,大家有兴趣的话可以想想攻破的思路。已知:
- 安装 ES 的服务器在创建之后就修改 ssh 设置关闭了 root 登录、密码登录,只能通过我本地的 private key 访问
- ES 运行在 docker 中,暴露端口 9200 到宿主机,本身没有设置密码
- ES 的访问方式为域名 + HTTPS, 通过 nginx 反代 本地 9200 端口,在 nginx 上设置 basic auth 认证
- basic auth 的用户名和密码没有写在代码中,只出现在访问 ES 的服务的 .env 文件里,通过 Google 和 GitHub 搜索确认没有泄露