1 / 26

Coping with Safe Programming Ako sa vyrovnať s bezpečným programovaním

Coping with Safe Programming Ako sa vyrovnať s bezpečným programovaním. Frank Schindler University of Maryland University College European Division Heidelberg, Germany. ÚVOD. B ezpečnosť počítačových systémov versus programovanie B ezpečnosť programového vybavenia (OS, Aplik á cii).

landis
Download Presentation

Coping with Safe Programming Ako sa vyrovnať s bezpečným programovaním

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Coping with Safe ProgrammingAko sa vyrovnať s bezpečným programovaním Frank Schindler University of Maryland University College European Division Heidelberg, Germany

  2. ÚVOD Bezpečnosť počítačových systémov versus programovanie Bezpečnosť programového vybavenia (OS, Aplikácii)

  3. ako malé chyby v jednom programe možu mať katastrofálne dôsledky na bezpečnosť celého PS (chýbajúca inicializácia premmených; preteče- nie/podtečenie zásobnika; uvoľnenie pamäte, na ktorú ukazuje iný vystrčeny smerník, a pod.) • ako klasifikovať chyby v programe • ako dodržiavať princípy bezpečného programovania v teame programátorov • príklady bezpečného programovania

  4. PRED ČÍM MÁ BYŤ PROGRAM UCHRÁNENÝ? • omylom zo strany užívateľa (paradoxy) • bezohladným užívateľom • zákerným užívatelom

  5. ČO SA MOŽE STAŤ KEĎ PROGRAM ZLYHÁ? • program ignoruje zlý vstup bez chybového hlásenia resp. väčších problémov • program produkuje nesprávny výstup, ktorý sa šíri celým programom • program zrúti celý operačny systém (veľmi nebezpečné pre bezpečnosť systému)

  6. PRINCÍPY PRE BEZPEČNÉ PROGRAMOVANIE • "information hiding" (ukrývanie informácii: encapsulation, principle of least privilege) • defenzívne (robustné) programovanie • testovanie všetkého možného a aj nemožného (paradoxov)

  7. PRINCÍPY - Pokračovanie • používanie robustných knižnic funkcii • správne zvolený kompromis medzi efektívnostou programu a jeho bezpečnosťou

  8. KLASIFIKÁCIA CHÝB V PROGRAME GRADE A čistý=> bez závažných chýb resp. chýb počas exekucie, jednotný, rozumne zvolenýštýl, vhodná abstrakcia/ukrývanie údajov a metód, defenzívne programovanie, rozsiahle testovanie

  9. KLASIFIKÁCIA-Pokračovanie GRADE B opraviteľny => štrukturálne chyby v dátovych typoch, napr. dlžka nie je jednotná, kryptický kód resp. premenné/funkcie, bez kontroly správnosti vstupov, resp. vstupov obsahujúcich zákerne údaje, bez chybových hlásení, resp. null-condition obmedzení, pretečenie/podtečenie zásobnika a pod.

  10. KLASIFIKÁCIA-Pokračovanie • C chybný => zbytočná zložitosť algoritmov resp. údajových typov, nezhody medzi nimi, prehnaná dedičnosť objektov a pod. • D kompromitujúci => chýbajúca konceptualizacia, mnohéľubovolné obmedzenia, veľa nepotrebných a zdvojených údajov, program viazne resp. mrzne,vystrčene smerníky a pod.

  11. KLASIFIKÁCIA - Pokračovanie • F nefunkčný => nebeži správne resp. funguje na základe hrubej sily INFORMATION HIDING Ukrývanie údajov zahrňuje implementáciu dátových štruktúr a funkcii, ktoré s týmito štruktúrami narábajú. Funkcie poskytujú interface, pomocou ktorého program má prístup k dátam.

  12. DEFENZÍVNE PROGRAMOVANIE • program by sa nemal spoliehať na nič, čo nie je nim generované • zabrániť vykonaniu neočakávanych akcii, ktoré hrubo porušujúšpecifikáciu programu • všetky používané premenné musia byt riadne inicializovane • funkcie by nemali vracat smerníky na údajovéštruktúry

  13. DEF. PROG. - Pokračovanie • funkcie by nemali vracať indexi poľa • chybové hlásenia prichádzajuce z funkcii by sa mali vždy riadne kontrolovať • uvoľňovanie pamäte pridelenej smerníkom by malo byť striktne obmedzene

  14. ROBUSTNÉ PROGRAMOVANIE • ukrývanie informácii (hiding information) • defenzívne programovanie • treba očakavať, že nemožne veci sa možu stať (paradoxy) • povinné testovanie a inšpekcia napísaneho kódu inými členmi programovacieho teamu

  15. PRÍKLADY 1. Chýbajúca inicializácia premenných #include <stddef.h> // for NULL ... int i; // malo by byt: int i = 0; int *ptr; // int *ptr = NULL;  ... free(ptr);

  16. PRÍKLADY - Pokračovanie 2. Kryptický kód char *p1, *p2; ... while (*p1++ = *p2++) ; // *p1++ is equivalent to: *(p1++) it is a unary operator...right to left

  17. PRÍKLADY - Pokračovanie 3. Program ignorujúci chybové hlásenia int one_function(char ch, char *ptr); int chyba; char u, v; chyba = one_function('?',&v); u = v; //malo by byt: if (chyba == 0) //u = v;

  18. PRÍKLADY - Pokračovanie 4. Chýbajúce obmedzenia typu null-condition int a[5]; int top = -1; i = pop();   // malo by byt:   if (top != -1) // ak zásobnik nie je prázdny i = pop();

  19. PRÍKLADY - Pokračovanie 5. Vystrčené smerníky #include <stddef.h> // for NULL int *ptr1 = new int; int *ptr2 = new int;  *ptr2 = 42; *ptr1 = *ptr2; delete ptr1; // avoid an inaccessible object ptr1 = ptr2; delete ptr2;

  20. PRÍKLADY - Pokračovanie Vystrčené smerníky chýba príkaz: ptr1 = NULL; // avoid dangling pointer

  21. PRÍKLADY - Pokračovanie 6. Narábanie s knižničnými funkciami Je dobre daťštudentom úlohu napísať program, ktorý volá knižnične vstupno-vystupné funkcie v C,a ich úlohou je dať im taký vstup, aby tieto funkcie zrútili systém. Ked sa im to podari, mali by použiť debugger, aby videli prečo došlo ku kolapsu systému.

  22. KNIŽNIČNÉ FUNKCIE Príklad: char a, b, c, s[100]; int n; double x; scanf("%c%c%c%d%s%lf", &a, &b, &c, &n, s, &x);

  23. KNIŽNIČNÉ FUNKCIE – Pokr. Ako pokračovanie tejto úlohy je možné požiadaťštudentov, aby napísali robustnú knižničnu funkciu toho istého typu. Príklady tohoto typu sú veľmi učinné vo vyučbe!!!

  24. PRÍKLADY - Pokračovanie 7. Paradoxy - testovanie nemožneho "Y2K Bug" Poisťovna poskytuje životnu poistku na základe veku poisteného. Jej programy načítavajú súbor obsahujúci zoznam osôb a ich príslušný rok narodenia –položka typu 00..99. Predpokladáme, že sme v 20.storočí a práve je 01. 01. 2000. Vek osoby narodenej v roku 1925 dostaneme ako "00" - "25" = -25 rokov

  25. ZÁVER BEZPEČNE PROGRAMY JE MOŽNE PÍSAŤ NA ZÁKLADE • defenzívneho (robustného) programovania • dosledného ukrývania údajov/metód v objektoch (encapsulation, principle of least privilege) • správneho výberu vhodného programovacie jazyka pre danú aplikáciu napr. Java • rozsiahleho (úplneho) testovania

  26. ZÁVER - Pokračovanie POTREBA UČIT „ÚVOD DO BEZPEČNOSTI POČÍTAČOVÝCH SYSTÉMOV" PARALELNE S ÚVODNÝM KURZOM DO PROGRAMOVANIA

More Related