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. 如何得知 kernel 或 android 已開機多久時間

    adb shell cat /proc/uptime 中的第一個數字, adb shell cat "/proc/uptime" 210.79 312.76 或者是 kernel ...

  2. monkey测试===Monkey测试策略(系列二)转

    Monkey的测试策略 一. 分类 Monkey测试针对不同的对象和不同的目的采用不同的测试方案,首先测试的对象.目的及类型如下: 测试的类型分为:应用程序的稳定性测试和压力测试 测试对象分为:单一a ...

  3. python基础===【爬虫】爬虫糗事百科首页图片代码

    import requests import re import urllib.request def getHtml(url): page = requests.get(url) html = pa ...

  4. 用__builtin_return_address获得程序运行栈情况【转】

    转自:http://blog.csdn.net/vpwork/article/details/7680102 %pF versatile_init+0x0/0x110 %pf versatile_in ...

  5. NOIP 2011 Day 1

    NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...

  6. 用vue-cli来搭建vue项目和webpack

    vue-cli 用vue-cli来搭建vue项目 第一步:全局安装vue-cli sudo npm install vue-cli -g 第二步:初始化一个项目 vue init webpack-si ...

  7. Unique Binary Search Trees I&&II(II思路很棒)——动态规划(II没理解)

      Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For exa ...

  8. [图解算法]线性时间选择Linear Select——<递归与分治策略>

    #include <ctime> #include <iostream> using namespace std; template <class Type> vo ...

  9. sql中where和having的区别

    “Where” 是一个约束声明,使用Where来约束来自数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. “Having”是一个过滤声明,是在查询返回结果集以后对查询 ...

  10. vue-touch不支持vue2.0的替换方法

    当你想用vue-touch时,却发现官网这句话 Touch events plugin for Vue.js. This plugin does not support Vue 2.0 yet. 但是 ...