Remote reverse ssh shell på OpenWRT og lignende
Lars Sommer, [email protected]
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 [email protected] -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.
- - - - - - = = = = = = - - - - - -