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、未对敏感数据进行加密,可能导致信息泄漏。
3、没有防伪造重放机制。

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私有通信协议安全整改方案的更多相关文章

  1. Spring实现类私有方法测试通用方案

    现实的业务场景中,可能需要对Spring的实现类的私有方法进行测试. 场景描述: 比如XXXService里有 两个函数a.函数b. 而实现类XXXServiceImpl中实现了函数a.函数b,还包含 ...

  2. redis 进程使用root用户启动 -- 整改方案

    最近内部风险整改, 各种进程使用root身份进行启动不符合要求, 于是各路神仙各施其法,为的就是让 某进程不以root 启动: 先以 redis 为例: 原有进程如下: #超一流标准的执行文件位置及配 ...

  3. 3.SDL落地方案

    01.安全培训 安全意识培训(全员) 邮件安全 钓鱼邮件 邮件伪造 第三方转存 检查发件人 开启二次验证 邮件转发 第三方代收 邮件附件敏感信息加密 病毒防范 什么是木马病毒 我安装哪些杀毒软件? 定 ...

  4. 物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理

    1  概述 在上一篇文章<物联网常见通信协议与通讯协议梳理[上]-通讯协议>中,对物联网常用通信协议和通讯协议作了区分,并对通讯协议进行了分享:本文将对常用的通信协议进行剖析,重点面向市场 ...

  5. Linux 服务器用户权限管理改造方案与实施项目

    Linux 服务器用户权限管理改造方案与实施项目 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状. 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论. ...

  6. 移动端IM开发需要面对的技术问题

    1.前言 这两年多一直从事网易云信 iOS 端 IM SDK的开发,期间不断有兄弟部门的同事和合作伙伴过来问各种技术细节,干脆统一介绍下一个IM APP的方方面面,包括技术选型(包括通讯方式,网络连接 ...

  7. 物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探

    物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探 唐朝实验室 · 2015/10/30 10:22 Author: FengGou 0x00 目录 0x00 目录 0x01 前言 0x02 BLE概 ...

  8. Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

    从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的远程通信细节.同时 Dubb ...

  9. 为什么不直接使用socket ,还要定义一个新的websocket 的呢

    大致概念: TCP/IP 协议,是网络七层协议的第四层,本身没有长连接或短连接的区别: HTTP 是基于 TCP 协议之上的「短连接」应用层协议,它的出现极大简化了网络应用的实现门槛,丰富了应用: S ...

随机推荐

  1. Call Mode feature

    起源 user 在插著 充電器 打電話的狀況下, 為了安全起見, 避免 充電器在這時損害手機,間接造成 user 的傷害, 而有了這 feature, 在 battery voltage Vbat & ...

  2. pillow模块的学习

    https://github.com/wangbinyq/pillow_example http://pillow.readthedocs.org/en/latest/handbook/tutoria ...

  3. 【LabVIEW技巧】策略模式

    前言 在之前的文章提到了如何学习OOP以及对应的简单工厂模式,由于时间比较长,我们先回顾一下原有内容,然后继续了解新的模式. 为什么学习OOP 在测控系统的软件开发过程中,LabVIEW工程师一直认为 ...

  4. FineReport——函数

    1.VALUE(tableData,col,row)返回tableData中列号为col的值, 行号为row.备注:先从报表数据集中查找,然后再从服务器数据集中查找,返回的是tableData的行数. ...

  5. position:fixed部分版本的浏览器不支持

    ie6-ie8浏览器不支持这个属性 .fixed{         position:fixed; /*对于火狐等其他浏览器需要设置的*/         top:700px;  /*同上*/     ...

  6. javascript 实现图片拖动

    javascript实现图片拖动效果并不难,主要的思路如下 1:给图片绑定监听鼠标按下对象,设置拖动属性为true 2:鼠标抬起:拖动属性为false 鼠标移动:改变坐标即可,新坐标=图片原始坐标+鼠 ...

  7. sql server中字符串无法替换空格的问题

    直接上代码: select case when 'workReport'=LTRIM(RTRIM(' workReport ')) then 'trim去空格成功' when 'workReport' ...

  8. log4j日志相对路径,Tomcat(第三方和Springboot内置)参数catalina.home和catalina.base的设置

    关于Log4j日志相对路径的配置请看:log4j 产生的日志位置设置 和 catalina.home.catalina.base . 由于我们在Log4j的配置中引入了系统属性${catalina.b ...

  9. 怎么WordPress增加在线投稿功能

    现在很多个人博客为了增加博客的内容,都会提供投稿通道,大部分都是以邮箱的形式进行投稿,不过这样一来,也很费人力,要拷贝复制,然后编辑等.如果给博客加个在线投稿功能,那就方便多了.稍微审核下文章内容就可 ...

  10. Go语言基础单元测试示例

    这个要熟悉原理,要能写.. 但现在..... 注意,没有main函数,以_test.go结尾,命令go test -v package main import ( "testing" ...