Im Kampf gegen Cybercrime
Im Kampf gegen CybercrimeSoftware ist ein Produkt mit hohem Potenzial – als Innovationsfaktor wie auch als Kostenfaktor. In allen technischen Bereichen wirkt Software als massiver Innovationstreiber. Gleichzeitig birgt der Einsatz dieser Funktionalität Kostenrisiken. Innovationssteigerungen von 35% durch Software stehen gleichzeitig Kosten in gleicher Höhe – oder mehr – dagegen. Hinzu kommt seit einiger Zeit die massive Anfälligkeit im Securitybereich. Die Absicherungen gegen Cybercrime-Attacken führen zu weiteren Kostensteigerungen. Worin liegen diese Effekte ursächlich begründet und wie sieht eine solide ingenieursmäßige Lösung der Problematik aus? Software ist ein Produkt mit hohem Potenzial – als Innovationsfaktor wie auch als Kostenfaktor. In allen technischen Bereichen wirkt Software als massiver Innovationstreiber. Gleichzeitig birgt der Einsatz dieser Funktionalität Kostenrisiken. Innovationssteigerungen von 35% durch Software stehen gleichzeitig Kosten in gleicher Höhe – oder mehr – dagegen. Hinzu kommt seit einiger Zeit die massive Anfälligkeit im Securitybereich. Die Absicherungen gegen Cybercrime-Attacken führen zu weiteren Kostensteigerungen. Worin liegen diese Effekte ursächlich begründet und wie sieht eine solide ingenieursmäßige Lösung der Problematik aus? Software muss als Produkt mit entsprechend notwendigen Produktionsprozessen und eingesetzten Materialien auf Basis einer adäquaten Konzeption verstanden werden. High Level Features in Programmiersprachen sind unnütz, wenn nicht die grundlegende mathematische Eigenschaft elementarer Objekte, z.B. eines Vektors, durch die eingesetzte Programmiersprache gesichert werden kann. Bereichsverletzungen sind das grundlegende Übel, warum Viren und Ähnliches überhaupt funktionieren. Gegenüber der Trennung von Daten und Anweisungen in den frühen Jahren der Informatik zur Erhöhung der Sicherheit führt dies zu „offenen Scheunentoren“ von Software. Produktion als Sicherheitsgarant Die Produktion von Software erfordert eine gesicherte Vorgehensweise, einen definierten Prozess, die richtigen Methoden und Werkzeuge und auch adäquate Sprachen und Laufzeitsysteme zur Implementierung sowie Betriebssysteme zum Einsatz der Software. Bei automatisierungstechnischen Systemen kommen zeitliche Randbedingungen hinzu wie beispielsweise der Führung exothermer Prozesse oder der Regelung beim ESP (elektronisches Stabilitätsprogramm). Die Entwicklung von Software ist ein komplexer Herstellungsprozess, der weit vor einer Programmierung beginnt. Vorgehensmodelle definieren, welche Schritte wann zu erfolgen haben. „If you don’t know where you’re going, you’re unlikely to end up there.” Das Zitat aus Forrest Gump zeigt, dass wir erst einmal wissen müssen, was wir wollen. Dies betrifft die Analysephase, die oft zu kurz und mit zu geringem Aufwand erfolgt. Das Ergebnis zeigt die HSE-Analyse von Softwarefehlern: „44% had inadequate specification as their primary cause.“ [3] Die Fehler werden in der frühen Phase injiziert und produzieren massiv späte Kosten, d.h., früher Aufwand reduziert Kosten und erhöht entsprechend den Gewinn [4]. Solide Basis – fester Kern Die Schwierigkeit besteht in der Erkennung der Kernrequirements einer softwarebasierten Problemlösung, um eine solide Architektur, die Bausteine und deren gegenseitigen Bezüge zu definieren. Dies ist Grundvoraussetzung für weitere effiziente Entwicklungen in der Zukunft. Manche Architekturen werden mit „Balkone an Balkone bauen“ charakterisiert, was nicht dem Bild eines soliden Hauses entspricht. Nach dem Erarbeiten der Kernrequirements wird das Modell der Lösung mit seiner Logik in der gewählten Struktur beschrieben, unter anderem den modellierten Abläufen. In dieser Phase müssen Anforderungen aus Security und Safety berücksichtigt und konzeptionell vorgesehen werden. Werden Methoden wie UML (Unified Modeling Language) zur Beschreibung eingesetzt, kann das Modell über Transformationen zur automatisierten Codeerzeugung (Programmierung) verwendet werden. Zufällige Fehler eines Programmierers oder „geniale Lösungen“ eines Einzelnen sind hier ausgeschlossen. Damit wird auch im Softwarebereich aktives Knowledge Management betrieben, da alle Kenntnis über alles haben. Robuste Programmiersprachen einsetzen Jede Art programmtechnischer Realisierung erfordert den Einsatz einer Programmiersprache und deren Laufzeitsystem. Hier zeigt sich die Fähigkeit einer Sprache, die modellierten Objekte in ihren Eigenschaften sauber umzusetzen, beispielsweise sind für numerische Berechnungen die Darstellungsgenauigkeiten explizit und unabhängig von Betriebssystem und Rechnerarchitektur anzugeben. Vektoren besitzen Indexbereiche, deren Einhaltung es zu prüfen gilt. Die Trennung von Daten und Anweisungen, die Einführung von Basisregistern und Grenzregistern zur Absicherung der Speicherbereiche sind von der Sprache einzusetzen. Dann werden Texte als Daten und Anweisungen nicht beliebig tausch- und veränderbar. Die Welt des Cybercrime lebt von Buffer Overflow und der Manipulation von eigentlich zu schützenden Programmbereichen. Die „Nationale Roadmap Embedded Systems“ des ZVEI fordert: „Herstellung und Aufrechterhaltung des Vertrauens in Embedded Systems sind unabdingbare Voraussetzung für die Akzeptanz von komplexen, vernetzten, eingebetteten Systemen, wie sie zur Lösung der gesellschaftlichen und ökonomischen Herausforderungen benötigt werden. Bisherige IT-Sicherheitskonzepte sind hier nützlich, aber nicht ausreichend, da sie oft auf den Aspekt Security fokussieren.“ [5] Softwareprogramme, die einen Zahlenüberlauf ignorieren und damit korrekte Ergebnisse suggerieren, sind untragbar, in sicherheitskritischen Systemen lebensgefährlich. Auch Testen oder eine betriebsbedingte Bewährung hilft hier nicht weiter. Erstens treffen Tests nur eine Aussage hinsichtlich der getesteten Daten, zweitens ist die Betriebsbewährung nur in Routinenutzungen vorhanden und drittens treten die Fehler meist in kritischen Situationen auf, wenn eine besondere Verlässlichkeit der Software notwendig ist. Komplexe Software mit vielen Verzweigungen kann nicht erschöpfend getestet werden. Eine Modellrechnung des SEI (Software Engineering Institute) für Programme mit einem bestimmten Umfang an Anweisungen und entsprechend typischer Zahl von Verzweigungen zeigt, dass für ein Softwaresystem mit 400 Verzweigungen typisch etwa 1.38 E +11 mögliche Pfade im Ablauf zu testen wären. Ein Programm mit 100 Mio. Programmzeilen ist damit in endlicher Zeit nicht testbar. Die Aussage „With the test-based software quality strategy, large-scale life-critical systems will be least reliable in emergencies – and that is when reliability is most important …” fordert also konstruktive Maßnahmen, um Zuverlässigkeit zu erreichen [6]. Auch die Schlussfolgerung über Reifegradmodelle, dass Software bei langem Einsatz und abnehmendem Fehlverhalten stabil und zuverlässig sei, scheitert an der unzulässigen Extrapolation über die betrachteten Einsatzprofile im Gegensatz zur klassischen Mechanik. Die erhöhte Durchbiegung eines Balkens bei erhöhter Belastung kann hochgerechnet werden, da das Kontinuumsgesetz gilt. Dies ist bei Software nicht gegeben, hier haben wir ein eher chaotisches Verhalten. Die Zuverlässigkeit von Software ist also konstruktiv zu sichern – logisch korrekt, einfach in der Struktur und nach Prinzipien erstellt, welche Fehler vermeiden. Robustes Verhalten hilft, Restfehler zu beherrschen.
Tab. Vergleichende Industriedaten [2]
Die Wertschöpfung der Software [1]
Verlässliche Betriebssysteme Rechenprozesse in Betriebssystemen werden durch Prioritäten in ihrem gegenseitigen Vorrang festgelegt. Dies setzt aber voraus, dass das Betriebssystem sich selbst in Prozessen organisiert hat und das Scheduling, also das Einplanen und Ausführen von Prozessen, nur von den zugehörigen Prozesseigenschaften abhängt. Wenn Funktionen im Kern des Betriebssystems das Scheduling unvorhersehbar verändern, können höchstpriore Echtzeitprozesse blockiert werden. Bei Automatisierungssystemen kommen zeitliche Randbedingungen für die Ausführung von Funktionen hinzu. Damit ergibt sich eine weitere Komplexitätsdimension. Echtzeitanforderungen müssen den worst case mit einem beweisbaren deterministischen Verhalten beherrschen. Dazu sind mathematische Nachweise erforderlich. Interessant ist dabei, dass Multi-Core-Systeme schlechter beweisbar beziehungsweise einsetzbar sind als einfache Single-Core-Systeme. Caches als schnelle Zwischenspeicher führen in der worst case-Betrachtung zu zeitlichen Verzögerungen, welche die Beweisrechnung negativ beeinflussen. Statistische Betrachtungen dürfen hier nicht eingesetzt werden. Schlüsseltechnologie Echtzeitsysteme Das Thema Echtzeitsysteme ist eines der zentralen Zukunftsthemen [7]. 16 Mrd. eingebettete Systeme, also 99% aller existierenden Prozessoren, sind weltweit im Einsatz. Embedded Systeme wie ABS (Anti-Lock Bracking) oder ESP sind Komponenten, bei denen der Benutzer keine Eingriffsmöglichkeit besitzt und auch keine Benutzerschnittelle mehr existiert. Wenn Signale der Lenkwinkelgeber falsch interpretiert werden und die Lenkung verhärtet oder Probleme mit dem Antiblockiersystem wegen fehlerhaften Software-Updates auftreten, sind deutlich die momentanen Grenzen aufgezeigt. Durch Cyber Crime-Attacken tritt eine weitere Dimension hinzu. Die Angriffe auf sicherheitskritische Strukturen zeigen die gegenseitige Abhängigkeit von Safety- und Security-Aspekten. Ein Remote Motor Control per SMS über Car2Car- Kommunikation zum Bremsen und Beschleunigen fremder Fahrzeuge ist ein Hinweis auf die Problematik. Dies gilt analog auch für andere Anlagen und erfordert konzeptionell Architekturen, welche diese Aspekte berücksichtigen. Die Konsequenz wäre sonst, dass die Batterie eines Elektroautos ab Werk eine als eine durch Viren zündfähige Bombe zu betrachten ist. Die Entwicklungen in den Programmiersprachen wie Ada und in den Normen wie IEC 61508, die Möglichkeit der logischen Modellierung mit beispielsweise UML, sowie das Verständnis für die Prozesse bei der Entwicklung von Software z.B. nach CMMI (Capability Maturity Model Integration) oder V-Modell (Vorgehensmodell), bieten die notwendigen Grundlagen zur Konstruktion zuverlässiger Software. Allerdings dürfen kaufmännische Vorgaben dies nicht verhindern. Dass eine Software freigeschaltet wird und dann in 45 Minuten 440 Mill. Euro durch den falschen Kauf von 4,5 Mrd. Euro Aktien vernichtet, ist eigentlich unvorstellbar. Der zentrale Fokus muss auf konstruktiven und organisatorischen Maßnahmen zur Sicherstellung der Zuverlässigkeit liegen. Es ist eine integrative Betrachtung von Safety und Security Aspekten notwendig. Zur Beherrschung der Komplexität ist Wert auf eine mental beherrschbare Funktionalität zu legen. Intelligentes Verhalten muss vorhersagbar und verlässlich sein. Dies gilt insbesondere für die Kombination von komplexen Funktionen. Programmiersprachen sollten semantisch und syntaktisch vollständig definiert sein und die Umsetzung des logischen Modells in allen Eigenschaften umfassend unterstützten. Dies erfordert eine strenge Typisierung, die Prüfung auf Indexbereiche mit Ausnahmeauslösung, eine syntaktische Klammerung für lesbare Strukturen und eine Fehlerdistanz in der Grammatik, welche Einfachfehler nicht als syntaktisch korrekt einstufen kann. Schreibfehler sollten keinen syntaktisch korrekten Code ergeben, hierzu müssen mindestens zwei oder mehr Fehler auftreten [8]. Sicherheitskritische Systeme erfordern die konzeptionelle Umsetzung von Fehlertoleranzmechanismen, um einen definierten sicheren Zustand zu erreichen. Hierzu sind die Aspekte von Safety und Security von Beginn an gemeinsam zu analysieren und in das Systemkonzept zu integrieren. Methoden zur Erhöhung der Zuverlässigkeit wie diversitäre Software können gleichzeitig für die Analyse des Verhaltens als auch für Vergleiche an Inspektionspunkten unter Security Aspekten eingesetzt werden [9]. Nach der kaufmännischen Entscheidung auf Basis einer Wirtschaftlichkeitsrechnung gilt nur noch das ingenieurgemäße Vorgehen. Kaufmännische Optimierungen in einer laufenden Entwicklung haben bis dato immer nur Geld gekostet. Literatur
[1] Abschlussbericht DFG-Schwerpunktprogramm 1040: Entwurf und Entwurfs- methodik eingebetteter Systeme, Wolfgang Rosenstiel, Universität Tübingen, 1997 – 2003 / BMW AG Foto: © panthermedia | Hermin Utomo |
C&M 6 / 2012![]() Das komplette Heft zum kostenlosen Download finden Sie hier: zum Download Der Autor:NewsAhlborn GmbH: Hochgenaue Temperaturmessung mit digitalen FühlernBei über 80 % aller industriellen Messaufgaben werden Temperaturen gemessen. Wichtig ist das Zusammenspiel von Messgerät und Fühler sowie die verwendete Technologie. Aus der Präzisionsschmiede, der Firma Ahlborn aus Holzkirchen bei München, kommt jetzt ein Messsystem für hochgenaue Temperaturmessung, das nicht nur im Labor verwendet werden kann.© Ahlborn Mess- und Regelungstechnik GmbH |