热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

道路千万条,安全第一条——一次服务器被入侵的处理经过

容器为何自动停止?服务器为何操作卡顿?进程的神秘连接到底指向何处?发现——自动停止的容器某日发现部署在服务器上的一个容器被停掉了,开始以为是同事误操作停止或删除了。但登录服务器重新

容器为何自动停止?

服务器为何操作卡顿?

进程的神秘连接到底指向何处?

发现——自动停止的容器

某日发现部署在服务器上的一个容器被停掉了,开始以为是同事误操作停止或删除了。

但登录服务器重新启动容器的时候发现一个奇怪的现象:容器启动后几秒钟便会自动停止。

一般来说这种情况可能是容器本身有问题。

但是查看容器日志并未得到任何错误信息,而且该容器镜像已在其它服务器稳定部署运行,应该不会有bug。

所以猜测是系统资源不足,例如磁盘、内存、CPU。

查看磁盘剩余量还比较多,但是在用top命令查看CPU和内存的时候发现了异常:某个进程CPU使用率达到了99%。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

当然这种情况对于我们公司的服务器来说也不是什么特别惊奇的事,因为我们通常会在服务器上执行一些计算任务,占用大量CPU也是很正常的事情。

但由于这台服务器除了我几乎没有其他同事使用,而且进程命令行看不到,所以引起了我的怀疑。

验证——异常不止一处

挖矿进程身份确认

如此高的CPU使用率,让我想到的是最近流行的挖矿病毒。

通过netstat -anp命令查看该进程是否建立了外部网络连接。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

果然建立一个连接,指向 5.196.26.96 这个IP地址。在 https://www.ipip.net/ip.html 查询一下该IP地址,指向国外某地。

进一步验证了我的猜测。因为国内的服务器有严格的备案管理机制,所以很多攻击者都会将服务器部署到国外。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

为了进一步确认,再次到威胁情报平台进行查询 https://x.threatbook.cn/ip/5…. 。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

平台也给出了威胁警告,可以大胆的推定这就是一个挖矿进程。

当然如果想进一步确认,可以提取执行文件的md5值到相关网站进行辨认。

挖矿程序从哪里来?

挖矿程序一般都是由木马下载脚本然后执行,所以用history命令检查一下下载行为。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

没有找到可疑的下载,很可能黑客清除了操作记录或者是通过别的途径下载。

为了进一步排除可能有其它病毒程序作为守护进程定时启动或者开机启动挖矿进程,检查一下crontab配置信息。

也未找到新添加的可疑文件,所以黑客应该并没有设置定时任务。

同时也未找到可疑的开机启动项配置。

可疑的镜像与容器

到了这一步,线索中断。只能换个角度思考了~

据管理员说平时这台服务器很少使用,而且使用的是强密码,密码泄露的可能性很小。

再结合我部署的容器停止时间进行分析,应该是在我部署完成后几小时内服务器被入侵的。

所以怀疑很可能和我的操作有关系。

在使用docker命令进行查找的时候又发现了新的情况。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

一些容器使用了未知镜像(heybb/theimg2)或者使用了非官方的镜像(zoolu/ubuntu)。

上docker hub上搜索这些镜像,都找不到Dockerfile,也无readme之类的说明。而且上传时间都很新,但是下载量增长却很快。

这就奇怪了,这种既无说明,命名也十分怪异的镜像竟然会被多次下载,所以可以推断就是黑客上传的携带木马的镜像。

再利用docker inspect命令查看这些容器,发现该容器并没有通过挂载目录的方式写入系统文件,而是会执行一个 mac.sh 的脚本文件。

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

cat命令查看该文件,只有一行命令

《道路千万条,安全第一条——一次服务器被入侵的处理经过》

显然这是在挖门罗币。

小结

现在发现不止一个黑客入侵了服务器,有的黑客部署了挖矿容器,有的黑客部署了挖矿进程并删除了记录。

处理——清除进程,关闭漏洞

首要任务当然是清除挖矿进程和容器,以及对应的执行文件和镜像。

当然这只是治标不治本的方法。

要从根本上解决问题需要进行溯源分析,避免服务器再次被入侵。

结合以上线索以及个人经验分析,很可能利用Docker的漏洞进行入侵的。

我在部署容器的时候启动 Docker remote API 服务,很可能这个服务暴露到了公网上,立即在浏览器中输入服务器IP地址和对应端口,果然可以访问!

原来服务器运营商并没有提供默认的防火墙服务,机器上的端口是直接暴露在公网上的。

黑客入侵的途径也基本上可以猜测了,通过 Docker remote API 服务器操作容器,将带有挖矿进程的容器部署到服务器上。

或者将挖矿程序通过目录挂载的方式拷贝到服务器上,以某种方式触发并执行。

要修复这个漏洞也很简单,停止对外暴露服务。

建议

网络安全其实是一个很重要的课题,但是开发人员很多时候都缺乏对其足够重视。

针对这次事件,总结了几个经验:

除了一些 web 服务(http/https),不要使用默认端口。

黑客的入侵操作一般都是自动化的、批量的。

操作是使用端口扫描工具,对特定的默认端口扫描。

比如本例中肯定是扫描到本服务器的 2375 端口(2375是Docker remote API的默认端口)之后进行攻击的。

这个原理其实有点像打电话诈骗,用一些很低级的骗术把容易受骗的人群筛选出来。

所以我们平常在编写程序时尽量避免使用默认端口。

不要通过绑定 0.0.0.0 的方式暴露本不需要对外提供访问的服务。

之前在启动 Docker remote API 服务时监听 0.0.0.0 IP,是因为看到很多网上教程都是如此配置,但其实存在了很大的安全隐患。(把事情做好把事情做完区别真的很大!)

其实该服务在使用中并不需要提供给外网,实际上只要监听子网IP就够了。比如 127.0.0.1、 172.17.0.1。

尽可能多的考虑非正常情况

在开发的时候我们除了考虑程序正常的输入输出之外,还需要假设一些特殊的情况来进行测试。

下面是开发者和黑客的思维方式区别:

开发者:A -> 程序 -> B
黑客:S -> 程序 -> ?

开发者考虑的是保证输入A,就可以得到B。黑客很多时候会输入开发者未考虑的S,从而发现bug或漏洞。

使用防火墙限制端口访问。

网络服务,防火墙很重要。

这次的入侵和云服务器厂商都会自带防火墙的思维定势有关系。

通过证书验证访问者的身份。

对于需要提供对外访问的服务,使用身份验证也是一种有效避免攻击的手段。

例如Docker就支持TLS证书来验证服务端和客户端的身份。

总结

排查入侵木马的过程很像扮演一个侦探,通过犯罪现场的蛛丝马迹找到凶手以及行凶手法。

还好当初在发现问题的时候并没有马上采取重装系统这种简单粗暴的方式解决问题,不然漏洞依旧存在,服务器依然会被攻击。

关于更多更权威网络安全的知识可以参考《OWASP TOP10 2017》,里面有最常见的10类漏洞以及防御措施。

像本文中的Docker远程未授权漏洞以及类似的redis未授权漏洞都属于 OWASP TOP 10 中的漏洞。


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
author-avatar
樱花恋雪的玫瑰_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有