手机App https加密宝典2021年12月12日

以前在多种场合同朋友讲过手机App在编程使用https加密通信的各种安全问题,记得有一年公司信息安全工程师测试了几款网银App,发现每一款都有https加密的安全问题,不知道现在是否已经得到改进。但是,笔者同多名不同行业的App开发工程师沟通过,发现多年前发现的问题,现在仍然存在,为此,笔者特抽空在公司官网上线之日把这个普遍存在的安全问题整理成宝典呈现给读者。

大家都知道,手机App一般都有注册和登录操作,同时也要同服务器端交互各种用户机密数据,为了保护账户口令安全和机密信息安全,必须采用https协议实现同服务器端的加密通信,如果没有启用https,是一定不能通过苹果应用商店审核的。但是,如果仅仅是启用https加密还是不够的,常见的安全问题有如下四种情况:

第一:不判断SSL证书绑定的域名是否正确

启用https同服务器握手,服务器会返回SSL证书绑定的域名,如果返回的SSL证书绑定的域名同用户请求连接的网址不一致,则应该终止连接。如App发起https://login.domaina.com连接,返回的SSL证书却是绑定login.domainb.com域名,如果这时候App不判断域名是否匹配就稀里糊涂的与之连接,把用户在App中输入的银行卡密码就交给了假冒网银服务器!域名不匹配绝大多数是遭遇了中间人攻击,这种不判断域名是否匹配的问题就让攻击者轻松得到了用户的银行卡密码(如果这个App是网银App的话)。但是,如果App能实时验证域名是否匹配就能防范这类攻击。

第二:不判断SSL证书是否可信

这个问题也比较普遍,在网上查了一下居然有多篇文章教用户无需调用证书验证函数。如果用户知道必须验证域名是否匹配,但是不知道需要验证服务器证书是否是操作系统信任的证书,或者验证是否是App信任的证书,则一样可能会遭遇DNS劫持后的中间人攻击,把用户的机密信息就乖乖的交给了假冒网银系统。因为操作系统不信任的自签SSL证书是可以使用OpenSSL命令随意制作的,即使App会验证连接的域名是否同SSL证书绑定的域名匹配,但是由于App不验证SSL证书是否可信,则仍然会中招。

比较可靠的做法是不仅要验证SSL证书是操作系统信任的证书,而且应该验证证书是否是由本单位指定的CA机构的中级根证书签发,以防止可能的从操作系统信任的其他CA非法获得的绑定服务器域名的证书的恶意攻击。而对于一些重要的系统,如支付系统,笔者推荐定制本单位专用中级根证书来为这些系统签发SSL证书,这样就能做到App只信任本单位专用中级根证书签发的SSL证书,只有这样才能做到万无一失。

不判断SSL证书是否可信

第三:不判断SSL证书是否已经吊销

一般情况下,如果用户怀疑证书私钥有可能泄露的话(如关键人员离职或服务器被攻击),则必须向CA申请吊销此证书,重新申请一张新的SSL证书。而App如果在同服务器握手时不验证证书是否被吊销的话,则如果某张网银用的SSL证书的确是已经泄露的话,则攻击者就可以用这种证书来成功实现中间人攻击。但是,如果App实时验证证书是否已吊销的话,则就能及时发现并终止连接,能有效防止攻击者使用已经吊销的证书用于中间人攻击。

第四:不判断SSL证书是否已经过期

这是一个低级错误,但是大多数App经常犯这个错误。SSL证书都是有有效期的,如果过期了就会更新成新的有效期证书。但是,如果攻击者获得了网银系统的已经过期的SSL证书,并且部署此过期证书用于中间人攻击,如果App同服务器握手时不检查证书是否过期,则就中招了!但是,如果App能实时检查证书是否过期的话,则一旦发现证书已经过期则马上终止连接,利用过期SSL证书的攻击。

其实,以上判断常用浏览器在https访问网站时是都有判断的,这就是为何有些用户遇到过以上情况的浏览器警告信息,但是App开发者往往并不是懂PKI技术的专业人士,不会知道原来SSL证书还有这么多名堂,以为只要在服务器上部署好SSL证书,App编程时启用https连接即可,其实这远远不够,App在使用https同服务器握手时一定要检查以上四种情况都没有问题后才能同服务器开始正常交换数据,只有这样,才能真正保证https加密能起到保护机密数据的作用。

不判断SSL证书是否已经过期

笔者呼吁所有App开发者在看到此文后马上检查你开发的App是否已经做了以上四项检查,如果没有做到,马上改进并发布更新版本。而看到此文的朋友如果不是App开发者,但自己单位或朋友单位有App的话,请告知App开发者马上检查App程序,尽快堵住这个已经存在的很久的安全漏洞。也在此呼吁做安全检测的朋友,在检测用户App时一定要特别留意检查App是否有这些问题,帮助用户及时堵住这个漏洞。这样,就可以大大提升我国手机App的安全水平,让App用户的数据更安全,让我国的互联网更安全。

点击 这里 下载此文 (PDF格式,有全球信任和全球法律效力的数字签名和时间戳,版权所有,抄袭违法必究!转载请注明:转载自证签CEO博客)