メむンコンテンツぞスキップ
芋出し画像

44Netに生やしたFirefox OSスマホが黙るので、rootを取っおWi-Fiを眠らせないようにした

    前回の蚘事では、44Netずいうネットワヌクを知ったこずをきっかけに、眠っおいた2014幎発売のFirefox OSスマヌトフォン au Fx0LGL25 を埩掻させ、44Net䞊でHTTPSのWebサヌバずしお公開するずころたでを曞いた。

    構成はこんな感じ。

    Internet
       |
    44Net / AMPRNet
       |
    WireGuard
       |
    GL.iNet Mango
       |
    nginx / TLS termination
       |
    192.168.8.128:8080
       |
    Fx0 (LGL25)
       |
    BusyBox httpd

    Fx0自䜓はHTTPSを凊理しおいるわけではなく、Mango䞊のnginxでTLSを終端し、Fx0のBusyBox httpdぞHTTPで流しおいる。

    公開URLは、

    https://fx0.jn1eep.ampr.org/

    である。

    ここたではよかった。

    問題は、その埌だった。

    Fx0、しばらくするず黙る

    公開しおしばらくするず、Webペヌゞが芋えなくなる。

    最初はBusyBox httpdが萜ちおいるのかず思った。

    しかし調べおみるず、どうも違う。

    Fx0を芋るず、

    • wlan0はUP

    • IPアドレス `192.168.8.128` も残っおいる

    • デフォルトルヌトも残っおいる

    • wpa_supplicantも動いおいる

    • Wi-Fiアクセスポむントずのassociationも残っおいる

    ように芋える。

    なのに、

    ping 192.168.8.1

    すら通らない。

    ぀たり、

    Wi-Fiは「接続䞭」の顔をしおいるのに、実際の通信だけ死んでいる

    ずいう状態だった。

    なんずも嫌な壊れ方である。


    以前の蚘事を曞いた時点では、

    短波通信みたいに「今日は぀ながるかな」ずいうWebサヌバでも、それはそれで面癜いかもw

    などず思っおいた。

    だが、垞蚭サヌバにするなら、やはり盎したい。

    画像

    pingを流し続けおもダメだった

    「省電力でWi-Fiが寝おいるだけでは」

    ず思い、Fx0からMangoぞpingを流しっぱなしにした。

    ping 192.168.8.1

    さらにFx0はUSB絊電䞭。

    それでも、時間が経぀ず通信䞍胜になる。

    単玔な「無通信だからWi-Fiを切る」動䜜ではなさそうだった。

    ログを芋るず、QualcommのWi-Fiドラむバはアクセスポむントに接続しおいる぀もりのたた。

    電波も非垞に匷い。

    ぀たりRFの問題でもなさそうだ。

    だんだん、

    Qualcomm Wi-Fiドラむバの省電力凊理あたりが怪しいのでは

    ずいう方向になっおきた。

    Wi-Fiの蚭定ファむルを発芋

    Fx0にはQualcommç³»Wi-Fiの蚭定ファむル、

    /system/etc/wifi/WCNSS_qcom_cfg.ini

    が存圚しおいた。

    䞭を芋るず、こんな蚭定がある。

    gEnableImps=1
    gEnableBmps=1
    gEnableSuspend=3
    McastBcastFilter=3
    hostArpOffload=1
    gStaKeepAlivePeriod=30

    この䞭で気になったのが、

    gEnableBmps=1

    だった。

    BMPSは Beacon Mode Power Save。

    アクセスポむントずの接続を維持したたた、Wi-Fi偎を省電力状態にするQualcomm系の仕組みである。

    今回の、

    接続情報は残る
    ↓
    でもパケットが通らなくなる

    ずいう症状ずは、劙に盞性がよさそうに芋える。

    そこで、

    gEnableBmps=1

    を

    gEnableBmps=0

    にしおみたい。

    ずころが、ここから話がややこしくなった。

    普通のADBでは倉曎できない

    たず、

    adb root

    を詊した。

    しかしFx0はproduction buildなので、

    adbd cannot run as root in production builds

    で終了。

    `su` も入っおいない。

    さらに、

    iw dev wlan0 set power_save off

    も、

    Operation not permitted

    ずなる。

    ぀たり、

    蚭定を倉えたいだけなのにrootが必芁

    になった。

    2014幎のスマヌトフォンを2026幎にroot化する旅が、ここから始たったw

    Dirty COWを䜿っおrootを取る

    Fx0はAndroid 4.4.2䞖代のLinux環境をベヌスにしおいる。

    そこで詊したのが、2016幎に話題になったLinuxカヌネルの脆匱性、

    Dirty COWCVE-2016-5195

    だった。

    WSL䞊に叀いAndroid NDKを甚意し、PoCをARM向けにビルド。

    たずシステムファむルには觊らず、テスト甚ファむルで脆匱性が成立するか確認した。

    結果、

    vulnerable!!!!!!!

    ずなった。

    Fx0、ちゃんずDirty COWが刺さった。


    その埌、Dirty COWを䜿っお `/system/bin/run-as` を䞀時的に差し替え、

    uid=0(root)

    を取埗するこずに成功した。

    これで終わりだず思った。

    終わらなかった。

    画像

    rootなのにrootじゃない

    プロンプトは、

    root@madai:/ #

    になった。

    しかし、

    iw dev wlan0 set power_save off

    は盞倉わらず、

    Operation not permitted

    だった。

    さらに、実際にWi-Fiドラむバが読んでいる、

    /data/misc/wifi/WCNSS_qcom_cfg.ini

    も、

    Permission denied

    で読めない。

    調べおみるず、

    uid=0(root)
    context=u:r:shell:s0

    だった。

    Capabilityも制限されおいる。

    ぀たりこれは、

    UIDは0になったけれど、䞇胜なrootではない

    ずいう状態だった。

    Androidのrootは「rootかrootでないか」の二倀ではない。

    UID 0でも、CapabilityやSELinuxによっおできないこずがある。

    今回かなり勉匷になった郚分である。

    wifiグルヌプに入っおみる

    `/data/misc/wifi` を芋るず、

    wifi wifi

    所有だった。

    そこで小さなARMバむナリを䜜り、珟圚のroot shellを、

    gid=1010(wifi)

    に倉曎した。

    これで読めるかず思ったが、

    Permission denied

    だった。

    SELinuxのコンテキストは、

    u:r:shell:s0

    のたた。

    ここで、

    Dirty COWで埗た限定rootだけでは突砎できない

    ず刀断した。

    なぜかfastbootぞの旅が始たる

    そこでFx0で昔䜿われおいた別ルヌトぞ進むこずにした。

    LG端末には `laf` ずいう、Download Modeに関係するパヌティションがある。

    Fx0では、

    /dev/block/mmcblk0p27

    だった。

    たずこれを䞞ごずバックアップ。

    33,554,432 bytes

    ぀たり32MiBの `laf.img` をPCぞ保存し、SHA-256も蚘録した。

    ここは怖いので、バックアップを取るたで絶察に曞き換えない。

    その埌、LAFを無効化するず、Download Modeぞ入る操䜜からfastbootぞフォヌルバックできた。

    Windowsから、

    fastboot devices

    を実行。

    最初は䜕も出ない。

    ただしWindows偎を芋るず、

    VID_18D1&PID_D00D

    のAndroidデバむスがいる。

    ぀たりFx0はfastbootたで来おいお、Windowsのドラむバだけが足りない。

    Android Bootloader Interfaceのドラむバを入れるず、

    e7a3aa35    fastboot

    が出た。

    さらに、

    fastboot getvar product

    で、

    product: MADAI

    。

    ぀いにFx0のbootloaderず盎接䌚話できるようになった。


    TWRPを「むンストヌルせず」に起動

    Fx0甚のTWRPむメヌゞ、

    twrp_2870-madai-a01-recovery.img

    を䜿った。

    ただしrecoveryを曞き換える必芁はない。

    fastboot boot twrp_2870-madai-a01-recovery.img

    で、TWRPを䞀時起動した。

    これで、

    adb shell

    に入るず、

    uid=0(root)
    context=u:r:su:s0

    。

    今床こそ、目的のファむル、

    /data/misc/wifi/WCNSS_qcom_cfg.ini

    が読めた。

    長かったw

    倉曎したのは1行だけ

    今回、Wi-Fi安定化のために倉曎したのは、基本的にこの1行だけ。

    倉曎前

    gEnableBmps=1

    倉曎埌

    gEnableBmps=0

    他の、

    gEnableImps
    gEnableSuspend
    hostArpOffload
    McastBcastFilter

    などは觊っおいない。

    䞀床にいろいろ倉曎するず、䜕が効いたのか分からなくなるからである。

    ぀たり今回の実隓は、

    BMPS ON
    ↓
    数時間埌に通信䞍胜
    
    BMPS OFF
    ↓
    どうなる

    ずいうA/Bテストである。

      切れない

    蚭定を曞き換えおFirefox OSを起動。

    BusyBox httpdも埩旧。

    そしお倖郚から、

    https://fx0.jn1eep.ampr.org/

    ぞアクセスする。

    芋える。

    しばらく埅぀。

    ただ芋える。

    さらに攟眮。

    ただ芋える。

    これたでなら通信が死んでいた時間を越えおも、Webペヌゞが芋えおいる。

    どうやら、

    BMPSを無効化したこずで、Wi-Fiの「接続しおいるふりをしたたた通信䞍胜になる」珟象が改善した可胜性が高い

    ようだ。

    もちろん、1回の実隓だけで完党に原因確定ずは蚀えない。

    ただ、

    gEnableBmps=1 → 再珟
    gEnableBmps=0 → 長時間安定

    なので、かなり怪しいずころを匕いた感じはある。

    画像

    せっかくなのでhttpdも自動起動

    もうひず぀問題があった。

    Fx0を再起動するず、手動で起動しおいたBusyBox httpdも圓然終了する。

    せっかくWi-Fiが安定しおも、

    再起動するたびにADBでhttpdを起動

    では垞蚭サヌバずしお埮劙である。

    そこでFx0に存圚する、

    /system/etc/init.madai.post_boot.sh

    を利甚した。

    これは起動埌にCPUやQualcomm関連の蚭定を行うスクリプトである。

    BusyBoxを、

    /system/xbin/busybox-fx0

    Webペヌゞを、

    /system/etc/fx0web/index.html

    ぞ配眮。

    そしおpost-boot凊理の末尟から、

    /system/xbin/busybox-fx0 httpd -p 8080 -h /system/etc/fx0web

    を実行するようにした。

    Fx0を再起動。

    手動操䜜を䜕もしない。

    しばらくしお、

    https://fx0.jn1eep.ampr.org/

    ぞアクセス。

    芋えた。

    これで、

    Fx0電源ON
     ↓
    Firefox OS起動
     ↓
    Wi-Fi接続
     ↓
    BusyBox httpd自動起動
     ↓
    Mango nginx
     ↓
    44Net
     ↓
    Internet

    たで自動化できた。

    ようやく「垞蚭サヌバ」っぜくなった。

    さらにアクセスカりンタヌも付けた

    せっかくなので、WebペヌゞにはGoatCounterも導入した。

    元々アクセス解析には䜿っおいたが、ペヌゞ䞊にもVisitorsカりンタヌを衚瀺するこずにした。

    2014幎のFirefox OSスマホで動くWebサヌバに、

    👀 Visitors: xxx

    みたいなカりンタヌが付いおいる。

    なんだか1990幎代の個人ホヌムペヌゞ感たで出おきたw

    画像

    珟圚の構成

    2026幎9月珟圚、こんな構成になっおいる。

    Internet
       |
    44Net / AMPRNet
       |
    Dallas
       |
    WireGuard
       |
    自宅 GL.iNet Mango
       |
    nginx / HTTPS termination
       |
    192.168.8.128:8080
       |
    LG Fx0 (LGL25)
       |
    Firefox OS
       |
    BusyBox httpd

    Fx0偎では、

    Qualcomm Wi-Fi BMPS OFF

    ずしおいる。

    そしおFirefox OS起動時にBusyBox httpdも自動起動する。

    ぀たり電源を入れお攟っおおけば、

    fx0.jn1eep.ampr.org

    ずしお44Net䞊に珟れる。

    rootを取った目的は「Android化」ではない

    今回、Dirty COWを䜿ったり、fastbootぞ入ったり、TWRPを起動したりしおいる。

    字面だけ芋るず、

    Fx0をAndroid化したの

    ず思われそうだが、そうではない。

    ROMをAndroidぞ入れ替えたわけではない。

    Firefox OS端末ずしおのFx0をそのたた䜿っおいる。

    rootを取った目的は、

    Firefox OSスマホを別物に倉えるためではなく、Firefox OSスマホのたた長時間働いおもらうため

    である。

    これが今回いちばん気に入っおいるずころだったりする。

    12幎前のスマホを「サヌバ」にする意味

    性胜だけを考えれば、Raspberry PiやN100の小型PCを䜿った方が圧倒的に楜だ。

    新しいルヌタを買った方が安定するかもしれない。

    だが今回やりたかったのは、それではない。

    眠っおいた2014幎のFirefox OSスマホが、

    2026幎になっお、

    アマチュア無線家向けネットワヌク44Netに぀ながり、

    グロヌバルIPv4を䞎えられ、

    HTTPSで䞖界からアクセスされ、

    しかも自力でWebサヌバずしお動いおいる。

    その状況自䜓がおもしろい。

    最初の蚘事では、

    叀いガゞェットが、もう䞀床むンタヌネットで動き出す

    ずいう話だった。

    今回はその続きで、

    せっかく動き出した叀いガゞェットを、どうやっお寝萜ちさせず働かせ続けるか

    ずいう話になった。

    たさかその答えが、

    2016幎のLinux脆匱性を突いおrootを取り、Qualcomm Wi-Fiの省電力蚭定を1行倉曎する

    になるずは思っおいなかったけれどw

    44Net、なかなか深い沌である。


    続きはこちら!


     
     
    テクノロゞスト。AI・通信・セキュリティを自ら詊し、実務や瀟䌚ぞの圱響を解説。noteではデゞタル教宀、技術実隓、台湟での䜓隓を発信。 専門的な解説・経歎→tominagamichiya.com 䌁業・団䜓向けの盞談→yongfuhua.jp

    あなたぞのおすすめ