V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiangwei2222
V2EX  ›  信息安全

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

  •  
  •   jiangwei2222 · 2023-07-31 10:18:56 +08:00 · 4699 次点击
    这是一个创建于 510 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    23 条回复    2023-09-22 17:29:55 +08:00
    opengps
        1
    opengps  
       2023-07-31 10:22:25 +08:00
    检查:可疑网络链接,可疑进程,可疑文件,可疑脚本任务
    jiangwei2222
        2
    jiangwei2222  
    OP
       2023-07-31 10:25:40 +08:00
    @opengps 网络太复杂了,很多机器组了局域网。内网有很多互调,内网又有 PT 、BT ,我查了出口路由器的记录,完全没法看。

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

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

    定时任务 crontab -l 看了下,机器没装 crontab
    xubeiyou
        3
    xubeiyou  
       2023-07-31 11:00:30 +08:00   ❤️ 2
    基本我的云服务器没啥宝贝东西 我之前被搞了 我 TMD 直接重装
    hahawode
        4
    hahawode  
       2023-07-31 11:01:09 +08:00
    我的服务器密码之前漏过;
    服务比如数据库 能不能建立一个和之前账号密码 一摸一样的,看谁在链接;
    原来的数据就改一下继续用
    SeanLari
        5
    SeanLari  
       2023-07-31 11:03:04 +08:00   ❤️ 1
    cslive
        6
    cslive  
       2023-07-31 11:10:02 +08:00
    应用备份,断网重装系统
    ihciah
        7
    ihciah  
       2023-07-31 11:39:47 +08:00
    能藏的地方和手段可太多了,建议从备份恢复或重装。
    liuzhaowei55
        8
    liuzhaowei55  
       2023-07-31 11:52:51 +08:00 via iPhone
    删掉机器重新部署,如果有能力检查出来隐藏漏洞,当初就也不会被入侵了
    codeface
        9
    codeface  
       2023-07-31 12:19:58 +08:00   ❤️ 14
    如前人所述,重装是最稳妥的。不过也有一些排查手段可以参考:

    # 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
        10
    MagicLi  
       2023-07-31 13:49:13 +08:00
    想办法重装。
    mineralsalt
        11
    mineralsalt  
       2023-07-31 13:57:53 +08:00
    放心吧, 没那么容易被入侵, PT, 各种内网回调又没有可执行权限, 你把你泄露密码的那台机器重装一下就行了, 局域网内其他机器应该没问题
    cx9208
        12
    cx9208  
       2023-07-31 14:33:44 +08:00   ❤️ 3
    yanmu6626
        13
    yanmu6626  
       2023-07-31 14:46:23 +08:00
    有需求,还是建议弄个 SaaS 版的 EDR 进行防御,一般都兼容 linux 和 windows
    npe
        14
    npe  
       2023-07-31 17:01:10 +08:00
    入侵了没办法了。。。
    msco
        15
    msco  
       2023-07-31 17:03:50 +08:00
    如果是 rootkit 挺麻烦的,看不到网络连接和进程还有目录,要用专门的查杀工具,还不一定能查干净
    liguangyi
        16
    liguangyi  
       2023-07-31 17:08:31 +08:00
    可靠且更快的方式,重装一台新系统,做好安全限制,然后只将数据迁移过去,其他任何脚本、程序都不从被黑的系统里拷贝。
    aapeli
        17
    aapeli  
       2023-07-31 17:14:09 +08:00   ❤️ 1
    其实无论怎样检查都不能保证能清理干净,如果有快照的话尝试恢复系统, 没有的话 可以尝试重做系统.
    keepRun
        18
    keepRun  
       2023-07-31 19:42:24 +08:00
    你这种情况我想到了 github 上有专门的开源工具就是扫描各大网络平台尤其是 github ,从上面自动发现泄露的密码进行攻击,你肯定是被扫描到了
    linuslv
        19
    linuslv  
       2023-07-31 20:42:20 +08:00
    日志。。。
    allgy
        20
    allgy  
       2023-08-01 10:52:26 +08:00
    检查端口
    wumoumou
        21
    wumoumou  
       2023-08-01 15:46:07 +08:00
    建议重装,你按网上的方法操作一遍,你会发现过几天又被搞了。。
    Kenshiro
        22
    Kenshiro  
       2023-08-09 23:16:09 +08:00
    这领域攻击简单防守难,建议想办法备份抹盘重装
    linuxgo
        23
    linuxgo  
       2023-09-22 17:29:55 +08:00
    我之前用 vps 的时候每天最多的时候有上千的 ip 扫描和尝试 22 端口,结果都被 fail2ban 拦截了,所以我一般用 linux 都会启用 fail2ban 做防御,还是很管用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:10 · PVG 03:10 · LAX 11:10 · JFK 14:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.