Computer

Remote reverse ssh shell på OpenWRT og lignende

Remote reverse ssh shell på OpenWRT og lignende
Lars Sommer, lasg@lasg.dk
2007-07-12, v.1.0, beerware

Disclaimer:
Alt i denne artikel er dit eget ansvar. Alt hvad du bruger denne viden til, er
 dit eget ansvar. Indholdet af denne artikel kan misbruges til ulovlig
 overvågning af andres privatliv, samt misbrug af deres internetforbindelser. 
Sker dette, er det udelukkende dit eget ansvar.

Artiklen her er ikke færdig. Dette er en tidlig version, der kun bringer det
 eneste nødvendige for at komme igang. Efterhånden som jeg kommer videre med
 det, udbygges den sikkert. Hvis DU finder glæde i den, og bygger mere på, må
 du meget gerne sende feedback, foreslag, kritik og andet til mig.


Abstract:
Artiklen beskriver hvorledes der kan oprettes fjernadgang til små routere med
 OpenWRT og lignende, via internettet. Disse forbindelser gøres reversed,
 således NAT, firewalls og andet også omgåes. Der gives herefter bud og ideer
 på viderudvikling og sikring af sådanne opsætninger.


Formål:
Formålet med denne artikel er at opsætte shelladgang via SSH, på trådløse
 routere der kører OpenWRT eller lignende. Dette er anvendeligt, hvis man
 opsætter routere eller trådløst net for andre, og ønsker at beholde en
 shell-adgang ind til dem. Denne adgang kan f.eks. være for at kunne yde dem
 support, men kan naturligvis udnyttes til alverdens formål, som den enkelte
 selv må vurdere etikken i.
Hvis routeren sættes direkte på en internetforbindelse med statisk offentlig IP,
 er det nemmest bare at forbinde direkte ind, men så snart IP'en er dynamisk,
 eller routeren sidder bag NAT, firewalls eller lignende, begynder problemerne
 med at kunne forbinde. Derfor er det smart at lade shell-adgangen være reversed
, således det er routeren der forbinder ud til ens remote kontrolmaskine.


Minimalkonfiguration:
I det følgende antages at der allerede eksisterer en router med OpenWRT eller
 tilsvarende. Der er mange gode vejledninger i installation og opsætning af
 OpenWRT på deres egen hjemmeside, så dette beskrives ikke her.

I OpenWRT følger Dropbear med til SSH. Denne er en lille simpel
 SSH-implementation, der ikke har alle features, bl.a. muligheden for reverse
 connections. Derfor installeres den rigtige OpenSSH klient med:
ipkg install openssh-client -force-overwrite

En nøgle skal genereres, så der kan forbindes uden indtastning af kode. 
Da der ikke er en ssh-keygen på OpenWRT, sker dette på en PC:
ssh-keygen, efterfulgt af et par tast på enter. Husk IKKE at angive en passphrase.

Filerne id_rsa og id_rsa.pub kopieres over på OpenWRT i ~/.ssh, og filen
 id_rsa.pub kopieres til ~/.ssh/authorized_keys på den maskine OpenWRT skal
 forbinde op mod.

Filen known_hosts eksisterer ikke i starten. Så den skal enten laves automatisk
 ved der manuelt tastes "yes" ved første connection, eller skrives manuelt.

Herefter kan forbindelsen initieres fra OpenWRT med kommandoen:
ssh -NR <portnummer>:localhost:22 <remote username>@<remote addr> -i .ssh/id_rsa
Eksempelvis:
ssh -NR 1337:localhost:42 remotesshshell4@remotecontroldomain.tld -i .ssh/id_rsa

Og fra kontrol-PC'en kan forbindelsen tilgåes med:
ssh root@localhost -p 1337

SSH-forbindelsen forbliver aktiv, selv når kontrol-PC'en afbryder ovenstående
 kommando. Kommandoen på OpenWRT'en kan f.eks. scriptes til at starte automatisk
 efter boot.

Kontrol-PC'en kan sagtens modtage forbindelser fra flere OpenWRT'er, bare med
 hvert sit portnummer. 


AutoSSH:
Programpakken "autossh" til OpenWRT overvåger aktive SSH-forbindelser, og
 genopretter dem, hvis de dør. Denne er oplagt til at overvåge forbindelserne.
Programmet installeres med:
ipkg install autossh
Og bruges herefter ved at sætte "autossh" ind foran ssh-kommandoen på OpenWRT'en


Flere kontrol-PC'er:
Det vil være attraktivt at have flere kontrol-PC'er, på forskellige adresser,
 hvis nogle en dag går tabt. Det kan enten blot være flere ssh-forbindelser fra
 OpenWRT'en, eller en liste over forskellige adresser, der prøves igennem, hvis
 nogle ikke svarer.


Remote konfiguration:
Hvis noget går galt, og forbindelsen til en remote shell mistes, vil det være
 smart hvis OpenWRT'en selv går ind og tjekker efter en konfiguration via http
 eller lignende, engang i mellem. Dette bør indeholde en form for login eller
 anden auth, således fremmede ikke kan aflæse eller påvirke konfigurationen.


Andet til egen sikkerhed:
Det kan være relevant at skjule sine remote shell scripts og PID's, ved at ændre
 på kommandoer som ls, ps, netstat og lignende på OpenWRT'en. 
Ligeledes kan det være relevant at have et selvdestruktionsscript, der enten
 fjerner alle spor af ens remote shell, eller blot bricker hele routeren,
 hvis nødvendigt.


		      - - - - - - = = = = = = - - - - - -

Leave a Reply

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *