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

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

  •  
  •   jiangwei2222 · 271 天前 · 4335 次点击
    这是一个创建于 271 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    定时任务 crontab -l 看了下,机器没装 crontab
    xubeiyou
        3
    xubeiyou  
       271 天前   ❤️ 2
    基本我的云服务器没啥宝贝东西 我之前被搞了 我 TMD 直接重装
    hahawode
        4
    hahawode  
       271 天前
    我的服务器密码之前漏过;
    服务比如数据库 能不能建立一个和之前账号密码 一摸一样的,看谁在链接;
    原来的数据就改一下继续用
    SeanLari
        5
    SeanLari  
       271 天前   ❤️ 1
    cslive
        6
    cslive  
       271 天前
    应用备份,断网重装系统
    ihciah
        7
    ihciah  
       271 天前
    能藏的地方和手段可太多了,建议从备份恢复或重装。
    liuzhaowei55
        8
    liuzhaowei55  
       271 天前 via iPhone
    删掉机器重新部署,如果有能力检查出来隐藏漏洞,当初就也不会被入侵了
    codeface
        9
    codeface  
       271 天前   ❤️ 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  
       271 天前
    想办法重装。
    mineralsalt
        11
    mineralsalt  
       271 天前
    放心吧, 没那么容易被入侵, PT, 各种内网回调又没有可执行权限, 你把你泄露密码的那台机器重装一下就行了, 局域网内其他机器应该没问题
    yanmu6626
        13
    yanmu6626  
       271 天前
    有需求,还是建议弄个 SaaS 版的 EDR 进行防御,一般都兼容 linux 和 windows
    npe
        14
    npe  
       271 天前
    入侵了没办法了。。。
    msco
        15
    msco  
       271 天前
    如果是 rootkit 挺麻烦的,看不到网络连接和进程还有目录,要用专门的查杀工具,还不一定能查干净
    liguangyi
        16
    liguangyi  
       271 天前
    可靠且更快的方式,重装一台新系统,做好安全限制,然后只将数据迁移过去,其他任何脚本、程序都不从被黑的系统里拷贝。
    aapeli
        17
    aapeli  
       271 天前   ❤️ 1
    其实无论怎样检查都不能保证能清理干净,如果有快照的话尝试恢复系统, 没有的话 可以尝试重做系统.
    keepRun
        18
    keepRun  
       270 天前
    你这种情况我想到了 github 上有专门的开源工具就是扫描各大网络平台尤其是 github ,从上面自动发现泄露的密码进行攻击,你肯定是被扫描到了
    linuslv
        19
    linuslv  
       270 天前
    日志。。。
    allgy
        20
    allgy  
       270 天前
    检查端口
    wumoumou
        21
    wumoumou  
       270 天前
    建议重装,你按网上的方法操作一遍,你会发现过几天又被搞了。。
    Kenshiro
        22
    Kenshiro  
       261 天前
    这领域攻击简单防守难,建议想办法备份抹盘重装
    linuxgo
        23
    linuxgo  
       218 天前
    我之前用 vps 的时候每天最多的时候有上千的 ip 扫描和尝试 22 端口,结果都被 fail2ban 拦截了,所以我一般用 linux 都会启用 fail2ban 做防御,还是很管用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2881 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:41 · PVG 17:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.