この記事はあくあたん工房 GWアドベントカレンダー 2020、6日目の記事です。
https://gw-advent.9wick.com/calendars/2020/86
ATOMCamとは
今年1月中頃からReadyforでクラウドファンディングを行っていた、一台2000円台の小型監視カメラ。
クラウド連携などに対応している。
ATOMCamの中身について
ATOMCamはHuaLai Tech iSmartCam, Xiaomi Dafang, WyzeCam(V2)などで知られた製品のCPUなどが変更されたもの(≒OEM)である。(参考: WYZE LABS製の監視カメラはOEM提供を受けた製品だった)
分解記事によると、他の製品ではIngenic T20(21?)であったCPU(SoC)がIngenic T31となり、H.265ハードウエアエンコーダーなどが追加されている。
本題
上記の分解記事にある通り、従来のrootパスワードを使う方法ではシェルにアクセスできない。
ファームウェアを書き換えるのも、SoCが変化している以上brickする危険がある。
そこで今回は、公式のアップデート機能をMITMして違うアップデートファイルをダウンロードさせることでrootログインを可能にすることを試みた。
利用するツール
- Fiddler MITMするために利用する。
- squashfs-tools(Linux) ファームウェア更新ファイルを書き換えるために使う(無くてもいいかもしれない・要検証)
手順
まずは端末にFiddlerのプロキシを設定、証明書をインストールします。(解説省略)
その後、ATOMアプリからアップデートを確認すれば以下のようなリクエストが飛ぶはずです
これがATOMのファームウェア更新一覧です。ここにあるファームウェアを書き換えてログインを可能にします。
ちなみに、ここでリクエストを捕捉できているということは、リクエストの書き換えが可能ということです。
さて、さっそく記載されているURLからファームウェアをダウンロード・展開してきます。(以下の作業はLinux環境で行うほうがいいでしょう)
$ wget https://atom-upgrade-package.s3-ap-northeast-1.amazonaws.com/UpgradeKit/1585636528/Upgrade_4.33.1.40.tar
$ tar xvf Upgrade_4.33.1.40.tar
Upgrade/
Upgrade/PARA
Upgrade/upgraderun.sh
Upgrade/rootfs
なんとなくアップデートの仕組みが見えてきました。ここでupdaterun.shの中身を確認してみます。(以下抜粋)
#!/bin/sh
flash_eraseall /dev/mtd5
sync
echo "write backa !!!!!!!!!!!"
flashcp -v /tmp/Upgrade/rootfs /dev/mtd5
sync
echo "erase para !!!!!!!!!!!"
flash_eraseall /dev/mtd7
sync
echo "write para !!!!!!!!!!!"
flashcp -v /tmp/Upgrade/PARA /dev/mtd7
sync
reboot
どうやら、内部にイメージファイルを持っていて、それをmtdに書き込んだあとにrebootするようです。ここで、mtd5はaback
という領域になっています。そして、PARA(=parameter?)というファイルには FWGRADEUP=rootfs
という文字列が書き込まれていました。
再起動後の挙動を見る限り、U-Bootがこの文字列を読み取りaback
からrootfs
(mtd2)に複製することでアップデートが完了するようです(内容の検証をしているかまでは不明)。
ではここでrootfsの中身を見ていきましょう。
$ file rootfs
rootfs: Squashfs filesystem, little endian, version 4.0,・・・・
$ unsquashfs rootfs
・・・・
fileコマンドよりrootfsはSquashFSであることがわかりました。なのでsquashfs-tools
のunsquashfs
コマンドで展開します。
するとLinuxの標準的なrootfsが出現してきます。なので、そこの/etc/shadow
を書き換えてしまいましょう。
ほかにも、/etc/init.d/rcSを書き換えるといろいろと起動させることもできます。
書き換えた後はmksquashfsでrootfsを再構築します。xzで圧縮です(もとがそうだったので)
その後またtarに固めます
$ tar cvf Upgrade_new.tar ./temp
....
さてさて、ここまで来たらFiddlerのAutoResponderでアップデート情報のJSONを書き換えるだけですが、fileinfo
というところは良く分からないままですね。
長さ的に推測できますが、ここは単純にtarのmd5です。HMACとかではないです。
また書き換える際の注意として、アップデートのダウンロードは実際にはATOMCam側で行うので、tarは実際のHTTPSが使えるサーバ上に置いておかないといけません(ホスト名とかはなんでもいいです。Let's Encryptでいけます)
さっきのHTTPリクエストを選択して、AutoResponderのルール一覧のところにD&Dします。「Enable rules」のチェックもお忘れなく。
そして、D&Dで作成されたRuleを選択しF2でレスポンスを編集、SyntaxViewあたりで書き換えてしまいましょう。
ここまでくれば公式アプリでファームウェア更新をすればいけます。