Professional Documents
Culture Documents
vod do C, 10.12.2013
PB071
Organizan
Tento tden posledn pednka i cvien Zpotov pklad
na vaem cvien, obdobn jako pi ncviku kad cvien bude mt jin pklad je nutn spn vypracovat (nen bodovno) bude vypsn opravn termn (leden)
Zkouka
vypsno v ISu, u pota v B130 (Linux) (+ B116&B117 Windows) muste znt sv heslo na Aisu! nutno mt zapsn v poznmkovm bloku zpoet (uhnjte svho cvicho) 50 minut
vod do C, 10.12.2013
PB071
vod do C, 10.12.2013
PB071
vod do C, 10.12.2013
PB071
Pedpoklady
MS Visual Studio 2010 (MSVC kompiltor)
dostupn z fakultn MSAA
Debug reim
vod do C, 10.12.2013
PB071
void demoBufferOverflowData() { int unused_variable = 30; #define NORMAL_US R !n! #define ADM"N_US R !a! int userRi#$ts = NORMAL_US R; #define US R_"N%U&_MA'_L N(&) * char userName[US R_"N%U&_MA'_L N(&)]; char +asswd[US R_"N%U&_MA'_L N(&)]; // print some info about variables +rintf(,-./0s0 -+1n,, ,userName,, userName); +rintf(,-./0s0 -+1n,, ,+asswd,, +asswd); +rintf(,-./0s0 -+1n,, ,unused_variable,, &unused_variable); +rintf(,-./0s0 -+1n,, ,userRi#$ts,, &userRi#$ts); +rintf(,1n,); // Get user name +rintf(,lo#in as0 ,); #ets(userName); // Get password +rintf(,-s2vulnerable3ma4$ine34om0 ,, userName); #ets(+asswd);
promnn udvajc prva aktuln pihlenho uivatele pole s fixn dlkou (bude dochzet k zpisu za konec) pomocn vpis adres loklnch promnnch na zsobnku naten uivatelskho jmna a hesla (bez kontroly dlky)
// Check user rights (set to NORMA !"#$R and not changed in code% if (userRi#$ts == NORMAL_US R) { +rintf(,1n5el4ome6 normal user !-s!6 7our ri#$ts are limited31n1n,, userName); } if (userRi#$ts == ADM"N_US R) { vpis info uivatele dle +rintf(,1n5el4ome6 all mi#$t7 admin user !-s!81n,, userName); promnn s prvem } }
vod do C, 10.12.2013
PB071
unused_variable
vod do C, 10.12.2013
PB071
userName passwd
vod do C, 10.12.2013
PB071
vod do C, 10.12.2013
PB071
PB071
vod do C, 10.12.2013
PB071
Jazyk C nem pli pohodln nstroje pro naten vstupu s variabiln dlkou
musme zjistit dopedu dlku vstupu a alokovat (malloc) dostaten pole nebo eit situaci, kdy se natan vstup nevleze do fixnho pole (nap. fgets())
vod do C, 10.12.2013
PB071
vod do C, 10.12.2013
PB071
Dynamick analza
probh nad sputnou binarkou programu nap. Valgrind (nejen memory leaks)
vod do C, 10.12.2013
PB071
Microsoft PREfast
Microsoft Visual Studio 2012/3 Ultimate
pro studenty dostupn v rmci MSAA
vod do C, 10.12.2013
PB071
vod do C, 10.12.2013
PB071
Pedpoklady
Nezvisl na pekladai Funkce demoInsecureSystemCall()
vype ze souboru informace o pouit nedovol pout pkaz type a dir
vod do C, 10.12.2013
PB071
zkaz type
zkaz dir
// )e tested for all unwanted commands* input should be safe now* e+ecute it +rintf(,;"N:O< Runnin# 4ommand !-s!1n,, 4ommand); s7stem(4ommand); } vod do C, 10.12.2013
sputn pkazu
PB071
Rzn velikost znak (system() ignoruje) Speciln znaky (tab...) etzen nkolik pkaz ...
demo"nse4ureS7stem9all(,dir,); // ,irector' listing is not allowed demo"nse4ureS7stem9all(, dir,); // Ma'be* we can get around with spaces demo"nse4ureS7stem9all(,DiR,); // ((( or different character case demo"nse4ureS7stem9all(,10>>dir,); // ((( or special character(s% (-.// is tab% // ((( or se0uence of commands demo"nse4ureS7stem9all(,e4$o ?ou 4an!t sto+ me @ dir,); // ((( do or C, (((10.12.2013 PB071 vod
PB071
vod do C, 10.12.2013
PB071
Textov etzce
etzec v C mus bt ukonen nulou \0 Pokud nen, velk mnostv funkc nefunguje
pokrauj dokud nen v pamti nula (za koncem pole)
http://www.awarenetwork.org/etc/alpha/?x=5
vod do C, 10.12.2013
PB071
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)); kopie do loklnho pole Problm? // 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"); } vpis veejn informace else { dky chybjc koncov nule i printf("Wrong password.\n"); dal pamti s heslem } }vod do C, 10.12.2013
PB071
oekvan heslo
vod do C, 10.12.2013
PB071
zatek realPassword
vod do C, 10.12.2013
PB071
Shrnut
1. Bute si vdomi monch problm a tok
S velkou pravdpodobnost budete vytvet aplikace v sovm prosted Pit pkn, nevytvejte snadno napadnuteln kd Nstroje pro automatickou kontrolu za vs vechny problmy nevye
2.
3.
4. 5.
26 vod do C, 10.12.2013
PB071
Tutorily
Buffer Overflow Exploitation Megaprimer (Linux)
http://www.securitytube.net/groups?operation=view&groupId=4
27 | vod do C, 10.12.2013
PB071
Co dl po PB071?
vod do C, 10.12.2013
PB071
Programovn v jazyce Java (PB162) vod do vvoje v C#/.NET (PV178) Tmatick vvoj aplikac v C/C++ (PB173)
zamen na een praktickch programtorskch problm v oblasti vaeho zjmu tmatick skupiny: Zpracovn obrazu, Systmov programovn Linux a Windows, Ovladae jdra Linux, Aplikovan kryptografie a bezpenost... lze zapisovat opakovan (rzn seminrn skupiny)
PB071
PB071
Diskuze
vod do C, 10.12.2013
PB071
Debata
1. 2. 3. 4. 5. 6. 7. 8. 9. rove slid, hloubka zbru? Tmata chybjc na pednkch? Co je pro vs nejvt pnos ze cvien? Co vm chyb na cviench? Nronost domcch kol? Zpsob bodovn domcch kol? Pnos odevzdn naneisto? Pnos krtkch testk ped cvienm? Cokoli dalho? Pit prosm do ankety + i PB071
vod do C, 10.12.2013
vod do C, 10.12.2013
PB071