OpenSesame:一个能够攻击fixed-pin设备的工具
OpenSesame是一种设备,这种设备可以通过无线技术来打开任何一个设有固定密码的车库门,我从中发现了一个攻击无线固定pin码设备的新方法。
演示视频以及详细信息:
opensesame源代码:https://github.com/samyk/opensesame
防御措施:如果你所使用的大门或车库门带有“固定密码”,那么为了防范这种类型的攻击,你需要确保你的系统已升级至最新版本,并且使用的是滚动码,跳转码,Security+或者智能码。这些措施虽然不能保证万无一失,但确实可以防止OpenSesame所发起的传统暴力破解攻击。
犯罪分子:为了防止代码被滥用,我所披露的代码是经过修改的。如果你是RF和微控制器方面的专家,你也许可以对这些代码进行修复,但你也许从一开始就不需要我所提供的这些帮助了,对吗?
性能
OpenSesame不仅会利用无线车库和大门中固定pin码的有限密钥空间,而且我发现,它还会通过这种新型的攻击方式将打开车库大门的时间缩短95%。这就意味着,你只需要几秒钟便可以打开大多数的车库大门了。
OpenSesame采用的是Mattel公司的短信工具Radica Girltech IM-ME,这个工具支持所有我们发动攻击所需要的设备,这些设备包括一个高效的TI CC1110 sub-GHz RF芯片,一台LCD显示器,键盘,背光照明装置等等。
这个工具是在巨人的肩膀上开发出来的,其中包括由Michael Ossmann开发的原始版本的opensesame,IM-ME代码,Dave开发出的IM-ME LCD逆向工程技术,还有Mike Ryan提出的高效思想。在文章结尾提供了参考链接以及参考资源。
注意,通过使用滚动码是无法打开车库门的。带有滚动码技术(通常称之为“智能码”,“Security+”,“跳转码”等等)的车库会比那些使用固定pin码的车库更加的安全,但也有可能受到其他种类攻击的影响。
主要的问题
查看OpenSesame攻击的会话信息。固定码系统中显而易见的漏洞就是这种系统的密钥空间是十分有限的。比如说,一个支持12位码值的车库可能会包含12位的可能组合。这是一个固定密码能够打开你的车库大门的关键。既然它的二进制代码的长度为12位,那么就存在有4096种可能的组合。
就暴力破解而言,破解网站中一个含有两个字符的密码要比破解12位长度的二进制车库开关要难上两倍或者更多。这是我们在OpenSesame攻击的攻击会话中发现的一个最基本的问题。
在常见的车库和遥控器中,我们准备使用长度在8-12位之间的码值进行研究,然后我们发现,一个遥控器发送了五次同样的代码,并且我们发现每一位数值的发送时间需要2毫秒,然后在所有数值发送完成之后,会有一个2毫秒的等待周期。所以,一个12位的密码组合可能会需要(12位 * 2毫秒传输时间 * 2毫秒等待时间 * 5次 = 240毫秒)。如果对所有的8,9,10,11和12位密钥空间执行暴力破解,那么情况就会是下面这样:
(((2 ** 12)*12) + ((2 ** 11)*11) + ((2 ** 10)*10) + ((2 ** 9)*9) + ((2 ** 8)*8)) = 88576位
88576位* 4毫秒 * 5传输时间 = 1771.52秒 = 29分钟
所以,打开一个8-12位密码的车库大门会需要29分钟(假设你已经知道了遥控的频率和波特率,这两个参数都是很常见的)。如果你已经尝试了几种不同的频率和波特率,那么你所需要的时间可能会是很多个29分钟。
虽然这算不上很糟糕,但我们可以做得更好。
初始还原
我们在还原操作中最先尝试的就是移除转发机制。代码我们只传输一次,而不是同原先一样每次传输都要发送5次信号。传输多次数值信号能够帮助遥控器检测信号,防止干扰。
1771.52秒 / 5 = 354.304秒 = ~6分钟
干的漂亮!
现在,当我们在对车库进行暴力破解测试时,我与某人进行了交谈,Mike Ryan建议我将代码传输期间的等待周期移除掉,然后看看我是否还能够连续传输每一个代码。
这样是可以实现的,而且将传输所有代码所耗的时间缩短了将近50%!这简直难以置信。
1771.52秒 / 5 / 2 = 177.152 秒 = ~3 分钟
虽然这算不上很糟糕,但我们可以做得更好。
OpenSesame攻击
当我们查看我们所发送的数据之后,我们现在将发送连续的比特流。例如:
(code #1) 000000000000
(code #2) 000000000001
(code #3) 000000000010
(code #4) 000000000011 等等, 外观看起来如下:000000000000000000000001000000000010000000000011
硬件
Im-ME
Mattel公司的IM-ME工具已经停产了,但还是可以在亚马逊或者eBay网站上购买到,价格从12$到100$不等。
这种工具最初是用于好友间通讯的。它使用了CC1110,一种sub-GHz RF SoC,以及LCD显示器,背光照明设备以及电源装置等等,这些对于黑客来说都是极其有用的,他们可以用这个设备来向他们的好友发送信息,或者攻击他们的好友。
现在,我们便可以制作我们自己的设备了,但令人欣慰的是,这些所有我们所需要的东西已经全部打包好了。
GoodFET
我使用了Travis Goodspeed的GoodFET设备来为IM-ME进行编程。
GIMME
软件
OpenSesame
OpenSesame完整的源代码可以从我的github上获取得到:
https://github.com/samyk/opensesame
这个工程完全基于Michael Ossmann的opensesame项目,该项目上专用于破解车库的固定码的,而且它是OOK/ASK传输器的一个很好的样板。同样的,这个名字是如此漂亮,以至于我不得不使用它,我希望Mike不要介意。
goodfet.cc
正如我在硬件篇中所说的,我们使用GoodFET来加载代码,然后使用goodfet.cc来加载Chipcon设备。
频率,调制,解码器
频率
目前,我们的假设是,这些固定pin码的车库和大门的频率范围跨度很宽。例如,根据维基百科的描述,这种无线设备的频率为300MHz至400MHz,这就要求我们发送100个额外的相同频率信号。然而,经过研究,我们发现只有下列这些频率是设备主要使用的:300MHz, 310MHz, 315MHz, 318MHz和390MHz。
调制
你可以发现,实际上所有的这些传输器都使用了ASK/OOK来传输数据。除此之外,很多信号接收器都支持使用OOK信号。这些可以通过对几款车库门的控制器进行测试而得到证实。
编码器
下面是一个名单列表,名单中列出了在此类系统中使用的最多的编码器名称:
PT2262, PT2264, SC2260, CS5211, PT2282, PT2240, eV1527, RT1527, FP527, HS527, SCL1527, MC145026, AX5326, VD5026, SMC926, SMC918, PLC168, HCS300, HCS301, HCS201
资源
下面列出了一些可用资源和工具,我所学习到的东西大多数都是从下面这些资源中得到的,我相信你也可以从中学到很多东西。建议阅读或使用的工具如下:
我在RF中的其他项目: KeySweeper (2.4GHz) 和 Digital Ding Dong Ditch (sub-GHz)
Michael Ossmann的IM-ME频谱分析仪
Travis Goodspeed的 goodfet.cc/IM-ME线路
Mike Ryan的 思想
Michael Ossmann的 RF攻击
Osmocom的 RTL-SDR
atlas 0f d00m的 rfcat for IM-ME
Michael Ossmann的cc11xx 工具
Dave的 IM-ME LCD 攻击
Andrew Nohawk的远程攻击固定密钥
Adam Laurie的You can ring my bell
Vegard Haugland的远程攻击车库控制器
Sdcc的 8051微控制器的编译器使用指南
联系我们
点击联系:@SamyKamkar
你可以在http://samy.pl中查看我更多的项目和工程,或者通过code@samy.pl与我联系。
谢谢大家!
OpenSesame:一个能够攻击fixed-pin设备的工具的更多相关文章
- Python写一个Windows下的android设备截图工具
界面版 利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装.代码如下: import wx,subprocess,o ...
- 一个DOS攻击木马的详细分析过程
一个DOS攻击木马的详细分析过程 0×01 起因 网路流量里发现了大量的的1.exe的文件,而且一直在持续,第一感觉就像是一个木马程序,而且每个1.exe的MD5都不一样,对比发现只有几个字节不一样( ...
- RT-thread 设备驱动组件之PIN设备
在RT-thread 2.0.0正式版中引入了pin设备作为杂类设备,其设备驱动文件pin.c在rt-thread-2.0.1\components\drivers\misc中,主要用于操作芯片GPI ...
- STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发
这里我主要说一下如何做一个USB下位机,这里主要分3部分:1.建立工程:2.添加报文描述符:3.数据的传输.这里就不讲USB的理论知识了,有想要了解的自行百度一下就可以了. 建立工程:工程建立参考:h ...
- 为一个支持GPRS的硬件设备搭建一台高并发服务器用什么开发比较容易?
高并发服务器开发,硬件socket发送数据至服务器,服务器对数据进行判断,需要实现心跳以保持长连接. 同时还要接收另外一台服务器的消支付成功消息,接收到消息后控制硬件执行操作. 查了一些资料,java ...
- 转载 STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发
STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发 本文转载自 https://www.cnblogs.com/xingboy/p/9913963.html 这里我主要说一 ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace
DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...
- iOS 设备数据管理工具 iMazing v2.10.3 绿色便携版
iMazing 是一款可以帮助用户管理 iOS 设备的软件,功能远远超出 iTunes.iMazing 连接你的 iOS 设备(iPhone. iPad 或 iPod)相连,使用起来也非常的方便.你可 ...
- xsos:一个在Linux上阅读SOSReport的工具
xsos:一个在Linux上阅读SOSReport的工具 时间 2019-05-23 14:36:29 51CTO 原文 http://os.51cto.com/art/201905/596889 ...
随机推荐
- append appendChild appendTo区别
1.append和appendChild的区别 append是jquery文档操作用法 ① append() 方法在被选元素的结尾(仍然在内部)插入指定内容. $(selector).append(c ...
- Java线程(一):线程安全与不安全
作为一个Java Web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了.记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT.Socket.多线程.I/O,编写的 ...
- BT5更新源
感谢http://blog.csdn.net/seaos/article/details/7064136终于找到更新成功的源了 下面简单介绍步骤吧 gedit /etc/apt/sources.lis ...
- hdu 1561 The more, The Better (树上背包)
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 数据库与SQL语言
数据库(DB) :长期储存在计算机中.有组织.可共享的数据的集合. 特点:(1)数据按一定的数据模型组织.描述和储存:(2)较小的冗余度:(3)数据独立性较高:(4)易扩展:(5)可共享(不同用户可按 ...
- 初学ExtJs 表格显示后台数据
最近开始接触ExtJs,贴出自己的代码,一个简单的表格显示 版本 3.4.1 需要json包 代码清单1.jsp引入的ExtJs文件 <!-- 资源文件 ExtJs --> <lin ...
- Web API系列
ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构 ...
- 使用Linq快速的操作XML
开始内容之前先分享一段话 有时候,当你知道要做什么的时候就做的很快,比如你要实现个功能,码字的活儿不算很难,做个检索也不会有什么难倒你的.但是,做着做着,你发现好像世界上的工作都在重复,于是你有种心要 ...
- DataGridView绑定数据库,取得的数据插入到DataGridView指定列(一)
实现: 点击button1,从数据库中获得数据,指定数据库的某列数据插入到DataGridView指定列 一.双击button1进入事件代码 private void button1_Click(ob ...
- 安装svnx2出现 Make sure an svn tool (≥ v1.6) is present in the folder: “/usr/bin”
安装svnx2出现 Make sure an svn tool (≥ v1.6) is present in the folder: “/usr/bin” 是因为svnx2需要用到svn的地址,修改为 ...