前不久写了一篇题目为《Windows系统监听键盘通过UDP协议控制树莓派小车》的文章在FreeBuf上发表了,当初设计小车控制系统的时候仅仅是为了实现控制目的而没有加入安全性防范措施,这样的小车控制系统就好像一辆没有安装装甲的坦克是抵挡不了炮弹的袭击。本篇从攻防的角度对小车控制系统进行升级,给小车装上一层层可靠的“装甲”。
因为本篇文章是在前篇《Windows系统监听键盘通过UDP协议控制树莓派小车》的基础上写的,所以在阅读本篇文章前,建议先阅读一下前篇,【传送门】。
下面开始为树莓派小车安装“装甲”。
小车原有控制协议,其格式如下:
协议版本号:包号:命令字
其中协议版本号固定为1;包号为一个数字,每发送一次进行加1处理;命令字用于向小车发送控制命令。
装甲一:防止重放攻击
重放攻击实验:
在小车的相同网络中,启动一台攻击用的电脑(以下简称攻击者),利用ARP欺骗工具将所有网络通信都先流经攻击者电脑再流向路由器。此时攻击者电脑就可以嗅探整个网络流量了,当然也包括对小车的控制通信。
然后在攻击者电脑上启动wireshark软件对小车的通信进行抓包,抓到的包如下图所示。
通过UDP发送工具将抓到的信息手动发送,进行重放攻击,见:
重放攻击实验结果:小车受到了重放攻击,进行了前进动作。
对策
1.当树莓派小车第一次收到控制信息时,记录控制方的IP、MAC情报,之后每次的通信都进行身份确认。
2.每次记录包号,凡是小于当前包号的消息均认为是异常包将其过滤掉。
装甲二:消息加密
原有的通信是明文通信的,这样会产生很多安全问题,必须改进为加密通信方式。
本次加密方式采用AES对称加密方式,密钥是通信前双方约定好的。由于对称加密的原因是密钥是通信前双方约定好的,这样不用担心密钥传递过程中被泄露。
最后,整个服务器端加装甲后的代码已经发到了百度网盘上。
链接: https://pan.baidu.com/s/1nlDUcf_LOXizjFhlvPfQ-Q 密码: d9pa
结束语
加上了以上2层“装甲”后,经过测试发现并没有影响小车的原有控制性能,且提升了小车控制系统的安全性,目的已经达到。
补足语:
如果还有哪些改进的地方,请在评论区留言,我会进行改进的。
*本文作者:xutiejun,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。