SSH蜜罐cowrie实战

背景

最近有一批服务器被黑,而且数量较多,影响也很大。我们的服务器基本上都是做了防火墙策略,同时密码也比较复杂的,目前还没有特别好的思路去排查(因为我们之前都没有做好相关的日志收集或者预先准备好手段,导致出问题后能够做的东西不多,而且被黑的机器基本都被替换了系统命令,能做的就更加少了)。

宿迁网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

在梳理被黑的服务器时发现,有一台服务器的防火墙是关了的(也许是被黑后关的,也许是一直都是关了人为疏忽)。既然没有特别好的思路,那我们目前就先设定这台服务器是最先被黑的,因为他防火墙关了,然后被作为跳板陆续黑了其他机器,如果这个假设成立的话,那就是说我们常用的密码已经被外界所收录,为了证明这一个假设,我们需要一些工具。SSH蜜罐就是最好的证明手段,SSH蜜罐有很多,考察了一番后,最终选择了cowrie,其实也不是说它就是同类产品最好的,就是看了一下GitHub发现都有保持更新,而其他类型的有的对上一次更新已经是几年前的了。


cowrie介绍

http://www.cowrie.org/ 官网,说真的这个网页做得真不行,能看的东西很少或者做得很隐蔽我没能找到吧。
https://github.com/cowrie/cowrie 这个是代码托管GitHub地址,内容还算可以。
总体来讲,我们这次所需要用的是一个SSH蜜罐,何谓SSH蜜罐,通俗的讲,就是用程序模拟一个SSH端口服务,让***以为是真的SSH服务连接上来,然后收集相关信息比如:IP、登录所用的账号、登录上来之后做了什么操作等等。
cowrie做得比较丰富,它可以跟MySQL、elk等对接,可以做详细的******数据分析,本篇只针对我们的被黑案例使用cowrie做验证,所以只介绍最基础实用的方法,详细的跟第三方系统对接暂不介绍。


cowrie安装

cowrie的安装方法也是有点隐晦,没有直接访问GitHub地址就显示出来,需要自己手动访问GitHub地址的INSTALL.md文件,地址是 https://github.com/cowrie/cowrie/blob/master/INSTALL.md

官方介绍安装的环境应该是Ubuntu,我们所使用的环境是centos 7.0,不过大同小异,下面贴上具体的安装步骤方法,只参考了官方的部分步骤,没有全部执行。

安装配置cowrie

  1. #安装git python-virtualenv沙盒 gcc等

  2. yum install-y git python-virtualenv bzip2-devel libffi-devel gcc

  3. #升级libcurl,要不等下git clone代码可能会出错

  4. yum update-y nss curl libcurl

  5. #创建一个cowrie用户用于运行cowrie,不直接用root运行,这样比较安全

  6. adduser cowrie

  7. passwd cowrie

  8. #输入密码,之后就切换过去cowrie账号

  9. su- cowrie

  10. #git 拉cowrie代码下来

  11. git clone http://github.com/cowrie/cowrie

  12. #成功后进入cowrie目录

  13. cd cowrie

  14. #cowrie依赖python的 virtualenv沙盒,支持python2、python3,我们使用的centos 7.0 默认是python 2.7,所以我们就用2.7的版本初始化

  15. virtualenv--python=python2 cowrie-env

  16. #激活

  17. source cowrie-env/bin/activate

  18. #先更新pip

  19. pip install--upgrade pip

  20. #更新完pip后就轮到安装cowrie依赖的python库,这里需要gcc编译库所以之前预先已经安装好了gcc

  21. pip install--upgrade-r requirements.txt

  22. #一切顺利的话,现在就开始配置cowrie文件和启动cowrie了

  23. #先复制一份cowrie的配置文件和模拟SSH的root账号

  24. #我们使用默认自带的配置文件,默认监听模拟SSH端口是 2222,这里如果要改成22的话还需要额外的工作,因为运行在沙盒里面,监听22端口需要提权,这里有点麻烦,我们就使用默认的2222端口,等下用iptable的端口转发来把22端口转发到2222去,这样比较简单

  25. cp etc/cowrie.cfg.dist etc/cowrie.cfg

  26. #创建一个模拟SSH root账号文件,因为我们要验证是不是我们的内部密码泄露出去了,所以我们就把自己怀疑泄密的root密码写上去,只有这些root密码才能登录上我们的SSH蜜罐

  27. cat etc/userdb.txt

  28. #内容如下(还支持正则、匹配等特性,这里暂时用不上):

  29. root:x:怀疑泄露密码1

  30. root:x:怀疑泄露密码2

  31. root:x:怀疑泄露密码3

  32. #配置好之后,我们现在就开始启动cowrie

  33. bin/cowrie start

  34. #顺利启动之后,使用以下命令可以看到在运行的进程,使用stop则关闭cowrie

  35. bin/cowrie status

配置防火墙策略

  1. #现在cowrie的工作已经完成,接下来是把SSH端口22转发到cowrie蜜罐端口2222,在此之前,我们先把默认的正常SSH服务端口从22改成其他端口,比如7997

  2. vim/etc/ssh/sshd_config

  3. #修改端口

  4. Port7997

  5. #把selinux关了,要不然修改ssh端口重启ssh服务会失败

  6. setenforce0

  7. service ssh restart

  8. #放开22 2222 tcp端口,让外面所有人都可以访问,加入iptable规则

  9. -A INPUT-p tcp--dport22-j ACCEPT

  10. -A INPUT-p tcp--dport2222-j ACCEPT

  11. #最后一步端口转发

  12. iptables-t nat-A PREROUTING-p tcp--dport22-j REDIRECT--to-port2222

测试

#现在我们验证一下cowrie是否正常服务ssh root@cowrie地址#输入user.txt以外密码,如果是登录失败那就正常#输入user.txt里面内置的密码,能够登录就正常

分析

cowrie运行日志放在沙盒内部的 var/log/cowrie里面,默认有两种格式,log是普通日志格式,json则是json格式日志,运行了才一个晚上就马上发现问题了,具体日志内容部分如下

SSH蜜罐cowrie实战

可以看到,外面真的有***用我们这个内部密码成功登陆上来了,下面那串则是这个***登录后所做的操作,就是下载一个后门软件执行后删除,跟我们预先设定的一致。
这里还把***的pl文件都保存起来了,放在沙盒的

var/lib/cowrie/downloads/2438c584311c439b585075c68c443e2e96b43a826aaf42643d7808d436df3731
命令行终端输入的日志记录放在沙盒的

var/lib/cowrie/tty/1b54104347e987372b323bc6701625889cc01b8de2ce13bc9a297f1f620b5140



网页名称:SSH蜜罐cowrie实战
网页链接:http://pwwzsj.com/article/jpscoo.html