关注网络与数据安全

忘记密码
“游侠安全网”创建了网络安全从业者QQ大群(群号:389710688) ,欢迎各位同仁加入!有其它问题,请联系站长“网路游侠”,QQ:55984512


GSM短信窃听解决方案设计与实现

2013-12-02 14:23 推荐: 浏览: 61字号:

摘要: 博文作者:lake2[TSRC] 发布日期:2013-12-02 博文内容: 不安全的GSM GSM是当前应用最广泛的移动通话标准,在中国大陆,中国移动和中国联通的2G网络也是使用的GSM。随着技术的发展,GSM的安全漏洞已被安全研究人员发现。现阶段对GSM进...

博文作者:lake2[TSRC]

发布日期:2013-12-02

博文内容:

不安全的GSM

GSM是当前应用最广泛的移动通话标准,在中国大陆,中国移动和中国联通的2G网络也是使用的GSM。随着技术的发展,GSM的安全漏洞已被安全研究人员发现。现阶段对GSM进行攻击已经不是什么新鲜事了,国外早已有对GSM进行嗅探和伪装GSM基站的开源项目。

在国内,针对GSM的攻击手法已经出现,我们所知的主要有伪造基站发送垃圾(或诈骗)短信、GSM数据窃听。

下图是伪基站发出的伪造的工行号码95588的诈骗短信:

下图是某地发现的伪基站装备:

能监听到GSM短信的硬件设备成本不超过30元(你没看错,硬件就是一个摩托罗拉C118手机),如下图:

由此可见,实施GSM攻击的成本已经很低,目前我们看到已有人利用GSM的问题来实施攻击了。在深圳, TSRC的小伙伴们都在不同区域遇到过伪基站发的广告短信;微博上也有小伙伴反映北京也遇到类似情况。未来低成本的GSM攻击可能会被广泛利用。

伪基站发送广告短信是一种攻击方式,还有一种是监听短信内容。这种嗅探是静默的,更不容易被发现。

我记得曾经有人问过怎么发现自己有没有被监控。还是有办法,我们给监控者挖一个坑:通过信道给自己发个信息,某某网站有秘密文件,登录用户名密码明文写上。然后在我们部署的蜜罐网站看有没有人拿这个用户密码尝试登录就知道了。

在一些业务场景下,这种GSM短信监听的威胁较大。比如某些团购业务的兑换码就是通过短信发送给用户的;发工资当天的银行短信会暴露你的工资;部分在线支付的验证码是通过短信下发的;……——即使是给MM发的短信被人偷看也是件很不爽的事。

企业和个人,怎么规避GSM带来的安全风险呢?

解决方案设计

要解决GSM安全问题,根源还是要靠运营商大力打击伪基站和GSM传输加密,基于目前的现状来看,这个方案还有一段路要走。

还有一个简单的方法就是彻底摒弃GSM改用3G——这个涉及到一个3G的普及问题。当然,攻击者也可以有办法屏蔽或干扰3G信号,这时候手机就会自动转为2G(移动联通的2G就是GSM),仍然会受到影响。中国电信的2G不是GSM而是CDMA 1X,不受GSM安全影响。改用电信号码?这是因噎废食的办法,不推荐。

对于嗅探GSM短信这种攻击方式,我一直有一个想法(现在终于实现了demo):既然GSM传输层靠不住,那我们在应用层自己加密。所以解决方案说起来就很简单了,就在手机里装一个APP,用于对发出的短信内容进行加密。嘿嘿,这样不仅攻击者,就连运营商也没法窃听了。通话加解密实现比较复杂,就不在讨论了。

点对点的短信,双方都装一个APP,由这个APP对发出和接收到的短信用双方约定的密钥进行加解密,这样传输过程中的短信是密文,只要算法和密钥不被攻击者知道,就可以高枕无忧了。

点对云的短信,不仅需要用户装APP,还需要后端服务器改造支持。比如通过1065XXXXX给用户发送团购凭证,这个短信发送前就加密,用户手机端需要安装一个专用APP来解密,这就保证了凭证即使被捕获攻击者也没法使用——这也会增加成本,需要有一个专有的APP,或许这个功能可以整合到一个通用的APP产品里(手机安全类产品可以考虑下哦)。

当然,这个也可以完全摒弃短信这个通道,而用一些流行的APP平台(如微信公众账号)或者以自己的APP实现。

对于伪基站的问题,应用层暂时没有好办法,这个还在研究中。

解决方案实现

我们在android上实现了这样的一个点对点的APP,采用AES算法加密,双方线下交换密钥(这个demo我们把密钥写在APP里,省略了密钥交换流程),然后就可以互发加密的短信了。

关键代码片段如下:

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception
{
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}

下面就是在系统自带的短信程序里看到的加密后的内容(传输中如果被人截获,他就只能看到这一串没有意义的字符串):

然后是通过我们的APP解密后:

怎么样,来体验一下吧。这个APP(姑且叫做“SMS密使”吧)已经在腾讯安全应急响应中心官网的实验室栏目发布,地址在这里,欢迎大家体验。由于时间仓促,界面、功能、用户体验都不好,请多多包涵。

后记

本文仅是我们对GSM短信窃听的一种尝试解决方案,欢迎感兴趣的同学与我们探讨。更多安全相关的技术研究,欢迎关注“腾讯安全应急响应中心”( http://security.tencent.com )。

同时也非常感谢腾讯安全中心“GSM安全研究”项目组的其他成员popeyHuangJackyriusksk的工作。

关于GSM安全的更多分享,且听下回分解。

原文地址:http://security.tencent.com/index.php/blog/msg/31

联系站长租广告位!

中国首席信息安全官
Copy link