YS私有通信协议安全整改方案
1、背景:
YS私有通信是hk研发的一款用于探测或设置hk设备的设备网络搜索软件,其基于hk的私有多播或广播协议实现。由于其自身拥有和hk同样长久的历史,早期在设计时未考虑到安全性因素,导致该协议存在被攻击的风险。
2、威胁分析:
2.1、攻击手段:
(1)、嗅探:
由于YS私有通信协议是基于明文传输的,当用户使用支持YS私有通信协议的客户端和设备通信时,处于同一个局域网内的攻击者可以嗅探到两者之间的通信数据,导致信息泄漏。常见的敏感信息包括:口令、设备验证码和设备版本信息等。一旦攻击者获取到这些信息,即可进一步进行攻击利用,比如:登录设备植入后门等。
(2)、篡改:
意指攻击者劫持明文通信包,将参数篡改后再放行发送给设备,由于YS私有通信协议本身不存在校验信令数据完整性的机制,所以会当正常请求进行处理,导致攻击成功。
(3)、伪造:
意指攻击者捕获明文通信包后进行保存,后续再对报文进行重放。对于“写”操作来说,此类攻击危害比较大,比如:设置设备参数。如果攻击者不停对设备进行重放请求,可能导致设备拒绝服务。由于YS私有通信协议本身不存在对重放的抵御设计,所以会不停处理来自外界的请求,不管该请求是不是真实的用户发起的。
2.2、攻击示意图 :

3、解决方案:
3.1、方案描述:
以上3方面牵涉到数据的保密性、完整性问题,通常来说,可以通过使用SSL协议来解决,但是YS私有通信协议本身不是应用层而是基于网络层的协议,故直接使用SSL并不适合。但就通信安全层面来讲,加密和数字签名是解决以上问题的常用方案。
(1)、加密:
加密分为对称加密和非对称加密两种算法,由于非对称加密算法对性能损耗较大,通常只用于小数量的数据报文交换,比如:SSL中交换对称加密密钥的场景;对称加密有具有良好的性能,适用于进行大量数据的加密通信。现今比较典型的对称加密算法有AES和3DES等,为适应当代主流,本文推荐使用AES128或AES256。对称加密密钥可由用户输入的设备验证码转换而来,由于设备本身拥有验证码,同样可以换算出对称加密密钥,因此,可以对接收到的密文进行解密获取明文。
(2)、消息摘要:
简单地说,消息摘要就是对数据报文所作的密码变换,这种变换允许接收者来确认数据的来源和完整性,此外,如果在进行摘要时加入时间戳或一次性随机token,可以有效防止数据被伪造重放。本文建议使用HMAC-SHA1算法来实现对发送数据的摘要,该算法要求通信双方必须预先协商一个共同的密钥作为摘要和验摘的机制,这个密钥可以通过设备验证码转换而来,和加密类似,摘要时,由用户输入设备验证码并转换成摘要密钥,而设备本身就拥有设备验证码,故可以进行验摘,关于HMA-SHA1的详细介绍和java实现,请参考附录。
注意:加密是一个可选项,当信令体存在敏感信息时才需要进行加密,而摘要是建议在每一个信令都实施的。
3.2、流程图:
流程图展示了详细的过程和处理步骤:

3.3、样例:
4、方案对比:
|
先前方案 |
本次方案 |
|
|
优点 |
1、实现简单,双方能够通信即可。 |
1、加入了数据签名和加密机制,弥补了先前方案的所有欠缺。 |
|
缺点 |
1、未做数据签名校验,无法保证数据完整性。 2、未对敏感数据进行加密,可能导致信息泄漏。 |
1、实现稍微复杂,需要加入新的参数和数据签名校验机制。 2、需要考虑前后版本兼容性问题。 |
5、附录:
HMAC-SHA1的JAVA实现代码如下:
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class HMACSHA1 {
private static final String MAC_NAME = "HmacSHA1";
private static final String ENCODING = "UTF-8";
public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception
{
byte[] data=encryptKey.getBytes(ENCODING);
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
//生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance(MAC_NAME);
//用给定密钥初始化 Mac 对象
mac.init(secretKey);
byte[] text = encryptText.getBytes(ENCODING);
//完成 Mac 操作
return mac.doFinal(text);
}
}
YS私有通信协议安全整改方案的更多相关文章
- Spring实现类私有方法测试通用方案
现实的业务场景中,可能需要对Spring的实现类的私有方法进行测试. 场景描述: 比如XXXService里有 两个函数a.函数b. 而实现类XXXServiceImpl中实现了函数a.函数b,还包含 ...
- redis 进程使用root用户启动 -- 整改方案
最近内部风险整改, 各种进程使用root身份进行启动不符合要求, 于是各路神仙各施其法,为的就是让 某进程不以root 启动: 先以 redis 为例: 原有进程如下: #超一流标准的执行文件位置及配 ...
- 3.SDL落地方案
01.安全培训 安全意识培训(全员) 邮件安全 钓鱼邮件 邮件伪造 第三方转存 检查发件人 开启二次验证 邮件转发 第三方代收 邮件附件敏感信息加密 病毒防范 什么是木马病毒 我安装哪些杀毒软件? 定 ...
- 物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理
1 概述 在上一篇文章<物联网常见通信协议与通讯协议梳理[上]-通讯协议>中,对物联网常用通信协议和通讯协议作了区分,并对通讯协议进行了分享:本文将对常用的通信协议进行剖析,重点面向市场 ...
- Linux 服务器用户权限管理改造方案与实施项目
Linux 服务器用户权限管理改造方案与实施项目 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状. 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论. ...
- 移动端IM开发需要面对的技术问题
1.前言 这两年多一直从事网易云信 iOS 端 IM SDK的开发,期间不断有兄弟部门的同事和合作伙伴过来问各种技术细节,干脆统一介绍下一个IM APP的方方面面,包括技术选型(包括通讯方式,网络连接 ...
- 物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探
物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探 唐朝实验室 · 2015/10/30 10:22 Author: FengGou 0x00 目录 0x00 目录 0x01 前言 0x02 BLE概 ...
- Dubbo 如何成为连接异构微服务体系的最佳服务开发框架
从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的远程通信细节.同时 Dubb ...
- 为什么不直接使用socket ,还要定义一个新的websocket 的呢
大致概念: TCP/IP 协议,是网络七层协议的第四层,本身没有长连接或短连接的区别: HTTP 是基于 TCP 协议之上的「短连接」应用层协议,它的出现极大简化了网络应用的实现门槛,丰富了应用: S ...
随机推荐
- U-Boot启动过程完全分析<转>
转载自:http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html 1.1 U-Boot工作过程 U-Boot启动内核的过程可 ...
- EOS.IO技术学习
如今很火的项目EOS的学习,以下主要的内容是基于白皮书 参考: http://chainx.org/paper/index/index/id/20.html EOS.IO软件引入了一种新的块链架构,旨 ...
- HIbernate学习笔记3 之 缓存和 对象的三种状态
一.hibernate一级缓存 * hibernate创建每个Session对象时,都会给该Session分配一块独立的缓冲区,用于存放Session查询出来的对象,这个分配给session的缓存区 ...
- NOIP 2010
tags: NOIP 并查集 动态规划 搜索 categories: 信息学竞赛 总结 机器翻译 乌龟棋 关押罪犯 引水入城 机器翻译 Solution 维护一个队列, 每次从词典中查词时将单词加入队 ...
- Math.random易于记忆理解
产生随机数 Math.random*(Max-Min)+Min
- node-session
session cookie 虽然很方便,但是使用 cookie 有一个很大的弊端,cookie 中的所有数据在客户端就可以被修改,数据非常容易被伪造,那么一些重要的数据就不能存放在 cookie 中 ...
- python在windows下连接mysql数据库
一,安装MySQL-python python 连接mysql数据库需要 Python interface to Mysql包,包名为 MySQL-python ,PyPI上现在到了1.2.5版本.M ...
- es6数组必看太实用了
随着前后分离,前端人员也要写大量的逻辑代码,es5很多地方尤其是数据工具大拿数组,很多时候都是捉襟见肘. 继而,es6为我们扩展了很多good的工具和方法,让我们一起学习es6吧. 1原型方法from ...
- Java篇:IO流
流(IO) 四个基本流: InputStream(输入字节流).OutputStream(输出字节流).writer(输出字符流).reader(输入字符流)-四个基本流都是抽象类不能实例化,固只能用 ...
- 常用的smarty变量操作
php模板引擎smarty的变量操作符可用于操作变量,自定义函数和字符.语法中使用"|"应用变量操作符,多个参数用":"??指簟?/DIV> capita ...
