Sicherheit ist keine Hexerei

Vor vielen Jahren hatte ich ein mal ein interessantes, wenn auch sehr kurzes Telefonat mit einem potenziellen Kunden. Er wollte dass ich ein PHP-Script auf Sicherheitslücken überprüfe.

Wir haben uns ausgetauscht, ich habe mich nach seinem Projekt erkundigt, er sich über meine Erfahrungen. Alles schien wunderbar zu laufen. Bis er sagte "Sie haben ja hauptsächlich WordPress-Programmiererfahrung".

Meine Antwort kam wie selbstverständlich: "Ja, aber letztendlich ist alles PHP und die Sicherheitsmaßnahmen sind weitgehend die gleichen." Mit dieser Sichtweise war der beinahe-Kunde überhaupt nicht einverstanden, das Gespräch war sehr schnell beendet, und ich habe nie wieder von ihm gehört.

Dies ist meine Motivation ein mal etwas zum Thema Sicherheit zu schreiben. Computersicherheit ist nicht trivial, aber letztendlich auch keine Hexerei.

Physische- und Netzwerk-Sicherheit

Jede Person die sich mit Computern auskennt weiß, dass die physische Sicherheit eines Computers an erster Stelle steht. Um Daten und Dienste zu schützen muss der Rechner vor Einbrechern, Feuer, Stromausfällen und ähnlichem geschützt werden.

Außerdem muss der Server an ein gesichertes Netzwerk angeschlossen sein. Auf dieses dürfen keine unbefugten Computer zugriff haben, dies wird über eine oder mehrere Firewalls und verwandte Werkzeuge realisiert. Alle Rechner im Netzwerk müssen physisch gesichert sein.

Dies ist in der Regel gewährleistet wenn der Server bei professionellen Dienstleistern oder ähnlich ausgerüsteten Rechenzentren untergebracht ist.

Sicherheit des Betriebssystems und der Dienste

Dies ist ein komplexes Thema und erfordert kompetente Administratoren. Die wichtigsten Punkte sind

  • Aktualisierung des Betriebssystems an sich
  • Aktualisierung von Programmen die Dienste Bereitstellen, z.B. Web-, IMAP und POP3-Server
  • Konfiguration des externen Zugriffs auf Dienste, z.B. auch durch Firewalls und hosts-Dateien
  • Konfiguration lokaler Rechte, etwa über file permissions, ACLs, selinux, apparmor etc.
  • Datensicherheit, vor allem durch backups
  • Überwachung des laufenden Betriebs, z.B. über log checking, intrusion detection und/oder file alteration monitoring

Sicherheit von Applikationen

Hiermit meine ich öffentliche Web-Anwendungen. Da diese Applikationen weltweit erreichbar sind müssen sie auf dem aktuellen Stand gehalten werden. Ständig werden neue Sicherheitslücken in weit verbreiten Web-Anwendungen bekannt. Als muss man auf dem aktuellen Stand bleiben und relevante Aktualisierungen installieren.

Für jede Anwendung gibt es noch individuelle Sicherheitseinstellungen die konfiguriert und evtl. mit der Zeit angepasst werden müssen.

Sicherheit des eigenen Codes

Die größten Risiken im Web sind wahrscheinlich SQL injection, XSS und CSRF. Bei den ersten beiden geht es meistens um Eingaben durch Benutzer. Die eingegebenen Daten müssen je nach Bedarf validiert und gesäubert werden.

Auch bei CSRF geht es darum, dass Daten empfangen werden und der Ursprung überprüft werden muss.

Außerdem muss beim Programmieren etwa darauf geachtet werden dass Variablen definiert sind. Gerade Script-Sprachen wie PHP mit einer großen Fehlertoleranz sind hier problematisch.

Dafür haben Script-Sprachen den Vorteil dass nicht direkt im Arbeitsspeicher gearbeitet wird. So sollten buffer overflows unmöglich sein, so lange man es nicht mit Fehlern in der Sprache selbst zu tun hat.

Fazit

Sicherheit ist vielschichtig und vor allem ein Ergebnis von Fleiß. Techniken um die Sicherheit zu gewährleisten ähneln sich innerhalb einer Sprache immer.

Manche Anwendungen und Frameworks bieten einige Hilfsfunktionen an. Die sollte man dann auch nutzen. Schreibt man eine komplette Anwendung greift man auf Bibliotheken oder Sprachfeatures zurück.

Ja, dies ist gerade bei PHP nicht sehr komfortabel. Das ist auch einer der Gründe dafür dass ich heutzutage nur noch wenig mit PHP arbeite.

0 Kommentare

Antworte

Antwort abbrechen
Markdown. Syntax highlighting with <code lang="php"><?php echo "Hello, world!"; ?></code> etc.
DjangoBitcoinTuxHTML5 badgeUpset confused bugHackerMoneyUpset confused bugMoneygit