Christian Wermelinger: Zugriff auf lokales Dateisystem

Hallo zusammen

Ich muss einen einfachen Webserver Scanner entwickeln, welcher Webserver (Apache oder IIS) auf Schwachstellen überprüft. Das Programm muss webbasiert laufen und soll im Hintergrund auf eine Datenbank mit bekannten Schwachstellen zurückgreifen können.

D.h. eine Firma muss von irgend einem Rechner aus auf die Webserver Scanner Software zugreifen können und damit ihren Webserver scannen können. Der Webserver wird sich nicht zwingendermassen auf der Maschine des Clients befinden, welcher die Software startet bzw. sich in den webbasierten Webserver Scanner einloggt. Natürlich kann das Programm nur von Personen gestartet werden, die über die erforderlichen Zugangsdaten verfügen. Jeder eingeloggte User kann dann auch nur die IP seines Webscanners scannen welche in einer Datenbank hinterlegt ist. So kann vermieden werden dass das Programm als Hackertool eingesetzt wird.

Um zum Beispiel die Konfiguration eines Apache Servers auszulesen, müsste ich also Zugriff auf dessen Konfigurationsdatei (httpd.conf) haben. Dies stelle ich mir nicht so einfach vor. Die ActiveX-Technologie kann ich soviel mir bekannt ist aus folgenden Gründen nicht einsetzen:

  • Der Client welcher den webbasierten Webserver Schachstellen Scanner aufruft muss nicht zwingend der zu scannende Ziel-Rechner sein bzw. den zu analysierenden Webserver beinhalten.
  • Ich vermute das ActiveX nur den Zugriff auf Windows-Systeme erlaubt. Oder liege ich da falsch?

Habe auch schon über SSH (Secure Shell) nachgedacht. Doch das scheint auch nicht möglich zu sein da der zu analysierende Webserver ja nicht zwingend Shell Zugriff erlauben muss bzw. dafür konfiguriert sein müsste. Dies kann natürlich nicht vorausgesetzt werden.

Was für alternative Technologien gibt es? Hat mir jemand einen guten Ratschlag oder eine Idee wie ich da vorgehen könnte? Natürlich sollte ich zumindest das verwende Betriebsystem und die verwendete Webserver Version auslesen können um zu überprüfen ob z.B. der Webserver auf dem aktuellsten Stand ist.

Für jeden Ratschlag bin ich äusserst dankbar!

Gruss
Christian

  1. Hello,

    die Aufgabenstellung sit sicher geeignet, dass Du dir nach und nach die Kenntnisse aneignest, die dir jetzt noch zu fehlen scheinen. Dabei wirst Du hier bestimmt die eine oder andere Hilfe bekommen.

    Tipps für Tools wirst Du sicher beim momentanen Kenntnisstand von niemanden bekommen hier - jedenfalls von mir nicht.

    Aber fangen wir doch vorne an:

    • Lerne C und C++
    • beschäftige dich mit den unterschiedlichen Konzepten der OS
        Windows
        Linux
    • übe Dateifunktionen und Netzwerkfunktionalitäten

    dann sehen wir weiter ;-)

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Moin!

    Ich muss einen einfachen Webserver Scanner entwickeln, welcher Webserver (Apache oder IIS) auf Schwachstellen überprüft. Das Programm muss webbasiert laufen und soll im Hintergrund auf eine Datenbank mit bekannten Schwachstellen zurückgreifen können.

    Du meinst, du willst "Nessus" neuimplementieren? Da hast du dir ja ganz schön was vorgenommen. Meinst du nicht, es wäre einfacher, einfach an Nessus anzudocken?

    Um zum Beispiel die Konfiguration eines Apache Servers auszulesen, müsste ich also Zugriff auf dessen Konfigurationsdatei (httpd.conf) haben. Dies stelle ich mir nicht so einfach vor.

    Korrekt. Denn es ist Kern jeder Sicherheitsstrategie, dass Außenstehende auf Konfigurationsdaten keinen Zugriff haben sollen - andernfalls wäre das eine zu bemängelnde Schwachstelle.

    Andererseits: Was steht denn interessantes in der Config drin, was man nicht durch Online-Testen des Webservers auch herausfinden kann? Die Versionsnummer beispielsweise steht nicht drin.

    Die ActiveX-Technologie kann ich soviel mir bekannt ist aus folgenden Gründen nicht einsetzen:

    • Der Client welcher den webbasierten Webserver Schachstellen Scanner aufruft muss nicht zwingend der zu scannende Ziel-Rechner sein bzw. den zu analysierenden Webserver beinhalten.

    Richtig! Auf Webservern surft man nicht.

    • Ich vermute das ActiveX nur den Zugriff auf Windows-Systeme erlaubt. Oder liege ich da falsch?

    Ebenfalls richtig! Auf allem anderen Betriebssystemen als Windows und mit allen anderen Browsern als dem IE steht ActiveX nicht zur Verfügung.

    Habe auch schon über SSH (Secure Shell) nachgedacht. Doch das scheint auch nicht möglich zu sein da der zu analysierende Webserver ja nicht zwingend Shell Zugriff erlauben muss bzw. dafür konfiguriert sein müsste. Dies kann natürlich nicht vorausgesetzt werden.

    Insbesondere hilft dir ein Shellzugang ja auch nicht weiter - oder wäre wieder einmal eine heftige Sicherheitslücke für das System.

    Wobei wir zuerst zu der Frage kommen: Warum sollte jemand dir vertrauen? Wer ist so blöde und gibt dir außer der öffentlich für alle erreichbaren URL noch weitergehende Zugangsdaten für SEIN System?

    Was für alternative Technologien gibt es? Hat mir jemand einen guten Ratschlag oder eine Idee wie ich da vorgehen könnte? Natürlich sollte ich zumindest das verwende Betriebsystem und die verwendete Webserver Version auslesen können um zu überprüfen ob z.B. der Webserver auf dem aktuellsten Stand ist.

    Die Tatsache, dass auf einem System NICHT die neueste Version eingesetzt wird, bedeutet nicht, dass das System angreifbar ist. Einem Update wird üblicherweise die folgende Überlegung vorausgehen:
    1. Werden sicherheitsrelevante Bugs geschlossen?
    2. Werden andere relevante Bugs für die verwendete Plattform geschlossen?
    3. Ändert sich das Verhalten der Software gegenüber anderen Anwendungen, die diese benutzen? Was müßte deshalb noch alles aktualisiert werden?
    4. Bedeutet das Update größere Umstellungsarbeiten?
    5. Bringt es erwünschte neue Features?

    Anhand dieser Überlegungen ist jeweils abzuwägen.

    - Sven Rautenberg

    1. Hallo Sven

      Erst einmal vielen Dank für die konstruktive Antwort! In diesem Zusammenhang sind bei mir weitere Fragen aufgetaucht:

      Du meinst, du willst "Nessus" neuimplementieren? Da hast du dir ja ganz schön was vorgenommen. Meinst du nicht, es wäre einfacher, einfach an Nessus anzudocken?

      Nessus wäre schon nen guter Ansatz. Wobei der Funktionsumfang eigentlich viel zu gross ist. Zudem ist Nessus eine Client-Server Lösung. Oder wird client-seitig nur das Interface zur Verfügung gestellt und sämtliche Scan-Operationen durch den Server ausgeführt? Nessus käme für mich in Frage wenn es möglich wäre auf den Client zu verzichten und stattdessen ein Webinterface dafür zu schreiben. Zudem sollten nur die Module verwendet werden die ich auch wirklich benötige. Weist du darüber vielleicht detailierter Bescheid?

      Andererseits: Was steht denn interessantes in der Config drin, was man nicht durch Online-Testen des Webservers auch herausfinden kann? Die Versionsnummer beispielsweise steht nicht drin.

      Den Gedanken mit der Config habe ich mir gemacht da gewisse Einstellungen des Servers nicht sehr vorteilhaft sind. Wenn man Zugriff auf die Config hätte könnte man relative einfachen überprüfen wie der Server konfiguriert wurde, welche Module installiert sind etc. Auf der anderen Seite bin ich mir schon bewusst dass ein Remote-Zugriff auf die Config natürlich auch grosses Sicherheitsloch darstellen kann. Du schreibst von Online-Testen des Webservers. Wie stelle ich das denn genau an? Komme ich wirklich an all die Informationen wie offene Ports, Server-Version, Inhalt des öffentlich zugänglichen Verzeichnisses (htdocs) etc.? Habe im Moment keine Idee wie ich das anstellen sollte. Wenn z.B. auf dem Server ein CGI-Script abläuft kann ich ja sehr viele Umgebungsvariablen auslesen. Doch habe ich darauf auch Zugriff wenn ich 'von aussen' komme? Eher nicht, oder?

      Wobei wir zuerst zu der Frage kommen: Warum sollte jemand dir vertrauen? Wer ist so blöde und gibt dir außer der öffentlich für alle erreichbaren URL noch weitergehende Zugangsdaten für SEIN System?

      Vertrauen ist so eine Sache da muss ich dir Recht geben. Zudem kann es durchaus möglich sein, dass die Benutzer nicht einmal über die Zugangsdaten verfügen. Ich verwerfe den Gedanken, mir irgendwie Vollzugriff auf das System zu verschaffen wohl definitiv und beschränke mich auf das Scannen 'von aussen', wenn ich dann endlich einen Ansatz gefunden habe wie ich das realisieren könnte.

      Bin weiterhin für jede Hilfestellung äusserst dankbar!

      Gruss
      Chris

      1. hi,

        wir sind uns also schon mal einig, dass eine von aussen zugängliche konfigurationsdatei des server seiner sicherheit nicht zuträglich wäre, sondern vermutlich eher das gegenteil.

        Du schreibst von Online-Testen des Webservers. Wie stelle ich das denn genau an? Komme ich wirklich an all die Informationen wie offene Ports, Server-Version, Inhalt des öffentlich zugänglichen Verzeichnisses (htdocs) etc.? Habe im Moment keine Idee wie ich das anstellen sollte. Wenn z.B. auf dem Server ein CGI-Script abläuft kann ich ja sehr viele Umgebungsvariablen auslesen. Doch habe ich darauf auch Zugriff wenn ich 'von aussen' komme? Eher nicht, oder?

        sieh es doch mal so: alles, worauf _du_ von _aussen_ keinen zugriff hast, könnte man als relativ sicher bezeichnen.
        _wenn_ du zugriff darauf hättest, wäre es weniger sicher.

        also ist es doch im sinne dessen, was du überprüfen möchtest - eben die sicherheit - ein _gutes_ zeichen, wenn du eben _nicht_ von aussen auf gewisse dinge zugreifen kannst.

        ein sicherheitsscanner, der darauf basiert, dass er es doch kann, ist also schon vom konzept her fehlerhaft - unsicherheit vorauszusetzen, um die sicherheit überprüfen zu können, ist doch paradox.

        gruss,
        wahsaga

        --
        http://wazgnuks.net/ - back from the dead
      2. Moin!

        Nessus wäre schon nen guter Ansatz. Wobei der Funktionsumfang eigentlich viel zu gross ist.

        Was heißt hier "zu groß"? Nessus prüft alles, was es über einen oder mehrere Hosts so in Erfahrung zu bringen gibt - und nur das ist für eine komplette Sicherheitsbewertung relevant. Was nützt es, wenn der HTTP-Dienst sicher ist, aber man über Telnet einbrechen kann?

        Zudem ist Nessus eine Client-Server Lösung. Oder wird client-seitig nur das Interface zur Verfügung gestellt und sämtliche Scan-Operationen durch den Server ausgeführt?

        Nessus basiert auf dem Server, welcher Scan-Operationen durchführt, und dazu passenden Clients, die das ganze überwachen.

        Nessus käme für mich in Frage wenn es möglich wäre auf den Client zu verzichten und stattdessen ein Webinterface dafür zu schreiben.

        Google hilft. Stichwort: "Nessus web interface".

        Zudem sollten nur die Module verwendet werden die ich auch wirklich benötige. Weist du darüber vielleicht detailierter Bescheid?

        Du kannst Nessus weitgehend konfigurieren. Allerdings gilt, wie oben angemerkt: Was bringt es, lediglich einen Dienst auf Sicherheit zu prüfen, wenn der Host durch andere Dienste angreifbar ist?

        Den Gedanken mit der Config habe ich mir gemacht da gewisse Einstellungen des Servers nicht sehr vorteilhaft sind.

        Prüfe das online am lebenden Objekt und beweise, dass es nicht vorteilhaft ist.

        - Sven Rautenberg