checkm8を弄ってみた

checkm8とは

checkm8(チェックメイト)は最近発見されたBootROM exploitでA11までのデバイスに対応しています。

Appleが修正できない脆弱性で、これを使ったツールがリリースされているので試してみることにしました。

使い方

ツール自体は公開されているのであとはそれを利用してみたいと思います。

Cydiaのインストールとかそういうエンドユーザ向けの機能はまったくないので注意。

DFUモード

まずはデバイスをMacと接続した上でDFUモードにいれます。

git clone https://github.com/axi0mX/ipwndfu.git
cd ipwndfu

ソースコードをクローンして、コマンドを実行してみましょう。

First run

First run ./ipwndfu -p to exploit the device. Repeat the process if it fails, it is not reliable.

https://github.com/axi0mX/ipwndfu
./ipwndfu -p

言われたとおりにDFUのiPhone6Sを接続した状態でコマンドを打ってみます。

\*** checkm8 exploit by axi0mX ***
Found: CPID:8015 CPRV:11 CPFM:03 SCEP:01 BDID:02 ECID:001849483045483A IBFL:3C SRTG:[iBoot-3332.0.0.1.23]
Device is now in pwned DFU Mode.
(2.77 seconds)
Found: CPID:8003 CPRV:01 CPFM:03 SCEP:01 BDID:04 ECID:---------------- IBFL:1C SRTG:[iBoot-2234.0.0.2.22]
ERROR: This device is not supported.

ん、あれサポートされていないデバイスって表示されましたね…

サポートされていないはずはないのですが、これは一体どういうことでしょう?

ということでGitHubの項目を読んでみました。

  • current SoC support: s5l8947x, s5l8950x, s5l8955x, s5l8960x, t8002, t8004, t8010, t8011, t8015
    • 現在サポートされているSoC
  • future SoC support: s5l8940x, s5l8942x, s5l8945x, s5l8747x, t7000, t7001, s7002, s8000, s8001, s8003, t8012
    • サポート予定のSoC

iPhone6SはSamsungモデルとTSMCモデルの二つがあるのですが、それらのSoCはS8000とS8003なんですよね。

まだ対応してないやんけ!!!

ちなみにですが、iPhone8はt8015ですのでcheckm8が対応しています。

*** checkm8 exploit by axi0mX ***
Found: CPID:8015 CPRV:11 CPFM:03 SCEP:01 BDID:02 ECID:001849483045483A IBFL:3C SRTG:[iBoot-3332.0.0.1.23]
Device is now in pwned DFU Mode.
(2.77 seconds)

pwned DFU Modeというのは通常のDFUモードよりも更に制限が緩和されてCFWでの復元などが許可された状態になります。

SecureROM

./ipwndfu --dump-rom
Saved: SecureROM-t8015si-3332.0.0.1.23-ROMRELEASE.dump

なんかよくわからんのですがSecureROMがダンプできました。

keybag

./ipwndfu --decrypt-gid KEYBAG
Decrypting with t8015si GID key.
Traceback (most recent call last):
  File "./ipwndfu", line 327, in <module>
    print pwned.aes(arg.decode('hex'), usbexec.AES_DECRYPT, usbexec.AES_GID_KEY).encode('hex')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
    output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found

Keybagの復号をしようとするの何やらエラーが発生して失敗してしまいました。

調べてみるとどうやらPython2.7系で起こる問題とのこと。

と言われてもデフォルトでPython2.7が使われてしまうのでどうしようかななんて考えています。

てか、ipwndfu自体がpython2.7で書かれているんですがこれどうしたらいいですかね…

Python2.7って織田信長しか使ってないんでしょ?

うーん、これはめんどくさいので後回しで!

JTAG

./ipwndfu --demote
Demotion register: 0x207
Attempting to demote device.
Demotion register: 0x206
Success!

これもなんかできましたが、何ができたのか全然わかりません()

まとめ

やってみたはいいのですが、結局よくわからんままでした!!

例えばVerbose BootをするためにはBOOT時のフラグをオンにすればいいはずなのですが、それはこのSecureROMを逆アセンブルして書き戻してあげればいいんでしょうか?

ん、でもSecureROMなのに書き込めるんだろうか…などと思ったり。

まだまだこの手のツールを使うには知識も技術力も足りていないようです。