假如服务器被入侵了,要检查哪些地方?

283 天前
 jiangwei2222

我淦,从来没想到我也有泄密的一天。昨天把我的内网服务开源了,开源的时候专门 copy 了一份新代码 push github 。仔仔细细检查了好多遍,考虑到单测用例有很多密钥和邮件信息,一遍又一遍检查单测文件,把大部分单测文件都删了。

结果,没想到漏了一个流水线的自动编译脚本。脚本里面有核心服务器密码。泄露的是外网服务器密码。但是我把内外网服务器都组成局域网了,所有服务器可以内网 ip 互相访问。昨天早上 10 点多 push 的 github ,下午 6 点发现泄密,赶紧把外网服务器格式化了重装系统。但是我内网服务器涉及的东西太多,没法直接格式化。

今天早上一起来,QQ 提示网络有风险,让我改密码。改完密码依然提示有风险。这特么是谁入侵到我内网机器上挂肉鸡了吗?检查了一遍服务器进程没看到有啥异常,假设被抓肉鸡的话,有啥专业的检查工具不?

不确定是不是真的被入侵了,还是仅仅是巧合,但心里总放心不下,我淦

4361 次点击
所在节点    信息安全
23 条回复
opengps
283 天前
检查:可疑网络链接,可疑进程,可疑文件,可疑脚本任务
jiangwei2222
283 天前
@opengps 网络太复杂了,很多机器组了局域网。内网有很多互调,内网又有 PT 、BT ,我查了出口路由器的记录,完全没法看。

进程有几千个,大致看了一眼没啥异常。

文件更没法排除,东西太多了。

定时任务 crontab -l 看了下,机器没装 crontab
xubeiyou
283 天前
基本我的云服务器没啥宝贝东西 我之前被搞了 我 TMD 直接重装
hahawode
283 天前
我的服务器密码之前漏过;
服务比如数据库 能不能建立一个和之前账号密码 一摸一样的,看谁在链接;
原来的数据就改一下继续用
SeanLari
283 天前
cslive
283 天前
应用备份,断网重装系统
ihciah
282 天前
能藏的地方和手段可太多了,建议从备份恢复或重装。
liuzhaowei55
282 天前
删掉机器重新部署,如果有能力检查出来隐藏漏洞,当初就也不会被入侵了
codeface
282 天前
如前人所述,重装是最稳妥的。不过也有一些排查手段可以参考:

# 1.查看异常进程活动-查找是否有异常进程和端口占用

## 1.1 查找占用 cpu 最多的进程
* 运行 top 命令后,键入大写字母 P 按 cpu 排序

## 1.2 查找占用内存最多的进程
* 运行 top 命令后,键入大写字母 M
* `ps aux | sort -k4nr`

## 1.3 查找进程对应的文件
* `ls -la /proc/$pid/exe`
* `ls -la /proc/$pid`

## 1.4 跟踪异常进程运行情况
* `strace -tt -T -e trace=all -p $pid`

## 1.5 查看进程打开的文件
* `lsof -p $pid`

## 1.6 查看进程端口情况
* 查看所有端口 `netstat -anltp`
* 查看指定进程的端口 `netstat -anltp | grep $pid`
* `netstat -apn|more`

## 1.7 清除恶意进程
* 清除可疑进程的进程链: `ps -elf | grep [pid] kill -9 [pid]`

# 2.查看账号安全

## 2.1 查看是否有存在新增异常账号
* 查找特权用户 `awk -F ":" '$3==0{print $1}' /etc/passwd`
* 查找可以远程登录的账号信息 `awk '/\$1|\$6/{print $1}' /etc/shadow`
* 查找 sudo 权限账户 `cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"`

## 2.2 查看是否有账号异常登录情况
* 查看当前登录用户和其行为 `w`
* 查看所有用户最后一次登录的时间 `lastlog`
* 查看错误登陆信息 `lasstb`
* 查看所有用户的登录注销信息及系统的启动、重启及关机事件 `last`
* 查看登录成功的日期、用户名及 ip `grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'`
* 查看试图爆破主机的 ip
```
grep refused /var/log/secure* | awk {'print $9'} | sort | uniq -c |sort -nr | more

grep "Failed password" /var/log/secure* | grep -E -o "(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}))" | uniq -c
```

* 查看有哪些 ip 在爆破主机的 root 账号
`grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort`

* 查看爆破使用的用户名字典
`grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr`

# 3.检查开机启动项

一般通过`crontab -l`命令即可检测到定时任务后门。不同的 linux 发行版可能查看开机启动项的文件不大相同,Debian 系 linux 系统一般是通过查看`/etc/init.d`目录有无最近修改和异常的开机启动项。而 Redhat 系的 linux 系统一般是查看`/etc/rc.d/init.d`或者`/etc/systemd/system`等目录。

依次排查:
```
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
```

* `cat /etc/rc.local`
* `cat /etc/init.d/rc.local`
* `chkconfig --list`
* `ls -alt /etc/init.d`

* 查看 anacron 异步定时任务 `cat/etc/anacrontab`
* 枚举主机所有服务 `service--status-all`

# 4.查找异常文件

## 4.1 查看最近一段时间内被修改的系统文件
* `find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime -T | xargs ls -la`

## 4.2 按时间排序,确认最近是否有命令被替换,可以结合 rpm -Va 命令
* `ls -alt /usr/bin /usr/sbin /bin /usr/local/bin`
* `rpm -Va>rpm.log`

## 4.3 查看指定目录下文件时间的排序
* `ls -alt | head -n 10`

## 4.4 使用 find 指令查找限定时间范围的文件
* `sudo find ./ -cmin -10 -name "*.php"`


# 5.排查恶意 alias
检查 `~/.bashrc`和`~/.bash_profile`

# 6.排查恶意 ssh 公钥
* `/etc/.ssh/AuthorizedKeys`
* `~/.ssh/AuthorizedKeys`

# 7.系统文件被替换的情况下使用`busybox`
被替换的系统文件通常为 `ld.so.preload`

* `busybox ps -ef|grep watchdogs`
* `busybox ps -ef|grep ksoftirqds`


# 8.借助工具查杀病毒和 rootkit

## 8.1 查杀 rootkit
chkrootkit (下载地址-http://www.chkrootkit.org)
rkhunter (下载地址-http://rkhunter.sourceforge.net)

## 8.2 查杀病毒
clamav(下载地址-http://www.clamav.net/download.html)

## 8.3 查杀 webshell
cloudwalker(下载地址-http://github.com/chaitin/cloudwalker)

# 9. 添加命令审计
为历史的命令增加登录的 IP 地址、执行命令时间等信息

## 9.1 保存 1 万条命令:
* `sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile`

## 9.2 在/etc/profile 的文件尾部添加如下行数配置信息

```
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi

export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
```
MagicLi
282 天前
想办法重装。
mineralsalt
282 天前
放心吧, 没那么容易被入侵, PT, 各种内网回调又没有可执行权限, 你把你泄露密码的那台机器重装一下就行了, 局域网内其他机器应该没问题
cx9208
282 天前
yanmu6626
282 天前
有需求,还是建议弄个 SaaS 版的 EDR 进行防御,一般都兼容 linux 和 windows
npe
282 天前
入侵了没办法了。。。
msco
282 天前
如果是 rootkit 挺麻烦的,看不到网络连接和进程还有目录,要用专门的查杀工具,还不一定能查干净
liguangyi
282 天前
可靠且更快的方式,重装一台新系统,做好安全限制,然后只将数据迁移过去,其他任何脚本、程序都不从被黑的系统里拷贝。
aapeli
282 天前
其实无论怎样检查都不能保证能清理干净,如果有快照的话尝试恢复系统, 没有的话 可以尝试重做系统.
keepRun
282 天前
你这种情况我想到了 github 上有专门的开源工具就是扫描各大网络平台尤其是 github ,从上面自动发现泄露的密码进行攻击,你肯定是被扫描到了
linuslv
282 天前
日志。。。
allgy
282 天前
检查端口

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

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

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

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

© 2021 V2EX