This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
teme:tema-3 [2016/01/10 21:08] razvan.deaconescu [Enunț] |
teme:tema-3 [2016/01/19 01:45] razvan.deaconescu [Tema 3] |
||
---|---|---|---|
Line 4: | Line 4: | ||
* Deadline Hard: 19.01.2016 23:55 | * Deadline Hard: 19.01.2016 23:55 | ||
* Data publicării: 09.01.2016 ''01:15'' | * Data publicării: 09.01.2016 ''01:15'' | ||
- | * Data ultimei modificări: 09.01.2016 ''18:30'' | + | * Data ultimei modificări: 19.01.2016 ''01:46'' |
* Responsabili: | * Responsabili: | ||
* [[vladimir.diaconescu@cs.pub.ro|Vladimir Diaconescu]] | * [[vladimir.diaconescu@cs.pub.ro|Vladimir Diaconescu]] | ||
Line 22: | Line 22: | ||
===== Setup ===== | ===== Setup ===== | ||
- | Pentru dezvoltarea temei recomandăm să folosiți mașina virtuală de Windows descrisă în secțiunea [[:utile#masini-virtuale|Mașini virtuale]] din pagina de resurse. Mașina virtuală de Windows este numită ''SSS - Windows 7 32bit''. Această mașină virtuală este folosită și pentru verificarea temei pe [[https://vmchecker.cs.pub.ro/ui/#IOCLA|vmchecker]]. | + | Pentru dezvoltarea temei va trebui să folosiți mașina virtuală de Windows descrisă în secțiunea [[:utile#masini-virtuale|Mașini virtuale]] din pagina de resurse. Mașina virtuală de Windows este numită ''SSS - Windows 7 32bit''. Această mașină virtuală este folosită și pentru verificarea temei pe [[https://vmchecker.cs.pub.ro/ui/#IOCLA|vmchecker]]. |
- | În [[http://elf.cs.pub.ro/asm/res/teme/iocla-tema3-resurse.zip|arhiva de resurse a temei]] veți vedea că există fișierul ''seed.c'', precum și scriptul Python ''mangle.py''. | + | <note important> |
+ | Puteți testa anumite funcționalități pe alt sistem, dar implementarea voastră trebuie să meargă pe mașina virtuală. Este posibil ca, datorită mediului diferit, anumite payload-uri să meargă pe un alt sistem dar nu pe mașina virtuală. Folosiți, ca referință, mașina virtuală. | ||
+ | </note> | ||
+ | |||
+ | În [[http://elf.cs.pub.ro/asm/res/teme/iocla-tema3-resurse.zip|arhiva de resurse a temei]] veți vedea că există fișierul ''seed.c'', precum și scriptul Python ''mangler.py''. | ||
Pentru a genera fișierul sursă C plecând de la ''seed.c'', rulați comanda:<code> | Pentru a genera fișierul sursă C plecând de la ''seed.c'', rulați comanda:<code> | ||
- | python mangle.py <nume> <prenume> <a treia cifră din numărul grupei> | + | python mangler.py <nume> <prenume> <a treia cifră din numărul grupei> |
</code> | </code> | ||
unde: | unde: | ||
Line 36: | Line 40: | ||
<note> | <note> | ||
De exemplu, pentru ''Ionescu Anca-Monica'' de la grupa ''323CA'', modul de rulare a comenzii de generare a fișierului sursă C va fi<code> | De exemplu, pentru ''Ionescu Anca-Monica'' de la grupa ''323CA'', modul de rulare a comenzii de generare a fișierului sursă C va fi<code> | ||
- | python mangle.py Ionescu Anca 3 | + | python mangler.py Ionescu Anca 3 |
</code> | </code> | ||
</note> | </note> | ||
Line 49: | Line 53: | ||
</code> | </code> | ||
+ | ==== Dezactivare ASLR ==== | ||
+ | |||
+ | Punctul 3 de exploatat (apelarea funcției ''fopen'') necesită dezactivarea ASLR (//Address Space Layout Randomization//); altfel biblioteca standard C (''msvcrt.dll'') va fi încărcată la adrese diferite iar funcția ''fopen'' va avea la fiecare sesiune în sistem o altă adresă. | ||
+ | |||
+ | Pentru dezactivarea ASLR (așa cum este indicat [[http://icompile.eladkarako.com/disable-aslr/|aici]]) va trebui să editați o intrare în Windows Registry în [[:utile#masini-virtuale|mașina virtuală de Windows]] (vom face actualizarea mașinii). Pentru acesta urmați pașii: | ||
+ | * Folosiți combinația de taste ''Windows + R'' și rulați comanda ''regedit''. | ||
+ | * În fereastra proaspăt deschisă (''Registry Editor''), navigați în ''Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management''. | ||
+ | * Folosiți click dreapta pe intrarea ''Memory Management'' și selectați din meniul contextual ''New -> DWORD (32-bit) Value''. | ||
+ | * Numiți noua intrare ''MoveImages'' și lasăți-o inițializată la ''0'' (''0x00000000''). Este inițializată implicit. | ||
+ | * Reporniți sistemul. | ||
+ | |||
+ | Acum ASLR este dezactivat și biblioteca standard C (''msvcrt.dll'') va fi încărcată la aceeași adresă (''0x6ff51000''). Adresa funcției ''fopen'' va fi mereu acceeași (''0x6ff6b2c4''). Puteți verifica acest lucru prin inspectarea executabilului ''tema3.exe'' la fel ca mai jos:<code> | ||
+ | C:\Users\student\Downloads\iocla-tema3-resurse>gdb -q ./tema3.exe | ||
+ | Reading symbols from C:\Users\student\Downloads\iocla-tema3-resurse\tema3.exe... | ||
+ | (no debugging symbols found)...done. | ||
+ | (gdb) start | ||
+ | Temporary breakpoint 1 at 0x4015fa | ||
+ | Starting program: C:\Users\student\Downloads\iocla-tema3-resurse/./tema3.exe | ||
+ | [New Thread 2388.0x9e4] | ||
+ | |||
+ | Temporary breakpoint 1, 0x004015fa in main () | ||
+ | (gdb) p fopen | ||
+ | $1 = {<text variable, no debug info>} 0x6ff6b2c4 <msvcrt!fopen> | ||
+ | (gdb) info sharedlibrary | ||
+ | From To Syms Read Shared Object Library | ||
+ | 0x77ec1000 0x77ffbc3c Yes (*) C:\Windows\system32\ntdll.dll | ||
+ | 0x77de1000 0x77eb30f8 Yes (*) C:\Windows\system32\kernel32.dll | ||
+ | 0x0dce1000 0x0dd2a668 Yes (*) C:\Windows\system32\KernelBase.dll | ||
+ | 0x6ff51000 0x6fffb2c4 Yes (*) C:\Windows\system32\msvcrt.dll | ||
+ | (*): Shared library is missing debugging information. | ||
+ | (gdb) | ||
+ | </code> | ||
===== Implementare ===== | ===== Implementare ===== | ||
Line 58: | Line 94: | ||
Temele vor trebui încărcate pe platforma [[https://vmchecker.cs.pub.ro/ui/#IOCLA|vmchecker]] (în secțiunea IOCLA) și vor fi testate automat. Arhiva încărcată va fi o arhivă ''.zip'' care trebuie să conțină: | Temele vor trebui încărcate pe platforma [[https://vmchecker.cs.pub.ro/ui/#IOCLA|vmchecker]] (în secțiunea IOCLA) și vor fi testate automat. Arhiva încărcată va fi o arhivă ''.zip'' care trebuie să conțină: | ||
- | * fișierele sursă/script-urile ce generează intrările pentru program: ''payload_a'', ''payload_b'', ''payload_c'' | + | * fișierele cu intrările pentru program: ''payload_a'', ''payload_b'', ''payload_c'' |
+ | * Dacă ați folosit un script atunci adăugați în arhiva submisă și scriptul cu care ați obținut acele payload-uri. | ||
+ | * Dacă nu ați folosit un script atunci adăugați în README modul de obținere a payload-urilor. | ||
* fișierul sursă aferent: ''tema3.c'' | * fișierul sursă aferent: ''tema3.c'' | ||
+ | * fișierul ''credentials.txt'' care conține numele, prenumele și a 3-a cifră din numărul grupei, fiecare pe câte o line, astfel: | ||
+ | <code> | ||
+ | <Nume> | ||
+ | <Prenume> | ||
+ | <A 3-a cifră din numărul grupei></code> | ||
* fișier ''README'' ce conține descrierea implementării | * fișier ''README'' ce conține descrierea implementării | ||
* analiza statică (pe scurt) | * analiza statică (pe scurt) | ||
* cum ați determinat userul și parola de login | * cum ați determinat userul și parola de login | ||
* cum v-ați gândit să faceți programul să ajungă în ''secret_func1'', ''secret_func2'', ''fopen'' | * cum v-ați gândit să faceți programul să ajungă în ''secret_func1'', ''secret_func2'', ''fopen'' | ||
+ | * scriptul (sau scripturile) de generare a fișierelor payload | ||
Punctajul este repartizat în felul următor: | Punctajul este repartizat în felul următor: | ||
Line 70: | Line 114: | ||
* 25% determinare user și parola, și trecerea de procesul de login | * 25% determinare user și parola, și trecerea de procesul de login | ||
* 30% cele trei exploatări | * 30% cele trei exploatări | ||
+ | |||
+ | <note> | ||
+ | Ca să compensăm pentru întârzierea anunțării temei, tema valorează **1.5 puncte** față de **1 punct** cât valorează celelalte două teme. Punctajul total obținut pe teme se trunchiază la **3 puncte**. | ||
+ | </note> | ||
===== Precizări suplimentare ===== | ===== Precizări suplimentare ===== |