UARTで懲りずにルーターをハックした。あと間違えて殺した。2

はじめに

こんにちは。morimolymolyです。
今回はもっと深くハックするつもりだったんですけど、物理的にボードを壊してしまったので途中までの解析結果を記事にまとめます。(なので記事タイトルがUARTなのです)
はじめに結論を述べると、オチは一つもありません。
またこの記事を読むにあたっては、最初に以下の記事を読むのがいいと思います。
morimolymoly.hateblo.jp

今回ハックしたルーターCorega社のCG-WLRGNXW-Uです。
Coregaといえば最近、サポートの終了したルーターに複数の脆弱性が見つかり話題になりましたね。
JVN#00719891: CG-WLR300NM における複数の脆弱性

下調べ

f:id:morimolymoly:20170914142902j:plain
いつものようにまずはボードを眺めます。

f:id:morimolymoly:20170914180639j:plain
オッ。RT3050Fだ。

怪しいポートを探す

f:id:morimolymoly:20170914175240j:plain
すぐみつかりますね。
ただ今回はポートの数が多いので少し大変そうです。

UARTのピンアウトとボーレートを特定する

UARTのピンアサインで重要なのはTx, Rx, Vcc, GNDです。
今回は9個のポートがあるので見つけるのは少し大変でした。
今回もロジックアナライザは使用していません。
本当は使いたかったのですが、試す前に壊してしまったのでいずれ紹介できたらと思います。

GNDを探す

GNDを探すのはかんたんです。
マルチメーターの導通チェック機能を使えば一発でわかります。
まずはルーターの電源を落とします。
次に、メーターの黒い方を金属(今回は基板のシールド)に触れさせて、赤い方をポートに一つづつ触れていきます。
ビープ音がなったところがGNDです。
今回は左下の2つがGNDでした。

VccとTxを探す

Vccも割りとかんたんに見つかります。
ルーターの電源を入れて、マルチメーターでGND以外のピンの電圧を測定します。
すると3.3Vを示すポートが3つ見つかりました。
大体この中にTxが隠れていることが多いので一緒に探してしまいます。
TxはBoot中の10秒ほどは電圧値が安定しないという性質があるので、これを使ってTxを探します。
すると明らかに不安定な電圧値を示すポートが見つかりました。
これがおそらくTxでしょう。
今までで9個中5つのポートの特定ができました。(Vcc*2, GND*2, Tx)
UARTに必要なポートは残すところRxのみです

ボーレートを当てる

謎のポートが4つある中で手作業でRxを探すのは大変なので、とりあえずボーレートを当てます。
今回もブルートフォースで57600とわかりました。
これでUARTの通信ができるようになりました。

Rxを探す

BusPirate等のUARTが話せる装置でUARTの対話モードを使って、Rxをブルートフォースして探します。
入力値によって何かしらの変化が出力(Tx)に見られれば、それがRxということです。
するとかんたんにRxが見つかりました。

UART Exploit

では早速UARTで対話してみます。

Linuxのシェルを取る

gist.github.com

linuxのシェルが取れました。
しかしrootではありませんでした。
コマンド自体の数も制限されているし、普通のlinuxに含まれているpasswdファイルとかその他諸々も存在していませんでした。
またファイルの書き込みに関しても制限がかかっており、wgetコマンドは存在するものの、バックドアダウンロードするとかexploitコードをダウンロードするのも難しいのではないかと思います。
とりあえずそのシェルからrootを取るのは難しそうです。

U-bootのシェルを取る

試しにU-bootのシェルが取れるか試してみました。
U-bootが自由に操作できればカスタムファームウェアを焼くなど好きにいじることができるようになります。
試してみたところ1秒でシェルが取れました。
なぜかこのルーターはu-bootのモード選択をユーザが自由に操作することができました。
flashからbootするのが3番でこれがデフォルトになっているのですが、起動してからすぐ4番を押すとシェルがとれます。

gist.github.com

このように環境変数を出力してみました。
みてみるとシステムが読み取り専用であることや、ファイルシステムが最小限になっていた理由等もわかってきました。
おそらくこのbootイメージは組み込み向けの読み取り専用ファイルシステムcramfsを採用しているからでしょう。

まとめ

この機器の唯一の問題はブート中のシリアル入力を無効にしなかったことです。
まあwebコンソールについてはノーコメントですが(ノーコメントですよ!!(後々エミュするときにこれに触れるかもしれない))

最後に

このルーターはUARTで弄ったあとに、ピンヘッダをつけようとして色々やってたら間違ってぶっ壊してしまいました。
そんなわけで情報量が減っているというわけです。(はんだ付けする前にきちんとログを取っておけばよかった)
JTAGも試してみたかったですが、未確定のピンの数が3つしかないのでこれはJTAGではない気がします。
次はJTAG101かファームウェア解析でもやろうと思います。