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
teme:tema-3 [2016/01/12 13:02]
razvan.deaconescu [Tema 3]
teme:tema-3 [2016/01/19 10:55] (current)
razvan.deaconescu [Tema 3]
Line 1: Line 1:
 ====== Tema 3 ====== ====== Tema 3 ======
  
-* Deadline Soft: 19.01.2016 23:55 +* Deadline Soft: 20.01.2016 23:55 
-* Deadline Hard: 19.01.2016 23:55+* Deadline Hard: 20.01.2016 23:55
 * Data publicării:​ 09.01.2016 ''​01:​15''​ * Data publicării:​ 09.01.2016 ''​01:​15''​
-* Data ultimei modificări: ​12.01.2016 ''​13:02''​+* Data ultimei modificări: ​19.01.2016 ''​10:55''​
 * 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>​
  
 +==== 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 77: Line 124:
 ===== 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.1452596566.txt.gz · Last modified: 2016/01/12 13:02 by razvan.deaconescu