Alojamiento de blogs en módem GPS / LTE

imagen


Módem PinePhone GPS / WWAN / LTE



Mientras desarrollaba software en PinePhone, encontré un mensaje curioso en dmesg



:



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





Para el contexto, diré que el PinePhone tiene un módem Quectel EG25-G que se encarga del GPS y la comunicación inalámbrica del PinePhone. Este hardware es uno de los pocos componentes telefónicos de código cerrado .



Cuando vi este mensaje y la mención de ADB, inmediatamente pensé en Android Debug Bridge, es decir, el software que se usa comúnmente para comunicarse con dispositivos Android. Pensé: "Por supuesto, este no puede ser el mismo ADB". Bueno, resulta que lo es.



Este mensaje está relacionado con un artículo que detalla este módem. También está asociado con una utilidad de desbloqueo que imprime comandos AT para asegurar el adbd



módem.



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





Se pueden enviar al módem mediante screen



:



# screen /dev/ttyUSB2 115200
      
      





Por alguna razón, mi entrada no devolvía ningún dato, pero la sesión de pantalla devolvió "OK" dos veces, lo que indica que completó los comandos correctamente.



Después de configurar las reglas udev



y adb



en mi "máquina host", es decir, en el PinePhone, el módem comenzó a producir una salida para la adb devices



que podía enviar al shell:



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

$ adb shell
/ #
      
      





Como adbd



estaba ejecutando como root, canalicé la salida al shell de root. Excelente.



Resultó que el módem ejecuta su propio sistema operativo, completamente independiente del resto del sistema operativo PinePhone. Con las últimas actualizaciones, ejecuta Linux 3.18.44.



Lanzamiento del servidor web



Por alguna razón, pensé que sería divertido ejecutar mi blog en este dispositivo. Como estamos trabajando con recursos limitados (alrededor de 48 MB de almacenamiento y la misma cantidad de memoria), y mi blog consta solo de páginas estáticas, decidí que algo como nginx (sin importar cuán liviano sea) sería una pérdida de recursos para mi propósito. ...



Me pareció que darkhttpd cumplía bien con mis requisitos . Binario único, sin dependencias externas, solo ejecuta solicitudes GET y HEAD. Idealmente.



Usé la cadena de herramientas armv7l -linux-musleabihf-cross para compilar este servidor para ARMv7 y lo vinculé estáticamente con musl. Con ayuda adb push



Logré fácilmente transferir el archivo binario y los recursos de mi sitio a la carpeta del /usrdata



módem, en la que se monta una partición de 50 MB con la capacidad de escribir.



El servidor HTTP funciona muy bien. Decidí usar ADB para abrir el puerto HTTP para mi PinePhone:



$ adb forward tcp:8080 tcp:80
      
      





Dado que los puertos reenviados por ADB están vinculados solo a la interfaz de loopback, lo abrí manualmente para conexiones externas:



# 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
      
      





Luego pude acceder a mi blog en http://pine:8080/



. ¡Fresco!



¿Actuación?



Me encontré con iperf



el reenvío de puertos ADB para ver cuánto rendimiento que estaba recibiendo.



$ 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
      
      





Eso es aproximadamente 10 Mbps. No genial, no terrible.



El propio PinePhone está conectado a la red a través de USB (nota: para que la conexión de red USB funcione, tuve que quitar dos componentes de la placa ). Por el bien del interés, también busqué iperf



esta conexión:



$ 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
      
      





Esperaba más, pero realmente no importa porque el cuello de botella es la conexión que se redirige a través de ADB.



Otro razonamiento



Me pregunté sobre la seguridad del módem. Resultó que muchos equipos de AT system()



. Sospecho que algunos de estos comandos AT pueden ser vulnerables a la inyección de comandos, pero no he investigado más. Realmente no importa, ya que el shell raíz de ADB es muy fácil de implementar.



A primera vista, esta parece una forma ideal de garantizar la resistencia del código malicioso. Con acceso de root al host, el código malicioso puede incrustarse en el módem, lo que le permite sobrevivir a la reinstalación del sistema operativo del host, interceptar las comunicaciones o rastrear la ubicación del dispositivo. El daño se mitiga parcialmente por el hecho de que toda la interacción con el sistema operativo host se realiza a través de USB e I2S, y solo cuando el sistema operativo host lo inicia, por lo que el código malicioso en el módem no podrá interactuar directamente con el sistema operativo host.






Publicidad



¡Servidores épicos para alojar sitios y más! VDS económicos basados ​​en los últimos procesadores AMD EPYC y almacenamiento NVMe de Intel para alojar proyectos de cualquier complejidad, desde redes corporativas y proyectos de juegos hasta páginas de destino y VPN. ¡Puede crear su propia configuración de servidor en un par de clics!



Suscríbete a nuestro chat en Telegram .






All Articles