Secure Coding — so gelingt Security by Design

Sie sind hier:>>Secure Coding — so gelingt Security by Design

Secure Coding — so gelingt Security by Design

Secure Cod­ing ist nicht mehr neu in der Soft­wa­reen­twick­lung. Es ist auch längst etabliert, man find­et reich­haltige Infor­ma­tio­nen dazu, es gibt Kurse, Tuto­ri­als, und alles ist bestens doku­men­tiert. Alle Entwick­lerin­nen und Entwick­ler soll­ten es daher schon längst ein­set­zen. Lei­der begin­nt die Entwick­lung sicher­er Soft­ware nicht mit ein­er ein­fachen To-Do Liste und kann nicht ohne die notwendi­ge Unter­stützung auf allen Ebe­nen mod­ern­er Anwen­dun­gen bewältigt wer­den, die aus ein­er Vielzahl von Kom­po­nen­ten und Wech­sel­wirkun­gen beste­hen. Warum das so ist und wie man begin­nen kann, wollen wir hier kurz skizzieren.

Code ist auf sich alleine gestellt

Wenn Code ein­mal die Entwick­lungs- und Tes­tumge­bung ver­lassen hat, dann muss diese zur Laufzeit alleine und ohne Auf­sicht funk­tion­ieren. Com­put­er­sys­teme sind ja genau für automa­tisierte Prozesse, die größ­ten­teils unbeauf­sichtigt durchge­führt wer­den. Nur in Fehler- oder Aus­nah­me­fällen erzeugt Soft­ware Mel­dun­gen bzw. Ergeb­nisse, die dann von einem Men­schen bear­beit­et wer­den müssen. Man muß also bei der Entwick­lung möglichst gut zu Zukun­ft vorausse­hen und Sit­u­a­tio­nen vor­beu­gen, die möglicher­weise auftreten kön­nen. Genau da begin­nt der Bere­ich, in dem poten­tielle Sicher­heit­slück­en ein gutes Ver­steck find­en.

Um unbekan­nte Bedro­hun­gen zu illus­tri­eren, wird gerne das Inter­net zitiert. Tat­säch­lich kann man jed­wede Pro­duk­tion­sumge­bung zu diesem Zweck ver­wen­den, denn selb­st im aufgeräumtesten Net­zw­erk find­et man aus­re­ichend kom­plexe Pro­tokolle, Dat­en und Sit­u­a­tio­nen, die nicht geplant waren. Soft­ware darf in kein­er Umge­bung ver­sagen. Der Pro­gram­ma­blauf muss zu jed­er Zeit einen kon­sis­ten­ten Zus­tand vorfind­en. Eine Tes­tumge­bung muss diesem Umstand Rech­nung tra­gen. Dabei darf man nicht vergessen, dass Soft­ware mitunter Jahre oder Jahrzehnte im Ein­satz ist. Bei diesen Zeitspan­nen kann man nicht alles vorherse­hen. Bestes Beispiel sind Stan­dards und Spez­i­fika­tio­nen. Uni­code ist ein Indus­tri­e­s­tandard für kon­sis­tentes Kodieren, Repräsen­tieren und Bear­beit­en von Text der meis­ten weltweit einge­set­zten Schriften. Der aktuelle Stan­dard 11.0 von 2018 beste­ht aus 137.374 Zeichen. Im Ver­gle­ich zur Ver­sion 10.0 aus dem Jahr 2017 sind 684 neue Zeichen hinzugekom­men. Wie viele wer­den es im näch­sten Stan­dards sein, welche Bedeu­tung wer­den sie haben, und welche Codes wer­den ihnen zuge­ord­net? Darf meine App­lika­tion den­noch von sich behaupten Uni­code-Unter­stützung zu beherrschen? Man kann sich also get­rost in aktueller Soft­ware Gedanken machen, was genau mit unbekan­nten Kodierun­gen zu tun ist, weil dieses Prob­lem beste­hen bleiben wird. Fälle wie diese lassen sich mit beliebi­gen Daten­for­mat­en und Über­tra­gung­spro­tokollen wieder­holen.

Konsistente Zustände

Eine App­lika­tion soll stetig und ständig kon­sis­tent sein. Diese the­o­retis­che Anforderung ist ein guter Start in die Welt des Secure Cod­ing und Secure Design. Code beste­ht aus Kom­po­nen­ten und läuft in der Regel mit Hil­fe eines Betrieb­ssys­tems. Das bedeutet, dass dauernd Funk­tio­nen aufgerufen wer­den, die Ressourcen bear­beit­en oder Auf­gaben verteilen. Sofern alle Oper­a­tio­nen fehler­los durchge­führt wer­den kön­nen, gibt es bei den Fehler­a­bfra­gen nichts zu tun. Nur die eige­nen Daten­struk­turen des Codes müssen unter­hal­ten wer­den. Das ist die erste Auf­gabe der Entwick­ler. Auch hier ist kreatives Denken gefordert. Was passiert, wenn das Pro­gramm nicht been­det wird? Wir haben in Pro­duk­tivumge­bun­gen schon Sys­teme gese­hen, die seit 7 Jahren unun­ter­brochen im Ein­satz sind. Speziell bei Tele­fo­nan­la­gen oder Infra­struk­tur ist dies häu­fig zu beobacht­en. Das bedeutet mehr als 220.752.000 Sekun­den Ablauf von Instruk­tio­nen, Daten­zu­griffe und -ver­ar­beitung. Unit Tests kön­nen solche Szenar­ien nicht abbilden, weil die Zeit­en zu lange und dadurch die Möglichkeit­en der Code-Pfade zu vielfältig sind.

Fokus auf Ausnahmesituationen

Sind die Dat­en „nor­mal“, so wer­den Tests in der Regel funk­tion­ieren und Fehler find­en. In den Randge­bi­eten, wo Aus­nahme­si­t­u­a­tio­nen herrschen, wird es für jede App­lika­tion span­nend. Der Sinn von Test­fällen ist ja das Auf­spüren von Soft­ware Bugs und das Detek­tieren, ob behobene Fehler auch solche bleiben. Bei Secure Cod­ing möchte man jedoch den Code mit Sit­u­a­tio­nen fordern, die noch nicht aufge­treten sind. Das lässt sich nur mit automa­tisierten Tests erre­ichen, die stetig Eingabe­dat­en verän­dern und prüfen, ob die Soft­ware damit zurechtkommt. Die Meth­ode nen­nt sich Fuzzing. Sie ist schon sehr alt und stammt aus der Zeit der Lochkarten. Damals hat man defek­te und absichtliche abgek­lebte bzw. zusät­zlich gelochte Lochkarten als Eingabe ver­wen­det. In der Infor­matik hat dieser Ansatz in den let­zten Dekaden eine Renais­sance erlebt. Fuzzing zählt heute zum Stan­dard­reper­toire der Soft­wa­reen­twick­lung.

Der Ein­stieg ist denkbar ein­fach, da man ja ohne­hin bei Con­tin­u­ous Inte­gra­tion und Build Tests Automatiken hat. Fuzzing erweit­ert diesen Prozess um algo­rith­misch zufäl­lig vari­ierte Eingaben. Aus­gangs­ba­sis sind nor­male Dat­en, die man als Beispiel ver­wen­det. Man kann den Testko­r­pus zusät­zlich mit Extremen anre­ich­ern (beson­ders große, ver­schachtelte oder son­stige Dat­en, die üblicher­weise nie/selten auftreten, jedoch an die Gren­zen des Daten­for­mats gehen). Der Vorteil ist das Testen ohne Betreu­ung sowie die Gener­ierung von weit­eren Test­dat­en, falls der Prozess Fehler gefun­den hat. Die Inte­gra­tion von Fuzzing ist der leicht­este Ein­stieg in das The­ma Secure Cod­ing. Find­en Sie die Dat­en, die Ihre Anwen­dung bedro­hen, bevor es die Angreifer tun.

René Pfeif­fer ist freier Mitar­beit­er bei SEC4YOU im Bere­ich Pen­e­tra­tion Test­ing, IT-Sicher­heits­ber­atung und Secure Cod­ing. Regelmäßig beweißt er seine Kom­pe­tenz in anspruchsvollen Secu­ri­ty Pro­jek­ten. Für Fra­gen erre­ichen Sie René Pfeif­fer über unsere Kon­tak­t­möglichkeit­en.

Von | 2018-09-25T12:17:47+00:00 25.09.2018|Allgemein|

Über den Autor: