Schlamperei in der Softwareentwicklung: 25 gefährliche Programmierfehler Detail - Computerwelt

Computerwelt: Aktuelle IT-News Österreich


24.11.2010 Joachim Hackmann*

Schlamperei in der Softwareentwicklung: 25 gefährliche Programmierfehler

Projekte zur Softwareentwicklung stehen häufig unter Zeitdruck, zwangsläufig kommt es zu Fehlern. Hier finden Sie eine Liste von 25 häufigen Bugs sowie Tipps, sie zu vermeiden.

Unsere Liste wurde von verschiedenen renommierten Organisationen und Unternehmen zusammengestellt. Federführend haben das SANS Institut (SysAdmin, Audit, Network, Security), eine auf IT-Sicherheit spezialisierte Genossenschaft, sowie MITRE mitgewirkt. MITRE betreibt die Web-Site auf der Common Weakness Enummeration, auf der die Liste erschienen ist. Zudem haben Experten etwa Apple, Microsoft, Oracle, EMC, McAfee und Symantec mitgewirkt. Außerdem waren die National Security Agency (NSA), das Computer Emergency Response Team (CERT) und das Open Web Application Security Project (OWASP) beteiligt.

Die Autoren haben Fehler in folgende drei Kategorien sortiert:

• Unsichere Interaktion zwischen Komponenten. • Riskantes Ressourcen Management. • Löcherige Abwehrmechanismen.

Die Fehler, zum Teil durch eine schlampige Programmierung verursacht, können es Angreifern ermöglichen, in IT-Systeme einzudringen, Software unter ihre Kontrolle zu bringen oder Daten zu manipulieren.

UNSICHERE INTERAKTION ZWISCHEN KOMPONENTEN Unzureichende Eingabevalidierung: Die Möglichkeit, falsche Daten in ein Eingabefeld einzutragen, ist der Killer Nummer eins für fehlerhafte Software, schreibt das SANS-Institut. Gemeint sind fehlende Prüfroutinen, wenn etwa die Software etwa eine Zahlenangabe erwartet, der User aber fälschlicherweise Buchstabenfolgen eingibt. Hier versäumen es Programmierer schon mal, eine entsprechende Vorsorge zu treffen und unzulässige Eingabe abzufangen. Komplexe Applikationen bieten eine Vielzahl von Möglichkeiten zur falschen Dateneingabe. Oft sind die Fehlerquellen schwer zu erkennen.

Das Institut empfiehlt Tools zur Eingabevalidierung wie etwa das Framework Apache Struts oder die Methodensammlung ESAPI des Open Web Application Security Project (OWASP).

Ungenaue Kodierung und Maskierung der Ausgabedaten: Dieser Programmierfehler ist Pedant zur fehlenden Eingabevalidierung. Wenn ein Programm eine Ausgabe erzeugt, die anderen Komponenten als Input dient, dann sollten Anweisungen und Metainformationen von den eigentlichen Daten getrennt werden. Ein weit verbreitetes Vergehen besteht darin, alle diese Informationen in einem Datenstrom einzustellen und nur durch spezifische Trennzeichen voneinander abzugrenzen. Dies kann Angreifern die Möglichkeit eröffnen, die integrierten Anweisungen, etwa SQL-Statements, zu manipulieren.

Das SANS-Institut rät daher Programmierern, explizit Encoding-Zeichen zu setzen, wann immer das Protokoll es erlaubt.

Unsichere SQL-Statements (auch bekannt als SQL-Injection beziehungsweise SQL-Einschleusung): Wenn Angreifer die SQL-Abfragen manipulieren können, fällt es ihnen leicht, sich Zugang zu wesentlichen Informationen zu verschaffen. Werden SQL-Queries für Sicherheitsfunktionen wie Authentifizierung verwendet, können Angreifer diese verändern und sich unerlaubten Zugriff auf dieses System verschaffen. Abhilfe schaffen Datenbank-Frameworks und Shared Procedures. Zudem sollten Entwickler den Einsatz von Persistenzlösungen wie Hibernate in Erwägung ziehen.

Fehlerhafte Web-Seiten-Programmierung (Cross-site Scripting): Das Cross-site scripting (XSS) gehört zu den gängigen, hartnäckigen und gefährlichen Schwachstellen von Web-Anwendungen. Basis dafür ist die Kombination von http, Parametern und Scripts zur Erzeugung dynamischer Web-Seiten. Wurde sie nicht sorgfältig implementiert, können Angreifer beispielsweise Javascript einschleusen, das von Browsern der Web-Seiten-Besucher ausgeführt wird.

Unsicherer Aufruf von externen Programmen: Oft arbeitet eine Applikation als Mittler zwischen Anfragen, die von außen kommen, und den internen Funktionen des Betriebsystems. Dies ist der Fall, wenn Applikationen native Programme des Betriebssystems aufrufen und dabei nicht verhindern, dass unzulässige Eingaben in das Kommando eingeschleust werden. Angreifer könnten damit die Herrschaft über das Betriebssystem übernehmen. Wo möglich sollten daher Bibliotheken anstatt externer Prozesse aufgerufen werden.

Klartext-Übertragung sensibler Daten: Zum Teil versenden Applikationen sensible Daten unverschlüsselt über das Netz. Sniffer-Tools sind weit verbreitet, so dass Interessenten den Datenverkehr lesen können. Die Informationen mit URL-Kodierung oder Base64 zu verschlüsseln bietet keinen Schutz. Sensible Daten sollten immer verschlüsselt werden. Web-Applikationen mit SSL sollten so gestaltet werden, dass die gesamt Transaktion und nicht nur der Anmeldeprozess verschlüsselt wird.

Anfälligkeit für Cross-Site Request Forgery (CSRF): Kaum jemand würde am Flughafen einen Koffer mit unbekanntem Inhalt von einem Fremden mit entgegen nehmen. Genau das macht die Cross-Site Request Forgery, nur das der Angreifer Daten einer Webanwendung manipuliert, indem er den Zugang berechtigter User nutzt. Der Web-Browser des Opfers setzt wie vom Angreifer gewünscht HTTP-Request an die Web-Anwendung ab. Gefährlich wird es dann, wenn der angemeldete Benutzer über Administrator-Rechte verfügt. Als Gegenmittel gibt es Anti-CSRF-Pakete wie CSRFGuard vom OWASP.

Unbeabsichtigte Wettlaufsituationen (Race Condition): Verkehrsunfälle entstehen, wenn zwei Fahrzeuge zur exakt gleichen Zeit den genau gleichen Fahrbahnabschnitt nutzen wollen. So etwas passiert auch im Softwarebetrieb. Oft kollidieren mehrere Prozesse, wobei der Angreifer die Kontrolle über einen Prozess hat. Die Konkurrenz der Prozess kann zum Denial of Service führen, also zum Totalausfall der System. Die Probleme können sich über das Web auf andere Seiten fortpflanzen.

Einige Programmiersprachen implementieren Synchronisierungsfunktionen. Eine andere Lösung ist es, Spring-Abstraktionen zu nutzen, um die Threads zu sichern.

Schwachstellen in Fehlermeldungen: Allzu viel sagende Fehlermeldungen bieten Angreifern wertvolle Informationen über Interna in der Software. Zu den Angaben, die nicht in eine Fehlermeldung gehören, zählen etwa Daten, die etwa Personen identifizieren können, Authentifizierungsbestätigungen sowie Server-Konfigurationen. Zunächst mögen die gewährten Einblicke harmlos erscheinen, wie etwa Angaben zum Installationspfad der Software. Die Vielzahl der Informationen kann eine Attacke erleichtern. Besser ist es, dem Nutzer eine einfache Fehlermeldung zuzustellen. Begründungen inklusive Log-File sind nicht angemessen.

Diesen Artikel

Bewertung:

Übermittlung Ihrer Stimme...
Noch nicht bewertet. Seien Sie der Erste, der diesen Artikel bewertet!
Klicken Sie auf den Bewertungsbalken, um diesen Artikel zu bewerten.
  Sponsored Links:

IT-News täglich per Newsletter

E-Mail:
Weitere CW-Newsletter

CW Premium Zugang

Whitepaper und Printausgabe lesen.  

kostenlos registrieren

Aktuelle Praxisreports

(c) FotoliaHunderte Berichte über IKT Projekte aus Österreich. Suchen Sie nach Unternehmen oder Lösungen.

Service

Acceptance Testing: Trotz knapper Ressourcen

Zum Thema

  • NAVAX Unternehmensgruppe

    NAVAX Unternehmensgruppe Wasser- und Energieversorgung, Vereine und Verbände, Öffentliche Verwaltung, Medizin und Gesundheitswesen, Maschinen- und Anlagenbau, Konsumgüterindustrie, Immobilien,... mehr
  • Editel Austria GmbH

    Editel Austria GmbH Supply Chain Management, E-Procurement und Supply Chain Management, Datenkonvertierung, Überwachungssysteme, Trust Center/Zertifizierungssoftware, Digitale Signatur, Datensicherung,... mehr
  • mic customs solutions (Gruppe)

    mic customs solutions (Gruppe) Supply Chain Management, Kaufmännische Software (ERP), Expertensysteme, E-Procurement und Supply Chain Management, B2B Dienste und Lösungen mehr
  • eyepin GmbH

    eyepin GmbH Application Service Providing, Auftragsentwicklung für Software, Individual-Softwareentwicklung, Programmierung, Übernahme von Softwareprojekten mehr

Hosted by:    Security Monitoring by: