7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

ATOMCamのシェルに入る

この記事はあくあたん工房 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アプリからアップデートを確認すれば以下のようなリクエストが飛ぶはずです
image.png
これが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-toolsunsquashfsコマンドで展開します。
すると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あたりで書き換えてしまいましょう。
image.png

ここまでくれば公式アプリでファームウェア更新をすればいけます。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
7
Help us understand the problem. What are the problem?