分析和攻击私有协议中的密码学安全漏洞 刘慧 关于我 上海交通大学密码与计算机安全实验室 应用密码学研究 Lab of Cryptology and Computer Security 现实软件中密码系统的安全审计分析 软件安全小组GoSSIP 乌云白帽子/乌云专栏作者 Group of Software Security In Progress Gossip on SSL Security by GoSSIP_SJTU 私有协议中的密码学安全漏洞 什么是协议 网络通信协议,为进行数据交换而建立的规则、标准或约定的集合 它规定了通信时信息必须采用的格式和这些格式的意义 应用层: 0x00 0x26 0xe5 0x90 0x83 0xe4 0xba 0x86 … 0xbc 0x9f 标志位:采用何种压缩算法,字符编码方式,长度,… 网络层: 源端口,目的端口,… 传输层: 源IP,目的IP,… 网络接口层: MAC地址,… 吃了么? 私有协议中的密码学安全漏洞 我们关心的协议 与相应实体通信并完成特定功能的应用层协议。 HTTP、FTP、SMTP、… 也可以是更加应用相关的协议,例如 手机APP与发送推送信息的服务器间的通信协议 即时消息应用间及其与服务器的通信协议 网络摄像头与中心服务器的通信协议 …… 私有协议中的密码学安全漏洞 私有协议 Proprietary protocol 非标准协议 微信、QQ;自定义格式的数据交换 可能缺少公开的、详细的协议规范文档 协议逆向 抓包分析 二进制反汇编反编译 私有协议中的密码学安全漏洞 协议的关注点 对于网络摄像头 每帧画面是如何编码的,画面质量与清晰度的协商调整,… 每帧画面传输前是否有协商某些安全机制,传输的画面是否可能 被截获或修改 对于即时消息 消息的某几个字节对应系统内部维护的序列号 消息能否冒充、伪造 私有协议中的密码学安全漏洞 ref1 协议的关注点 对于推送协议 某个字段对应标题,某个字段对应推送消息点击后跳转的网页 服务器推送来的消息本身是否在传输过程中可能被修改 例如, 谷歌云消息服务,曾经因服务器没有检查客户端提交的请求中两个字段的一致性, 导致原本推送到客户端的消息会被攻击者收到Ref2。 这种协议中业务逻辑相关的安全问题不是我们讨论的范围 Ref 1:http://intown.biz/wp-content/uploads/2014/04/gcm_explained.png Ref2:Li, Tongxin, et al. "Mayhem in the push clouds: Understanding and mitigating security hazards in mobile push-messaging services." Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2014. 私有协议中的密码学安全漏洞 What we really focus on 信息传送的通道是否安全 吃了么? 在存在恶意中间人的情况下,通信的安全性 被动中间人:窃听 主动中间人:篡改、重放 身份冒充 吃了么? 我喜欢你 安全传输三⼤大愿望 真实性:来自真实的的发送方 Authenticity 机密性:未授权不能读 Confidentiality 完整性:未授权不能修改 Integrity 私有协议中的密码学安全漏洞 网络通信协议 Communications Protocol 数据安全传输 Secure Data Transmission 密码学误用 Cryptographic Misuse 分析私有协议中的密码学问题时我们要关注什么 我正在跟我想要的人讲话 讲话的内容不想让别人知道 讲话的内容别人不知道也不能乱改 身份 认证 密钥 协商 消息 认证 数据 加密 ⾝身份认证 确认通信对象身份 基于密码的身份认证 密码认证协议(PAP) Password Authentication Protocol 基于密码的⾝身份认证 依托下层通道的安全性 HTTPS, HTTPS with Pinning 基于密码的⾝身份认证 依托对密码的变换 简单编码(Base64/Base32) 简单哈希(MD5/SHA1/SHA256/…) 加盐、多次哈希 对称密码加密(AES/RC4/…) 非对称密码加密(RSA) 基于密码的⾝身份认证 单纯依赖对密码的变换无法保证用户身份认证的安全性 简单编码(Base64/Base32) 简单哈希(MD5/SHA1/SHA256/…) 多次哈希 对称加密(AES/RC4/…) 非对称加密(RSA) ⾝身份认证 由可预测的数据生成 a.c = h.MD5("2989d4f8dcda393d1c1ca3c021f0cb10" + arg2.getPackageName().getBytes()); 硬编码密钥 String v0 = "134e3265829ff82daf16e7b740a600b5"; if(this.b == null) { byte[] v1 = v0.getBytes(); byte[] v2 = new byte[16]; … this.b = new SecretKeySpec(v2, "AES"); ⾝身份认证 RSA/ECB/NoPadding 没有随机性 RSA/ECB/PKCS1Padding 除不能抵抗重放攻击外,安全性较⾼高 ⾝身份认证 Google Play 100个APP 大陆安卓应用市场200个APP 密码发送通道分布情况 ⾝身份认证 密码变换种类的使用情况
2016-《如何分析和攻击私有协议中的密码学安全漏洞》
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。
本文档由 张玉竹 于 2022-04-08 09:08:37上传分享