Blog-Hosting auf GPS / LTE-Modem

Bild


PinePhone GPS / WWAN / LTE-Modem



Bei der Entwicklung von Software auf PinePhone stieß ich auf eine merkwürdige Nachricht in dmesg



:



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





Zum Kontext möchte ich sagen, dass das PinePhone über ein Quectel EG25-G- Modem verfügt , das für das GPS und die drahtlose Kommunikation des PinePhone verantwortlich ist. Diese Hardware ist eine der wenigen Closed-Source- Telefonkomponenten .



Als ich diese Nachricht und die Erwähnung von ADB sah, dachte ich sofort an die Android Debug Bridge, dh die Software, die üblicherweise für die Kommunikation mit Android-Geräten verwendet wird. Ich dachte: "Natürlich kann dies nicht dieselbe ADB sein." Nun, es stellt sich heraus, dass es so ist.



Diese Nachricht bezieht sich auf einen Artikel , in dem dieses Modem beschrieben wird. Es ist auch mit einem Entsperrdienstprogramm verknüpft , das AT-Befehle zum Sichern des adbd



Modems ausgibt .



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





Sie können an das Modem gesendet werden, indem Sie screen



:



# screen /dev/ttyUSB2 115200
      
      





Aus irgendeinem Grund gab meine Eingabe keine Daten zurück, aber die Bildschirmsitzung gab zweimal "OK" zurück, was darauf hinweist, dass die Befehle erfolgreich ausgeführt wurden.



Nach dem Einrichten der Regeln udev



und adb



auf meinem "Host-Computer", dh auf dem PinePhone, begann das Modem mit der Ausgabe, für adb devices



die ich an die Shell senden konnte:



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

$ adb shell
/ #
      
      





Da ich adbd



als Root ausgeführt wurde, habe ich die Ausgabe an die Root-Shell weitergeleitet. Ausgezeichnet.



Es stellte sich heraus, dass das Modem ein eigenes Betriebssystem ausführt, das völlig unabhängig vom Rest des PinePhone-Betriebssystems ist. Mit den neuesten Updates läuft Linux 3.18.44.



Starten des Webservers



Aus irgendeinem Grund dachte ich, es würde Spaß machen, mein Blog auf diesem Gerät zu betreiben. Da wir mit begrenzten Ressourcen arbeiten (ca. 48 MB Speicherplatz und dieselbe Speichermenge) und mein Blog nur aus statischen Seiten besteht, habe ich beschlossen, dass so etwas wie Nginx (egal wie leicht) für meinen Zweck eine Verschwendung von Ressourcen wäre ...



Es schien mir, dass darkhttpd meine Anforderungen gut erfüllte . Einzelne Binärdateien, keine externen Abhängigkeiten, führen nur GET- und HEAD-Anforderungen aus. Im Idealfall.



Ich habe die Toolchain armv7l -linux-musleabihf-cross verwendet , um diesen Server für ARMv7 zu kompilieren, und ihn statisch mit musl verknüpft. Mittels adb push



Es gelang mir problemlos, die Binärdatei und die Ressourcen meiner Site in den Modemordner zu übertragen /usrdata



, in den eine 50-MB-Partition mit Schreibfähigkeit eingehängt ist.



Der HTTP-Server funktioniert hervorragend. Ich habe mich entschieden, ADB zu verwenden, um den HTTP-Port für mein PinePhone zu öffnen:



$ adb forward tcp:8080 tcp:80
      
      





Da ADB-weitergeleitete Ports nur an die Loopback-Schnittstelle gebunden sind, habe ich sie manuell für externe Verbindungen geöffnet:



# 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
      
      





Dann konnte ich auf meinen Blog unter zugreifen http://pine:8080/



. Cool!



Performance?



Ich habe die iperf



ADB-Portweiterleitung ausgeführt, um zu sehen, wie viel Leistung ich erhalten habe.



$ 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
      
      





Das sind ungefähr 10 Mbit / s. Nicht großartig, nicht schrecklich.



Das PinePhone selbst ist über USB mit dem Netzwerk verbunden (Hinweis: Damit die USB-Netzwerkverbindung funktioniert, musste ich zwei Komponenten von der Karte entfernen ). Aus Gründen des Interesses bin ich auch iperf



für diese Verbindung gelaufen :



$ 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
      
      





Ich habe mehr erwartet, aber das spielt keine Rolle, da der Engpass darin besteht, dass die Verbindung über ADB umgeleitet wird.



Andere Argumentation



Ich habe mich über die Sicherheit des Modems gewundert. Es stellte sich heraus, dass viele AT-Teams system()



. Ich vermute, dass einige dieser AT-Befehle für die Befehlsinjektion anfällig sind, aber ich habe keine weiteren Untersuchungen durchgeführt. Es spielt keine Rolle, da die ADB-Root-Shell sehr einfach zu implementieren ist.



Auf den ersten Blick scheint dies ein idealer Weg zu sein, um die Ausfallsicherheit von Schadcode sicherzustellen. Mit dem Root-Zugriff auf den Host kann sich bösartiger Code in das Modem einbetten, sodass er die Neuinstallation des Host-Betriebssystems überlebt, die Kommunikation abfängt oder den Standort des Geräts verfolgt. Der Schaden wird teilweise durch die Tatsache gemindert, dass die gesamte Interaktion mit dem Host-Betriebssystem über USB und I2S erfolgt und nur dann, wenn das Host-Betriebssystem dies initiiert, sodass der Schadcode im Modem nicht direkt mit dem Host-Betriebssystem interagieren kann.






Werbung



Epische Server für Hosting-Sites und mehr! Günstiges VDS basierend auf den neuesten AMD EPYC-Prozessoren und NVMe-Speicher von Intel zum Hosten von Projekten jeder Komplexität, von Unternehmensnetzwerken und Spieleprojekten bis hin zu Zielseiten und VPNs. Mit wenigen Klicks können Sie Ihre eigene Serverkonfiguration erstellen!



Abonnieren Sie unseren Chat auf Telegramm .






All Articles