forked from roadwy/roadwy.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
2640 lines (2415 loc) · 447 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Lyon's blog]]></title>
<subtitle><![CDATA[I hear and I forget.I see and I remember.I do and I understand.]]></subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://www.youngroe.com//"/>
<updated>2021-11-04T13:15:37.908Z</updated>
<id>http://www.youngroe.com//</id>
<author>
<name><![CDATA[Lyon]]></name>
<email><![CDATA[geemion@gmail.com]]></email>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title><![CDATA[树莓派-穷人的硬件黑客工具(翻译)]]></title>
<link href="http://www.youngroe.com/2021/10/20/IOT/using-rasberrypi-as-poor-mans-hardware-hacking-tool/"/>
<id>http://www.youngroe.com/2021/10/20/IOT/using-rasberrypi-as-poor-mans-hardware-hacking-tool/</id>
<published>2021-10-20T11:39:22.000Z</published>
<updated>2021-11-04T13:15:37.908Z</updated>
<content type="html"><![CDATA[<h2 id="0x00_介绍">0x00 介绍</h2><p>本文将介绍如何使用Raspberry Pi完成SPI、I2C、JTAG/SWD和JTAGenum通信,这里我将使用Raspberry Pi Zero,因为它足够便宜和小。</p>
<h2 id="0x01_设置树莓派">0x01 设置树莓派</h2><p>在本节开始之前,我建议你先开启你的树莓派并从树莓派配置选项中启用SPI、I2C、GPIO功能,你可一参考这个<a href="https://learn.sparkfun.com/tutorials/getting-started-with-the-raspberry-pi-zero-wireless/all" target="_blank" rel="external">链接</a>完成设置。</p>
<a id="more"></a>
<p>在下面Pin#针脚图中的编号是硬件位置编号而非GPIO接口编号。</p>
<div align="center"><br><img src="/img/20211103gpio.png" align><br></div><br>在树莓派中克隆这个项目代码:<a href="https://github.com/arunmagesh/raspi-sec-tool" target="_blank" rel="external">https://github.com/arunmagesh/raspi-sec-tool</a><br><br>## 0x01 SPI 串行外设接口<br>树莓派自带SPI接口,硬件测试中最常见的测试是利用SPI通信接口提取目标设备Flash闪存数据。常用的软件工具是flashrom,支持多种flash。我们将使用树莓派的bcm2385处理器/dev/spidev0.0 实现SPI Flash读取和写入。<br><br><strong>安装:</strong><br><br><figure class="highlight q"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-<span class="built_in">get</span> install build-essential pciutils usbutils libpci-<span class="built_in">dev</span> libusb-<span class="built_in">dev</span> libftdi1 libftdi-<span class="built_in">dev</span> zlib1g-<span class="built_in">dev</span> subversion libusb-<span class="number">1.0</span>-<span class="number">0</span>-<span class="built_in">dev</span></span><br><span class="line">svn co svn:<span class="comment">//flashrom.org/flashrom/trunk flashrom</span></span><br><span class="line">cd flashrom</span><br><span class="line">make</span><br></pre></td></tr></table></figure><br><br><strong>连接:</strong><br><br>CS – 24<br>MISO – 21<br>MOSI – 19<br>CLK – 23<br>3.3v – 17<br><br><div align="center"><br><img src="/img/20211103SPI_Connect.jpg" al ign><br></div>
<p>从flash中读取数据:<br><code>flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 -r spi_dump.bin</code></p>
<div align="center"><br><img src="/img/20211103SPI_read.jpg" align><br></div><br>不要忘记设置spispeed=512。<br>现在你可以使用binwalk或者fmk分析提取到的固件。<br><br>## 0x02 I2C 集成电路总线连接<br><br>I2C通信类似于SPI,但它只使用两条线进行通信——SDA/SCL。每个设备都通过使用其内部 i2c 地址进行访问。这里我们以 I2C EEPROM 为例,看看我们如何读写内存。i2ctools 是 Linux 软件包的一部分,因此无需安装任何东西。<br><br><strong>连接:</strong><br>SDA – 3<br>SCL – 5<br>VCC – 1<br>VSS – A0 – A1 – A2 – A3 – WP – 6<br><br><div align="center"><br><img src="/img/20211103I2C_Connect.jpg" align><br></div>
<p>获取设备的I2C地址<br><code>i2cdetect -y 1</code></p>
<div align="center"><br><img src="/img/20211103I2C_addr.jpg" align><br></div><br>本例中地址为0x50,-y 1表明你使用了哪些i2c的引脚,本例中使用 i2c-1。<br>现在使用eeprog工具读取和写入EEPROM。<br>wget <a href="http://darkswarm.org/eeprog-0.7.6-tear5.tar.gz" target="_blank" rel="external">http://darkswarm.org/eeprog-0.7.6-tear5.tar.gz</a><br>tar -xvf eeprog-0.7.6-tear5.tar.gz eeprog-0.7.6-tear12/<br>cd eeprog-0.7.6-tear12/<br>make<br>sudo make install<br><br><strong>写入数据:</strong><br><code>echo "hello" | ./eeprog -f -16 -w 0 -t 5 /dev/i2c-1 0x50</code><br>-w 数据偏移选项<br>-t 写入延迟<br><div align="center"><br><img src="/img/20211103I2C_write.jpg" align><br></div>
<p><strong>读取数据:</strong><br><code>./eeprog -x /dev/i2c-1 0x50 -16 -r 0x00:0x10</code></p>
<div align="center"><br><img src="/img/20211103I2C_read.jpg" align><br></div>
<h2 id="0x03_调试器-JTAG/SWD">0x03 调试器-JTAG/SWD</h2><p>JTAG/SWD 是允许开发人员调试微控制器或微处理器的标准接口。从攻击者的角度来看,拥有调试权限意味着完全控制了设备,攻击者可以转储设备内部数据或动态更改内存。让我们看看仅使用 Raspberry pi 访问 JTAG 和 SWD接口。我们使用开源工具 openOCD与调试器进行交互。<br><strong>连接:</strong><br>JTAG:</p>
<p>TCK – 23<br>TMS – 22<br>TDI – 19<br>TDO – 21<br>SRST – 12<br>GND – 20</p>
<p>SWD:</p>
<p>SWDIO – 18<br>SWCLK – 22<br>SRST – 12<br>GND – 14</p>
<h3 id="安装openOCD">安装openOCD</h3><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">git clone gi<span class="variable">t:</span>//git.code.<span class="keyword">sf</span>.net/<span class="keyword">p</span>/openocd/code openocd</span><br><span class="line"><span class="keyword">cd</span> openocd/</span><br><span class="line">./bootstrap</span><br><span class="line">./configure –enable-maintainer-<span class="built_in">mode</span> –enable-bcm2835gpio –enable-sysfsgpio</span><br><span class="line"><span class="keyword">make</span> & sudo <span class="keyword">make</span> install</span><br></pre></td></tr></table></figure>
<p>耐心等待一会就回安装完成。</p>
<h3 id="JTAG">JTAG</h3><p>JTAG 的配置文件随 openOCD 包一起提供。只需带上目标 cfg文件运行它就会连接到JTAG。<br><code>openocd -f interface/raspberrypi-native.cfg -f target/stm32f4x.cfg</code></p>
<div align="center"><br><img src="/img/20211103JTAG.jpg" align><br></div><br>现在你可以使用gdb连接并调试设备。<br><br>### SWD<br><br><code>openocd -f raspberrypi_swd.cfg -f target/stm32f4x.cfg</code><br>raspberrypi_swd.cfg 位于你之前下载的 git 文件夹中。<br><div align="center"><br><img src="/img/20211103SWD.jpg" align><br></div><br>现在你可以使用gdb连接并调试设备。<br><br>### JTAGenum<br><br>在大部分设备中,很少能找到 JTAG 接口和引脚所在的位置。因此我们使用JTAGenum 工具扫描设备的所有引脚并告诉你哪些引脚是 TMS-TCK-TDI-TDO。如果你没有目标设备的开发文档,这将非常有用。<br>安装:<br><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git clone http<span class="variable">s:</span>//github.<span class="keyword">com</span>/cyphunk/JTAGenum</span><br><span class="line"><span class="keyword">cd</span> JTAGenum</span><br><span class="line"><span class="keyword">source</span> JTAGenum.<span class="keyword">sh</span></span><br><span class="line">scan</span><br></pre></td></tr></table></figure><br><br>需要使用3 – 5 – 7 – 11 – 13 – 15及ground引脚。<br>这将需要一些时间,因为 GPIO 非常慢。<br><div align="center"><br><img src="/img/20211103JTAG_SCAN_Done.jpg" align><br></div><br>成功找到。<br><div align="center"><br><img src="/img/20211103JTAG_SCAN_Done2.jpg" align><br></div><br>我花的时间。<br><div align="center"><br><img src="/img/20211103JTAG_SCAN_time.jpg" align><br></div>
<p>伙计们,这就是全部。如果我发现更多关于使用 Raspberry Pi 作为其他很酷的东西的信息,我会更新。<br>我们设计了一个板子,可以在没有杂乱电线的情况下执行这些操作。如果你碰巧遇到 <a href="https://twitter.com/aseemjakhar?lang=en" target="_blank" rel="external">Aseem Jakhar</a>,你可以得到一个。</p>
<div align="center"><br><img src="/img/20211103payatu.jpg" align><br></div>
<blockquote>
<p>译注:国内也有人设计了板子,淘宝有卖 <a href="https://www.muselab-tech.com/geekgong-ju-ba-shu-mei-pai-bian-cheng-duo-gong-neng-diao-shi-shao-lu-qi/" target="_blank" rel="external">https://www.muselab-tech.com/geekgong-ju-ba-shu-mei-pai-bian-cheng-duo-gong-neng-diao-shi-shao-lu-qi/</a></p>
</blockquote>
<h2 id="0x04_参考">0x04 参考</h2><ul>
<li><a href="https://github.com/cyphunk/JTAGenum" target="_blank" rel="external">https://github.com/cyphunk/JTAGenum</a></li>
<li><a href="https://github.com/synthetos/PiOCD/wiki/Using-a-Raspberry-Pi-as-a-JTAG-Dongle" target="_blank" rel="external">https://github.com/synthetos/PiOCD/wiki/Using-a-Raspberry-Pi-as-a-JTAG-Dongle</a></li>
<li><a href="http://catch22.eu/baremetal/openocd_sysfs_stm32/" target="_blank" rel="external">http://catch22.eu/baremetal/openocd_sysfs_stm32/</a></li>
<li><a href="https://movr0.com/2016/09/02/use-raspberry-pi-23-as-a-jtagswd-adapter/" target="_blank" rel="external">https://movr0.com/2016/09/02/use-raspberry-pi-23-as-a-jtagswd-adapter/</a></li>
<li><a href="https://www.richud.com/wiki/Rasberry_Pi_I2C_EEPROM_Program" target="_blank" rel="external">https://www.richud.com/wiki/Rasberry_Pi_I2C_EEPROM_Program</a></li>
<li><a href="https://libreboot.org/docs/install/rpi_setup.html" target="_blank" rel="external">https://libreboot.org/docs/install/rpi_setup.html</a></li>
</ul>
<p><em>原文链接:<a href="https://payatu.com/using-rasberrypi-as-poor-mans-hardware-hacking-tool" target="_blank" rel="external">https://payatu.com/using-rasberrypi-as-poor-mans-hardware-hacking-tool</a></em></p>
]]></content>
<summary type="html">
<![CDATA[<h2 id="0x00_介绍">0x00 介绍</h2><p>本文将介绍如何使用Raspberry Pi完成SPI、I2C、JTAG/SWD和JTAGenum通信,这里我将使用Raspberry Pi Zero,因为它足够便宜和小。</p>
<h2 id="0x01_设置树莓派">0x01 设置树莓派</h2><p>在本节开始之前,我建议你先开启你的树莓派并从树莓派配置选项中启用SPI、I2C、GPIO功能,你可一参考这个<a href="https://learn.sparkfun.com/tutorials/getting-started-with-the-raspberry-pi-zero-wireless/all">链接</a>完成设置。</p>]]>
</summary>
<category term="IOT安全" scheme="http://www.youngroe.com/tags/IOT%E5%AE%89%E5%85%A8/"/>
<category term="IOT" scheme="http://www.youngroe.com/categories/IOT/"/>
</entry>
<entry>
<title><![CDATA[物联网安全101-9.软件无线电简介(Software Defined Radio,SDR):软件部分(翻译)]]></title>
<link href="http://www.youngroe.com/2021/09/23/IOT/iot-security-part-9-introduction-to-software-defined-radio/"/>
<id>http://www.youngroe.com/2021/09/23/IOT/iot-security-part-9-introduction-to-software-defined-radio/</id>
<published>2021-09-23T14:50:22.000Z</published>
<updated>2021-11-14T05:48:26.730Z</updated>
<content type="html"><![CDATA[<div align="center"><br><img src="/img/sdr.png" align><br></div>
<h2 id="介绍">介绍</h2><p>本文是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1 - 7 部分),我建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/23/IOT/iot-security-part-8-introduction-to-software-defined-radio-sdr/">物联网安全 - 第 8 部分(软件定义无线电简介)</a>本系列的前一篇博客。<br>这篇博客将是上一篇博客的延续。在此,我们将研究一些可用的软件 SDR 工具。我们还将定义一种关于如何处理 RF 目标的方法。</p>
<a id="more"></a>
<h2 id="软件">软件</h2><p>凭借强大的开源社区,SDR 拥有各种软件工具,可提供所有信号处理功能。让我们来看看一些广泛使用的 SDR 软件以及它们的不同之处。这里主要介绍的工具大部分适用于Linux平台。</p>
<h3 id="侦察工具:">侦察工具:</h3><ul>
<li><p>GQRX<br>GQRX 是一种频谱分析仪,用于浏览频段和寻找目标的工作频率。它带有常见的解调器,如 AM、CW、FM。由于具有解调功能,可以记录解调的信号流,在下一阶段的评估中可以在 Audacity 和 Inspectrum 等工具中进一步分析。GQRX 与大部分的 SDR 硬件兼容。GQRX 的其他替代品具有或多或少相同的功能,如下所述:</p>
</li>
<li><p><a href="http://www.hdsdr.de/" target="_blank" rel="external">HDSDR</a> / <a href="https://airspy.com/download/" target="_blank" rel="external">SDR# (SDR-Sharp)</a> [适用于 Windows]</p>
</li>
<li><p><a href="https://github.com/xmikos/qspectrumanalyzer" target="_blank" rel="external">Qspectrum 分析仪</a>(带自动峰值检测)</p>
</li>
<li><p><a href="https://osmocom.org/projects/gr-osmosdr/wiki" target="_blank" rel="external">Osmocom-FFT</a>(包含在 Osmocom GNU Radio 模块中的频谱分析仪)</p>
</li>
</ul>
<h3 id="基本评估:">基本评估:</h3><ul>
<li>Universal Radio Hacker(URH):<br>URH 是一个完整的无线协议调查套件,原生支持主要 SDR 硬件。几乎一切都在这里自动化,从频谱分析到甚至发送操纵信号。人们可以毫不费力地识别调制类型并自动解码信号。对于手动检查,还提供接收比特流的差分视图,这对于解释信号数据非常有用。其他主要功能包括协议分析器(自动和手动)。这就是它变得有趣的地方,它有一个用于有状态攻击的模拟环境和一个针对无状态协议的模糊测试元素!</li>
</ul>
<div align="center"><br><img src="/img/urh.png" align><br></div>
<p>来源:<a href="https://github.com/jopohl/urh" target="_blank" rel="external">https://github.com/jopohl/urh</a></p>
<p>URH 的另一个替代方案是 <a href="https://github.com/miek/inspectrum" target="_blank" rel="external">Inspectrum</a>。</p>
<ul>
<li>Audacity:<br>Audacity 是一种多声道音频编辑工具,但与 GQRX 结合使用时,它会变成无线电信号分析仪。Audacity 是开源的,可用于所有常见的操作系统。它只接受记录的信号,但信号必须被解调,就像来自 GQRX 的记录信号一样。</li>
</ul>
<h3 id="高级评估:">高级评估:</h3><ul>
<li><p>GNU Radio<br>GNU Radio 是一个开源工具包,用于实现 SDR。它提供了执行不同信号处理步骤的基本模块,例如滤波器、解码器、解调器等等。它适用于所有主要的 SDR 硬件。主要的好处是框架的巨大可扩展性。可以用 C++ 或 Python 编写块。</p>
</li>
<li><p>GNURadio Companion (GRC)<br>GNU Radio Companion (GRC) 是一个前端可视化工具,它是 Gnu radio 框架的一部分。我们应该记住,GRC 的创建是为了简化 GNU Radio 的使用,允许我们以图形方式创建 python 文件,而不是单独在代码中创建它们。它允许人们简单地拖动、修改参数并开始处理信号。随着我们的进行,我们将更加关注它。</p>
</li>
</ul>
<div align="center"><br><img src="/img/GRC.png" align><br></div>
<h3 id="其他:">其他:</h3><ul>
<li><p>Android<br>随着移动设备的处理能力随着时间的推移显着增加,Android SDR 正在进入移动设备。虽然仍然非常有限,但只需加载设备的一些库,通过 OTG 电缆将您的 SDR 硬件连接到您的 android 即可完成这项工作。RTL-SDR 加密狗、Lime SDR mini 和 HackRF 等设备以及其他一些设备与 android 设备配合良好。</p>
</li>
<li><p>SDR touch:<br>类似于 GQRX,用作移动设备的频谱分析仪。</p>
</li>
<li><p>GNU Radio Android:<br>最近 GNU Radio for android 出现了。这是您移动设备中的所有 SDR 解决方案。尽管截至目前,它支持的移动设备有限,但随着时间的推移,预计主要设备将覆盖。</p>
</li>
<li><p>Scapy-radio:<br>Scapy-radio 是 Scapy 的扩展,Scapy 是一种用 Python 编写的开源网络数据包操作工具。此扩展使用 Scapy 作为无线电数据包操作的后端。作为从 Scapy 到 SDR 设备的网关,使用了 GNU Radio。</p>
</li>
</ul>
<h2 id="如何接近目标:">如何接近目标:</h2><p>我们将分解您如何接近 RF 目标、捕获它、对其进行逆向工程并发起攻击!</p>
<ul>
<li>SDR 硬件:HackRF One</li>
<li>SDR 软件:GQRX、GNURadio Companion</li>
<li>Target:为此,我们选择了一个本地制造的 6 美元无线门铃,结果证明它是模拟的。让我们看看我们是怎么做的……</li>
</ul>
<div align="center"><br><img src="/img/sdr_target.png" align><br></div>
<p>IMG标签图片来源:<a href="https://xkcd.com/1457/" target="_blank" rel="external">https://xkcd.com/1457/</a></p>
<h3 id="1)_侦察">1) 侦察</h3><p>如果您拥有该设备,则大部分任务已完成,因为您可以从此处简单地查找该设备的 FCC ID ,这将为您提供有关该设备的许多详细信息,即工作频率、设备内部结构等等等,这将减轻很多评估。<br>在我们的例子中,由于它是本地制造的设备,它没有任何 FCC ID :(</p>
<h3 id="2)_获取信号">2) 获取信号</h3><p>您需要分析频谱以找出正在传输的信号的位置。您可以使用任何您熟悉的频谱分析仪。以下是可帮助您找到目标频率的常用工作频率列表:</p>
<ul>
<li>300MHz</li>
<li>433Mhz</li>
<li>868Mhz</li>
<li>915Mhz<br>所有这些都是常用的 ISM 和免许可证频段。WPC(印度政府电信部 (DOT) 和美国联邦通信委员会 (FCC) 的无线规划和协调部门)等机构允许此类频段免许可,前提是这些频段仅用于低功率无线设备具有为带宽、输出功率和最大有效辐射功率定义的细节。</li>
</ul>
<div align="center"><br><img src="/img/gqrx_fren.png" align><br></div>
<p>在我们的例子中,我们在这一步中使用了 GQRX。我们观察到 302MHz 的峰值,这对于任何操作设备来说都有些不寻常。</p>
<h3 id="3)_记录">3) 记录</h3><p>捕获信号是保存信号以供分析的好方法。人们可以轻松地对记录的信号运行信号处理操作,而无需任何 RF 目标产生实时信号。在我们的例子中,我们使用下面的 GRC 流程图。我们将信号保存在 .cfile 中。</p>
<div align="center"><br><img src="/img/79f57116cbf.png" align><br></div>
<p>记录模拟门铃信号(流程图)</p>
<h3 id="4)_解调">4) 解调</h3><p>最好的方法就是简单地查看信号。如果您精通调制技术,则可以轻松理解所使用的调制类型,即 FSK 中的压缩和解压缩。下面是一些常用的调制:</p>
<ul>
<li>FSK(频移键控)</li>
<li>ASK(幅移键控)</li>
<li>OOK(开关键控)</li>
<li>PSK(相移键控)</li>
</ul>
<h3 id="5)_流程">5) 流程</h3><p>一旦我们确定了调制和工作频率,我们就可以开始使用 GRC 块处理信号并创建流程图。这通常包括解调实时/捕获的信号、放大信号、将其移植到 Wireshark 等。随着我们继续介绍处理特定信号所需的 GRC 块的使用等内容,我们将更详细地讨论 GRC。</p>
<h3 id="6)_解码">6) 解码</h3><p>所以一旦你掌握了比特/比特流,你就可以开始解码它。常用的编码技术有</p>
<ul>
<li>NRZ</li>
<li>NRZI</li>
<li>Bipolar AMI</li>
<li>Manchester</li>
</ul>
<p>仅举几例。您会发现它们已经存在并且可以在 Universal Radio Hacker (URH) 中使用。</p>
<h3 id="7)攻击">7)攻击</h3><p>完成逆向信号后,即弄清楚调制、编码、数据字节和其他细节等内容。您现在可以发起攻击了!最常见的一种是重放攻击,其中发送回捕获的信号。</p>
<p>第 3 步和第 5 步不适用于我们的目标(因为它是模拟的)但是我们对目标进行了攻击,我们将使用 GRC 进行重放攻击。下面是相应的 GRC 流程图。我们重放了捕获的信号 .cfile。</p>
<div align="center"><br><img src="/img/2a031803073.png" align><br></div>
<p>重放模拟门铃信号(流程图)</p>
<h2 id="结论:">结论:</h2><p>我们希望您清楚地了解可用的主要 SDR 软件工具有哪些,以及为什么一个比另一个更好。此外,了解如何接近 RF 目标会让您了解使用 SDR 进行 RF 目标评估所涉及的步骤。</p>
<p>继续下一部分 - <a href="https://payatu.com/blog/aseem/iot-security---part-10-introduction-to-mqtt-protocol-and-security" target="_blank" rel="external">IoT 安全性 - 第 10 部分(MQTT 协议和安全性介绍)</a></p>
<h2 id="资源:">资源:</h2><p><a href="https://github.com/bastibl/gnuradio-android" target="_blank" rel="external">GNURadio-Android</a></p>
<p><em>原文链接:<a href="https://payatu.com/blog/appar/iot-security-%E2%80%93-part-9-introduction-to-software-defined-radio" target="_blank" rel="external">https://payatu.com/blog/appar/iot-security-%E2%80%93-part-9-introduction-to-software-defined-radio</a></em></p>
]]></content>
<summary type="html">
<![CDATA[<div align="center"><br><img src="/img/sdr.png" align=""/><br></div>
<h2 id="介绍">介绍</h2><p>本文是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1 - 7 部分),我建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/23/IOT/iot-security-part-8-introduction-to-software-defined-radio-sdr/">物联网安全 - 第 8 部分(软件定义无线电简介)</a>本系列的前一篇博客。<br>这篇博客将是上一篇博客的延续。在此,我们将研究一些可用的软件 SDR 工具。我们还将定义一种关于如何处理 RF 目标的方法。</p>]]>
</summary>
<category term="IOT安全" scheme="http://www.youngroe.com/tags/IOT%E5%AE%89%E5%85%A8/"/>
<category term="IOT" scheme="http://www.youngroe.com/categories/IOT/"/>
</entry>
<entry>
<title><![CDATA[物联网安全101-8.软件无线电(Software Defined Radio,SDR)简介(翻译)]]></title>
<link href="http://www.youngroe.com/2021/09/23/IOT/iot-security-part-8-introduction-to-software-defined-radio-sdr/"/>
<id>http://www.youngroe.com/2021/09/23/IOT/iot-security-part-8-introduction-to-software-defined-radio-sdr/</id>
<published>2021-09-23T13:50:22.000Z</published>
<updated>2021-11-14T05:38:22.652Z</updated>
<content type="html"><![CDATA[<div align="center"><br><img src="/img/sdr.png" align><br></div>
<h2 id="介绍">介绍</h2><p>本文是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1 - 7 部分),我建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/23/IOT/iot-security-part-7-reverse-engineering-an-iot-firmware/">物联网安全 - 第 7 部分(对 IoT 固件进行逆向工程)</a>本系列的前一篇博客。</p>
<a id="more"></a>
<p>通俗地说,软件无线电SDR是指信号处理主要在软件组件实现,即调制器/解调器、编码器/解码器、放大器、混频器(通常以硬件实现)。这些软件平台非常通用,支持所有类型的频率以及对它们的不同分析。尽管硬件仍然是非常重要(收发器和天线),但软件无线电SDR的引入无疑在物联网以及其他使用无线通信的领域掀起了一股浪潮,并使信号处理比过去更容易获得以前。</p>
<p>无线通信是物联网环境中的主要攻击面之一。SDR 是构建这些无线产品、分析其通信、最重要的是攻击的这些产品的一种技术。SDR 不仅涵盖物联网中使用的所有主要无线通信协议,即蓝牙、Zigbee、Wifi、NFC,而且还提供了大量其他可能的攻击,可用于破坏终端设备或基础设施的安全性。下面列出了其中的一些功能:</p>
<ul>
<li>密码分析攻击</li>
<li>侧信道攻击,如Tempest</li>
<li>蜂窝或移动网络攻击</li>
<li>SAT-通信分析<br>我们将在接下来的文章中介绍更多内容。</li>
</ul>
<h2 id="前置知识">前置知识</h2><p><code>“在进行信号处理时,你无法绕过数学和基础理论。”</code></p>
<p>好吧,:P 其实您不必是数学极客也可以开始使用软件定义无线电,但了解一些基本概念和术语将有助于你更好的评估你的物联网,并有助于你长期发展:</p>
<ul>
<li>模拟和数字信号的基础</li>
<li>数字信号处理的概念</li>
<li>通讯系统</li>
<li>复数</li>
<li>信号和系统</li>
<li>调制类型</li>
<li>编码类型<br>我们认为以下主题足以帮助您开始使用 RF 通信并帮助您了解 SDR。我们在文章末尾提供了一些有用的资源,可以帮助您更好地理解这些主题。</li>
</ul>
<h2 id="专用工具">专用工具</h2><p><code>“工具不过是人手的延伸……”——HW Beecher</code><br>尽管大部分信号处理是通过软件完成的,但也需要硬件工具来传输和接收信号。下面列出了 SDR 所需的一些硬件和软件工具(我们将在后续专题分析时详细说明下面提到的一些工具):</p>
<h3 id="硬件">硬件</h3><p>基本上,当我们选择 SDR 外围设备时,主要参考以下参数:</p>
<ul>
<li><p>工作频率范围<br>这定义了外围设备能够对其执行操作(Tx 和 Rx)的频率范围。有一个更宽的工作频率范围供您使用总是很好的。</p>
</li>
<li><p>接收带宽<br>RF 前端带宽(Rx 带宽)越大,我们的 SDR 外设就越能围绕操作中心频率收集数据。请记住,使用更宽的 RF 带宽,我们总是会收集更多的噪声。</p>
</li>
<li><p>ADC 分辨率(以位为单位)<br>通常,首选具有更高分辨率的 ADC,但请记住,使用更高的 ADC 分辨率,我们需要降低信号处理开销,以便我们可以实时处理样本。因此,选择合适的 ADC 分辨率很重要。</p>
</li>
<li><p>发射和接收能力<br>虽然大多数外围设备可以接收(Rx)但并非所有外围设备都可以发送(Tx)。因此可以肯定地说收发器(Tx-Rx 都存在)是首选,因为许多攻击也需要传输(Tx)信号。此外,根据要求,收发器可分为半双工、全双工等。</p>
</li>
<li><p>成本<br>这可能是主要因素,因为大多数这些外围设备都需要花费很多钱。我们需要根据评估类型仔细选择一个满足我们所有要求的方法。</p>
</li>
</ul>
<p>现在让我们介绍一些常用的 SDR 设备:</p>
<p><strong>1) Realtek SDR Dongle (RTL820T2)</strong><br>向任何 SDR 爱好者或专业人士询问他们的第一个工具是什么,它可能是一个 Realtek SDR Dongle。虽然成本如此之低,但它提供了 24-1766MHz 的范围,这是非常令人印象深刻的。一些其他变体可以达到 2.2GHz。唯一的缺点是它是一个 SDR 接收器,没有任何 TX 功能(不考虑其内部本地振荡器的泄漏)。其他流行的变体是 NooElec R820T、R820T 和 Terratec R820T。</p>
<div align="center"><br><img src="/img/Rtl-sdr.jpg" align title="RTL-SDR R820T2 Dongle"><br></div><br>图片来源:<a href="https://commons.wikimedia.org/wiki/File:Rtl-sdr.jpg" target="_blank" rel="external">https://commons.wikimedia.org/wiki/File:Rtl-sdr.jpg</a><br><br><br><strong>2) HackRF One</strong><br>由于其相对合理的成本和 10MHz 至 6GHz(实用范围)的特殊频率范围,它是爱好者广泛使用和推荐的工具。它是一个 SDR 收发器,即它同时具有发送 (Tx) 和接收 (Rx) 功能。因此,对于正在寻找大频率范围、宽带宽和传输能力的人来说,它是完美的匹配。<br><br><div align="center"><br><img src="/img/Hackrf-one-img_0005.jpg" align title="HackRF One by Great Scott Gadgets"><br></div>
<p>图片来源:<a href="https://commons.wikimedia.org/wiki/File:Hackrf-one-img_0005.jpg" target="_blank" rel="external">https://commons.wikimedia.org/wiki/File:Hackrf-one-img_0005.jpg</a></p>
<p><strong>3) BladeRF 2.0 micro</strong><br>谈到强大的 SDR 外设,您不能错过 Blade RF。尽管它的工作频率范围从 47MHz 到 6GHz,带宽为 56MHz,但它的与众不同之处在于它配备了强大的 FPGA 处理器,这意味着它可以轻松地自行在板上进行一些信号处理。使其成为理想的独立设备。原因是有很多基于 BladeRF 的有趣项目,其中包括:<br><a href="https://github.com/Nuand/bladeRF/wiki/Setting-up-Yate-and-YateBTS-with-the-bladeRF" target="_blank" rel="external">YateBTS</a><br><a href="https://github.com/Nuand/bladeRF/wiki/ATSC-Transmitter" target="_blank" rel="external">ATSC Transmitter</a><br><a href="https://github.com/fyquah95/ramear" target="_blank" rel="external">RAMEAR</a><br>仅举几例。</p>
<p><strong>4) USRP B210</strong><br>Ettus 产品因其强大的功能而被专业人士和工业界广泛使用。使其成为与其他设备相比最昂贵的外围设备。它具有非常高的采样率和广泛的调谐率。说到 B210,它工作在 70Mhz 到 6Ghz 的频率上,是全双工的,并且在上面列出的 61.44MS/s 中具有最大的采样率。</p>
<p><div align="center"><br><img src="/img/800px-Usrp.jpg" align title="USRP by Ettus"><br></div><br>图片来源:<a href="https://commons.wikimedia.org/wiki/File:Usrp.jpg" target="_blank" rel="external">https://commons.wikimedia.org/wiki/File:Usrp.jpg</a></p>
<p>以下是一些流行的 SDR 外围设备的简要比较:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Frequency Range</th>
<th>Bandwidth</th>
<th>ADC Resolution</th>
<th>Tx capability</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>RTL-SDR R820T2/RTL2838U</td>
<td>0.5 – 1766 MHz</td>
<td>Matches sampling rate, but with filter roll-off</td>
<td>8</td>
<td>NO</td>
<td>USD 24</td>
</tr>
<tr>
<td>HackRF One</td>
<td>1 MHz – 6 GHz</td>
<td>20 MHz</td>
<td>8</td>
<td>YES</td>
<td>USD 299</td>
</tr>
<tr>
<td>bladeRF</td>
<td>47 MHz – 6 GHz</td>
<td>56 MHz</td>
<td>12</td>
<td>YES</td>
<td>USD 480</td>
</tr>
<tr>
<td>USRP B210</td>
<td>70 MHz – 6 GHz</td>
<td>56 MHz</td>
<td>12</td>
<td>YES</td>
<td>USD 1,100</td>
</tr>
<tr>
<td>LimeSDR</td>
<td>100 kHz – 3.8 GHz</td>
<td>61.44 MHz</td>
<td>12</td>
<td>YES</td>
<td>USD 299</td>
</tr>
<tr>
<td>YARD Stick One</td>
<td>300 MHz – 1GHz</td>
<td>-</td>
<td>8</td>
<td>YES</td>
<td>USD 100</td>
</tr>
</tbody>
</table>
<h3 id="天线">天线</h3><p>在选择天线时,请牢记以下几点:</p>
<ul>
<li><p>天线增益<br>由于天线数据表中的大部分增益都涉及各向同性天线,因此有必要查看 3dB 增益和带宽的位置,并进行一些基本的数学计算以确定天线是否适合我们的操作。</p>
</li>
<li><p>孔径<br>这里的主要目标是我们可以收集多少信号或我们可以收集多大的信号。因此,建议选择处于适当中心频率的天线,并且其正面直径足以一次容纳所有传入信号。</p>
</li>
<li><p>方向性和带宽<br>对于天线的主波束方向图,我们需要了解它在主瓣上有多少增益以及在旁瓣上提供了多少抑制。如果天线有一个很好的主瓣,在主瓣中截断了 3dB 并完全抑制了旁瓣,那么选择这样的天线是完全没问题的</p>
</li>
<li><p>有效长度<br>对于一些特殊的天线,如八木天线和对数周期天线,非常有必要选择合适的长度,这样天线才能在其中心频率以最大效率运行,并在其他频率下以最佳效率运行。</p>
</li>
</ul>
<p>根据要求和评估类型选择天线类型。下面是一些常用的 SDR 天线</p>
<ul>
<li>Telescopic (Stock antenna with most of the SDR transceivers)</li>
<li>Discone (Outdoor antenna)</li>
<li>Vertical (Outdoor antenna)</li>
<li>Yagi-Uda</li>
</ul>
<h2 id="结论">结论</h2><p>我们希望这能让您了解 RF 和 SDR 的世界。在这一部分中,我们涵盖了 SDR 评估所需的所有基础知识和硬件工具。在下一篇博客中,我们将介绍可用的软件工具,并了解实现目标的经典方法。</p>
<p><a href="/2021/09/23/IOT/iot-security-part-9-introduction-to-software-defined-radio/">继续下一部分 - 物联网安全 - 第 9 部分(软件无线电简介:软件部分)</a></p>
<h2 id="资源:">资源:</h2><p><a href="https://payatu.com/blog/Nitesh-Malviya/getting-started-with-radio-waves-hacking" target="_blank" rel="external">Getting started with Radio Hacking – Part 1 – Radio Frequency basics and theory</a><br><a href="https://payatu.com/blog/Nitesh-Malviya/getting-started-radio-hacking-part-2-listening-fm-using-rtl-sdr-gqrx" target="_blank" rel="external">Getting Started with Radio Hacking – Part 2 – Listening to FM using RTL-SDR and GQRX</a><br><a href="https://greatscottgadgets.com/sdr/" target="_blank" rel="external">SDR with HackRF by Michael ossmann</a><br><a href="https://www.youtube.com/user/IllinoisDSP/videos" target="_blank" rel="external">University of Illinois Digital signal processing series</a></p>
<p><em>原文链接:<a href="https://payatu.com/blog/appar/iot-security-%E2%80%93-part-8-introduction-to-software-defined-radio-sdr" target="_blank" rel="external">https://payatu.com/blog/appar/iot-security-%E2%80%93-part-8-introduction-to-software-defined-radio-sdr</a></em></p>
]]></content>
<summary type="html">
<![CDATA[<div align="center"><br><img src="/img/sdr.png" align=""/><br></div>
<h2 id="介绍">介绍</h2><p>本文是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1 - 7 部分),我建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/23/IOT/iot-security-part-7-reverse-engineering-an-iot-firmware/">物联网安全 - 第 7 部分(对 IoT 固件进行逆向工程)</a>本系列的前一篇博客。</p>]]>
</summary>
<category term="IOT安全" scheme="http://www.youngroe.com/tags/IOT%E5%AE%89%E5%85%A8/"/>
<category term="IOT" scheme="http://www.youngroe.com/categories/IOT/"/>
</entry>
<entry>
<title><![CDATA[物联网安全101-7.物联网固件逆向(翻译)]]></title>
<link href="http://www.youngroe.com/2021/09/23/IOT/iot-security-part-7-reverse-engineering-an-iot-firmware/"/>
<id>http://www.youngroe.com/2021/09/23/IOT/iot-security-part-7-reverse-engineering-an-iot-firmware/</id>
<published>2021-09-23T12:50:22.000Z</published>
<updated>2021-11-09T15:10:00.452Z</updated>
<content type="html"><![CDATA[<div align="center"><br><img src="/img/motherboard.jpg" align><br></div>
<h2 id="固件逆向工程:简介">固件逆向工程:简介</h2><p>本文是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的文章(第 1 部分到第 6 部分),我强烈建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/22/IOT/iot-security-part-6-101-zigbee-security-101/">物联网安全 - 第 6 部分 (ZigBee 安全 - 101)</a>本系列上一篇博客。</p>
<p>固件是物联网设备的软件部分。构建功能性物联网固件涉及许多技术,有许多厂商为这些技术的开发做出贡献,如 Cisco、Linux、Wind River 等。在这篇文章中,当我说固件时,我将主要是指设备的软件组件。固件具有不同的复杂性,从驱动功能较弱的微型微控制器的裸机固件到基于微处理器的成熟操作系统,如 Linux。后者用于更复杂的设备,如路由器、电视等。</p>
<a id="more"></a>
<p>在这篇文章中,我们将研究组成固件所涉及的不同组件,然后我们将讨论如何使用各种开源工具对固件进行逆向工程。逆向是一个重要的步骤,它将帮助您对设备和固件进行进一步的分析。那么让我们开始看看裸机固件是什么?</p>
<h2 id="裸机固件(Bare_Metal_Firmware)">裸机固件(Bare Metal Firmware)</h2><p>根据设备的需要使用的应用程序,决定设备使用的技术栈。如果一个设备的任务是读取和报告周围温度和湿度,那么它不需要非常复杂的软件,比如 Linux。对于这些情况,就可以使用裸机固件。现在,您可能会问什么是裸机固件?简单来说,这类固件直接与硬件接口直接进行交互,不涉及驱动程序或内核。</p>
<p>裸机固件不会做太多复杂的事情,它们通常被分配不超过 3 或 4 个任务,这些任务被放入循环中,因为它们被安排在特定的顺序/条件下运行。厂商会为这些设备提供的 SDK 提供了生命周期方法,程序员编写的这些函数在循环中运行。这些 SDK 的一些复杂功能变体是 FreeRTOS、mbed-os,它们是实时操作系统,允许您进行任务调度并对某些中断请求做出非常快速的响应。</p>
<p>裸机固件是用 C 编写的,因此所有针对C语言的攻击(如缓冲区溢出相关漏洞)也对这些固件有效。这些设备通常收集数据并将其发送到中央服务器或与通过 UART/SPI 总线(其外围设备)与其他设备进行通信。有机会发现通信协议中的漏洞、错误处理数据包、密钥交换、缓冲区溢出等。</p>
<p>基于裸机固件的微控制器设备不仅用于传感器网络;它们无处不在,从冰箱、微波炉、安全警报系统,您的汽车上有几十个,您的笔记本电脑/电脑也是如此。通常,当您没有此固件的源代码时,您会采用逆向工程的方法。</p>
<p>逆向这些二进制文件与逆向 Windows EXE 和 Linux ELF 文件有点不同。那么它们就没有预定义的结构。对于裸机二进制文件,您需要芯片组的数据表(data-sheet )并在您的反汇编工具(如 IDA、Ghidra 等)中创建内存映射,以进行正确的反汇编。另一个非常关键的问题 memory-map 也可以帮助用户回答是什么 GPIO,设备与其他外设进行交互?此信息将有助于了解设备的功能。关于这一点还有很多可以说的,我会在另一篇文章中说明,因此有关更多详细信息,请访问此<a href="https://payatu.com/blog/asmita-jha/--stack-smashing--protection-in-hardware-attack" target="_blank" rel="external">链接</a>。现在让我们看看什么是成熟的基于操作系统的固件。</p>
<h2 id="成熟操作系统固件">成熟操作系统固件</h2><p>当您看到更复杂的系统(如路由器、智能家居仪表板、无人机和医疗保健设备)时,它们的作用与裸机系统无异。举个例子;典型的无线路由器具有通过局域网和WIFI连接等功能;他们可以将指定的 MAC 地址列入黑名单/白名单,并且一些现代路由器具有防病毒软件和其他保护功能。要实现所有这些功能,您需要一个成熟的操作系统来支持所有这些复杂的功能。</p>
<p>嵌入式系统有许多不同的操作系统选项,如 Linux、Windows CE、Cisco IOS、Symbian、Android、VxWorks 等。其中一些是专用的,如用于路由器的 Cisco,而大多数是更通用的。一般统计数据表明,嵌入式系统产品中最受欢迎的操作系统选择是 Linux。造成这种情况的原因有很多,其中一些原因是它的开源特性、灵活性,最重要的是,它是免费的。您可以在周围找到 Linux 驱动的设备,例如路由器、信息娱乐系统等。</p>
<p>这种固件通常至少包含三个组件,引导加载程序 Bootloader、内核 Kernel 和文件系统 file-system。引导加载程序是帮助加载操作系统内核并传递各种信息需求的软件。一旦引导加载程序完成加载,内核就将接管执行。一旦内核开始执行,它就会启动其他用户应用程序以使最终用户可以使用操作系统。这通常涉及在后台启动各种应用程序和服务。完成所有这些后,用户就可以与系统进行交互。所有用户应用程序和应用程序数据都存储在文件系统上。</p>
<p>这些设备的安全评估通常从审核这些设备上运行的应用程序开始;最有趣的目标是远程应用服务程序。在这些服务程序中发现的漏洞对设备的安全性有很大影响,因为攻击者不需要靠近它就可以破坏它。如果互联网上的任何人可以利用该漏洞,他们都可以控制它。这些服务通常是用于配置和控制设备功能或其他服务(如 UPnP)的 Web 服务器,这些服务有助于其他设备发现该设备。</p>
<h2 id="固件分析安全工具">固件分析安全工具</h2><p>既然我们对固件的整体有了一个高层次的概述,那么您想到的下一个问题是如何开始剖析固件并开始分析固件。分析大致可以分为静态分析和动态分析。在静态分析中,您阅读代码并查找错误,如果您没有源代码,请开始对二进制文件进行逆向工程并阅读汇编说明以了解其功能。另一方面,动态分析涉及运行应用程序并观察其行为。<br>在分析固件时,我通常结合使用这两种分析技术来实现我的目标。以下是我经常使用的一些工具的列表:</p>
<ul>
<li>Binwalk - 这可能是最流行的固件解包工具之一。它是一个固件提取工具,它试图在任何二进制 blob 中提取二进制文件。它通过搜索许多常见二进制文件格式(如 zip、tar、exe、ELF 等)的签名来实现这一点。 Binwalk 拥有二进制文件头签名数据库,可以根据该数据库完成签名匹配。使用此工具的共同目标是提取嵌入在固件二进制文件中的文件系统,如 Squashfs、yaffs2、Cramfs、ext*fs、jffs2 等。文件系统包含将在设备上运行的所有应用程序代码。此工具还有许多参数,您可以调整这些参数以更好地进行提取。您可以访问此<a href="https://github.com/ReFirmLabs/binwalk/wiki/Usage" target="_blank" rel="external">链接</a>以阅读有关什么是不同参数以及如何使用它们的更多详细信息。</li>
<li>Qemu - 对于在跨架构(如 ARM、MIPS 等)环境中工作的人来说,这是一个有价值的工具,嵌入式开发人员通常就是这种情况。该工具提供了一种在主机系统上模拟不同架构(如 ARM、MIPS 等)的二进制固件的方法,主机系统具有不同的架构,如 x86、amd64。当您想审核固件但没有设备或为该系统设置调试器非常困难时,这种工具非常方便。Qemu 可以帮助您对 Linux 系统和许多不同平台进行全系统仿真或 ELF 文件的单个二进制仿真。您可以查看此<a href="https://www.qemu.org/" target="_blank" rel="external">链接</a>以获取有关该项目的更多详细信息。</li>
<li>gdb-multiarch - GDB 是一种动态调试工具,用于中断正在运行的进程并检查其内存和寄存器。但是,gdb 只支持编译它的体系结构。但是当你要调试不同架构的应用程序进行跨架构支持时,你会需要它的姊妹项目gdb-multiarch,它可以帮助你进行跨架构调试。</li>
<li>Firmware ModKit - 此工具可帮助您Patch固件并重新打包。它使用 Binwalk 提取固件,并为您提供一个包含固件文件系统布局的目录。然后,您可以根据需要Patch任何内容,添加/删除文件或修补现有文件,ModKit 可以将其打包备份,以便您可以在设备存储上刷新新固件并启动新修补的固件。您可以从此<a href="https://code.google.com/archive/p/firmware-mod-kit/" target="_blank" rel="external">链接</a>下载此工具的代码。</li>
</ul>
<p>我分析固件时的工作流程涉及所有这些工具。第一步通常从使用 Binwalk 解压固件开始。接下来,尝试使用 Qemu 模拟固件中感兴趣的应用程序。如果我无法模拟二进制文件,那么我会通过 gdb 调试并发现问题然后修复,以便 Qemu 可以运行它并查找安全问题。通过这个步骤还帮助我对服务进行模糊测试。</p>
<h2 id="结论">结论</h2><p>本文阐述了固件是什么,以及在评估 IoT 设备时您会遇到哪些不同类型的 IoT 固件。我向您概述了如何处理不同类型的固件,我们还研究了不同的工具如何帮助我们对固件进行安全分析。</p>
<p>继续下一部分 -<a href="/2021/09/23/IOT/iot-security-part-8-introduction-to-software-defined-radio-sdr/">物联网安全 - 第 8 部分 软件无线电(Software Defined Radio,SDR)简介</a></p>
<p><em>原文链接:<a href="https://payatu.com/blog/munawwar/iot-security---part-7-reverse-engineering-an-iot-firmware" target="_blank" rel="external">https://payatu.com/blog/munawwar/iot-security---part-7-reverse-engineering-an-iot-firmware</a></em></p>
]]></content>
<summary type="html">
<![CDATA[<div align="center"><br><img src="/img/motherboard.jpg" align=""/><br></div>
<h2 id="固件逆向工程:简介">固件逆向工程:简介</h2><p>本文是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的文章(第 1 部分到第 6 部分),我强烈建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/22/IOT/iot-security-part-6-101-zigbee-security-101/">物联网安全 - 第 6 部分 (ZigBee 安全 - 101)</a>本系列上一篇博客。</p>
<p>固件是物联网设备的软件部分。构建功能性物联网固件涉及许多技术,有许多厂商为这些技术的开发做出贡献,如 Cisco、Linux、Wind River 等。在这篇文章中,当我说固件时,我将主要是指设备的软件组件。固件具有不同的复杂性,从驱动功能较弱的微型微控制器的裸机固件到基于微处理器的成熟操作系统,如 Linux。后者用于更复杂的设备,如路由器、电视等。</p>]]>
</summary>
<category term="IOT安全" scheme="http://www.youngroe.com/tags/IOT%E5%AE%89%E5%85%A8/"/>
<category term="IOT" scheme="http://www.youngroe.com/categories/IOT/"/>
</entry>
<entry>
<title><![CDATA[物联网安全101-5.ZigBee协议(翻译)]]></title>
<link href="http://www.youngroe.com/2021/09/22/IOT/iot-security-part-5-101-zigbee-protocol-101/"/>
<id>http://www.youngroe.com/2021/09/22/IOT/iot-security-part-5-101-zigbee-protocol-101/</id>
<published>2021-09-22T14:50:22.000Z</published>
<updated>2021-11-07T13:37:47.701Z</updated>
<content type="html"><![CDATA[<h2 id="ZigBee_协议_101">ZigBee 协议 101</h2><p>该博客是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1-4 部分),我建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/22/IOT/iot-security-part-4-bluetooth-low-energy-101/">物联网安全 - 第 4 部分(蓝牙低能耗)</a><br>在这篇博客中,我们将详细讨论 ZigBee 规范和 ZigBee 协议架构。下一篇博客将介绍 ZigBee 协议的安全架构以及 ZigBee 设备和网络中存在的安全问题。<br><a id="more"></a></p>
<h2 id="历史">历史</h2><p>ZigBee – 在 1990 年代作为临时数字无线电网络开发并替代有线网络。与 Wi-Fi 或蓝牙不同,ZigBee 更适用于工业自动化和控制系统 (IACS) 中的应用,在这些应用中,终端节点需要定期传输少量数据,并且功耗低,并且与计算机的传输距离较短,集中监控系统。如今,ZigBee 低速率无线个域网 (LR-WPAN) 广泛用于需要低数据速率、长电池寿命、自愈能力和嘈杂射频环境中安全网络的控制和监控应用。以下是一些在其产品中使用 ZigBee 标准作为网络解决方案的行业</p>
<ul>
<li><ol>
<li>无线传感器网络(WSN)</li>
</ol>
</li>
<li><ol start="2">
<li>工业自动化</li>
</ol>
</li>
<li><ol start="3">
<li>楼宇自动化</li>
</ol>
</li>
<li><ol start="4">
<li>家庭自动化</li>
</ol>
</li>
<li><ol start="5">
<li>智能电能计量</li>
</ol>
</li>
<li><ol start="6">
<li>医院和医疗保健自动化</li>
</ol>
</li>
</ul>
<h2 id="ZigBee_概述">ZigBee 概述</h2><div align="center"><br><img src="/img/zigbeeicon1.png" align><br></div>
<p>2000 年,IEEE 802.15 工作组成立,致力于制定无线个域网 (WPAN) 或无线个域网 (WPAN) 的标准,其特点是短距离、高度简单、允许低成本和低功耗实施。IEEE 802.15.4标准第一版于2003年发布,即IEEE 802.15.4-2003(LR-WPAN),定义了OSI模型的物理层和数据链路层。2002 年 ZigBee 联盟成立并与 IEEE 802.15.4 工作组合作,于 2004 年 12 月宣布 ZigBee v.1.0 草案批准 ZigBee 2004 规范。 ZigBee 标准建立在 IEEE 802.15.4 标准之上,其中 IEEE 802.15.15定义了前两层,即物理(PHY)层、低速率无线个域网(LR-WPAN)的媒体访问控制(MAC)层,ZigBee标准提供了网络层(NWK),<br>以下部分将更详细地说明 ZigBee 标准的不同组件</p>
<h3 id="IEEE_802-15-4_协议">IEEE 802.15.4 协议</h3><h3 id="物理层">物理层</h3><p>IEEE 802.15.4 物理层提供数据、传输和接收管理服务的调制解调,并在两个独立的频率范围内运行,低频868 ⁄ 915 MHz 和高频 2.4 GHz。物理层层负责无线电控制(启用/禁用)、接收数据包的链路质量指示 (LQI)、能量检测 (ED) 和空闲信道评估 (CCA)</p>
<table>
<thead>
<tr>
<th>物理层</th>
<th>频率</th>
<th>频道</th>
<th>地区</th>
</tr>
</thead>
<tbody>
<tr>
<td>低频物理层</td>
<td>868.0-868.6 兆赫</td>
<td>1</td>
<td>欧洲</td>
</tr>
<tr>
<td>低频物理层</td>
<td>902-928 兆赫</td>
<td>30</td>
<td>美国和澳大利亚</td>
</tr>
<tr>
<td>高频物理层</td>
<td>2400-2483.5MHZ</td>
<td>16</td>
<td>全世界</td>
</tr>
</tbody>
</table>
<h3 id="MAC层">MAC层</h3><p>IEEE 802.15.4 MAC 层使用 CSMA-CA 机制控制对无线电信道的访问。MAC层负责Beacon传输(当设备为协调器时),实现载波侦听多路访问与冲突避免(CSMA-CA),使用保证时隙(GTS)机制进行同步,为上层提供可靠的传输机制.</p>
<h3 id="IEEE_802-15-4_网络模型">IEEE 802.15.4 网络模型</h3><h4 id="节点类型">节点类型</h4><p>IEEE 802.15.4 标准定义了两种类型的网络节点</p>
<ul>
<li><p>全功能设备 (FFD)<br>FFD 设备能够在 PAN 网络内创建网络、配置和消息路由。FFD 设备能够在 PAN 网络中配置安全模型。FFD 设备可以在三种操作模式下运行,即:PAN 协调器、协调器和终端设备。FFD 设备可以与网络中的任何 RFD 或 FFD 设备进行通信。</p>
</li>
<li><p>缩减功能器件 (RFD)<br>RFD 通常是一种电池供电的简单设备,资源和通信要求非常适中。由于缺乏路由能力,RFD 设备只能作为 PAN 网络中的终端设备,并且只能与网络中的 FFD 设备进行通信。</p>
</li>
</ul>
<h4 id="拓扑">拓扑</h4><p>IEEE 802.15.4 标准为 LR-WPAN 设备定义了两种星型或点对点网络拓扑。但是,每个网络都需要至少一个 FFD 作为网络的协调器。</p>
<div align="center"><br><img src="/img/ieee-topology.png" align><br></div>
<ul>
<li><p>星型网络<br>星型网络是一种更加结构化的网络,网络中至少有一个 FFD 设备充当整个网络的协调器。任何 FFD 设备都会选择其唯一的 PAN 标识符来创建自己的 PAN 并将自己声明为 PAN 协调器。一旦 PAN 协调器在网络中处于活动状态,其他终端设备就可以加入网络。终端设备只能与中央节点或协调器通信。它主要用于家庭自动化、个人健康监测、玩具和游戏控制。</p>
</li>
<li><p>点对点<br>对等网络也需要一个 PAN 协调器,但与星型网络不同,任何设备都可以与网络范围内的任何其他设备进行通信。对等网络可以是能够自组织和自管理的自组织网络。它主要用于工业控制和监控系统、无线传感器网络、库存管理系统。</p>
</li>
</ul>
<h3 id="节点寻址模式">节点寻址模式</h3><p>每个 IEEE 802.15.4 都有两种寻址模式,短(16 位)和扩展(64 位)寻址。符合 IEEE 802.15.4 的设备从制造商处获取其 64 位扩展地址,而当设备与 WPAN 关联时,协调器会分配一个唯一的 16 位 PAN 地址。</p>
<h2 id="ZigBee_协议">ZigBee 协议</h2><div align="center"><br><img src="/img/zigbee-stack.png" align><br></div>
<p>来源:<a href="https://zigbeealliance.org/wp-content/uploads/2019/11/docs-05-3474-21-0csg-zigbee-specification.pdf" target="_blank" rel="external">ZigBee 规范文档 05-3474-21(docs-05-3474-21-0csg-zigbee-specification)</a></p>
<h3 id="应用层">应用层</h3><p>如上图所示,APL 层由几个子层组成,即:APS 子层、服务接入点(SAP)和 ZigBee 设备对象(ZDO)以及 ZDO 管理平面,以及制造商定义的应用程序对象。</p>
<h3 id="应用支持子层_(APS)">应用支持子层 (APS)</h3><p>APS 子层通过 ZDO 和制造商定义的应用程序对象使用的一组通用服务提供 NWK 和 APL 之间的接口。APS 数据实体 (APS-DE) 和 APS 管理实体 (APS-ME) 是两个 APS 实体,提供以下服务:</p>
<ul>
<li><strong>APS 数据实体 (APS-DE)</strong></li>
<li>应用支持子层协议数据单元(APDU)的生成</li>
<li>设备绑定</li>
<li>组地址过滤</li>
<li>可靠的运输</li>
<li>重复拒绝</li>
<li><p>碎片化</p>
</li>
<li><p><strong>APS 管理实体 (APM-SE)</strong></p>
</li>
<li>绑定管理</li>
<li>应用支持层信息库(AIB)管理</li>
<li>安全</li>
<li>集团管理</li>
</ul>
<h3 id="应用框架">应用框架</h3><p>应用程序框架提供了一个执行环境,其中托管应用程序对象并可以发送或接收数据,最多可以定义 254 个不同的应用程序对象,每个应用程序对象由一个从 1 到 254 的端点地址标识。端点 0 和端点 255 用作 ZigBee 设备对象(ZDO)地址和广播地址分别由应用支持子层数据实体-服务接入点(APSDE-SAP)端点241至254由ZigBee联盟保留,未经批准不得使用。</p>
<ul>
<li><p>应用配置文件<br>应用程序配置文件是消息、消息格式和处理操作的协议,使开发人员能够使用驻留在不同设备上的应用程序实体来创建可互操作的分布式应用程序。ZigBee 联盟已经为家庭自动化、工业自动化等应用发布了大量公共应用配置文件。设备制造商还可以定义适合其最终应用的自定义配置文件。</p>
</li>
<li><p>集群<br>集群表示为属性和应用程序消息的集合。簇分为两种类型,即输入簇和输出簇。群集标识符是在特定应用程序配置文件范围内唯一的 16 位数字。</p>
</li>
</ul>
<h3 id="ZigBee_设备对象_(ZDO)">ZigBee 设备对象 (ZDO)</h3><p>位于应用程序框架和 APS 之间的 ZigBee 设备对象 (ZDO) 表示功能的基类,它提供应用程序对象、设备配置文件和 APS 之间的接口。ZDO 负责以下事项:</p>
<ul>
<li>初始化应用程序支持子层 (APS)、网络层 (NWK) 和安全服务。</li>
<li>收集来自终端应用程序的配置信息以确定和实施发现、安全管理(密钥加载、密钥建立、密钥传输和身份验证)、网络管理(网络发现、离开/加入网络、重置网络连接和创建网络) 、绑定、节点和组管理。</li>
</ul>
<h3 id="网络层">网络层</h3><p>网络层在 802.15.4 MAC 层和应用层之间提供服务接口。网络层数据实体 (NLDE) 和网络层管理实体 (NLME) 是两个网络层实体,提供以下服务:</p>
<ul>
<li><strong>网络层数据实体 (NLDE)</strong></li>
<li>网络级 PDU (NPDU) 的生成</li>
<li>特定于拓扑的路由</li>
<li><p>安全</p>
</li>
<li><p><strong>网络层管理实体 (NLME)</strong></p>
</li>
<li>配置新设备</li>
<li>启动网络</li>
<li>加入、重新加入和离开网络</li>
<li>寻址:</li>
<li>邻居发现</li>
<li>路由发现</li>
<li>接收控制</li>
<li>路由</li>
</ul>
<h2 id="ZigBee_设备类型">ZigBee 设备类型</h2><p>ZigBee 设备可以在三种不同的模式或节点类型下工作。</p>
<ul>
<li><p>ZigBee 协调器 (ZC)<br>ZigBee 协调器是一种 FFD 设备,充当网络中其他节点的中央节点或父节点。每个网络只有一个负责 ZigBee 网络的创建、配置和管理。它维护一个关联设备列表,支持关联、解除关联和孤儿扫描、重新加入等服务。没有 ZC,ZigBee 网络就无法存在;ZC 在网络上始终处于活动状态,不能进入睡眠模式。</p>
</li>
<li><p>ZigBee 路由器 (ZR)<br>ZigBee 路由器是一个中间 FFD 设备,负责在终端设备之间或终端设备与协调器之间中继数据包。终端设备也可以通过路由器加入网络,ZR 充当该网络段的父节点。</p>
</li>
<li><p>ZigBee 终端设备 (ZED)<br>任何 FFD 或 RFD 设备都可以成为 ZigBee 网络上的终端设备,ZigBee 终端设备是一个简单的设备,如传感器,负责监控和收集数据,或根据用户的特定操作执行命令。没有任何消息路由能力的 ZED 只能从父节点发送和接收数据。通常,ZED 是低功率电池供电设备,可以将其置于睡眠状态以节省功耗。</p>
</li>
</ul>
<h2 id="网络拓扑结构">网络拓扑结构</h2><p>ZigBee 网络层 (NWK) 支持星形、树形和网状拓扑。</p>
<div align="center"><br><img src="/img/zigbee-topology.png" align><br></div>
<ul>
<li><p>星形<br>每个网络的单个 ZigBee 协调器设备,控制网络,并负责启动和维护 ZigBee 网络。所有其他设备,称为终端设备,通过 ZigBee 协调器直接与 ZigBee 协调器或其他终端设备通信。在星型网络中,协调器成为消息路由的瓶颈,协调器故障导致网络关闭。</p>
</li>
<li><p>树形<br>在树形拓扑结构中,ZigBee 协调器负责启动网络并选择特定的关键网络参数,但网络可以通过 ZigBee 路由器进行扩展。在树形网络中,路由器使用树形路由策略通过网络路由数据和控制消息。在 Tree 网络中,路由器故障会导致受影响路由器下的网段关闭。</p>
</li>
<li><p>网状拓扑<br>在网状拓扑中,ZigBee 协调器负责创建和配置,但网络可以使用 ZigBee 路由器进行扩展。网状网络允许完全对等通信。网状网络,也称为自愈网络,即协调器故障不会导致网络故障,因为终端设备相互通信以及与路由器通信。<br>网状网络很复杂,并且会在网络中产生消息传递开销。</p>
</li>
</ul>
<h2 id="ZigBee_中的寻址">ZigBee 中的寻址</h2><h3 id="设备寻址">设备寻址</h3><p>ZigBee 网络中的每个 ZigBee 设备都有两种类型的地址 - IEEE 地址和网络地址。</p>
<ul>
<li><p>IEEE 地址<br>全球唯一的 64 位地址,由设备制造商在生产期间分配。作为 IEEE 802.15.4 标准的一部分,该地址也被称为“扩展地址”,被 IEEE 802.15.4 层用于低级数据包传递,除了绑定映射需要在两者之间创建绑定外,ZigBee 层很少使用IEEE 地址和网络地址。</p>
</li>
<li><p>网络地址<br>ZigBee 网络中唯一的 16 位网络地址是 ZigBee 层的一部分,也称为“短地址”。网络地址分配给终端设备,并由网络层用于在设备之间路由消息。</p>
</li>
</ul>
<h3 id="ZigBee_网络身份">ZigBee 网络身份</h3><p>ZigBee 网络中的每个 ZigBee 设备都获得两种类型的标识符 (ID) - 个人区域网络标识符 (PAN ID) 和扩展 PAN ID (EPID)。</p>
<ul>
<li><p>PAN 标识符(PAN ID)<br>作为 IEEE 802.15.4 标准的一部分,PAN 标识符 (PAN ID) 是一个 16 位标识符,由 PAN 协调器在设置网络并与终端设备通信时选择。MAC 层过滤掉来自其他网络的数据包,这些网络不是由特定 PANID 标识的同一网络的一部分。</p>
</li>
<li><p>扩展 PAN ID (EPID)<br>ZigBee 网络的全球唯一 64 位标识符,EPID 标识符在给定区域内重叠的 PAN 中应该是唯一的,用于避免不同网络之间的 PAN ID 冲突。有关 PAN ID、EPAN 和短地址的更多信息,请参阅下面的 ZigBee 数据包快照</p>
</li>
</ul>
<div align="center"><br><img src="/img/zigbee-node-addressing.png" align><br></div>
<h3 id="应用级寻址">应用级寻址</h3><ul>
<li><p>端点地址<br>每个 ZigBee 节点可以支持一个或多个应用程序或端点。要将直接消息发送到特定应用程序,使用编号为 1 到 240 的端点 - 还有一个广播端点 255,它允许将消息发送到给定节点上的所有应用程序。</p>
</li>
<li><p>集群标识符(集群 ID)<br>集群标识符是在每个应用程序配置文件范围内唯一的 16 位数字,用于标识特定的集群。请参阅下面的 ZigBee 数据包快照,以进一步了解端点地址和集群 ID</p>
<div align="center"><br><img src="/img/zb-application-addressing.png" align><br></div>
</li>
</ul>
<h2 id="ZigBee_中的消息传递">ZigBee 中的消息传递</h2><p>ZigBee 支持广播、单播、组多播和跨 PAN 消息传递。</p>
<ul>
<li><p>广播<br>由 PAN 协调器发起的消息,用于 PAN 网络中的所有设备和路由器设备,路由器将其转发给属于同一 PAN 网络的终端节点。</p>
</li>
<li><p>单播<br>消息指向网络中的单个终端节点,通常通过多个节点路由到达目的地节点。单播消息需要从最终目标设备到源设备的网络级确认,而如果消息路由通过不同的节点,则在 MAC 层之间发送 MAC 级确认。</p>
</li>
<li><p>组播<br>用于特定 PAN 网络中的每个设备的消息,属于以跳数为单位的给定传输半径内动态定义的多播组。</p>
</li>
</ul>
<h3 id="PAN_间通信">PAN 间通信</h3><p>此消息适用于来自具有不同 PANID 的不同 PAN 网络的设备。ZigBee 规范将跨泛通信定义为一种机制,通过这种机制,ZigBee 设备可以与本地区域内的设备进行信息交换,而无需形成或加入相同的 ZigBee 网络。</p>
<h2 id="结论…">结论…</h2><p>我们希望这能让您对 ZigBee 协议进行介绍和简要了解。在下一篇博客中,我们将介绍 ZigBee 协议和设备的安全性。<br>继续阅读本系列的下一部分 -<a href="/2021/09/22/IOT/iot-security-part-6-101-zigbee-security-101/">物联网安全第 6 部分(ZigBee 安全 - 101)</a></p>
<h2 id="参考">参考</h2><ul>
<li><ol>
<li><a href="https://standards.ieee.org/standard/802_15_4-2020.html" target="_blank" rel="external">802.15.4-2020 - IEEE 批准的低速率无线网络标准草案</a></li>
</ol>
</li>
<li><ol start="2">
<li><a href="https://zigbeealliance.org/wp-content/uploads/2019/11/docs-05-3474-21-0csg-zigbee-specification.pdf" target="_blank" rel="external">ZigBee 规范 - 05-3474-21,2015 年 8 月 5 日</a></li>
</ol>
</li>
<li><ol start="3">
<li><a href="http://www.zigbee.org/" target="_blank" rel="external">ZigBee 联盟</a></li>
</ol>
</li>
<li><ol start="4">
<li><a href="https://en.wikipedia.org/wiki/IEEE_802.15.4" target="_blank" rel="external">IEEE 802.15.4 维基百科</a></li>
</ol>
</li>
<li><ol start="5">
<li><a href="https://en.wikipedia.org/wiki/Zigbee" target="_blank" rel="external">ZigBee 维基百科</a></li>
</ol>
</li>
</ul>
<p><em>原文链接:<a href="https://payatu.com/blog/dattatray/zigbee-protocol-101" target="_blank" rel="external">https://payatu.com/blog/dattatray/zigbee-protocol-101</a></em></p>
]]></content>
<summary type="html">
<![CDATA[<h2 id="ZigBee_协议_101">ZigBee 协议 101</h2><p>该博客是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1-4 部分),我建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/22/IOT/iot-security-part-4-bluetooth-low-energy-101/">物联网安全 - 第 4 部分(蓝牙低能耗)</a><br>在这篇博客中,我们将详细讨论 ZigBee 规范和 ZigBee 协议架构。下一篇博客将介绍 ZigBee 协议的安全架构以及 ZigBee 设备和网络中存在的安全问题。<br>]]>
</summary>
<category term="IOT安全" scheme="http://www.youngroe.com/tags/IOT%E5%AE%89%E5%85%A8/"/>
<category term="IOT" scheme="http://www.youngroe.com/categories/IOT/"/>
</entry>
<entry>
<title><![CDATA[物联网安全101-6.ZigBee安全(翻译)]]></title>
<link href="http://www.youngroe.com/2021/09/22/IOT/iot-security-part-6-101-zigbee-security-101/"/>
<id>http://www.youngroe.com/2021/09/22/IOT/iot-security-part-6-101-zigbee-security-101/</id>
<published>2021-09-22T14:50:22.000Z</published>
<updated>2021-11-07T13:42:09.814Z</updated>
<content type="html"><![CDATA[<div align="center"><br><img src="/img/icons8-zigbee-480.png" align><br></div>
<h2 id="ZigBee_安全_101">ZigBee 安全 101</h2><p>该博客是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1 部分到第 5 部分),我强烈建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/22/IOT/iot-security-part-5-101-zigbee-protocol-101/">物联网安全 – 第 5 部分(ZigBee 协议 - 101)</a><br>在本文中,我们将讨论 ZigBee 协议的安全架构以及 ZigBee 设备和网络中存在的安全问题。</p>
<a id="more"></a>
<h2 id="ZigBee_安全架构(开放信任)">ZigBee 安全架构(开放信任)</h2><p>ZigBee 中的安全架构补充或增强了 IEEE 802.15.4 层的安全服务。它是一种基于某些假设的“开放信任”模型,如下所述:</p>
<ul>
<li>在单个设备上运行的不同层和应用程序相互信任。</li>
<li>同一设备上不同堆栈层之间的通信不加密。</li>
<li>除非受到保护,否则设备不会有意或无意地将密钥传输到其他设备,例如在密钥传输期间。</li>
<li>两个设备之间的通信采用密码加密和安全保护。</li>
<li>随机数生成器按加密引擎的预期工作</li>
<li>硬件防篡改</li>
</ul>
<p><strong>ZigBee安全架构设计原则:</strong></p>
<ul>
<li>产生帧的层负责最初保护它。</li>
<li>只有具有活动网络密钥的设备才能与网络上的多跳通信。</li>
<li>APS 层和 NWK 层都可以使用相同的活动网络密钥来保护帧。重用密钥有助于减少存储开销。</li>
<li>端到端消息安全,即只有源设备和目的设备才能解密共享密钥保护的消息,路由机制是出于信任考虑。</li>
<li>组成网络的设备负责网络中节点的基本安全级别、安全策略和身份验证。如果需要,应用层可以在两个设备之间提供额外的应用级安全性。</li>
</ul>
<h3 id="信任中心">信任中心</h3><p>信任中心是在 ZigBee 网络内其他设备信任的设备上运行的应用程序,用于分发网络密钥和潜在的端到端应用程序配置管理。每个网络只能存在一个信任中心,它可以是协调器或协调器指定的设备,所有成员节点都将此设备视为信任中心。信任中心负责 <em> 配置和维护网络安全策略 </em> 建立端到端的应用密钥。* 通过使用一些密钥建立协议来生成密钥</p>
<h2 id="ZigBee_中的安全模式">ZigBee 中的安全模式</h2><ul>
<li><p>分布式安全模式<br>网络中不需要分布式安全模式,唯一的信任中心,路由器负责终端设备认证。设备上预先配置了链接密钥,网络密钥在设备加入网络时由路由器发布。网络中所有节点的网络密钥保持不变;这使得分布式安全模式的安全性降低。</p>
</li>
<li><p>集中安全模式<br>应用中使用的集中安全模式,一个信任中心控制,维护网络和设备的集中安全策略。在这种模式下,信任中心负责</p>
</li>
<li><p>维护整个网络的安全和安全配置</p>
</li>
<li>验证设备并维护网络上的设备列表</li>
<li>维护网络中所有设备的链接密钥和网络密钥</li>
</ul>
<h2 id="ZigBee_安全密钥">ZigBee 安全密钥</h2><p>ZigBee 标准定义了两种对称密钥,每种长度为 128 位,用于加密通信。</p>
<ul>
<li><p>网络密钥<br>用于广播通信和任何网络层通信的 128 位网络密钥。每个节点都需要网络密钥才能与网络上的其他设备进行安全通信。网络上的设备通过网络上的密钥传递,即key-transport,获取网络密钥。只有一种类型的网络密钥;但是,它可以用于分布式或集中式安全模型。安全模型控制网络密钥的分发方式,并可控制网络帧计数器的初始化方式。安全模型不影响消息的保护方式。</p>
</li>
<li><p>链接键<br>两个设备共享的 128 位唯一链接密钥,用于 APL 对等实体之间的单播通信。设备可以通过网络上的密钥传输服务或预安装获取链接密钥。信任中心链接密钥有两种不同类型:全局和唯一。本地设备使用的信任中心链接密钥的类型决定了设备如何处理各种信任中心消息(APS 命令),包括是否应用 APS 加密。每个节点还可能具有以下预配置的链接密钥,用于派生信任中心链接密钥。</p>
</li>
</ul>
<table>
<thead>
<tr>
<th>号码</th>
<th>键名</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>集中安全全球信任中心链接密钥</td>
<td>用于加入集中式安全网络的链接密钥。集中式安全全球信任中心链接密钥的默认值是ZigBeeAlliance09,即(“5A 69 67 42 99 23 65 65 41 6C 6C 69 61 6E 63 65 30 39”),如果没有其他链接,设备会使用或支持密钥由应用程序在加入时指定</td>
</tr>
<tr>
<td>2</td>
<td>分布式安全全局链接密钥</td>
<td>用于加入分布式安全网络的链接密钥</td>
</tr>
<tr>
<td>3</td>
<td>安装代码链接密钥</td>
<td>从加入设备的安装代码派生的链接密钥,以创建用于加入的唯一信任中心链接密钥</td>
</tr>
<tr>
<td>4</td>
<td>应用链接键</td>
<td>两个设备之间使用的链接密钥用于应用层加密</td>
</tr>
<tr>
<td>5</td>
<td>设备特定的信任中心链接密钥</td>
<td>信任中心和网络中的设备之间使用的链接密钥。用于信任中心命令和应用层加密。</td>
</tr>
</tbody>
</table>
<h3 id="密钥管理">密钥管理</h3><p>ZigBee 规范提到了三种不同的密钥管理机制</p>
<ul>
<li>预安装 – 在带外设备上配置或安装密钥</li>
<li>密钥传输——信任中心通过网络向设备发送安全密钥。</li>
<li>密钥建立——信任中心和终端设备协商密钥,并且在没有实际通过网络发送任何密钥的情况下建立密钥。此密钥建立基于对称密钥建立 (SKKE) 协议。</li>
</ul>
<h2 id="ZigBee_协议安全">ZigBee 协议安全</h2><h3 id="辅助安全头">辅助安全头</h3><p>如果 NWK 帧控制字段中的安全控制位设置为 1,ZigBee NWK 层和 APS 层可以使用 Auxiliary Security Header 进行安全通信。 Auxiliary Security Header 具有以下字段</p>
<table>
<thead>
<tr>
<th>字节:1</th>
<th>字节数:4</th>
<th>八位字节:0 或 8</th>
<th>八位字节:0 或 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>安全控制</td>
<td>帧计数器</td>
<td>源地址</td>
<td>密钥序列号</td>
</tr>
</tbody>
</table>
<p>下面是 ZigBee 数据包的示例快照,其中 NWK 帧控制中的安全字段设置为 true (1),安全标头设置了相应的安全控制字段,以及消息完整性代码 (MIC)</p>
<div align="center"><br><img src="/img/ZigBee_data.png" align><br></div>
<h3 id="安全控制">安全控制</h3><p>8 位安全控制字段由安全级别、密钥标识符和扩展的 nonce 子字段组成,如下所示</p>
<table>
<thead>
<tr>
<th>少量</th>
<th>0 - 2</th>
<th>3 - 4</th>
<th>5</th>
<th>6 - 7</th>
</tr>
</thead>
<tbody>
<tr>
<td>描述</td>
<td>安全级别</td>
<td>密钥标识符</td>
<td>扩展随机数</td>
<td>预订的</td>
</tr>
</tbody>
</table>
<ul>
<li>安全级别<br>安全级别标识符指示如何保护传出帧,据称如何保护传入帧。它还指示有效载荷是否被加密以及提供的帧上的数据真实性的程度,如消息完整性代码 (MIC) 的长度所反映的。MIC 的位长可以取值 0、32、64 或 128,并确定 MIC 的随机猜测正确的概率。下面列出的安全级别的安全属性</li>
</ul>
<table>
<thead>
<tr>
<th>安全级别标识符</th>
<th>安全属性</th>
<th>数据加密</th>
<th>帧完整性(MIC 的长度 M,以八位字节数表示)</th>
</tr>
</thead>
<tbody>
<tr>
<td>0x00</td>
<td>没有任何</td>
<td>离开</td>
<td>否 (M=0)</td>
</tr>
<tr>
<td>0x01</td>
<td>MIC-32</td>
<td>离开</td>
<td>是 (M=4)</td>
</tr>
<tr>
<td>0x02</td>
<td>MIC-64</td>
<td>离开</td>
<td>是 (M=8)</td>
</tr>
<tr>
<td>0x03</td>
<td>MIC-128</td>
<td>离开</td>
<td>是 (M=16)</td>
</tr>
<tr>
<td>0x04</td>
<td>启动</td>
<td>不</td>
<td>(M=0)</td>
</tr>
<tr>
<td>0x05</td>
<td>ENC-MIC-32</td>
<td>在</td>
<td>是 (M=4)</td>
</tr>
<tr>
<td>0x06</td>
<td>ENC-MIC-64</td>
<td>在</td>
<td>是 (M=8)</td>
</tr>
<tr>
<td>0x07</td>
<td>ENC-MIC-128</td>
<td>在</td>
<td>是 (M=16)</td>
</tr>
</tbody>
</table>
<ul>
<li>密钥标识符<br>密钥标识符子字段由两个比特组成,用于标识用于加密帧的密钥。</li>
</ul>
<table>
<thead>
<tr>
<th>密钥标识符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>0x00</td>
<td>一个数据键</td>
</tr>
<tr>
<td>0x01</td>
<td>网络密钥</td>
</tr>
<tr>
<td>0x02</td>
<td>钥匙传输钥匙</td>
</tr>
<tr>
<td>0x03</td>
<td>钥匙加载钥匙</td>
</tr>
</tbody>
</table>
<ul>
<li>扩展随机数<br>当设置为 1 时,扩展的 nonce 子字段指示发送方地址字段存在于辅助报头中。否则,它设置为 0。</li>
</ul>
<h3 id="帧计数器">帧计数器</h3><p>计数器字段用于提供帧新鲜度并防止处理重复帧。</p>
<h3 id="源地址">源地址</h3><p>安全控制中的源地址字段是源设备的扩展 64 位地址,当安全控制字段的扩展 nonce 子字段设置为 1 时出现。</p>
<h3 id="密钥序列号">密钥序列号</h3><p>辅助安全报头中的密钥序列号表示用于保护帧的网络密钥的密钥序列号。来自安全控制字段的密钥标识符子字段,当设置为 1(即网络密钥)时,指示存在于辅助安全报头中的密钥序列号。</p>
<h2 id="ZigBee_漏洞">ZigBee 漏洞</h2><p><code>设备之间的安全性取决于安全密钥的安全初始化和安装</code></p>
<p>ZigBee 网络中的漏洞分为两类:协议漏洞和产品开发过程中协议执行不力。下面是一些常见的漏洞:</p>
<h3 id="实施漏洞">实施漏洞</h3><p><strong>安全密钥存储不安全</strong><br>ZigBee 协议要求所有安全密钥(网络、链接)长期存储在设备上。如果密钥没有安全存储,密钥可以通过对固件二进制文件进行逆向工程来识别密钥的位置。</p>
<p><strong>无线不安全的密钥传输</strong><br>在一些实现中,当节点第一次加入 ZigBee 网络时,节点通过空中获取其密钥,主要是从协调器以明文格式。因此,嗅探器设备网络狙击手或粗糙设备可以从协调器获取密钥,并可以危及整个网络。</p>
<p><strong>能量耗尽攻击</strong><br>以下是两种非常常见的能量消耗攻击</p>
<ul>
<li><p>无效的安全标头<br>在此类攻击中,攻击者在帧中发送带有无效安全标头的突发数据包,目的是使设备必须花费一些能量来验证帧完整性,从而导致目标设备更快地耗尽电池电量。</p>
</li>
<li><p>投票率<br>在此类攻击中,攻击者将数据包发送到终端设备的速度比网络配置的轮询速率更快,从而导致目标设备更快耗尽电池电量。</p>
</li>
</ul>
<h3 id="协议漏洞">协议漏洞</h3><h4 id="网络干扰漏洞">网络干扰漏洞</h4><p>IEEE802.15.4/ZigBee 标准针对无线电和网络干扰提供了一定的保护机制,但是攻击者可以利用某些技术来干扰网络<br>以下是 ZigBee 网络中可能存在的两种类型的干扰攻击:</p>
<ul>
<li><p>无线电干扰<br>在此类攻击中,攻击者会增加给定信道的无线电信号发射,导致无线电信道的信噪比降低。</p>
</li>
<li><p>链路层干扰<br>在此类攻击中,攻击者通过以随机间隔或针对特定节点的特定间隔在网络上传输带有无用数据的随机 ZigBee 帧突发来瞄准 MAC 层,从而导致网络中的丢包和 DoS 攻击。</p>
</li>
</ul>
<h4 id="链接密钥漏洞">链接密钥漏洞</h4><p>ZigBee 标准具有开放信任的安全模型,低于标准的漏洞会导致链接密钥相关攻击</p>
<ul>
<li><p>默认链接键<br>ZigBee 标准为链接密钥提供了默认值,以确保不同制造商的 ZigBee 设备之间的互操作性;因此,攻击者可以使用流氓设备以默认网络密钥加入网络。</p>
</li>
<li><p>未加密的链接密钥<br>当没有预配置密钥的设备尝试加入网络时,在这种情况下,信任中心会向设备发送一个未加密的单个密钥(默认链接密钥),攻击者可以通过嗅探导致 ZigBee 网络受损的网络通信来获取。</p>
</li>
<li><p>重用链接键<br>ZigBee 标准允许重新使用链接密钥重新加入网络;在这种情况下,攻击者可以克隆合法设备并伪装成之前连接的设备并希望重新加入网络来欺骗信任中心的网络层。因此,信任中心然后发送使用先前使用的链接密钥加密的密钥。</p>
</li>
</ul>
<h4 id="未经身份验证的_ACK_帧漏洞">未经身份验证的 ACK 帧漏洞</h4><p>确认帧是 IEEE 802.15.4/ZigBee 标准中网络层的一部分,但仅限于网络层帧传输的确认,不为确认包提供帧完整性和机密性保护。以下是 ZigBee 网络中一些常见的 ACK 攻击。两者都需要链路层干扰。</p>
<ul>
<li><p>ACK欺骗<br>在此类攻击中,攻击者对网络进行干扰,使合法设备收不到帧,然后攻击者向发送方发送带有正确序列号的ACK帧,从而导致网络中的数据丢失。</p>
</li>
<li><p>确认丢弃<br>在此类攻击中,攻击者对网络进行干扰,使得只有从接收方到发送方的 ACK 帧被阻塞,迫使发送方重新传输数据,直到达到最大重传次数,从而耗尽网络带宽和设备电池电量。</p>
</li>
<li><p>重放保护漏洞<br>IEEE 802.15.4 具有重放保护机制。它提到如果帧序列号等于或小于从同一源节点接收到的前一帧的序列号,则节点可以丢弃接收到的帧。在此类攻击中,攻击者可以向目标节点发送序列号较大的帧,迫使目标节点丢弃序列号较小的帧。</p>
</li>
</ul>
<h2 id="结论">结论</h2><p>我们希望这篇博客能让您简要了解 ZigBee 协议的安全架构。本博客中涵盖的漏洞要么是由于缺乏安全的设计和实现,要么是由于 ZigBee 协议的固有漏洞。</p>
<p>继续下一部分 -<a href>物联网安全 - 第 7 部分(逆向工程物联网固件)</a></p>
<h2 id="参考">参考</h2><ul>
<li><ol>
<li><a href="https://standards.ieee.org/standard/802_15_4-2020.html" target="_blank" rel="external">802.15.4-2020 - IEEE 批准的低速率无线网络标准草案</a></li>
</ol>
</li>
<li><ol start="2">
<li><a href="https://zigbeealliance.org/wp-content/uploads/2019/11/docs-05-3474-21-0csg-zigbee-specification.pdf" target="_blank" rel="external">ZigBee 规范 - 05-3474-21,2015 年 8 月 5 日</a></li>
</ol>
</li>
<li><ol start="3">
<li><a href="http://www.zigbee.org/" target="_blank" rel="external">ZigBee 联盟</a></li>
</ol>
</li>
<li><ol start="4">
<li><a href="https://en.wikipedia.org/wiki/IEEE_802.15.4" target="_blank" rel="external">IEEE 802.15.4 维基百科</a></li>
</ol>
</li>
<li><ol start="5">
<li><a href="https://en.wikipedia.org/wiki/Zigbee" target="_blank" rel="external">ZigBee 维基百科</a></li>
</ol>
</li>
</ul>
<p><em>原文链接:<a href="https://payatu.com/blog/dattatray/zigbee-security-101" target="_blank" rel="external">https://payatu.com/blog/dattatray/zigbee-security-101</a></em></p>
]]></content>
<summary type="html">
<![CDATA[<div align="center"><br><img src="/img/icons8-zigbee-480.png" align=""/><br></div>
<h2 id="ZigBee_安全_101">ZigBee 安全 101</h2><p>该博客是“物联网安全”系列的一部分。如果您还没有阅读本系列之前的博客(第 1 部分到第 5 部分),我强烈建议您先阅读它们,除非您已经熟悉这些概念并且只想阅读当前主题。<br><a href="/2021/09/21/IOT/iot-security-part-1-101-iot-introduction-architecture/">物联网安全 - 第 1 部分(101 - 物联网介绍和架构)</a><br><a href="/2021/09/22/IOT/iot-security-part-5-101-zigbee-protocol-101/">物联网安全 – 第 5 部分(ZigBee 协议 - 101)</a><br>在本文中,我们将讨论 ZigBee 协议的安全架构以及 ZigBee 设备和网络中存在的安全问题。</p>]]>
</summary>
<category term="IOT安全" scheme="http://www.youngroe.com/tags/IOT%E5%AE%89%E5%85%A8/"/>
<category term="IOT" scheme="http://www.youngroe.com/categories/IOT/"/>
</entry>
<entry>
<title><![CDATA[物联网安全101-4.低功耗蓝牙BLE(翻译)]]></title>
<link href="http://www.youngroe.com/2021/09/22/IOT/iot-security-part-4-101-bluetooth-low-energy-101/"/>
<id>http://www.youngroe.com/2021/09/22/IOT/iot-security-part-4-101-bluetooth-low-energy-101/</id>
<published>2021-09-22T12:50:22.000Z</published>
<updated>2021-11-07T06:00:37.883Z</updated>
<content type="html"><![CDATA[<p>如果您还没有看我们的物联网安全系列的第 1 部分到第 3 部分,我建议您先阅读它们,除非您已经熟悉 IoT 的基础知识。上一篇博客的链接——<a href="/2021/09/22/IOT/iot-security-part-3-101-iot-top-ten-vulnerabilities/">物联网安全——第 3 部分</a>。<br>蓝牙一直是一个流行词,因为人们希望他们的所有设备都是智能的,这意味着您可以不需要线缆就可以跨设备控制其他设备。蓝牙已经进入市场十多年了。如果您是千禧一代,您可能会使用过那些带有蓝牙功能的经典诺基亚手机。蓝牙是由爱立信发明的,随后其他厂商也开始使用蓝牙。不久之后,主要终端厂商一起都创建了一个名为<a href="https://en.wikipedia.org/wiki/Bluetooth_Special_Interest_Group" target="_blank" rel="external">蓝牙特别兴趣小组- SIG的联盟</a>,该联盟管理制定蓝牙标准以及不同版本之间的互操作性。<br>我们不打算谈论蓝牙。蓝牙本身就是一个庞大的协议栈,它们的规范大约有2000 多页。在本博客中,我将仅介绍更为著名的 BLE 蓝牙低功耗。<br><a id="more"></a></p>
<p>随着万物互联时代的到来,随之而来的是能量和资源的问题。正如我上面提到的,蓝牙是一个巨大的协议栈。在像健身手环这样的终端设备中实现它需要耗费很多的能量和资源。因此,在蓝牙 4.0 标准中,他们引入了一种称为 Low energy 的技术,专门针对在内存和功率受限的设备上运行的物联网和智能设备。</p>
<div align="center"><br><img src="/img/2021092150941367.jpg" align><br></div>
<p>Bluetooth SIG 开始将该标准作为 <a href="https://www.laptopmag.com/articles/just-what-is-bluetooth-4-0-anyway" target="_blank" rel="external">Bluetooth Smart</a>进行销售。它有两个组件,Bluetooth Smart设备是只有蓝牙低功耗组件的终端设备,Bluetooth Ready是能够同时执行Bluetooth LE 和 EDR-Bluetooth经典组件的设备,这可能是您的中心设备,如手机或笔记本电脑。<br>现在让我们来看看蓝牙规范的技术细节</p>
<div align="center"><br><img src="/img/202109212961815527.gif" align><br></div>
<p>来源:<a href="https://archive.eetindia.co.in/www.eetindia.co.in/STATIC/ARTICLE_IMAGES/201312/EEIOL_2013DEC13_RFD_NET_TA_01Tab1.gif" target="_blank" rel="external">https://archive.eetindia.co.in/www.eetindia.co.in/STATIC/ARTICLE_IMAGES/201312/EEIOL_2013DEC13_RFD_NET_TA_01Tab1.gif</a></p>
<p>该表本身将使您更好地了解规格、范围和带宽已减少以承受低功耗和低资源。<br>正如我之前提到的,LE 有两种不同类型的设备。</p>
<p><a href="https://www.digikey.com/Web%20Export/Supplier%20Content/Laird_776/PDF/laird-wireless-bluetooth-smart-ready.pdf" target="_blank" rel="external">Bluetooth Smart Ready</a>- 这是电池供电和高资源的中央设备,能够运行所有蓝牙协议。它们是您的笔记本电脑和手机。</p>
<div align="center"><br><img src="/img/3391617601.jpg" align><br></div>
<p><a href="https://www.digikey.com/Web%20Export/Supplier%20Content/Laird_776/PDF/laird-wireless-bluetooth-smart-ready.pdf" target="_blank" rel="external">Bluetooth Smart</a>– 它们是您的终端设备,如健身追踪器、行李追踪器或智能假阳具。他们不必运行整个堆栈,他们需要节省电力和资源。它们仅运行 Bluetooth LE 服务器。它们是中央设备可以连接的外围设备。</p>
<div align="center"><br><img src="/img/170392843.jpg" align><br></div>
<p>蓝牙和 LE 堆栈详细信息超出了本文的范围。<br>但是我们将关注的两个重要组件是 GAT 和 GAPP,它们负责 BLE 服务的运行。</p>
<div align="center"><br><img src="/img/Bluetooth_stack.jpg" align><br></div>
<h2 id="Generic_Access_Profile_(GAP)_通用访问配置文件">Generic Access Profile (GAP) 通用访问配置文件</h2><p><a href="https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile" target="_blank" rel="external">GAP</a>定义了您与中央和外围设备的通信和连接应该如何工作。</p>
<div align="center"><br><img src="/img/Bluetooth_GAP.jpg" align><br></div>
<h2 id="Generic_Attribute_(GATT)通用属性_(GATT)">Generic Attribute (GATT)通用属性 (GATT)</h2><p><a href="https://www.bluetooth.com/specifications/gatt/generic-attributes-overview" target="_blank" rel="external">GATT</a>就像一个管理您的数据需要如何处理的服务器。<br>您的Bluetooth LE 设备按照服务器-客户端原理工作。在这里,您的终端设备/外围设备充当运行 GATT 服务器的服务器,而您的中央设备充当客户端。因此,您的最终应用程序或工具连接到 GATT 服务器并从设备请求数据。<br>在您的 GATT 服务器内。有三个组成部分。</p>
<ul>
<li><ol>
<li><a href="http://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/ble-stack-3.x/gatt.html" target="_blank" rel="external">Profile</a> – Bluetooth SIG 定义,它可以基于设备的类型,可以是血压设备或温度传感器,也可以是任何最常用的具有互操作性优势的设备。</li>
</ol>
</li>
<li><ol start="2">
<li><a href="https://www.bluetooth.com/specifications/gatt/services" target="_blank" rel="external">Services</a> - 每个设备内部都有多个参数。假设设备可以有名称、固件版本、OTA 功能、设备操作。它们被分组到称为服务的特定数据集。</li>
</ol>
</li>
<li><ol start="3">
<li><a href="https://www.bluetooth.com/specifications/gatt/characteristics" target="_blank" rel="external">Characteristics</a> - 在您的服务中放置您的数据。它可以是 16 位Bluetooth SIG 派生特征或特定于供应商的 128 位特征。</li>
</ol>
</li>
</ul>
<p>简而言之,service就像一个文件夹,characteristics是保存数据的文件。</p>
<div align="center"><br><img src="/img/GATT.png" align><br></div>
<p>现在我们了解了什么是低功耗蓝牙及其工作原理的基础知识。让我们来看看有关如何访问 BLE 设备的一些工具和方法。<br>如果您使用的是 Windows,我会认真建议您使用 Ubuntu,因为它带有所有必要的工具来访问 ble 设备并从亚马逊获得那些便宜的蓝牙 4.0 模块。(有些笔记本电脑不附带它。)</p>
<h3 id="连接蓝牙适配器:">连接蓝牙适配器:</h3><ul>
<li><ol>
<li>将蓝牙 USB 模块连接到笔记本电脑的空闲 USB 端口。(无需从主机安装任何驱动程序)。</li>
</ol>
</li>
<li><ol start="2">
<li>连接后,打开终端并输入”sudo hciconfig “, 您应该能够看到此窗口,该窗口为您提供 mac 地址(蓝牙USB模块),并且应该显示 UP and RUNNING。</li>
</ol>
</li>
<li><ol start="3">
<li>如果您遇到任何问题,请通过”sudo hciconfig hci0 reset”重新启动蓝牙接口→这会很方便。<div align="center"><br><img src="/img/connect_ble.png" align><br></div>
</li>
</ol>
</li>
</ul>
<h3 id="扫描蓝牙设备">扫描蓝牙设备</h3><ul>
<li><ol>
<li>成功将蓝牙适配器连接到机器后</li>
</ol>
</li>
<li><ol start="2">
<li>您现在可以使用”sudo hcitool lescan”扫描您周围的所有 ble 设备<div align="center"><br><img src="/img/scan_ble.png" align><br></div>
</li>
</ol>
</li>
<li><ol start="3">
<li>您将看到带有名称和 MAC 地址的设备列表。</li>
</ol>
</li>
<li><ol start="4">
<li>通过关闭和打开设备并找出差异来找出设备的 mac。</li>
</ol>
</li>
<li><ol start="5">
<li>现在获取有关该设备的更多信息。执行”sudo hcitool leinfo –random <mac>“ –random 取决于类型寻址。</mac></li>
</ol>
</li>
</ul>
<div align="center"><br><img src="/img/scan_ble.png" align><br></div>