• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

php startet über exec() EXE und waaaaaaaartet endlos

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.834
Ort
Midgard
Okay, das musst du mir jetzt erklären wie wird ausgerechnet in diesem Szenario die Angriffsfläche kleiner indem man mehr Code involviert?

Normalerweise funktioniert es exakt umgekehrt. Beispiel aus der jüngeren Vergangenheit: shellshock, die Lücke war nicht in der Anwendung auf die von außen zugegriffen wurde selbst. Mehr Instanzen die zugegriffen werden können erhöhen das Sicherheitsrisiko außerhalb des Wunschdenkens immer. Außer für Dr. Manhatten natürlich. Aber für uns nicht allwissende Existenzen sollten wir Dinge wohl lieber so einfach wie möglich halten.

Es geht ja schließlich nicht nur um den selbst geschrieben Code sondern auch um die im Hintergrund immer größer werdende Liste an Fremdbibliotheken die man durch sowas massiv erweitert.

Dazu kommt:
Nur Whitelists sind Vertrauenswürdig.
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Ob man das Programm mit ner SQLI oder direkt ausführt, ist wurst. Bin da ausnahmsweise vollkommen bei alter_Bekannter.

Filterfunktion schreiben, fertig. Security by obscurity durch ne SQL-Abstraktion geht nur nach hinten los.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.775
Ort
in der Zukunft
das hat nichts mit Security by obsecurity zu tun sondern mit Rechteteilung.

Der Service der nach Außen geht ist der Webserver.
Dieser Empfängt ja die Anfragen und leitet sie in diesem Falle an ein .php-Script weiter. Somit ist die Betriebsumgebung die Abgesichert werden muss (unabhänging von anderen Diensten am System) die PHP-Umgebung.
Mit Systemnahen Befehlen kann sehr viel Schaden angerichtet werden - je nach php-konfiguration können beliebige Befehle am System ausgeführt werden oder zumindest die im Webroot - wenn nun ganze Serverdienste im Webroot liegen ist das schon schlimm genug.
Da bringt die Whiteliste im Script nicht viel... Wenn der Angreifer es schafft über eine Schwachstelle im php-script eine Datei auf den Server hochzuladen mit eigenem Programmcode.
Daher alle php-funktionen die Systembefehle Ausführen können Global sperren.

Das Modell über die Datenbank - von mir aus könnt ihr auch ein Flatfile nehmen - stellt eine Rechte-Trennung + die Restriktion der Rechte auf das Nötigste dar.
Die Anwendung und die gesamte Laufzeitumgebung auf die von extern zugegriffen werden kann - kann "nur" die .php-scripte ausführen und gehört zusätzlich in das eigene webroot eingesperrt.

Nun sollen aber Dienste am System gestartet werden was somit nun nicht mehr möglich ist. Daher eine Daten-Brücke mit allen benötigten und natürlich validierten benötigten Daten um die Dienste am Server passend zu konfigurieren und zu starten. Der Start passiert dann mit einem eigenen Benutzer mit passenden Rechten - der jedoch nicht mit dem Web-Benutzer in Verbindung steht.

Die Infos müssen vermutlich ja eh irgendwo gespeichert werden - da es eben ja auch den Fall gibt das das 1x gestartete sicher auch mal wieder gestartet werden soll / muss und dafür bietet sich wohl eher ein DBMS an als irgend ein Flatfile.
Insofern die Datenfelder dann auch passend bemessen sind und bei der Eingabe wie beschrieben auf gültigkeit validiert sind (portangaben die der User eingibt in ein int mit passender länge, Gameservername [A-Za-z0-9 ]) und die Daten vom Taskplaner ausgelesen und an die passende Stelle gesetzt werden. können auch keine geheimen Steuerbefehle eingeschleust werden.
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Ich würde sagen, das hängt mit der Anwendungsgröße und dem Umfang zusammen. Geht es wirklich nur darum einen (einzigen) Server zu starten, dann birgt die Datenbank-Lösung sicherlich zusätzliche Gefahren, die nicht durch die gewonnene Sicherheit aufgewogen werden können. Andererseits stimmt es schon, was drfuture sagt: Die Webanwendung sollte keine Möglichkeit haben direkt Systemapplikationen auszuführen. Sollen auf diese Weise zig Server mit unterschiedlichen Konfigurationen gemanaged werden, würde ich ebenfalls zu drfutures Lösung tendieren.

Wenn die Webanwendung Programme ausführen kann, dann birgt das ein potentiell sehr hohes Sicherheitsrisiko. Geschickter ist es, wenn das WebUI nur Anfragen entgegen nimmt und vormerkt. Dabei muss das UI natürlich sicher stellen, dass nur Berechtigte Anfragen stellen können und dass die Anfragen korrekt eingetragen werden. Das heißt ein Nutzermanagement muss her und natürlich muss sich darum gekümmert werden, dass bspw. keine SQL-Injections möglich sind.
Bei einer Sicherheitslücke in dem UI wäre es zwar immer noch möglich, dass diverse manipulierte Anfragen gestellt werden, aber zumindest kann der Angreifer nicht direkt Anwendungen auf dem Server starten.
Ein rein interner Prozess, der sich um die Abarbeitung der Anfragen kümmert, muss sich um den ganzen UI-Quatsch nicht kümmern, sondern nur darum, dass Anwendungen gemanaged werden, so wie es einerseits in den Anfragen gefordert wird, aber andererseits logisch ist. Wenn in den Anfragen steht, es soll ein Webserver auf 80 gestartet werden, dann sollte erkannt werden, dass ein Webserver keine zulässige Anwendung ist und dass Port 80 auch nicht erlaubt ist. Andererseits, wenn in der Datenbank steht, dass 100 Gameserver auf den Ports 23000 - 23099 zu starten sind, dann sollte genau das passieren, soweit Systemressourcen verfügbar sind.

Das Konzept kommt dem MVC Pattern nahe. Das WebUI ist nur ein View und sollte keine Kontrollstruktur für das System realisieren und schon gar nicht sollte sie direkt Änderungen am Model durchführen. Trotzdem muss es natürlich sicherstellen, dass in z.B. ein Zahlenfeld nur Zahlen eingetragen werden können. ;)


Ich weiß nicht, wie es mit Windows-Anwendungen und Docker aussieht, ggf. wäre es ganz interessant den Server als Dockercontainer zu packen und beim Start nur noch die Portbindung umzubiegen.
 
Oben