SSH暴力破解无时不刻都在进行着,现在可以说已经夸张到只要你的22端口不改,每天必定被扫上几次,如果是热门IP段,一天被扫十万次都不算多。
对于搞这些扫描破解SSH的,你是选择“怂”就这样忍着,还是强行“怼”回去呢?多数系统管理员都选择“怂”,一般采取如下措施:
1、修改SSH默认的22端口
2、关闭密码登录采用证书登录。
3、使用第三方的拦截软件,比如:Fail2ban。
那如果我们不想怂着,想来一波绝地反击,强势一波怼回去有没有办法呢?办法总是有的,就看你愿不愿意折腾了~
首先要请出今天的两位主角,一位是cowrie还有一位是kippo-graph,让我先简要介绍一下这两个工具都是干嘛的。
Cowrie:一个用Python写的高交互式SSH蜜罐,可以模拟出一个假的Debian系统,支持一些常用操作命令,并且可以记录登录者的登录时间、登录IP、输入过哪些命令、以及保存用wget命令下载的文件等等功能。你需要知道的是,这个假的Debian是完全隔离且安全的,无论是谁登录进去了,输入什么命令其实都相当于是在“自慰”。
Kippo-graph:前身其实是为Kippo这个交互式SSH蜜罐而开发的数据分析平台,但后来被人移植到了Cowrie上。简单点说Kippo-graph是一个用PHP写的SSH蜜罐数据分析平台,我们可以用LNMP环境搭建它,它可以用更详细的图形化界面来展示出我们的SSH蜜罐中收集到的信息。
那现在就进入今天的正题。我们准备一台CentOS7X64的VPS,使用ROOT用户登录到机器内。
1、首先来安装配置Cowrie。
新建一个用户,并命名为cowrie:
groupadd cowrie useradd cowrie -g cowrie passwd cowrie
完成后如图所示:
安装一些依赖和组件:
yum -y install wget git gcc-c++ openssl-devel python-devel python-setuptools
安装virtualenv:
easy_install virtualenv
完成后如图所示:
安装pip:
easy_install pip
完成后如图所示:
使用su切换到cowrie用户,然后进入到这个用户的主目录:
su cowrie cd /home/cowrie
拉取cowire的项目文件:
git clone https://github.com/micheloosterhof/cowrie.git
进入cowrie目录内:
cd cowrie
创建程序运行的虚拟环境:
virtualenv cowrie-env
激活环境:
source cowrie-env/bin/activate
成功后如图所示:
安装cowrie所需的依赖:
pip install --upgrade pip pip install --upgrade -r requirements.txt
安装成功后如图所示,如果这里有报错,你们就需要根据报错内容来自行解决问题了:
现在复制一份配置文件:
cp cowrie.cfg.dist cowrie.cfg
编辑它:
vi cowrie.cfg
在这个配置文件内,我们更改的内容很多,比如可以更改系统的主机名:
还可以更改这个假Debian系统内的SSH端口号,这里假设我把它修改成51888:
然后为了让这个蜜罐显得更逼真一些,我们更改一下SSH连接信息:
关于这个配置文件,这里LALA暂时就先配置这么多。
接着编辑登录凭证:
vi data/userdb.txt
在这个登录凭证里面,说白了也就是让我们自定义一些SSH账号和密码,“方便”那些爆破的黑阔登录我们的系统:
现在我们就来运行Cowrie:
bin/cowrie start
运行成功后如图所示:
我们可以尝试自己先登录一下这个假的Debian系统,然后输入命令看看是个什么效果:
可以看到上图中,我已经成功登录到这个假的Debian系统内了,并且我输入了一些常用命令都可以回显内容,另外wget也可以下载文件。下载的文件会重命名并保存到/home/cowrie/cowrie/dl/目录下。
其实现在Cowrie就已经搭建完成了,并且Cowrie本身是会把日志记录到log/cowrie.log这个文件内的。
我们浏览一下这个文件,可以看到刚才我在SSH蜜罐中输入的内容都显示在这里了:
但是,这种无序、无格式的日志文件,如果登陆者多了,日志越来越大,我们分析起来是不是就特别累?别说分析了,看着头都是晕的,所以接下来我们就需要搭建Kippo-Graph这个日志分析工具来帮助我们整理日志内容。而又因为Kippo-Graph是基于PHP的,所以我们可以把Cowrie的日志内容保存到MySQL数据库中,这样一来,查看和分析日志就会变的轻松很多~
2、搭建Kippo-Graph日志分析平台。
以下搭建LNMP环境的过程,总体步骤来自于:CentOS7手动安装Nginx/MySQL/PHP/phpMyAdmin但有很多地方需要做修改,请各位看官仔细看完。
先su拿回root权限,然后进入到root目录内:
su cd /root
安装Nginx:
vi /etc/yum.repos.d/nginx.repo
写入如下内容:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
用yum安装nginx:
yum -y install nginx
安装MySQL5.7:
vi /etc/yum.repos.d/mysql-community.repo
写入如下内容:
[mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/ enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
使用yum安装mysql:
yum -y install mysql-community-server
启动MySQL:
systemctl start mysqld
获取初始的root密码:
grep 'temporary password' /var/log/mysqld.log
修改掉root密码:
mysqladmin -u root -p password
编辑MySQL的主配置文件:
vi /etc/my.cnf
加入一段:
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
如图所示:
最后重启MySQL:
systemctl restart mysqld
安装python-MySQL模块所需依赖:
yum -y install mysql-devel
进入到cowrie目录内:
cd /home/cowrie/cowrie
使用pip安装mysql-python:
pip install mysql-python
安装成功后如图所示:
现在来安装PHP7.2.2,首先安装EPEL和Webtatic源:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
编辑这个EPEL源配置文件:
vi /etc/yum.repos.d/epel.repo
去掉如图所示的#号:
安装PHP:
yum -y install php72w-fpm php72w-cli php72w-common php72w-gd php72w-mysqlnd php72w-odbc php72w-pdo php72w-pgsql php72w-xmlrpc php72w-xml php72w-mbstring php72w-opcache
修改php.ini配置文件(配置请参考:https://lala.im/2571.html):
/etc/php.ini
新建session目录并给777权限:
mkdir /var/lib/php/session cd /var/lib/php chmod -R 777 session
接着编辑php-fpm的www.conf文件:
vi /etc/php-fpm.d/www.conf
将php-fpm的运行用户修改成cowrie,如图所示:
安装unzip:
yum -y install unzip
进入到nginx站点目录:
cd /usr/share/nginx/
下载并解压phpMyAdmin:
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.9/phpMyAdmin-4.7.9-all-languages.zip unzip phpMyAdmin-4.7.9-all-languages mv phpMyAdmin-4.7.9-all-languages phpmyadmin rm -rf phpMyAdmin-4.7.9-all-languages.zip
新建一个phpmyadmin的conf:
vi /etc/nginx/conf.d/phpmyadmin.conf
写入如下内容:
server { listen 2333; server_name 172.104.127.205; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/phpmyadmin; index index.html index.htm index.php; } location ~ \.php$ { root /usr/share/nginx/phpmyadmin; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/phpmyadmin$fastcgi_script_name; include fastcgi_params; } }
现在启动Nginx和PHP-FPM:
systemctl start nginx systemctl start php-fpm
打开phpMyAdmin新建一个数据库并命名为cowrie,然后导入数据库文件:
/doc/sql/mysql.sql
这个数据库文件的下载地址:https://github.com/micheloosterhof/cowrie/
如图:
回到Xshell内,现在拉取kippo-graph的项目文件:
git clone https://github.com/ikoniaris/kippo-graph.git
重命名一下,然后进入到kippo目录内:
mv kippo-graph kippo cd kippo
给generated-graphs目录777权限:
chmod 777 generated-graphs
复制一份配置文件:
cp config.php.dist config.php
编辑它:
vi config.php
修改数据库连接信息:
使用su切换到cowrie用户:
su cowrie
进入到cowrie的根目录:
cd /home/cowrie/cowrie
编辑配置文件:
vi cowrie.cfg
同样这里也要修改数据库连接信息:
先停止运行cowrie,接着再启动:
bin/cowrie stop bin/cowrie start
再用su切回root权限:
su
由于Kippo-graph没有登录机制,所以任何人都能访问到WEB页面。为了让我们的SSH蜜罐信息只为自己所用,这里LALA就配置一下Nginx的密码访问功能。
首先打开:http://tool.oschina.net/htpasswd
用这个工具在线生成一个htpasswd的密匙对,复制生成结果,如图所示:
回到Xshell中新建一个htpasswd文件:
vi /etc/nginx/htpasswd
粘贴密匙对的内容,如图:
接着新建一个kippo的conf:
vi /etc/nginx/conf.d/kippo.conf
写入如下内容:
server { listen 80; server_name 172.104.127.205; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { auth_basic "Auth"; auth_basic_user_file htpasswd; root /usr/share/nginx/kippo; index index.html index.htm index.php; } location ~ \.php$ { auth_basic "Auth"; auth_basic_user_file htpasswd; root /usr/share/nginx/kippo; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/kippo$fastcgi_script_name; include fastcgi_params; } }
重启Nginx:
systemctl restart nginx
至此,我们的SSH蜜罐和数据分析平台就都搭建完成了,但是我们的SSH蜜罐端口当前运行在51888上面,黑阔怎么可能会爆破这个高位端口呢?所以我们需要将22端口的流量转发到我们的51888端口,让黑阔能够轻松的扫描到端口并且登录进系统~
但是22端口现在正是我们的真SSH端口,如果直接做转发,岂不是让我们自己都登录不了系统了,所以我们要先把自己的真SSH端口修改一下~
编辑我们的真SSH配置文件:
vi /etc/ssh/sshd_config
把我们的真SSH端口修改一下,这里我修改成35826,如图所示:
重启SSH服务:
systemctl restart sshd.service
开启CentOS7的防火墙:
systemctl start firewalld.service systemctl enable firewalld.service
放行80端口:
firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --permanent --zone=public --add-port=80/udp
放行3306端口:
firewall-cmd --permanent --zone=public --add-port=3306/tcp firewall-cmd --permanent --zone=public --add-port=3306/udp
放行phpMyAdmin的端口:
firewall-cmd --permanent --zone=public --add-port=2333/tcp firewall-cmd --permanent --zone=public --add-port=2333/udp
放行22端口以及真、假SSH端口:
firewall-cmd --permanent --zone=public --add-port=22/tcp firewall-cmd --permanent --zone=public --add-port=51888/tcp firewall-cmd --permanent --zone=public --add-port=35826/tcp
做端口转发,将22端口的流量转发到我们的SSH蜜罐端口:
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=51888
重载防火墙,让设置生效:
firewall-cmd --reload
完成后如图所示:
至此,一个高交互式的SSH蜜罐搭建就大功告成了~
但是由于Kippo-Graph年久失修,有一部分功能并不能和Cowrie完美结合使用,比如Kippo-Graph的“日志重放”功能现在应该是不能正常使用的。
下面LALA找到一个不完美修复Kippo-Graph的日志重放功能,虽说这样改了后还是有一点问题,但是好歹部分日志是能够播放出来的。
首先编辑:
vi /usr/share/nginx/kippo/kippo-play.php
将路径修改为:
/home/cowrie/cowrie/bin/playlog
如图所示:
接着编辑:
vi /usr/share/nginx/kippo/config.php
修改如图红框中的两个部分:
接着把这个配置文件的最下面改成如图所示:
现在让我们一起看看SSH蜜罐都收获了哪些信息吧~
一些有趣的命令:
日志重放:
登录成功或者尝试登录过此SSH蜜罐的IP:
最“猛”的前十位爆破者IP:
一些统计图表:
最后,如何使用收集到的信息进行一波反杀呢?
举个例子:
前两天有一个这样的黑阔,登录进去输了这样一条wget命令:
完整的命令如下:
下的这个文件是干啥的,这里不得而知,反正估计不是DDOS就是挖矿的玩意,但是这些都不重要,重要的是有他的服务器IP。
首先在ipip.net查一下归属地:
嗯,不错,globalfrag家的机器,这家有中国销售,直接官网联系QQ:
加好友,说明一下:
一般的机房在收到此类abuse都会积极的处理的,除非是部分支持扫爆的机房。
另外得饶人处且饶人,我只是截了个图,并没有真正加这个客服好友。。。扫爆其实也是个辛苦活。。。如果你的机器因为SSH密码设置的太弱被人弄进去了,也算是给自己一个教训。
大佬有联系方式么。
邮箱在下面,有事可以用邮箱联系。
嗯 怼回去的操作蛮复杂,我还是回去改密匙登录吧 233333
我选择改一个自己都记不住的密码。。。
大佬你的sspanelv3在修改版,php composer.phar install,执行这个命令出错,
错误麻烦看一下
蜜罐挺好玩的,不过有些服务器流量是双向收费的话就不太适合了,不然 wget NG 那就好玩了
玩了几天没收集到什么样本,感觉还是系统太假了,现在这些人登进来第一件事情竟然都是查看内核、CPU信息。。。