Debian 9服务器遭挖矿入侵:SSH溯源、CVE-2017-0358修复及系统恢复求助
兄弟,你的Debian 9服务器被挖矿入侵确实头疼,结合你给出的线索(PostgreSQL相关、CPU骤升、已锁定SSH),我给你梳理一套排查、恢复和加固的实操方案,一步步来:
一、排查入侵者的入侵路径
1. 从PostgreSQL相关异常入手
- 先定位异常进程细节:用
ps -ef | grep [异常PID](PID从htop里提取),查看进程的启动用户、命令参数,再用ls -l /proc/[异常PID]/exe追踪进程实际指向的文件——大概率是伪装成PostgreSQL的挖矿程序,而非官方进程。 - 检查PostgreSQL日志:默认日志路径是
/var/log/postgresql/,重点看2月3日18:00前后的日志,有没有陌生IP的连接请求、异常SQL执行(比如创建恶意函数、提权操作),或者COPY FROM PROGRAM这类能执行系统命令的语句(这是CVE-2017-0358的典型利用方式)。 - 核查PostgreSQL权限与系统表:登录PostgreSQL执行
\du查看用户列表,有没有新增的超级用户;查pg_proc系统表,看是否存在陌生的自定义函数(尤其是C语言编写、带提权逻辑的)。
2. 排查SSH入侵痕迹
- 查SSH认证日志:打开
/var/log/auth.log,搜索2月3日之前的登录记录,重点找:多次失败后成功登录的IP、陌生用户名、异常的密钥登录记录。 - 检查用户列表与密钥文件:执行
cat /etc/passwd看有没有新增的可疑用户(尤其是带bash/zsh shell的);遍历所有用户的~/.ssh/authorized_keys,确认没有被插入陌生公钥。 - 排查sudo权限:执行
visudo或者cat /etc/sudoers,看有没有给普通用户新增不合理的sudo权限——入侵者可能通过提权拿到SSH权限。
二、恢复被篡改的系统内容
1. 先清除挖矿相关残留
- 杀掉异常进程:用
kill -9 [异常PID],如果进程自动重启,先查定时任务和系统服务:- 查当前用户定时任务:
crontab -l;查postgres用户的:crontab -u postgres -l - 查系统级定时任务:
ls -l /etc/crontab /etc/cron.d/ /etc/cron.hourly/,删除陌生任务 - 查可疑系统服务:
systemctl list-unit-files | grep enabled,禁用并删除陌生服务(比如systemctl disable --now [恶意服务名])
- 查当前用户定时任务:
- 删除挖矿程序文件:根据之前
/proc/[PID]/exe找到的路径,直接删除;同时清空/tmp、/var/tmp、/dev/shm这些临时目录的可疑文件。
2. 修复被篡改的系统文件
- 用
debsums校验系统包:先安装工具apt install debsums,执行debsums -c会列出所有被修改过的系统包文件。对这些文件,用apt --reinstall install [对应包名]重新安装恢复。 - 检查用户配置文件:查看所有用户的
.bashrc、.profile、.bash_profile,删除被插入的恶意启动命令;检查/etc/environment、/etc/profile等全局环境配置,确保没有被篡改PATH或新增恶意变量。
三、修复CVE-2017-0358漏洞
CVE-2017-0358是PostgreSQL的权限提升漏洞,允许普通用户通过特定SQL语句执行系统命令,修复方案如下:
- 优先升级PostgreSQL:Debian 9的PostgreSQL 9.6安全补丁在9.6.2及以上版本,执行
apt update && apt upgrade postgresql直接升级到源内的最新稳定版,Debian官方源会包含安全补丁。 - 临时加固(若无法立即升级):
- 修改
postgresql.conf,设置allow_system_table_mods = off,禁止修改系统表 - 回收普通用户的
pg_read_server_files、pg_write_server_files、pg_execute_server_program权限(这三个权限是漏洞利用的核心),执行:REVOKE pg_execute_server_program FROM [可疑用户名]; - 确保只有信任的用户拥有超级权限,删除不必要的超级用户。
- 修改
四、后续长效加固建议
- SSH深度加固:禁用密码登录,仅用密钥;修改SSH默认端口;在
sshd_config中添加AllowUsers your_username@your_trusted_ip限制登录IP;安装fail2ban防止暴力破解。 - PostgreSQL加固:禁用不必要的远程连接(修改
pg_hba.conf);删除默认测试数据库和用户;给应用用户分配最小权限,避免授予超级权限;定期审计PostgreSQL日志和系统表。 - 定期备份:用
rsync备份/etc等系统关键目录,用pg_dump定期备份PostgreSQL数据库,确保遇到入侵能快速恢复。
内容的提问来源于stack exchange,提问作者Topper Harley
相关产品推荐
相关产品推荐

