Hosting blog pada modem GPS / LTE

gambar


Modem PinePhone GPS / WWAN / LTE



Saat mengembangkan perangkat lunak di PinePhone, saya menemukan pesan aneh di dmesg



:



[   25.476857] modem-power serial1-0: ADB KEY is '41618099' (you can use it to unlock ADB access to the modem)
      
      





Untuk konteksnya, saya akan mengatakan bahwa PinePhone memiliki modem Quectel EG25-G yang bertanggung jawab untuk GPS dan komunikasi nirkabel dari PinePhone. Perangkat keras ini adalah salah satu dari sedikit komponen telepon sumber tertutup .



Ketika saya melihat pesan ini dan penyebutan ADB, saya langsung teringat pada Android Debug Bridge, yaitu software yang biasa digunakan untuk berkomunikasi dengan perangkat Android. Saya berpikir, "Tentu saja, ini tidak bisa menjadi ADB yang sama ." Ya, ternyata memang begitu.



Pesan ini terkait dengan artikel yang merinci modem ini. Ini juga terkait dengan utilitas unlocker yang mencetak perintah AT untuk mengamankan adbd



modem.



$ ./qadbkey-unlock 41618099
AT+QADBKEY="WUkkFzFSXLsuRM8t"
AT+QCFG="usbcfg",0x2C7C,0x125,1,1,1,1,1,1,0
      
      





Mereka dapat dikirim ke modem menggunakan screen



:



# screen /dev/ttyUSB2 115200
      
      





Untuk beberapa alasan, masukan saya tidak mengembalikan data apa pun, tetapi sesi layar menampilkan "OK" dua kali, menunjukkan bahwa perintah berhasil diselesaikan.



Setelah menyiapkan aturan udev



dan adb



di "mesin host" saya, yaitu, di PinePhone, modem mulai menghasilkan keluaran adb devices



, yang dapat saya kirim ke shell:



$ adb devices
List of devices attached
(no serial number)	device

$ adb shell
/ #
      
      





Karena saya adbd



menjalankan sebagai root, saya menyalurkan output ke shell root. Luar biasa.



Ternyata modem menjalankan sistem operasinya sendiri, sepenuhnya independen dari sistem operasi PinePhone lainnya. Dengan pembaruan terkini, ini menjalankan Linux 3.18.44.



Meluncurkan server web



Untuk beberapa alasan, saya pikir akan menyenangkan menjalankan blog saya di perangkat ini. Karena kami bekerja dengan sumber daya terbatas (sekitar 48MB penyimpanan dan jumlah memori yang sama), dan blog saya hanya terdiri dari halaman statis, saya memutuskan bahwa sesuatu seperti nginx (tidak peduli seberapa ringan) akan membuang-buang sumber daya untuk tujuan saya ...



Bagi saya, darkhttpd memenuhi persyaratan saya dengan baik . Biner tunggal, tanpa ketergantungan eksternal, hanya jalankan permintaan GET dan HEAD. Idealnya.



Saya menggunakan toolchain armv7l -linux-musleabihf-cross untuk mengkompilasi silang server ini untuk ARMv7, dan secara statis menautkannya dengan musl. Dengan bantuan adb push



Saya dengan mudah berhasil mentransfer file biner dan sumber daya situs saya ke folder /usrdata



modem, di mana partisi 50 MB dipasang dengan kemampuan untuk menulis.



Server HTTP berfungsi dengan baik. Saya memutuskan untuk menggunakan ADB untuk membuka port HTTP untuk PinePhone saya:



$ adb forward tcp:8080 tcp:80
      
      





Karena port yang diteruskan ADB hanya terikat ke antarmuka loopback, saya membukanya secara manual untuk koneksi eksternal:



# 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
      
      





Kemudian saya dapat mengakses blog saya di http://pine:8080/



. Keren!



Performa?



Saya menjalankan iperf



penerusan port ADB untuk melihat seberapa besar kinerja yang saya dapatkan.



$ 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
      
      





Itu sekitar 10 Mbps. Tidak bagus, tidak buruk.



PinePhone sendiri terhubung ke jaringan melalui USB (catatan: agar koneksi jaringan USB berfungsi, saya harus melepas dua komponen dari papan ). Demi ketertarikan, saya juga menjalankan iperf



hubungan ini:



$ 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
      
      





Saya mengharapkan lebih banyak, tetapi itu tidak terlalu penting karena hambatannya adalah koneksi yang dialihkan melalui ADB.



Alasan lainnya



Saya bertanya-tanya tentang keamanan modem. Ternyata banyak tim AT system()



. Saya menduga bahwa beberapa dari perintah AT ini mungkin rentan terhadap injeksi perintah, tetapi saya belum melakukan penelitian lebih lanjut. Tidak masalah, karena shell root ADB sangat mudah diimplementasikan.



Sekilas, ini sepertinya cara yang ideal untuk memastikan ketahanan kode berbahaya. Dengan akses root ke host, kode berbahaya dapat menyematkan dirinya ke dalam modem, memungkinkannya untuk bertahan dari instalasi ulang OS host, mencegat komunikasi, atau melacak lokasi perangkat. Kerusakan sebagian dikurangi dengan fakta bahwa semua interaksi dengan OS host dilakukan melalui USB dan I2S, dan hanya ketika OS host memulainya, sehingga kode berbahaya di modem tidak akan dapat berinteraksi langsung dengan OS host.






Periklanan



Server epik untuk hosting situs dan banyak lagi! VDS murah berdasarkan prosesor AMD EPYC terbaru dan penyimpanan NVMe dari Intel untuk menghosting proyek dengan kerumitan apa pun, mulai dari jaringan perusahaan dan proyek game hingga halaman arahan dan VPN. Anda dapat membuat konfigurasi server Anda sendiri dengan beberapa klik!



Berlangganan obrolan kami di Telegram .






All Articles