如何防止客户端的请求被嗅探/钓鱼

本文主要讲解物联网设备、手机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

 

参考:

ARP攻击与DNS劫持,使被攻击者进入钓鱼网站

手把手教你Wifi AP钓鱼

WIFI钓鱼的入门姿势

HTTPS中间人攻击实践(原理·实践)

欢迎关注下方“非著名资深码农“公众号进行交流~

发表评论

邮箱地址不会被公开。