PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Router Steuerung mit CGI



n0w4it4
07.04.06, 18:48
Vorgeschichte:

Ich arbeite nun schon einige Zeit an meinem persönlichen Router für Zuhause.
Das System basiert auf Slackware und läuft in einer 16 MB Ramdisk und stellt für mein LAN das I-Net samt Firewall zur Verfügung. Die gesamte Konfiguration verbraucht im Moment 8MB und wird per CD gebootet. => Funktioniert auch bestens.:D

Der nächste Schritt bestand darin den Router per WEB Interface steuern zu können. Das Grundgerüst bestehend aus Webserver (AppWeb + PHP5,CGI,EGI,SSL, etc.) und Interface Design steht schon seit geraumer Zeit. Nun dachte ich mir den Router mit cgi Scripts zu setuern, inkl. PERL. Wie ich leider heute feststellen musste ist PERL viel zu groß (32MB):ugly:

Dann hab ich herausgefunden, dass man bash scripts sehr easy per cgi ausführen kann. Da kam es mir aber Übel hoch nachdem ich mir überlegt habe wie einfach es wird massive Sicherheitslücken einzubauen. CGI - BASH ist das eine (sehr) gefährliche COMBO ? Ist das per Prinzip so?

Was soll gesteuert werden können:
Iptables
iproute2
passwd
crond
etc.


Kann ich mir gleich ein neues Konzept suchen oder gibt es Möglichkeiten das ganze abzusichern ?

suck
07.04.06, 19:07
Evtl. ist "webmin" was du suchst - aber frag mich nicht, wie gross das ist und was es für Abhängigkeiten hat.

Wenn du nur vom internen Netz aus auf den Router zugreiffen möchtest, würde ich ihn via Firewall so absichern, dass ein Zugriff von aussen nicht möglich ist. Man könnte auch nen Webserver auf einem Nicht-standard-Port betreiben und nur diesen Absichern, wenn du noch andere "Webseiten" hast, die du der Aussenwelt zur Verfügung stellen möchtest.

Am Sichersten ist es natürlich den Router via ssh zu administrieren. Auch in diesem Fall ist zu überlegen, ob ein externen Zugriff notwendig ist. Auch eine Kombo ist denkbar. ssh nach aussen, Webserver nach innen..

Die kleinste und einfachste Möglichkeit ist es telnet für das lokale Netz zu nutzen und damit zu administrieren. Wenn du sicher bist, dass aus deinem LAN keiner Unsin macht, ist das zu überlegen. Ansonsten ist telnet natürlich extrem unsicher.

n0w4it4
07.04.06, 19:18
SSH und Telnet kommen prinzipiell nicht auf das System drauf.
Von Außen ist das Sys ebenfalls prinzipiell nicht bedienbar.
Ich möchte in einer weiteren Ausbaustufe soweit gehen, dass man sich am Router selbst nicht mehr einloggen kann, sprich keine Bash mehr für root.

Stellt euch das ganze Interface vor wie bei einem Netgear Router, nur schöner und Umfangreicher.

Meine Fragen richten sich auch hauptsächlich auf CGI in Kombination mit SH.

suck
07.04.06, 19:28
Von deiner Idee ist mehr als Abzuraten!

1) Der cgi/webserver Krams ist 10 mal unsicherer als ssh
2) Sich grundlos die Möglichkeit des lokalen und entfernten Logins aus dem eigenen Netz zu nehmen ist sinnfrei

Ansonsten ist das natürlich ne hübsche Idee sich nen einfaches für jeden Bedienbares Interface zu schaffen.

"webmin" ist übrigens genau so ein Interface, wie du es suchst.. Nur ist es evtl. schon zu umfangreich. (das wäre dann die übernächste Ausbaustufe)

n0w4it4
07.04.06, 19:40
SSH ist schön und gut, aber ich benötige es nicht, genauso wenig benötige ich einen Shell Zugang für den Router. Der Router kann auch nichts, außer seine Aufgaben erledigen, mehr SOLL er auch nicht können. Daher kein SSH, TELNET, nmap, smb oder auch nur ein chmod, oder chgrp. Ich brauchs nicht.

Ich gehe davon aus: Wenn der Router manipuliert wird / eingebrochen wird kann der/die Hacker(in) damit nichts anfangen, da nichts wichtiges oder brauchbares auf der Maschine liegt.

Das Webinterface muss so sicher sein wie nur irgendwie möglich, das ist klar, deshalb stell ich ja auch die Frage bezügl. CGI.

suck
07.04.06, 19:46
Ohne Shell (z.B. bash) startet der Rechner erst gar nicht und funktionieren kann er so keinesfalls - kein Script (auch keine Startscripte) funktionieren. Des weiteren stellt sich die Frage, was du ohne Zugriff bei einem Defekt oder Stromausfall anstellen möchtest.

Jetzt magst du evtl. auf die Idee kommen alle User zu löschen. Das geht auch nicht, da jeder einzelne Prozess wem gehören müssen. "init" z.B. rennt auf jeder (!) Linuxmaschine und muss als User root laufen.

Edit: Mir fällt grad ein, dass du den "getty" nicht starten brauchst (/etc/inittab bearbeiten). So kannst du dich dann wirklich nicht mehr einloggen und hast trotzdem den User root und ne Shell. Trotzdem rate ich dir davon ab!

n0w4it4
07.04.06, 19:52
Vielleicht habe ich mich falsch ausgedrückt: Es soll keinen grafischen Login geben. Im Moment verwende ich noch "sulogin", sollte das Interface funktionieren brauch ichs nicht mehr. Infolge soll der Router ohne Grafikkarte funktionieren können, wie ich das anstelle weis ich noch nicht.

Stromausfall: Kein Problem denn das Netz ist dann sowiso down (MODEM), CD rein, booten und per WEB-Interface :) Einstellungen uploaden. FERTIG

So stell ichs mir vor.

suck
07.04.06, 20:05
Eigentlich brauchst du keine Grafikarte, ob dein BIOS ohne Grafikkarte startet und nicht nur Piepst ist unwahrscheinlich. Grafischer Login is eh Unsinn. Das gesamt X11 ist Unsinn.

Na ja, viel Spass noch bei deinem Projekt..

n0w4it4
07.04.06, 20:17
Also bezüglich CGI kannst du mir keine Tips geben ? Oder findest du das ganze Vorhaben unsinnig, hört sich so an!

suck
07.04.06, 20:28
Ja doch... ups

Ob bash oder Perl ist fast egal. In beiden Fällen bekommt der Angreifer, in sofern er denn erfolgreich ist, Zugriff auf Alles worauf der User, der die Scripts ausführt, auch Zugriff hat!

Die Frage ist also eher, ob man mit der bash oder mit Perl mehr anstellen kann. Im Zweifel würd ich sogar behaupten, dass der Angreiffer mit Perl mehr anstellen kann, da es viel mächtiger ist und du viel mehr installieren musst, was gegen dich eingesetzt werden kann..

EDIT: Ach, ich find die Idee an sich gut, nur bei der fehlenden Login-Möglichkeit bin ich nicht ansatzweise deiner Meinung. Wenn es die GPL nicht gäbe, und wir die Zeil mal ein paar Jahre zurückdrehen, hätte man mit sowas sogar Geld machen könnnen.

EDIT2: Ich hab dich nicht ausreichend informiert: Perl kann selbstverständlich auch selbst die Shell aufrufen und hat folglich alle Fähigkeiten der bash plus alle Fähigkeiten, die Perl hat!

n0w4it4
07.04.06, 20:52
Dann erklär mir warum ich die Login Möglichkeit brauche ? Ich frage deshalb weil es mich wirklich interessiert. Ich möchte ja auch Fehler (Konzeptioneller Art) aufdecken bzw. Denk-Fehler finden.

Z.B: Mein Netgear (WG irgendwas) hat auch nur einen http Zugang. Ich kann eigentlich alles Einstellen was ich brauche, per Interface, daher auch kein SSH.

Bei meinem Projekt sollts genauso sein.

Was für cgi in Kombination mit bash spricht ist, dass ich mich mit perl nüsse auskenn. Mit Bash würd ich wesentlich weiter kommen, nur habe ich noch nie Sicherheits optimierte Skripts geschrieben die solch wichtige Aufgaben zu erfüllen haben. Ich find im Netz auch kein gescheits Tutorial welches sich explizit mit CGI - BASH - Sicherheit auseinander setzt.

suck
07.04.06, 21:08
Ich würde einen Login an der Konsole und via ssh ermöglichen, da es der Fehleranalyse sehr dienlich ist. Wenn etwas unerwartetes auftritt, was man nie ausschliessen kann, ist es mit Login möglich, der Ursache auf den Grund zu gehen und ein weiteres aufkommen des Fehlers zu unterbinden - ohne nicht. Wenn ein Angreifer in dein System eindringt und Unsinn anstellt, bist du genötigt neuzustarten und verwischst damit alle Spuren, die Dir helfen könnten einen neuen Einbruch zu verhindern bzw. die Ursache festzustellen. Des weiteren, und das ist mein Hauptgrund, finde ich es einfach nur praktisch, an alle Informationen ranzukommen und nicht nur an die, welche das Webinterface bietet. Man denkt ja meist doch nicht an alles. In der Shell ist man einfach viel näher am Geschehen - ich wollte nie auf sie verzichten.

Wenn du deine Idee wie gewollt umsetzt, hast du tatsächlich etwas, was man mit andernen Routern vergleichen kann. Deine Lösung wird sicherlich genauso gut sein - kein Zweifel. Die Frage ist ob du auf zusätzliche Möglichkeiten, die dir dein Netgear Router nicht bietet, verzichten willst.

Wie genau man sicherheitsoptimiert scriptet und programmiert weiss ich leider auch (noch) nicht wirklich gut.

suck
07.04.06, 21:19
Ach ja, schau dir das mal an (ist technisch sehr anspruchsvoll):

http://www.linuxfromscratch.org/hlfs/

Zitat:What can I do with my HLFS system? This book will initially be geared towards building production-quality servers, routers, and firewalls.

d1keue
09.04.06, 09:09
Hallo N0W4IT4,

So ganz genau kann ich mir noch nicht vorstellen was Du benötigst.
Aber, vieleicht ist das FLI4L Projekt die richtige Lösung für Dich.

http://de.wikipedia.org/wiki/Fli4l

Ich habe über einen Zeitraum von 5 Jahren mit einem 'FLI4L' - Router gearbeitet.
Die benötigte Hardware Voraussetzung war simpel. Der Router konnte über SSH oder Webbrowser (CGI-Scripts) administriert werden. Auf dem Router lief eine Firewall, ein DNS-Forwarding und DHCP. Außerdem wurde bei jedem Verbindungsaufbau eine DYNDNS Registrierung durchgeführt. Alle diese Features sind optional, sodass die eigenen Wünsche bzw. Vorlieben verwirklicht werden können.

Ich gebe Dir Recht, wenn Du sagst daß auf einem Router nur das laufen soll, was für die Funktion als Router unbedingt nötig ist. Das war auch bei mir der Grund für den Einsatz von FLI4L.

n0w4it4
09.04.06, 11:29
Wenn ich eine fertige Software einsetzen wollte, hätt ich das schon getan :)
Hab mit Fli4l auch schon Erfahrungen gesammelt, mit Fli4l hat auch das Linux Fieber begonnen.

Als kleiner Zwischenbericht: Die ersten Basis CGI Skripts funktionieren schon inkl. CSS. Sieht geil aus und funktioniert tadellos. Im Moment schreibe ich aber nur Skripts die mir Informationen über das System geben: IP Adressen, CPU Type, offene Verbindungen, etc.

psy
10.04.06, 21:38
eija immer her damit... brauchst uns das nicht vorenthalten :)

n0w4it4
11.04.06, 14:42
Tja also, das ich das irgendwann herzeigen werde ist ja klar :)
Aber das wird noch ein wenig dauern. Gestern erst hab ich mir: "Shell-Programmierung. Das umfassende Handbuch" geordert, damit werde ich sicher schneller weiter kommen.