Springe zum Hauptinhalt

2009-08: Die falsche Programmiersprache gefährdet das Internet

Die Ent­schei­dung, um was sich die ak­tu­el­le Ko­lum­ne dre­hen soll­te, war dies­mal schwie­rig: Die Zu­grif­fe der USA auf al­le eu­ro­pä­i­schen Banktrans­ak­ti­o­nen bei SWIFT schien span­nen­d, eben­so der neue „In­ter­net­-­Brie­f“ der Deut­schen Post. Aber jetzt wur­de es doch ein ganz an­de­res The­ma, näm­lich Pro­gram­mier­spra­chen und Se­cu­ri­ty.

Was hat das ei­ne mit dem an­de­ren zu tun?

Buf­fer Over­flows sind be­kannt­lich die Ur­sa­che vie­ler Schwach­stel­len. Die Ur­sa­che vie­ler Buf­fer Over­flows ist aber aus­ge­rech­net ei­ne Pro­gram­mier­spra­che, näm­lich C . Erst En­de Ju­ni hat Ad­o­be ei­ne Si­cher­heits­lü­cke in Flash ge­mel­det. Be­trof­fen sind auch Flas­h­-­Fil­me, die in PDFs ein­ge­bun­den sin­d. Die Ur­sa­che der Schwach­stel­le ist ein Buf­fer Over­flow.

Ein wei­te­res, gro­ßes Pro­blem bei C ist: es kennt nur pri­mi­ti­ve Da­ten­ty­pen, noch nicht ein­mal einen String (o­der ähn­li­ches) kennt es, son­dern im­mer nur 'char *' (Zei­ger auf einen Cha­rak­ter). Will man den String durch­lau­fen, wird der Zei­ger er­höht. C kann in ei­nem der­ar­ti­gen Kon­strukt nicht fest­stel­len wie groß der Speicher­be­reich für den String ist und da­mit be­steht kei­ne Chan­ce zu be­mer­ken, wenn der Zei­ger schon nicht mehr auf den Puf­fer zeig­t. Ge­nau das ist die Ur­sa­che für die stän­dig auf­tre­ten­den Buf­fer­-­O­ver­flows!

Es gibt zwar­Ge­gen­maß­nah­men, bei­spiels­wei­se strn­c­py() statt strc­py(), aber da­zu muss man die Län­ge der Puf­fer durch das ge­sam­te Pro­gramm schlei­fen. Das ist läs­tig und feh­ler­an­fäl­lig.

Noch ein Bei­spiel: Ei­ne Schwach­stel­le in der Ac­ti­veX Tem­pla­te Li­bra­ry (AT­L), die Mi­cro­soft am Wo­chen­en­de (sic!) ge­mel­det hat, wird eben­falls durch ei­ne um­ständ­li­che Syn­tax von C ver­ur­sacht: Ein Ty­pe­cast und ein klei­nes, un­schein­ba­res &-­Zei­chen, das leicht zu über­se­hen ist, be­dingt den Feh­ler: '(vo­id *)&var­na­me­'. Der Ty­pe­cast ver­hin­der­t, dass der Com­pi­ler den Feh­ler ent­deck­t.

Auf Hei­se Se­cu­ri­ty gibt es üb­ri­gens ei­ne recht les­ba­re Be­schrei­bung zur Feh­ler­ur­sa­che.

Einfach die falsche Programmiersprache

Ei­ne Pro­gram­mier­spra­che soll den Pro­gram­mie­rer bei sei­ner Ar­beit un­ter­stüt­zen. Da­zu ge­hört es, mög­lichs­te we­ni­ge Fall­stri­cke und da­für das ei­ne oder an­de­re Si­che­rungs­seil ein­zu­bau­en. Aber nur we­ni­ge Pro­gram­mier­spra­chen wer­den hier ih­rer Auf­ga­be ge­recht.

C ist mehr oder we­ni­ger ein of­fe­ner Ge­län­de­wa­gen, bei dem sich der Pro­gram­mie­rer um al­les küm­mern darf – und muss. Es ist ver­ständ­lich, dass der Spra­che ein Mo­dul­kon­zept fehl­t. Das wur­de erst ein Jahr nach C er­dacht. Es stellt sich aber die Fra­ge, wes­halb noch so vie­le Pro­gram­mie­rer das Ri­si­ko in Kauf neh­men und mit ei­ner Spra­che ar­bei­ten, die mit so vie­len kon­zep­ti­o­nel­len Män­geln be­haf­tet ist.

Was dann?

Es muss ja nicht gleich ein Pro­gram­mier­spra­che wie Mo­du­la oder Obe­ron sein und Sie brau­chen auch nicht auf Ja­va um­zu­stei­gen. Schon der sim­ple Wech­sel zu C++ oder Ob­jec­ti­ve­-C bringt mehr Si­cher­heit. Denn in die­sem Pro­gram­mier­spra­chen gibt es in­tel­li­gen­te Da­ten­ty­pen, bei­spiels­wei­se einen String­-­Ty­p, der die Län­ge des Puf­fers kennt und über­wacht. Die Pro­gram­mie­rer wer­den da­durch ent­las­tet, der Com­pi­ler nimmt ih­nen Ar­beit ab.

Üb­ri­gens: Mei­ne Phi­lo­so­phie fin­det sich in The Zen of Py­thon ge­nau wie­der.

Ei­gent­lich woll­te ich nie mehr einen Spra­chen­streit los­t­re­ten, die Dis­kus­si­on an­no 1993 mit 470 Bei­trä­gen war brot­los ge­nug. Wenn Sie aber dis­ku­tie­ren wol­len: Mai­len Sie ein­fach an ko­lum­ne@­go­ebel­-­con­sul­t.­de. Oder pos­ten Sie bes­ser gleich in al­t.re­li­gi­o­n.­pro­gram­ming­-­lan­gua­ges :-)

Portrait von Hartmut Goebel

Hartmut Goebel

Diplom-Informatiker, CISSP, CSSLP, ISO 27001 Lead Implementer

Haben Sie noch Fragen?
Anruf oder Mail genügt:
  +49 871 6606-318
  +49 175 29 78 072
  h.goebel@goebel-consult.de