Software a jeho bezpečnosť Flashcards
Aky je problem s vyvojom SW?
Nekladie sa taky dokaz na bezpecnost, pricom to je jedna z hlavnych uloh
Aky je problem s komunikaciou na internete?
Nekomunikuje Alica s Bobom, ale s nejakym pocitacom na internete, musime si dat pozor aby nebol jej pocitac hacknuty
Porovnaj ciele hackerov v minulosti a teraz
minulost: OS a sieťové „riešenia“
teraz: Webovské aplikácie, prehliadace, mobily, IOT, „Embedded software“
Co je to embedded software?
Software v autách, fabrikách, kritickej infraštruktúre, …
Porovnaj hackerov teraz a v minulosti
Minulost: amateri, robili to pre zabavu a prestiz
dnes: profesionali, v ilegalite, organiizovany zlocin a vladne agentury
Ako to je so softwareom a jeho nebezpecnostou? existuje nejaka zazracna medicina?
Neexistuje žiadna „zázračná medicína“, Krypto ani žiadne iné špeciálne bezpečnostné riešenia nevyriešia zázračne všetky problémy, Softvérová bezpečnosť ≠ bezpečnostný softvér
Bezpečnosť je dôležitá súčasť systému
Kedy treba integrovat bezpecnostne aspekty do navrhu systemu?
hneď od začiatku + priebezne aktualizovat
Co je pricinou nebezpecneho softwareu?
ludia
aky je rozdiel medzi funkcionalitou a bezpecnostou sw?
Bezpečnosť je vždy druhoradým cieľom
Funkcionalita je o tom, čo má software robiť
Bezpečnosť je o tom, čo software nemá robiť
Ako to je s bezpecnostou OS, programovacich jazykov, internetovych prehliadacov a emailovych klientov?
OS = Obrovský OS = veľa rôznych scenárov útoku
prog. jazyky = Ľahko naučiteľné alebo efektívne, avšak nebezpečné a náchylné ku chybám
internetove prehliadace = Komplikované, HTML5, SVG, CSS, JavaScript, MathML, …
emailove klienty = Automaticky otvárajúce prílohy (náhľad) rôznych formátov
co su priciny bezpecnostnych chyb?
Nedostatočným povedomím, Nedostatočnou znalosťou bezpecnostnych problemov, Veľkou zložitosťou systémov, ludia uprednostnuju funkcionalitu
Ako je to s vyskytom buffer overflow?
jedna z najcastejsich chyb
co je buffer overflow?
char buffer[4]; buffer[4] = ‘a’;
aky je problem s manualnym spracovanim pamate?
je to nachylne na chyby
C a C++ co neposkytuju?
memory-safety
Ake su typicke bugy s bufferom?
– Zápis mimo rozsahu poľa
– Problémy so smerníkmi = Chýbajúca inicializácia, zlá aritmetika, použitie po dealokácii,
zabudnutá dealokácia,..
– Z dôvodu efektívnosti tieto bugy nie sú kontrolované počas run-time
Ake je rozlozenie pamate procesu?
slide 20
popis ako funguje stack
slide 21
ako sa da vyuzit stack overflow na upravu dat?
vyuziva pretecenie buffera, zavisi ale na vela dalsich detailoch
na com dalej zavisi utok stack overflow?
– Napr. ako vyplniť správnu návratovú adresu: Falošná návratová adresa musí byť presne umiestnená, Útočník nemusí poznať ani adresu svojich premenných
– Prepísané dáta sa nesmú použiť pred návratom z funkcie (mohlo by dôjsť ku pádu programu)
Co je to heap overflow?
Nieco ako stack overflow ale vyuziva heap namiesto stack
preco je zly gets? a treba pouzivat fgets?
gets cita do buffera kym nedojde k EOF
co treba pouzit namiesto strcpy?
strncpy, lebo strcpy predpoklada ze dest je dostatocne dlhe
co moze sposobit integer overflow?
buffer overflow
opis slide 28 co tam je za zranitelnost?
slide 28
co je to format string utok?
Reťazce môžu obsahovať špeciálne znaky, ako %s, mozeme poskodit zasobnik
slide 29
Ake specialne znaky vieme vyuzit v printf na skodu?
%x načíta a vypíše 4 bajty zo zásobníka = môže dôjsť k úniku citlivých dát
%n zapíše počet vypísaných znakov do
zásobníka
ako sa da osetrit proti format string utoku?
namiesto printf(str) pouzit printf(“%s”, str)
co to su stack canaries?
„Dummy“ hodnota – kanárik – je zapísaná do zásobníka pred návratovú adresu a skontrolovaná, keď funkcia vracia hodnotu
Obyčajné pretečenie zásobníka prepíše aj kanárika, čo môže byť detekované
Ako sa da ale osetrit stack canary?
prepisat canary na spravnu hodnotu
ake su mozne vylepsenie stack canaries?
– Použiť náhodnú hodnotu pre kanárika
– XOR náhodnej hodnoty s návratovou adresou
opis co sa deje na slide 33
slide 33
ako prebieha utok na heap overflow?
– Prepíš heap cieľovou adresou
– Dúfaj, že obeť použije prepísaný odkaz na funkciu
Ako sa da ochranit pred heap overflow?
– Môžu sa použiť kanáriky, ale je to ťažké urobiť efektívne
– Skontrolovať veľkosť buffera pred samotným zápisom.
co je to non-executable pamat?
Rozdeľ pamäť na
– Executable (na ukladanie kódu)
– Non-executable (na ukladanie dát)
A processor zabráni vykonať non-executable kód
Útočník nemôže skákať do svojho kódu, keďže bude označený za non-executable
ako vieme docielit non-executable pamat?
moderne CPU poskytuju HW podporu
co je to return-to-libc utok?
Cesta ako obísť non-executable pamäť, Využiť buffer overflow na skok do kódu, ktorý tam už je, hlave do kódu v knižnici libc
Co je to libc kniznica a preco je nebezpecna?
Libc je bohatá systémová knižnica poskytujúca veľa možností pre útočníka: system, exec, fork
je turingovsky uplna
Co je to Control Flow Integrity (CFI)?
Return-to-libc útok môže byť odhalený, keďže väčšinou sa jedná o neobvyklé volanie
Return-to-libc útok môže byť zablokovaný, keďže také nezvyčajné volania môžu byť počas runtime detekované.
Co je to Address space layout randomisation (ASLR)?
Útočník potrebuje detailné informácie o rozložení pamäti
Znáhodnením rozloženia pamäti útok značne skomplikujeme. Napr. posunieme začiatok heapu / zásobníka o nejakú náhodnú hodnotu
Kedy treba znahodnit pamat?
– Keď spustíme program?
– Pri vytvorení nového vlákna (fork())?
Co este mozeme spravit pre vacsiu komplikaciu utoku?
zakodovat instrukcnu sadu, tie budu rozne pre kazdy proces
co je vyhoda a nevyhoda kodovania instrukcnej sady?
vyhoda: Útočník nevie napísať kód, keďže nevie ako zakódovať požadované inštrukcie.
nevyhoda: nevyhnutná HW podpora, aby to bolo efektívne
Su nejake ochrany dokonale?
dokonale nie, sikovny utocnik to vie obist