本文主要讲解物联网设备、手机APP等client如何避免被嗅探/钓鱼。
一、正常场景
正常的4G请求经过dns域名解析后直接请求真实的服务器,目前4G/5G的直连通路通常都是比较安全的。
二、异常场景
知己知彼,百战不殆。我们先了解嗅探钓鱼的原理,再针对性的采取防护措施即可。
网络嗅探的必须步骤就是攻击者需要介入到通讯过程中『用户->攻击者->真实服务器』(中间人攻击),手段有很多种,例如攻击wifi进行dns劫持、伪造wifi并迫使/诱使用户接入等,但通常都绕不开wifi,即嗅探/钓鱼通常都发生在连接公共陌生wifi的场景。
常见攻击手法
-ARP攻击+DNS劫持:
-连接想攻击的wifi网络,扫描出wifi局域网内的活跃的IP和MAC地址
-选择想要攻击的IP,向其发送欺骗广播,使其认为攻击者是网关;向路由网关放送欺骗广播,使其认为攻击者是被攻击者。这样攻击者就会成为网关与被攻击者的透明中继
-劫持DNS,拦截域名解析请求,分析请求的域名,把无关域名放行,需要钓鱼的域名返回钓鱼服务器的IP地址,其效果就是被攻击者访问此域名时实际被引导到了钓鱼服务器(用户看到的域名还是正常的)
-钓鱼服务想干啥都行,例如记个用户/密码/cookie、给用户种个木马
-钓鱼Wifi:
-在笔记本或树莓派上创建钓鱼WifiAP,使用被攻击的Wifi相同的 SSID +密码(或设置为不需要密码)
-DoS攻击正常Wifi AP使客户端掉线,使掉线的客户端自动重连到钓鱼AP上(或诱使用户手工连接到钓鱼wifi)
-钓鱼AP将所有80/443请求转发到钓鱼nginx代理服务器
-钓鱼nginx代理服务器将普通请求透明代理转发;将特殊url请求(涉及私密信息的登录/支付等web页面或api接口)转发给自己伪造的钓鱼server
-钓鱼server在返回前干些坏事(给下载的可执行程序植入木马;保存用户名/密码/信用卡/cookie等特殊信息)之后按正常格式response,用户将很难察觉
攻击案例
-知乎APP被嗅探示例:
-360浏览器APP被嗅探示例:
可以看到,知乎app对知乎server、360浏览器对baidu server都没有检查server端证书,在dns劫持或钓鱼代理情况下如果登录了知乎、百度账号,相关的cookie将被截获,并可以用来恶意非法登录你的账号。
三、如何防范
-单向连接
设备只能主动向外发送请求,而不能接受来自外部的主动连接(这样只需要控制对外访问即可;这里的单向连接仅表示建立连接过程,跟信任连接建立后的双向通信没关系)。
-TLS传输加密
Server端实施TLS(http+tls、websocket+tls、tcp+tls、mqtt+tls等),关闭非TLS端口通信,确保数据传输过程一定被加密。此时增加了嗅探的复杂度,但仍可实现中间人攻击(tls代理服务器转发过程中可嗅探信息)。
-Client验证Server证书
物联网设备/手机APP等客户端本地内置根证书(公开的公钥,可用于验证但不能用来签发),在连接Server时,通过本地证书验证Server证书合法性及Server证书CN身份,验证不通过时终止对外请求。(此方法可防止中间人攻击;需要注意证书过期前的升级更新;用户使用反编译后去掉证书验证的重打包版本不在本方案讨论范畴,用户需确保只从官方途径获取APP)
四、其他
双向认证
手机APP通过单向验证Server证书的方法即可;而智能设备建议还是采用双向认证,即不但设备验证Server证书,Server也验证Client证书,这样可以确保双向信任,更加安全。
证书导出(公钥)
如果你想用大站做测试,可以用以下方法导出站点的证书文件:
# 1.导出https://www.baidu.com的根证书
openssl s_client -showcerts -connect www.baidu.com:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >baidu.pem
# 2.补充证书链
# 查看baidu.pem的证书链为:"根证书颁发机构GlobalSign Root CA" 签发-> "中级证书颁发机构 GlobalSign Organization Validation CA - SHA256 - G2" 签发-> "baidu.com证书"
# 查看可发现baidu.pem中缺少GlobalSign Root CA,根证书颁发机构基本都已内置在所有操作系统的钥匙串里,手动搜索导出pem并追加到baidu.pem尾部即可
# 3.client验证server证书测试
curl https://www.baidu.com --cacert baidu.pem
# 4.转换证书格式(用于APP嵌入)
.pem证书转.cer证书
openssl x509 -outform der -in baidu.pem -out baidu.cer
.cer证书转.pem证书
openssl x509 -inform der -in baidu.cer -out baidu-.pem
client对server证书进行检查:
# curl client验证server证书测试
curl https://www.baidu.com --cacert baidu.pem
# android/ios/各智能硬件下使用根证书验证server的方法不再赘述,自行google/baidu即可
yan 20.5.20 23:59
参考: