Hospedagem de blog em modem GPS / LTE

imagem


Modem PinePhone GPS / WWAN / LTE



Ao desenvolver software no PinePhone, me deparei com uma mensagem curiosa em dmesg



:



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





Por contexto, direi que o PinePhone possui um modem Quectel EG25-G que é responsável pela comunicação GPS e wireless do PinePhone. Este hardware é um dos poucos componentes do telefone de fonte fechada .



Quando vi essa mensagem e a menção ao ADB, pensei imediatamente no Android Debug Bridge, ou seja, o software comumente usado para se comunicar com dispositivos Android. Eu pensei: "Claro, este não pode ser o mesmo ADB." Bem, acontece que é.



Esta mensagem está relacionada a um artigo que detalha esse modem. Ele também está associado a um utilitário de desbloqueio que imprime comandos AT para proteger o adbd



modem.



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





Eles podem ser enviados para o modem usando screen



:



# screen /dev/ttyUSB2 115200
      
      





Por algum motivo, minha entrada não estava retornando nenhum dado, mas a sessão de tela retornou “OK” duas vezes, indicando que os comandos foram concluídos com sucesso.



Após configurar as regras udev



e adb



na minha "máquina host", ou seja, no PinePhone, o modem passou a produzir uma saída para a adb devices



qual eu poderia enviar para o shell:



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

$ adb shell
/ #
      
      





Como adbd



estava executando como root, canalizei a saída para o shell do root. Excelente.



Acontece que o modem roda seu próprio sistema operacional, completamente independente do resto do sistema operacional da PinePhone. Com as atualizações mais recentes, ele executa o Linux 3.18.44.



Iniciando o servidor web



Por algum motivo, achei que seria divertido publicar meu blog neste dispositivo. Como estamos trabalhando com recursos limitados (cerca de 48 MB de armazenamento e a mesma quantidade de memória) e meu blog consiste apenas em páginas estáticas, decidi que algo como nginx (não importa o quão leve) seria um desperdício de recursos para meu propósito ...



Pareceu-me que o darkhttpd atendeu bem aos meus requisitos . Binário único, sem dependências externas, apenas executa solicitações GET e HEAD. Idealmente.



Usei o conjunto de ferramentas armv7l -linux-musleabihf-cross para compilar este servidor para ARMv7 e vinculá-lo estaticamente ao musl. Com ajuda adb push



Consegui facilmente transferir o arquivo binário e os recursos do meu site para a pasta do /usrdata



modem, na qual uma partição de 50 MB é montada com capacidade de gravação.



O servidor HTTP funciona muito bem. Decidi usar ADB para abrir a porta HTTP do meu PinePhone:



$ adb forward tcp:8080 tcp:80
      
      





Como as portas encaminhadas por ADB são vinculadas apenas à interface de loopback, eu as abri manualmente para conexões 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
      
      





Depois, consegui acessar meu blog em http://pine:8080/



. Frio!



Desempenho?



Corri iperf



o encaminhamento de porta ADB para ver quanto de desempenho que eu estava ficando.



$ 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
      
      





Isso é cerca de 10 Mbps. Não é ótimo, não é terrível.



O próprio PinePhone é conectado à rede via USB (nota: para a conexão de rede USB funcionar, tive que remover dois componentes da placa ). Por uma questão de interesse, também busquei iperf



esta conexão:



$ 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
      
      





Eu esperava mais, mas isso realmente não importa porque o gargalo é a conexão sendo redirecionada por meio do ADB.



Outro raciocínio



Gostaria de saber sobre a segurança do modem. Descobriu-se que muitas equipes AT system()



. Suspeito que alguns desses comandos AT podem ser vulneráveis ​​à injeção de comandos, mas não fiz mais pesquisas. Isso realmente não importa, já que o shell de root do ADB é muito fácil de implementar.



À primeira vista, essa parece ser a maneira ideal de garantir a resiliência do código malicioso. Com o acesso root ao host, o código malicioso pode se embutir no modem, permitindo que ele sobreviva à reinstalação do sistema operacional do host, intercepte comunicações ou rastreie a localização do dispositivo. O dano é parcialmente mitigado pelo fato de que toda interação com o SO host é feita via USB e I2S, e apenas quando o SO host a inicia, de forma que o código malicioso no modem não será capaz de interagir diretamente com o SO host.






Propaganda



Servidores épicos para hospedagem de sites e muito mais! VDS barato baseado nos mais recentes processadores AMD EPYC e armazenamento NVMe da Intel para projetos de hospedagem de qualquer complexidade, de redes corporativas e projetos de jogos a páginas de destino e VPNs. Você pode criar sua própria configuração de servidor com alguns cliques!



Inscreva-se no nosso chat no Telegram .






All Articles