PB071 Úvod do C, 12.5.2015 PB071 – Programování v jazyce C Open-source portály, bezpečné programování, diskuze.

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Pro začátek něco lehčího
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Přednáška 11 Jiří Šebesta
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
VISUAL BASIC Práce se soubory.
Modernizace studijních opor Představení LMS Moodle
SOFTWARE dálkové studium PODNIKÁNÍ 2. listopad 2006.
Panasonic Electric Works Czech s.r.o. Slide 1 Přehled PLC Software splňující normu IEC
C# pro začátečníky Mgr. Jaromír Osčádal
Příkazový řádek Windows
Programování v C++ Cvičení.
Programování v Pascalu Přednáška 7
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Caché Security. Jak vypadá zabezpečení dnes Jak bude vypadat a co by Caché měla umět v budoucnu Včera, dnes a zítra.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Softwareová architektura
C# - Exceptions (výjimky)
Dynamická alokace, polymorfismus
PB071 – Programování v jazyce C
Ant Připravil: Ing. Jan Kolomazník. strana 2 Proč vznikl Potřeba sestavovat komplexní Nezávisle na platformě Popis založený na xml Spouštění různých úloh.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
PB161 PB161 – Programování v jazyce C++ Objektově Orientované Programování Šablony, Návrhové principy a (anti-)vzory PB161 | Šablony, Návrhové principy.
C# - Testování a ladění aplikací Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Práce se šablonami v MS Word 2007
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou I NFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jan Roubíček.
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost Číslo projektu: CZ.1.07/1.5.00/ Číslo materiálu: VY_32_INOVACE_PSK-4-09.
Dokumentace informačního systému
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Šesté cvičení Výjimky Balíky.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Systém souborů. Množina souborů různých typů – Data – Spustitelné programy – Konfigurační a pomocné informace – I/O zařízení Způsob organizace množiny.
OPERAČNÍ SYSTÉMY.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Systém souborů. Množina souborů různých typů – Data – Spustitelné programy – Konfigurační a pomocné informace – I/O zařízení Způsob organizace množiny.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
Úvod do UNIXu (6th round)
Operační systém GNU Linux Příkazy pro práci se soubory.
Visual Basic - programování
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
FTP-SSL FTP-SSL Martin Dušek Martin Fúsek Josef Vlček.
Paměti PC HDD, CD/DVD, USB Flash RAM a ROM Vnější paměť Disková paměť
Počítače a programování 2
TDD - Test Driven Development
Vypracoval / Roman Málek
Vývoj mobilních aplikací a jejich výhody
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vlastnosti souborů Jaroslava Černá.
ZAL – 3. cvičení 2016.
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Dávkové soubory Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
TNPW1 JavaScript Ing. Jiří Štěpánek.
Web Application Scanning
Přednášky z Distribuovaných systémů
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

PB071 Úvod do C, PB071 – Programování v jazyce C Open-source portály, bezpečné programování, diskuze

PB071 Úvod do C, Organizační Tento týden poslední přednáška i cvičení ●Další týden předtermín Zápočtový příklad ●na vašem cvičení, obdobně jako při nácviku ●každé cvičení bude mít jiný příklad ●je nutné úspěšně vypracovat (není bodováno) ●bude vypsán opravný termín (příští týden) Zkouška ●vypsáno v ISu, u počítačů v B130 (Linux) (+ B116&B117 Windows) ●musíte znát své heslo na Aisu! ●nutno mít zapsáno v poznámkovém bloku ZAPOČTENO (uhánějte svého cvičícího) ●50 minut Náplň zkouškového testu ●40 bodů otázky z průběžných testíků (drill) ●40 bodů porozumění stávajícímu kódu (co vypíše program...)

PB071 Úvod do C, Open-source portály

PB071 Úvod do C, Další verzovací nástroje SVN, GIT, Mercurial, Bazaar...

PB071 Úvod do C, Open-source portály ● ● ● ● ●... Zapojte se do existujícího projektu ●TODO list, bugs Založte vlastní projekt ●bakalářka, vlastní nápad... ●(dobrá reference při pohovoru do firmy)

PB071 Úvod do C, =

PB071 Klasický způsob vývoje “Old-school” styl vývoje ●Zadání rozděleno do dílčích problémů oddělených rozhraními ●Vývojáři pracují na separátních komponentách ●Separátní větve v SVN repozitářích ●Testy na úrovni dílčí komponenty Po nějaké době chceme provést spojení dílčích částí ●Stačí jen Merge & Compile? “Integration hell” přichází ●Rozhraní lehce upraveny ●Sdílený kód modifikován ●Chybné spojení kódu během merge ●…●… 7 Úvod do C,

PB071 Continuous integration (CI) Originálně navrženo pro Extreme Programming ●Nyní široce využíváno ●Složení více dobrých vývojových technik a postupů ●Celý produkt je stále “připraven” (night builds) Hlavní větev je spojena, kompilována a automaticky testována i několikrát denně ●CI server (Jenkins, Travis CI…) ●Versioning system (SVN, GIT…) ●Automatický build (make, Ant, Maven…) ●Automatické testy (unit testy, integrační testy) ●Dodatečná analýza (statická analýza, výkonostní testy…) ●Prezentace výsledků (grafický web… ) 8 Úvod do C,

PB071 CI : GitHub + Travis CI Vytvořte GitHub repozitář ●A Makefile pro automatický překlad Přihlašte se do Travis-CI.org pomocí GitHub účtu Add New Repository (tlačítko +) ●Vaše GitHub repozitáře jsou uvedeny ●Activujte GitHub Webhook pro cílové repo Přidejte.travis.yml soubor do kořene repa ●Vložte skript dle použitého jazyku a překladu Aktivujte Travis build pomocí Git push ●Výsledek dostupný na a přes mailhttps://travis-ci.org/ 9 Úvod do C, language: cpp compiler: - gcc - clang script: make

PB Úvod do C,

PB071 Úvod do C, Návrhové vzory, antivzory, refactoring

PB071 Úvod do C, Návrhové vzory Návrhový vzor je opakovaně použitelné řešení pro často se vyskytující problém ● Často zmiňováno v kontextu objektově orientovaného programování, ale jde o obecný princip Např. Jak pracovat jednotným stylem s funkcemi používající jiné API? ●funkce dělají stejné (nebo hodně podobné) věci ●jsou ale programovány různými vývojáři => různé API ●(C knihovny nebo např. callback funkce) ●návrhový vzor Adapter (kód vytvářející očekávané rozhraní)

PB071 Úvod do C, if(server.is_file_in_database(path)){ server.set_licence_data_from_database(path); char type; char constrain; bool right_input = false; permissions new_permissions = {{FULLY, 0, {0,0,0}}, {FULLY, 0, {0,0,0}}, {FULLY, 0, {0,0,0}}, {FULLY, 0, {0,0,0}}}; do{ cout<<endl<<"Enter type of file (t)text/(m)music/(e)executable: "; cin>>type; switch (type){ case 't': right_input = true; // display cout<<"Enter constrain for display (n)no/(p)partially/f(fully): "; cin>>constrain; switch (constrain){ case 'n': new_permissions.display.constricted = NO; new_permissions.display.count = -1; new_permissions.display.interval.year = -1; break; case 'p': int count; new_permissions.display.constricted = PARTIALLY; cout<<"Count of display (-1 for not set): "; cin>>count; if(count > -1){ new_permissions.display.count = count; } else{ new_permissions.display.count = -1; } int year, month, day; cout<<"Enter year (-1 for not set): "; cin>>year; if(year > -1){ new_permissions.display.interval.year = year; cout<<"Enter month: "; cin>>month; new_permissions.display.interval.month = month; cout<<"Enter day: "; cin>>day; new_permissions.display.interval.day = day; } else{ new_permissions.display.interval.year = -1; } break; case 'f': //f is default value break; default: cerr<<"Wrong input type. Please insert n/p/f."<<endl; right_input = false; break;

PB071 Úvod do C, a anti-vzory Často se vyskytující problémy v psaní kódu Špagetový kód Cut&Paste programování Velká provázanost ●každá změna způsobí problém a nutnost dalších změn

PB071 Úvod do C, Refactoring Úprava kódu z důvodu zlepšení jeho čitelnosti a flexibility ●např. rozdělení funkcí do více podfunkcí ●přesun nebo sjednocení souvisejícího kódu ●čitelnější zápis logických podmínek ●úprava argumentů funkcí, jejich pojmenování (API) ●... Nedochází k přidání nové funkčnosti ●ale může dojít k přidání nových chyb ●důkladné testy jsou velmi důležité a prospěšné Většinou manuální práce, ale nástroje mohou mít podporu pro některé pomocné operace ●např. přejmenování proměnné v celém projektu ●např. identifikace problematických míst v kódu

PB071 Úvod do C, Source monitor – example outputs Complexity: 1-10(OK), 11-20(někdy), > 20(NOK) Vyzkoušejte na svých domácích úlohách!

PB071 Úvod do C, Reverzní inženýrství

PB071 Úvod do C, Assembler, Reverzní inženýrství RE Schopnost (částečné) práce na úrovni assembleru zvětšuje pochopení programu a možnost ladění problémů Podpora v IDE (Disassembly režim) během debuggingu ●Visual Studio  Go to Disassembly ●QT Creator  Debug  Operate by instructions Specializované nástroje (OllyDbg, IDA...) RE: získání původního kódu z přeložené binárky ●není ale omezeno jen na software ● ●The Reverse Code Engineering Community: ● ●Tutoriály:

PB071 Úvod do C, OllyDbg

PB071 Úvod do C, nVidia CUDA

PB071 Úvod do C, CUDA – výpočty na grafických kartách Masivně paralelní programování na kartách nVidia ●stovky jader, tisíce vláken na jedné GPU ●máte pravděpodobně doma! Rozšíření jazyka C pro paralelní výpočty ●obohaceno o konstrukce pro paralelní spouštění výpočtů ●vývojové nástroje dostupné zdarma CUDA toolkit ● CUDA programming guide ● cs/NVIDIA_CUDA_ProgrammingGuide.pdfhttp://developer.download.nvidia.com/compute/cuda/3_0/toolkit/do cs/NVIDIA_CUDA_ProgrammingGuide.pdf CUDA seminář na Standfordu ● parallel/id #ls=1http://itunes.apple.com/itunes-u/programming-massively- parallel/id #ls=1

PB071 Úvod do C, Konkrétní hodnoty je nutné brát s velkou rezervou – silně závislé na aplikaci

PB071 Úvod do C, CUDA - ukázka Paralelní sečtení vektoru po složkách oolkit/docs/NVIDIA_CUDA_ProgrammingGuide.pdf oolkit/docs/NVIDIA_CUDA_ProgrammingGuide.pdf __global__ void VecAdd(float* A, float* B, float* C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } int main() { // Invocation with N threads VecAdd >>(A, B, C); } unikátní identifikace vlákna (přiřazeno automaticky) funkce VecAdd spuštěna na N vláknech sečtení dvou prvků vektoru

PB071 Úvod do C, Bezpečnostní dopady práce s pamětí a nedostatečného ošetření vstupu

PB071 Úvod do C, Demo – buffer overflow u fixního pole

PB071 Úvod do C, Předpoklady MS Visual Studio 2013 (MSVC kompilátor) ●dostupné z fakultní MSAA V kódu alternativní nastavení pro gcc ●v ukázkách nepoužito ●jiné rozložení proměnných v paměti než u MSVC Debug režim

PB071 Úvod do C, void demoBufferOverflowData() { int unused_variable = 30; #define NORMAL_USER 'n' #define ADMIN_USER 'a' int userRights = NORMAL_USER; #define USER_INPUT_MAX_LENGTH 8 char userName[USER_INPUT_MAX_LENGTH]; char passwd[USER_INPUT_MAX_LENGTH]; // print some info about variables printf("%-20s: %p\n", "userName", userName); printf("%-20s: %p\n", "passwd", passwd); printf("%-20s: %p\n", "unused_variable", &unused_variable); printf("%-20s: %p\n", "userRights", &userRights); printf("\n"); // Get user name printf("login as: "); gets(userName); // Get password ", userName); gets(passwd); // Check user rights (set to NORMAL_USER and not changed in code) if (userRights == NORMAL_USER) { printf("\nWelcome, normal user '%s', your rights are limited.\n\n", userName); } if (userRights == ADMIN_USER) { printf("\nWelcome, all mighty admin user '%s'!\n", userName); } načtení uživatelského jména a hesla (bez kontroly délky) výpis info uživatele dle proměnné s právem pole s fixní délkou (bude docházet k zápisu za konec) proměnná udávající práva aktuálně přihlášeného uživatele pomocný výpis adres lokálních proměnných na zásobníku

PB071 Úvod do C, Rozložení dat v paměti passwd userName userRights unused_variable

PB071 Úvod do C, Spuštění bez problémů passwd userName

PB071 Úvod do C, Spuštění útočníkem – userName zadáno ‘evil’ do userName

PB071 Úvod do C, Spuštění útočníkem - passwd Příliš dlouhé heslo přepsalo v paměti userName i userRights zadáno ‘ Devil I am. Ha Ha’ do passwd

PB071 Úvod do C, Spuštění útočníkem - výsledek

PB071 Úvod do C, Jak může chránit programátor? Důsledná kontrola délky načítaných dat Preventivní mazání načítaného pole ●nebo alespoň preventivní nastavení posledního bajtu na 0 Jazyk C nemá příliš pohodlné nástroje pro načtení vstupu s variabilní délkou ●musíme zjistit dopředu délku vstupu a alokovat (malloc) dostatečné pole ●nebo řešit situaci, kdy se načítaný vstup nevleze do fixního pole (např. fgets()) Nelze spoléhat na „bezpečné“ uspořádání dat v paměti ●různé kompilátory umístí proměnné různě

PB071 Jak může chránit překladač? Překladač může “obalit” citlivé objekty v paměti dodatečnou ochrannou ●dodatečný paměťový prostor kolem polí se speciální hodnotou (např. 0xcc) – možnost následné detekce přepisu ●náhodná hodnota (canary word) před návratovou adresou z funkce kontrolované před následování adresy ●randomizace paměti (ASLR) ●ochrana datové sekce programu před vykonáním (DEP) Dostupné přepínače překladače ●MSVC: /RTC1,/DYNAMICBASE,/GS,/NXCOMPAT ●GCC: -fstack-protector-all Úvod do C,

PB071 Jak může chránit dodatečná analýza? Statická analýza ●probíhá nad zdrojovým kódem bez jeho spuštění ●Např. Cppcheck, Microsoft PREfast... Dynamická analýza ●probíhá nad spuštěnou binárkou programu ●např. Valgrind (nejen memory leaks) Výrazná, automatizovaná pomoc ●pozor, nedetekuje všechny chyby! ●některé detekované chyby mohou být falešné hlášení Úvod do C,

PB071 Microsoft PREfast Microsoft Visual Studio Ultimate ●pro studenty dostupné v rámci MSAA Visual Studio  Analyze  Run code analysis... Úvod do C,

PB071 Cppcheck Nástroj pro statickou analýzu C/C++ ●Open-source freeware, Aktivně vyvíjen, poslední verze 1.69 ( ) Široce používaný nástroj Příkazová řádka i GUI Samostatně stojící verze, plugin do IDE, plugin do verzovacích nástrojů… ●Code::Blocks, Codelite, Eclipse, Jenkins... ●Tortoise SVN… Multiplatformní (Windows, Linux, iOS) ●sudo apt-get install cppcheck Úvod do C,

PB071 Cppcheck – co je kontrolováno? Bound checking for array overruns Suspicious patterns for class Exceptions safety Memory leaks Obsolete functions sizeof() related problems String format problems... See full list dex.php?title=Main_Page#Checks dex.php?title=Main_Page#Checks Úvod do C,

PB071 Cppcheck – kategorie problémů error – when bugs are found warning - suggestions about defensive programming to prevent bugs style - stylistic issues related to code cleanup (unused functions, redundant code, constness...) performance - suggestions for making the code faster. portability - portability warnings. 64-bit portability. code might work different on different compilers. etc. information - Informational messages about checking problems Úvod do C,

PB071 Cppcheck Úvod do C,

PB071 Coverity Velmi dobrý statický a dynamický analyzátor kódu Zdarma pro C/C++ & Java open-source projekty Lze integrovat s Travis CI ● 41 Úvod do C,

PB Úvod do C,

PB071 Úvod do C, Demo – kontrola vstupu pro system()

PB071 Úvod do C, Předpoklady Nezávislé na překladači Funkce demoInsecureSystemCall() ●vypíše ze souboru informace o použití ●nedovolí použít příkaz ‘type’ a ‘dir’ Jak může útočník vypsat obsah adresáře?

PB071 Úvod do C, Nedostatečné ošetření zakázaného vstupu void demoInsecureSystemCall(const char* command) { FILE* file = NULL; printf("\n\n[USAGE INFO]: "); if ((file = fopen("usage_help.txt", "r")) != NULL) { char c; while ((c = getc(file)) != EOF) putc(c, stdout); fclose(file); } printf("\n\n"); // Printing file content is not allowed if (strncmp(command, "type", strlen("type")) == 0) { printf("[INFO] Type command is not allowed!\n"); return; } // Listing of directory is not allowed if (strncmp(command, "dir", strlen("dir")) == 0) { printf("[INFO] Dir command is not allowed!\n"); return; } // other_comands may not be allowed as well..... // We tested for all unwanted commands, input should be safe now, execute it printf("[INFO] Running command '%s'\n", command); system(command); } výpis nápovědy zákaz ‘type’ zákaz ‘dir’ spuštění příkazu příkaz na spuštění

PB071 Úvod do C, Jak může útočník vypsat adresář? Vložení bílých znaků ●při vyhodnocování system() jsou později ignorovány Různá velikost znaků (system() ignoruje) Speciální znaky (tab...) Řetězení několik příkazů... demoInsecureSystemCall("dir"); // Directory listing is not allowed demoInsecureSystemCall(" dir"); // Maybe, we can get around with spaces demoInsecureSystemCall("DiR"); //... or different character case demoInsecureSystemCall("\011dir"); //... or special character(s) (\011 is tab) //... or sequence of commands demoInsecureSystemCall("echo You can't stop me & dir"); //... or...

PB071 Úvod do C, Jak může útočník vypsat adresář a soubor? Předpoklad: výstup volání system() není vypisován útočníkovi ●i spuštění system(“dir”) nepomůže Lze využít několik následných volání Lze nepředpokládaně využít stávající funkčnosti ●např. zápis výstupních dat do souboru s nápovědou demoInsecureSystemCall("echo You can't stop me & dir > usage_help.txt"); demoInsecureSystemCall("echo Hacked"); demoInsecureSystemCall("type top_secret.txt"); demoInsecureSystemCall("\x20\x20\x20\x20\x20type top_secret.txt"); demoInsecureSystemCall("notepad.exe top_secret.txt");

PB071 Úvod do C, Demo – chybná práce s řetězci

PB071 Úvod do C, Textové řetězce Řetězec v C musí být ukončen nulou \0 Pokud není, velké množství funkcí nefunguje ●pokračují dokud není v paměti nula (za koncem pole) Funkce pro práci s řetězci ●sprintf, fprintf, snprintf, strcpy, strcat, strlen, strstr, strchr, read... Funkce pro práci s pamětí ●memcpy, memmove ●(pokud je délka na kopírování zjištěna strlen(string))

PB071 Úvod do C, Kontrola hesla void demoAdjacentMemoryOverflow(char* userName, char* password) { char message[100]; char realPassword[] = "very secret password nbu123"; char buf[8]; memset(buf, 0, sizeof(buf)); memset(message, 0, sizeof(message)); // We will copy only characters which fits into buf strncpy(buf,userName,sizeof(buf)); // Print username to standard output-nothing sensitive, right? sprintf(message, "Checking '%s' password\n", buf); printf("%s", message); if (strcmp(password, realPassword) == 0) { printf("Correct password.\n"); } else { printf("Wrong password.\n"); } očekávané heslo kopie do lokálního pole Problém? výpis veřejné informace – díky chybějící koncové nule i další paměti s heslem

PB071 Úvod do C, Zjištění očekávaného hesla Útok je často kombinace několika operací ●nedostatečná délka paměti ●chybějící ošetření koncové nuly ●funkce předpokládající přítomnost koncové nuly demoAdjacentMemoryOverflow("admin", "I don't know the password"); demoAdjacentMemoryOverflow("adminxxxx", "I still don't know the password"); demoAdjacentMemoryOverflow("admin", "very secret password nbu123");

PB071 Úvod do C, vložené userName bez koncové nuly první koncová nula pro řetězec buf začátek realPassword

PB071 Shrnutí 1.Buďte si vědomi možných problémů a útoků ●S velkou pravděpodobností budete vytvářet aplikace v síťovém prostředí ●Piště pěkně, nevytvářejte snadno napadnutelný kód ●Nástroje pro automatickou kontrolu za vás všechny problémy nevyřeší 2.Používejte bezpečné verze zranitelných funkcí ●Secure C library (xxx_s funkce s příponou _s, součást standardu C11) ●datové kontejnery, pole a řetězce s automatickou změnou velikosti (C++) 3.Kompilujte se všemi dostupnými ochrannými přepínači překladače ●Kompilujte bez varování (/Wall /Wextra; /W4) ●MSVC: /RTC1,/DYNAMICBASE,/GS,/NXCOMPAT ●GCC: -fstack-protector-all 4.Používejte automatické nástroje pro kontrolu kódu ●statická a dynamická analýza, fuzzing, skenery zranitelností 5.Využívejte ochrany nabízené moderními operačními systémy ●DEP, ASRL... Úvod do C,

PB071 Úvod do C, Diskuze

PB071 Úvod do C, Debata 1.Úroveň slidů, hloubka záběru? 2.Témata chybějící na přednáškách? 3.Co vám chybí na cvičeních? 4.Náročnost domácích úkolů? 5.Způsob bodování domácích úkolů? 6.Způsob testování domácích úkolů? 7.Přínos odevzdání nanečisto? 8.Cokoli dalšího? Piště prosím do ankety + i -

PB071 Úvod do C,