User Tools

Site Tools


teme:tema-3

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
teme:tema-3 [2016/01/09 18:30]
vladimir.diaconescu [Tema 3]
teme:tema-3 [2016/01/19 02:53]
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 ''​02:52''​
 * Responsabili:​ * Responsabili:​
   * [[vladimir.diaconescu@cs.pub.ro|Vladimir Diaconescu]]   * [[vladimir.diaconescu@cs.pub.ro|Vladimir Diaconescu]]
Line 18: Line 18:
     - Programul să ajungă să execute funcția ''​secret_func1''​.     - Programul să ajungă să execute funcția ''​secret_func1''​.
     - Programul să "​apeleze"​ funcția ''​secret_func2''​ cu argumente valide de intrare.     - Programul să "​apeleze"​ funcția ''​secret_func2''​ cu argumente valide de intrare.
-    - Programul să "​apeleze"​ funcția ''​fopen('<​prenume>',​ '​w'​)''​ pentru a crea un fișier local având prenumele vostru.+    - Programul să "​apeleze" ​din biblioteca standard C funcția ''​fopen('<​prenume>',​ '​w'​)''​ pentru a crea un fișier local având prenumele vostru.
  
 ===== 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>​
  
 +==== Simplificat ====
 +
 +Toți pașii de mai sus sunt realizați de scriptul de verificare (''​checker.py''​) din [[http://​elf.cs.pub.ro/​asm/​res/​teme/​iocla-tema3-resurse.zip|arhiva de resurse a laboratorului]]. Prin rularea scriptului de verificare se configurează variabila de mediu ''​PATH''​ se generează fișierul ''​tema3.c''​ și apoi se obține fișierul executabil aferent și se validează conținutul payload-urilor.
 +
 +==== 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 98:
  
 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''​ 
-  * fișierul ​sursă aferent: ​''​tema3.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 ''​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 117:
   * 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 =====
  
-În cadrul corectării, ​vom verifica dacă ''​tema3.c''​ este într-adevăr fișierul ​generat pornind de la ''​seed.c''​ și datele voastre. ​Dacă există diferențe, nu se merge mai departe în procesul ​de corectare.+În cadrul corectării, ​fișierul ​''​tema3.c''​ este generat ​în mod automat ​pornind de la ''​seed.c''​ și datele voastre ​din fișierul ''​credentials.txt''​. Acest lucru este realizat de scriptul de verificare ''​checker.py''​ care verifică și corectitudinea conținutului fișierelor ​de tip payload. 
 + 
 +Datele din fișierul ''​credentials.txt''​ trebuie să fie corecte, cu excepția motivelor bine întemeiate.
  
 Din moment ce programul de intrare scris în C este dat, analiza statică presupune să interpretați cod C, nu assembly. Din moment ce programul de intrare scris în C este dat, analiza statică presupune să interpretați cod C, nu assembly.
teme/tema-3.txt · Last modified: 2016/01/19 10:55 by razvan.deaconescu