写点什么

记录一次 Linux 服务器被人使用 SSH 字典爆破

  • 2024-07-27
    湖南
  • 本文字数:4025 字

    阅读完需:约 13 分钟

2024 年 1.20 凌晨睡了一觉,早上起来用 termux 远程 ssh 登录小主机发现密码没法登录了,一直显示密码错误,到了晚上用电脑 ssh 连接小主机,发现小主机真的没法登录了,直接把小主机接上屏幕查看,发现密码被人修改了,系统都进不去,而且主机风扇一直呼呼转,估计是 cpu 使用率上来了,这下只能进到 linux 的安全模式进行密码修改了。


重启 ubuntu,开机的时候同时按住 shift+esc 键进入安全模式。


选择 ubuntu 高级选项然后 enter 进入。

向下选择括号内有 recovery mode 的选项,然后按 e 进入编辑模式。

光标移动到前面单词为 linux 的那一行, 将那一行的 ro recovery nomodeset 以及本行他后面的都删掉(比如图中的 dis_ucode_ldr)。

改为 quiet splash rw init=/bin/bash,改完如下:

按'F10'键,数秒后,进入界面如下:

输入命令 passwd 用户名,如下:

这样的:passwd 用户名:密码:确认密码这样就好了,不加的话你的执行步骤是对的但用户密码有可能还是原来的---比如我用户名是 root,要修改的目标密码是123456。输入passwd root输入12345确认输入12345
复制代码

然后输入命令保存重启。

reboot -f #此处只输入reboot是没用的,必须加-f
复制代码

重启之后就可以登录小主机了。


开机之后, 发现 cpu 一直居高不下, 开机几分钟 cpu 直顶 99%。


但是 top 命令查看了一下进程,发现没有进程占用过高,表现十分正常。

使用 netstat -napt 命令查看 tcp 进程服务,发现一个可疑的 IP 地址。

查一下 ip 来源。

kill 掉 ntools 进程之后第二次查看, 发现原来的可疑 IP 地址变了,但是用 shodan 查了一下还是香港的服务器。


使用 shodan 查询 ip 地址的方法:

https://www.shodan.io/

使用 sysdig 查看隐藏进程。

sysdig -c topprocs_cpu # 该命令可以输出cpu占用的排行,经测试可以显示出被隐藏的进程
复制代码

sysdig 安装教程https://www.yundongfang.com/Yun6123.html


安装 sysdig 排错教程:https://zhuanlan.zhihu.com/p/112788242


使用 sysdig 查看到的隐藏进程:

有一个隐藏的进程占用率看起来十分离谱。


百度了一下这个工具,果然是挖矿软件。

使用命令搜索隐藏进程的更多信息。

unhide proc # 自助搜索隐藏进程,linux系统中一切皆文件,proc目录下保存的就是所有正在运行程序的进程ID,即PID
复制代码

发现以下结果, 全都是这个 tmp/ntools, 跟百度上的石锤了。

先把他 kill 掉看看,不过感觉是有定时任务的。


直接 kill !!!!

kill 掉了之后发现机子风扇变慢了, 但是过了一会又转了。


没错他又启动了!那么可以判断这一定是定时任务了!

挖矿程序一般都设置了定时任务启动脚本程序,查看定时任务,crontab -l 查看是找不到的��得看/etc/crontab 文件,执行 cat /etc/crontab 。果然有任务在启动程序脚本 /var/log/oneav/cron.lock。

不过后来查了一下这个是宝塔面板的定时任务, 初步判断应该不是这个原因引起的。


查看 ssh 是否被暴力破解。

find /var/log -name 'secure*' -type f | while read line;do awk '/Failed/{print $(NF-3)}' $line;done | awk '{a[$0]++}END{for (j in a) if(a[j] > 20) print j"="a[j]}' | sort -n -t'=' -k 2
复制代码

查看防火墙状态。

sudo ufw status
复制代码

发现防火墙是不活动的。

将防火墙开启。

sudo ufw enablesudo systemctl start ufw # 并且设置开机自启动 或者用sudo service ufw start 
复制代码

同时修改防火墙配置,确保万无一失。

sudo vim /etc/ufw/ufw.conf
复制代码

将防火墙的 enabled 改为 yes。

但是过了十秒钟左右配置文件中的 ENABLED 又被改成 no 了。


并且 sudo ufw status 查看防火墙状态也是未激活状态。


如下:


不管怎么改他都能将防火墙关闭。


于是我想到了一个方法:

在修改防火墙之后直接将防火墙的配置文件/etc/ufw/ufw.conf 修改权限为“只读”。

在修改防火墙的配置文件后随即修改权限为“只读”。

chmod 400 /etc/ufw/ufw.conf
复制代码
  • 4(读权限): 表示对文件或目录有读权限。

  • 2(写权限): 表示对文件或目录有写权限。

  • 1(执行权限): 对于文件,表示可以执行;对于目录,表示可以进入。

数字 1(第一个数字):所有者权限。

数字 2(第二个数字):组权限。

数字 3(第三个数字):其他用户权限。


这样就可以有效阻止攻击者的程序修改防火墙的配置文件。


接着我们查看系统的日志。

journalctl -e
复制代码

一条一条日志进行检查。





通过查看日志发现有一个 unix 系统(也是 linux)似乎在与我们的主机建立会话。


蓝色框内似乎是在执行一个命令行。


绿色框可以知道这个 pam_unix 尝试使用 root 用户与我们的主机建立会话但是被关闭了。


连续对比了几次日志,发现这个 cmd 命令输入很稳定的一分钟执行一次,而且有一次是用名称为 smmsp 的 user 发送邮件测试,邮件程序被放在了以下三个文件夹里面,猜测攻击者做了备用的邮件发送系统,并且做了软链接。

  • /etc/init.d/sendmail

  • /usr/share/sendmail/sendmail

  • /usr/libexec/sendmail/sendmail


经百度发现这个邮件系统其实是 linux 自带的。


那么我们接着往下探。


想到攻击者想要访问我们的服务器进行命令行输入,那应该是用到了 ssh 进行远程登录的。


我们看一下 ssh 的日志, 查询 ssh 的日志。

journalctl -u ssh -e #参数-e是直接将日志输出全部到底
复制代码



好家伙,我们发现上面一台 unix 机器一直在尝试用不同的 user 登录我们的机子,而且每次使用的 IP 地址都是不一样的,猜测这位攻击者在使用字典进行 ssh 爆破攻击。


查了一下这些 IP 地址,都是国外的,联系到上面的几次可疑 IP 地址的归属地都不是大陆的,可以确定这就是攻击者使用梯子匿名攻击我们的服务器。


还好刚刚把防火墙立起来了而且加了只读权限,才重新把防火墙立起来,现在攻击者被拦截在外面无法通过 ssh 进行登录我们的机子。


查看系统邮件是否有对外订阅。

cat var/mail/root
复制代码

发现有几条可疑的邮件。

发现邮件通知了防火墙自动禁用的通知而且还有一个可疑的/bin/dtjbdjkw 1 1。

前面有个单词 cron(定时任务的全称是 crontab)那么初步猜测这东西可能跟定时任务有关,查看定时任务的配置文件,看到都是很常规的定时任务,那我们直接进入到系统的这四个定时任务的文件中去查看是否有可疑文件:

  • /etc/cron.hourly

  • /etc/cron.daily

  • /etc/cron.weekly

  • /etc/cron.monthly


这四个文件夹就是系统专门存放定时任务的地方, 分别查看这四个文件夹内部的异样。

观察这几个定时任务的执行时间和 journalctl -e 日志中异常脚本的启动时间间隔是否相似可以进行判断 相关程度。


接着查看后发现,有一个定时任务的文件名字很可疑,使用 ls -al 可以看到创建时间就是 1.20 号凌晨的时候。

观察了三个定时任务目录后可以确认这个 Wsqsg3Wo 就是一个可疑文件, 我们直接 rm -rf Wsqsg3Wo 将其删掉, 同时使用 kill -9 pid 结束掉 ntools 进程, 然后开启新的终端观察系统日志。

journalctl -e
复制代码

最终 cpu 不再处于高占用状态, 并且攻击者包 ntools 不再再生,但是还是能看到攻击者在不断地进行 ssh 字典爆破,真是穷追不舍啊,又过了几天之后使用 journalctl -e 查看日志。

发现清除了定时任务后还有个自启动任务在以间隔一分钟的频率执行,但是因为我把它的脚本(定时任务)给移除了, 所以他每次执行的时候都找不到脚本, 就以执行失败告终。


那么我们现在 cd 到自启动目录下查看这个日志中出现的 DJI2YwVz.service。

cd /lib/systemd/system/cat DJI2YwVz.service 
复制代码

DJI2YwVz.service 的内容如下:

这些配置的含义就是(由 gpt 进行解释)。

  • [Service] :这个部分定义了服务的启动行为。

  • Type=simple:表示这是一个简单的服务类型,它意味着主进程由 ExecStart 指定的命令启动,并且当该命令退出时,整个服务被视为失败。但由于 RemainAfterExit=yes,服务的状态将保持活动,即使 ExecStart 的进程已经退出。

  • ExecStart=/bin/dtjbdJkw:这是启动服务时要运行的命令。这里指定了一个路径 /bin/dtjbdJkw,它应该是一个可执行文件。不过,这个文件名看起来有些不常见,可能是某个特定应用或脚本。

  • RemainAfterExit=yes:即使 ExecStart 指定的进程退出,服务也将保持活动状态。这通常与 Type=oneshot 一起使用,但在这里与 Type=simple 一起使用有些不寻常。

  • Restart=always:如果服务退出(无论是由于失败还是正常退出),它总是会被重新启动。

  • RestartSec=60s:在尝试重新启动服务之前,系统会等待 60 秒。

[Install]  WantedBy=multi-user.target
复制代码
  • [Install] :这个部分提供了服务的安装信息。

  • WantedBy=multi-user.target:表示当系统达到 multi-user.target 运行级别时,这个服务应该被启动。multi-user.target 是一个标准的运行级别,表示系统已经准备好供多个用户登录和使用。


总的来说,这个服务单元文件定义了一个简单的服务,该服务依赖于网络,并在网络启动后运行 /bin/dtjbdJkw 命令。如果命令退出,服务会尝试每隔 60 秒重新启动它。这个服务被配置为在系统达到多用户模式 (表示系统已经完成基本初始化,并且允许多个用户同时登录和访问系统资源) 时自动启动。


现在我们使用 locate 定位这个服务的位置。

分别 cd 到这两个目录下去将这两个服务删除。

sudo rm DJI2YwVz.service 
复制代码

查看系统自启动中的所有开启的服务

systemctl list-unit-files --type=service | grep enabled
复制代码


我们发现了一个可疑的包,cat 命令查看一下:

果然还是这个病毒的启动文件,使用 rm 删除它。

cd /etc/systemd/system/sudo rm DJI2YwVz.servicesystemctl status YaIjzjZB.service #再次查看是否删除成功
复制代码


成功删除,至此,机子已经处于安全稳定的状态了,日志中也只有攻击者 ssh 登录失败的信息。


写一个 python 脚本来查看一下这七天内被可疑 ip 登录的 ip 信息和登陆次数(登录失败的),统计总共的攻击次数。

可以看到,这是过滤掉了本机的 IP 地址以及内网 192.168 开头的 IP 地址后的统计结果,这七天时间,总共有 100 个左右的 IP 地址尝试通过 ssh 登录主机,总共登录次数为 15584 次,这些 ip 归属地分布世界各地,猜测使用了 ip 池子进行伪装。


曾经我以为互联网到至今应该是很和平的状态,但是经历了这次 ssh 字典爆破攻击后我才意识到网络攻击无处不在,建议系统密码使用比较复杂的随机字符组合,七八十位都没问题,数据可贵,电脑该装杀毒软件的就装上,别因为那占用那点内存而舍弃杀毒软件,防网络攻击于未然 !


作者:Sinvon

链接:https://juejin.cn/post/7385410225829740544

用户头像

欢迎关注,一起学习,一起交流,一起进步 2020-06-14 加入

公众号:做梦都在改BUG

评论

发布
暂无评论
记录一次Linux服务器被人使用SSH字典爆破_Linux_我再BUG界嘎嘎乱杀_InfoQ写作社区