最近有一批服务器被黑,而且数量较多,影响也很大。我们的服务器基本上都是做了防火墙策略,同时密码也比较复杂的,目前还没有特别好的思路去排查(因为我们之前都没有做好相关的日志收集或者预先准备好手段,导致出问题后能够做的东西不多,而且被黑的机器基本都被替换了系统命令,能做的就更加少了)。
宿迁网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
在梳理被黑的服务器时发现,有一台服务器的防火墙是关了的(也许是被黑后关的,也许是一直都是关了人为疏忽)。既然没有特别好的思路,那我们目前就先设定这台服务器是最先被黑的,因为他防火墙关了,然后被作为跳板陆续黑了其他机器,如果这个假设成立的话,那就是说我们常用的密码已经被外界所收录,为了证明这一个假设,我们需要一些工具。SSH蜜罐就是最好的证明手段,SSH蜜罐有很多,考察了一番后,最终选择了cowrie,其实也不是说它就是同类产品最好的,就是看了一下GitHub发现都有保持更新,而其他类型的有的对上一次更新已经是几年前的了。
http://www.cowrie.org/ 官网,说真的这个网页做得真不行,能看的东西很少或者做得很隐蔽我没能找到吧。
https://github.com/cowrie/cowrie 这个是代码托管GitHub地址,内容还算可以。
总体来讲,我们这次所需要用的是一个SSH蜜罐,何谓SSH蜜罐,通俗的讲,就是用程序模拟一个SSH端口服务,让***以为是真的SSH服务连接上来,然后收集相关信息比如:IP、登录所用的账号、登录上来之后做了什么操作等等。
cowrie做得比较丰富,它可以跟MySQL、elk等对接,可以做详细的******数据分析,本篇只针对我们的被黑案例使用cowrie做验证,所以只介绍最基础实用的方法,详细的跟第三方系统对接暂不介绍。
cowrie的安装方法也是有点隐晦,没有直接访问GitHub地址就显示出来,需要自己手动访问GitHub地址的INSTALL.md文件,地址是 https://github.com/cowrie/cowrie/blob/master/INSTALL.md
官方介绍安装的环境应该是Ubuntu,我们所使用的环境是centos 7.0,不过大同小异,下面贴上具体的安装步骤方法,只参考了官方的部分步骤,没有全部执行。
#安装git python-virtualenv沙盒 gcc等
yum install-y git python-virtualenv bzip2-devel libffi-devel gcc
#升级libcurl,要不等下git clone代码可能会出错
yum update-y nss curl libcurl
#创建一个cowrie用户用于运行cowrie,不直接用root运行,这样比较安全
adduser cowrie
passwd cowrie
#输入密码,之后就切换过去cowrie账号
su- cowrie
#git 拉cowrie代码下来
git clone http://github.com/cowrie/cowrie
#成功后进入cowrie目录
cd cowrie
#cowrie依赖python的 virtualenv沙盒,支持python2、python3,我们使用的centos 7.0 默认是python 2.7,所以我们就用2.7的版本初始化
virtualenv--python=python2 cowrie-env
#激活
source cowrie-env/bin/activate
#先更新pip
pip install--upgrade pip
#更新完pip后就轮到安装cowrie依赖的python库,这里需要gcc编译库所以之前预先已经安装好了gcc
pip install--upgrade-r requirements.txt
#一切顺利的话,现在就开始配置cowrie文件和启动cowrie了
#先复制一份cowrie的配置文件和模拟SSH的root账号
#我们使用默认自带的配置文件,默认监听模拟SSH端口是 2222,这里如果要改成22的话还需要额外的工作,因为运行在沙盒里面,监听22端口需要提权,这里有点麻烦,我们就使用默认的2222端口,等下用iptable的端口转发来把22端口转发到2222去,这样比较简单
cp etc/cowrie.cfg.dist etc/cowrie.cfg
#创建一个模拟SSH root账号文件,因为我们要验证是不是我们的内部密码泄露出去了,所以我们就把自己怀疑泄密的root密码写上去,只有这些root密码才能登录上我们的SSH蜜罐
cat etc/userdb.txt
#内容如下(还支持正则、匹配等特性,这里暂时用不上):
root:x:怀疑泄露密码1
root:x:怀疑泄露密码2
root:x:怀疑泄露密码3
#配置好之后,我们现在就开始启动cowrie
bin/cowrie start
#顺利启动之后,使用以下命令可以看到在运行的进程,使用stop则关闭cowrie
bin/cowrie status
#现在cowrie的工作已经完成,接下来是把SSH端口22转发到cowrie蜜罐端口2222,在此之前,我们先把默认的正常SSH服务端口从22改成其他端口,比如7997
vim/etc/ssh/sshd_config
#修改端口
Port7997
#把selinux关了,要不然修改ssh端口重启ssh服务会失败
setenforce0
service ssh restart
#放开22 2222 tcp端口,让外面所有人都可以访问,加入iptable规则
-A INPUT-p tcp--dport22-j ACCEPT
-A INPUT-p tcp--dport2222-j ACCEPT
#最后一步端口转发
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格式日志,运行了才一个晚上就马上发现问题了,具体日志内容部分如下
可以看到,外面真的有***用我们这个内部密码成功登陆上来了,下面那串则是这个***登录后所做的操作,就是下载一个后门软件执行后删除,跟我们预先设定的一致。
这里还把***的pl文件都保存起来了,放在沙盒的
var/lib/cowrie/downloads/2438c584311c439b585075c68c443e2e96b43a826aaf42643d7808d436df3731
命令行终端输入的日志记录放在沙盒的
var/lib/cowrie/tty/1b54104347e987372b323bc6701625889cc01b8de2ce13bc9a297f1f620b5140