1764106830
2025-11-25 19:58:00
いや、本当に。この記事のタイミングにもかかわらず、これはエイプリルフールのジョークではありません。
PinePhone でソフトウェアを開発しているときに、次のような奇妙なメッセージを見つけました。 dmesg:
[ 25.476857] modem-power serial1-0: ADB KEY is '41618099' (you can use it to unlock ADB access to the modem)
コンテキストとして、PinePhone には ククテル EG25-G PinePhone の GPS とワイヤレス接続を処理するモデム。このハードウェアは、電話機の数少ないコンポーネントの 1 つです これはクローズドソースです。
このメッセージと ADB についての言及を見たとき、私はすぐに、Android デバイスとの通信に一般的に使用されるソフトウェアである Android Debug Bridge のことを思い出しました。 「確かに」私は思った、「それは話にならない」 それ ADB」。なるほど、そうなのですね。
メッセージのリンク先は、 記事 問題のモデムの詳細を示します。また、 ロック解除ユーティリティ これを使用すると、有効にする AT コマンドが出力されます。 adbd モデム上で。
$ ./qadbkey-unlock 41618099
AT+QADBKEY="WUkkFzFSXLsuRM8t"
AT+QCFG="usbcfg",0x2C7C,0x125,1,1,1,1,1,1,0
これらは次を使用してモデムに送信できます。 screen:
# screen /dev/ttyUSB2 115200
何らかの理由で、私の入力はエコーバックされませんでしたが、画面セッションは「OK」を 2 回出力し、コマンドが正常に実行されたことを示しました。
適切にセットアップした後、 udev ルールと adb 私の「ホストマシン」(PinePhone)では、モデムが出力にポップアップ表示されました。 adb devicesそして、シェルにドロップすることができます。
$ adb devices
List of devices attached
(no serial number) device
$ adb shell
/ #
なぜなら adbd root モードで実行していたので、root シェルにドロップしました。きちんとした。
このモデムは、PinePhone OS の他の部分とは完全に分離された独自の OS を実行していることが判明しました。最新のアップデートを適用すると、Linux 3.18.44 が実行されます。
どういうわけか、このことについてブログを運営するのは楽しいだろうと思いました。私たちは限られたリソース (約 48M のスペースと同量のメモリ) で作業していたことと、私のブログが静的ファイルの束にすぎないという事実から、nginx のようなもの (軽量であること) は私の目的には少し過剰になるだろうと判断しました。
ダークhttpd 法案によく合っているようでした。外部依存関係のない単一バイナリは、GET リクエストと HEAD リクエストのみを実行します。完璧。
私が使用したのは、 armv7l-linux-musleabihf-cross ツールチェーンを使用して ARMv7 用にクロスコンパイルし、musl に対して静的にリンクします。 adb push バイナリとサイトのアセットをモデムに簡単にプッシュできます /usrdata ディレクトリには、約 50M の書き込み可能なパーティションがマウントされているようです。
HTTP サーバーはうまく機能します。 ADB を使用して HTTP ポートを PinePhone に公開することにしました。
$ adb forward tcp:8080 tcp:80
ADB 転送ポートはループバック インターフェイスにのみバインドされているため、手動で外部接続にも公開しました。
# sysctl -w net.ipv4.conf.all.route_localnet=1
# iptables -t nat -I PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:8080
ブログにアクセスできるようになりました http://pine:8080/。いいね!
走った iperf ADB ポート転送を使用して、どのようなスループットが得られるかを確認してください。
$ iperf -c localhost
------------------------------------------------------------
Client connecting to localhost, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 44230 connected with 127.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.6 sec 14.4 MBytes 11.4 Mbits/sec
つまり約10Mb/sです。素晴らしくもなく、ひどくもありません。
PinePhone 自体は USB 経由でネットワークに接続されています (追記: ボードから 2 つのコンポーネントを取り外します USB ネットワークを機能させるため)。興味本位で走ってみた iperf その接続でも同様に:
$ iperf -c 10.15.19.82
------------------------------------------------------------
Client connecting to 10.15.19.82, TCP port 5001
TCP window size: 136 KByte (default)
------------------------------------------------------------
[ 3] local 10.15.19.100 port 58672 connected with 10.15.19.82 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.4 sec 25.8 MBytes 20.7 Mbits/sec
もっと期待していましたが、ADB 転送接続でボトルネックになっていたため、実際には問題ではありませんでした。
モデムの安全性はどの程度なのか気になります。 ATコマンドがたくさんあることが判明 使用 system() モデム上で。これらの AT コマンドの一部はコマンド インジェクションに対して脆弱である可能性があると思われますが、これについては詳しく調べていません。また、ADB を使用してルート シェルにドロップするのがこれほど簡単な場合は、あまり問題になりません。
一見すると、これはマルウェアの永続性を確保するための完璧な方法のように思えます。ホスト システム上の root アクセスにより、マルウェアがモデムに埋め込まれる可能性があります。これにより、マルウェアはホスト OS の再インストール後も生き残ることができ、通信を覗き見したり、デバイスの位置を追跡したりすることができます。ホスト OS との対話はすべて USB および I2S 経由で、ホスト OS が開始した場合にのみ行われるため、モデム内のマルウェアがホスト OS と直接対話できないため、影響の一部は軽減されます。
#このブログは現在 #GPSLTE #モデムでホストされています