This is an old revision of the document!


Tema 4

Ce trebuie să știu? Studiați secțiunea de Cunoștințe evaluate și suportul agregat necesar temei.

Thread nou? Nu. Pentru o ușoară parcurgere a mesajelor, folosiți thread-urile de discuții existente în cadrul forumului, fără a crea altele. În consecință, thread-urile (subiectele de discuții) nou create vor fi șterse.

Căutare. Căutați pe forum informația pe care doriți să o obțineți, înainte să puneți o întrebare. De cele mai multe ori, cineva a mai întrebat același lucru. În fiecare thread al forumului aveți informații despre cum puteți căuta în forum.

Printscreen/poză? Nu. În cazul în care doriți să publicați un printscreen pe forum, recomandăm folosirea site-urilor pentru partajarea gratuită a imaginilor, precum imgur sau alternativele sale, publicând pe forum doar link către printscreen. Pozele inserate în răspunsuri, vor fi șterse.

Actualizări. Urmăriți atât forumul cât și modificările aduse enunțului/checker-ului, modificări ce sunt publicate și explicate în paragrafele de mai jos.

Regulament. Înainte și în timpul realizării temei, vă rugăm să parcurgeți indicațiile legate de realizarea temelor, încluzând ce înseamnă o temă copiată și cum penalizăm temele copiate. Folosiți cu încredere forumurile de pe cs.curs.pub.ro pentru întrebări și neclarități legate de teme.

Întrebări frecvente. În timpul realizării temei, când vă loviți de probleme și aveți nevoie de suportul echipei de USO, parcurgeți și lista de întrebări frecvente întâlnite în cadrul temelor. Să țineți cont, va rugăm, și de recomandările de comunicare electronică.

Ajutor reciproc. Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forum să postați și soluția găsită. De asemenea dacă știți răspunsul la întrebările colegilor sunteți încurajați să le răspundeți.

Informații generale

Deadline: 10 Ianuarie 2018, ora 23:55
Timp de lucru: Enough
Punctaj: 0.8 puncte din nota finală
Formular pentru trimitere temă: Formular submitere

Actualizări enunț:

  • 4 Ian 2018 V2
    • Task01 - Update enunt rail-fence, poate contine caractere alfanumerice, linie -, virgula , si spatii.

Actualizări checker:

  • 19 Dec 2017 V6
    • Task02 - update checker, acum checker-ul accepta si combinatii de space/tabs in configurare
  • 19 Dec 2017 V5
    • Task04 - update checker anti-cheating
  • 19 Dec 2017 V4
    • Task03 - update checker
  • 18 Dec 2017 V3
    • Task02 - update checker
  • 15 Dec 2017 V2
    • Task01 - update teste pentru xor.sh

Cunoștințe evaluate

  • notiuni avansata de shell scripting
  • sisteme de fisiere
  • security
  • procese

Testarea temei. Finalizarea temei. Mașină virtuală.

Instrucțiuni de utilizare a checkerului uso

Descărcare mașină virtuală și informații despre aceasta

  • Mașina virtuală și link-ul de unde poate fi ea descărcată se găsesc pe pagina cu informații despre mașina virtuală.

Testarea temei se va face doar pe mașina virtulă (aici) autentificat ca utilizator student, folosind utilitarul uso. Acesta poate fi executat în orice moment pentru a verifica dacă au fost rezolvate corect task-urile. Nu lucrați autentificat ca utilizator root în sistem, la nicio temă. Din acest motiv există posibilitatea să nu vă treacă testele. Pe de altă parte, nu este o metoda de siguranță să lucrați autentificat ca utilizator root din motive de securitate și/sau permisiuni.

Utilitarul uso implementează testele doar pentru task-urile temei curente. La fiecare temă nouă, pentru a folosi utilitarul uso, primul pas este să porniți tema folosind comanda sudo uso start. În caz contrar, nu veți avea actualizat checker-ul pentru tema curentă.

Verificați versiunea utilitarului uso cât și a checker-ului, afișată la rularea comenzii sudo uso start sau sudo uso check, pe prima linie a output-ului. Asigurați-vă că aveți ultima versiune înainte de a continua lucrul pentru temă. Versiunea actuală este specificată în secțiunea Informații generale prezentă în enunțul temei. Pentru situațiile în care nu dispuneți de ultima versiune a utilitarului uso sau checker-ului, rulați sudo uso update.

Finalizarea temei se realizează prin rularea comenzii sudo uso submit și încărcarea codului returnat de această comandă (32 de caractere alfanumerice), în formularul din secțiunea Informații generale. Pentru a evita transcrierea eronată a codului returnat de checker, recomandăm copierea acestuia din interfața mașinii host conectată prin SSH către mașina guest după cum urmează:

  • În cazul în care folosiți Linux sau macOS, copierea codului se realizează din terminal selectând codul emis și apăsând combinația de taste CTRL+SHIFT+C (copy)
  • În cazul in care folosiți Windows, copierea se realizează din PuTTy selectând codul codul emis (nu este nevoie să folosiți CTRL+SHIFT+C, codul fiind automat copiat la selectare).
  • După ce a fost copiat în clipboard codul emis de checker, il puteți lipi (paste) în formularul din secțiunea Informații generale

Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a temei ori a unui task. Puteți să sugerați diferite abordări sau să dați idei generale (dar nu comenzi) celorlalți. Urmăriți indicațiile legate de realizarea temelor. La prima abatere studentul primește un avertisment, iar punctajul obținut pe temă îi este redus cu valoarea punctajului pe task-ul respectiv. Începând cu a doua abatere, se va anula întregul punctaj pe tema curentă. Temele anterioare sau cele viitoare nu vor fi afectate. Abaterile se păstrează pe parcursul semestrului. Ori de câte ori se încalcă această regulă, se va ține cont de istoricul abaterilor. Abaterile vor fi actualizate în catalog.

Task 01 (20p)

Ciphers… ciphers everywhere.

Vă aflați în folderul /home/student/tema04/task01. Va trebui sa implementati urmatorii algoritmi de criptare/decriptare in bash.

Toate scripturile se vor doar in bash!

Pentru testare este recomandat sa rulati checkerul doar pe task-ul curent folosind sudo uso check 1

  • [5p] Xor cipher: cel mai simplu mod de criptare al unui string este realizat prin aplicarea operatiei xor caracter cu caracter folosindu-ne de o cheie.
    • Creați un script numit xor.sh. Scriptul primește două argumente:
      • argumentul 1 reprezintă textul care se va cripta/decripta
      • argumentul 2 reprezintă cheia cu care se va cripta/decripta
    • Daca dimensiunea cheii este mai mica decat textul se va face padding la cheie cu ea insasi pana cand se ajunge la dimeansiunea textului.
    • Se va garanta input care va genera caractere printabile
    • Mai multe detalii despre Xor Cipher gasiti aici: Wiki One Time Pad
    • Exemplu de folosire a scriptului xor.sh:
[student@uso]$ ./xor.sh "simple_test" "#"    
PJNSOF|WFPW
[student@uso]$ ./xor.sh "simple_test" "####"  # este echivalent cu exemplul de mai sus
PJNSOF|WFPW
  • [10p] Caesar cipher: este un tip de criptare prin substituie. Dandu-se un text si o cheie ca input fiecare caracter va fi shiftat la dreapta cu numarul indicat de cheie.
    • Creați un script numit caesar.sh. Scriptul primește trei argumente:
      • argumentul 1 reprezintă reprezinta modul de functionare, criptare sau decriptare, poate lua 2 valori: enc sau dec
      • argumentul 2 reprezintă textul care se va cripta/decripta
      • argumentul 3 reprezintă cheia de substitutie, daca este omis se va considera valoarea implicita 13
    • Se garanteaza ca input pentru acest cipher doar caractere din alfabetul latin
    • Mai multe detalii despre Caesar Cipher gasiti aici: Wiki ROT13
    • Exemplu de folosire a scriptului caesar.sh:
[student@uso]$ ./caesar.sh "enc" "ABC" 3
DEF
[student@uso]$ ./caesar.sh "enc" "simpleTest"
fvzcyrGrfg
[student@uso]$ ./caesar.sh "enc" "simpleTest" 13  # este echivalent cu exemplul de mai sus
fvzcyrGrfg
[student@uso]$ ./caesar.sh "dec" "fvzcyrGrfg" 13
simpleTest
  • [15p] Rail-fence cipher: este un mod de criptare prin transpozitie care transpune un text pe un anumit numar de randuri in zig-zag.
    • Creați un script numit rail-fence.sh. Scriptul primește trei argumente:
      • argumentul 1 reprezintă reprezinta modul de functionare, criptare sau decriptare, poate lua 2 valori: enc sau dec
      • argumentul 2 reprezintă textul care se va cripta/decripta
      • argumentul 3 reprezintă cheia
    • Se garanteaza ca input pentru acest cipher doar caractere alfanumerice, spatii, linie - si virgula ,.
    • Mai multe detalii despre Rail-Fence Cipher gasiti aici: Wiki
    • Exemplu de folosire a scriptului rail-fence.sh:
[student@uso]$ ./rail-fence.sh "enc" "the attack is now" 3
tacswh taki oet n
[student@uso]$ ./rail-fence.sh "dec" "tacswh taki oet n" 3
the attack is now

Task 02 (20p)

Este recomandata testarea individuala a acestui task folosind sudo uso check 2.

Testarea va dura aproximativ un minut. Be patient!

Vă aflați în folderul /home/student/tema04/task02.

Creati un script cu numele job.sh. Continutul scriptului va fi urmatorul:

#!/bin/bash
 
date >> /home/student/tema04/task02/log

Configurati masina virtuala astfel incat scriptul va fi rulat automat din minut in minut.

Hint man crontab

Modificati scriptul astfel incat sa protejati log-ul de orice modificare din exterior. job.sh va putea modifica log si se vor observa noile intrari create din minut in minut. Oricine va putea citi log dar nu il va putea modifica cu usurinta, chiar daca are drept de sudo.

[student@uso]$ cat log
Thu Dec 13 15:04:01 UTC 2017
Thu Dec 13 15:05:01 UTC 2017
[student@uso]$ echo "Fake entry here" >> log
-bash: log: Permission denied
[student@uso]$ sudo echo "Fake entry here" >> log 
-bash: log: Permission denied
[student@uso]$ rm log
rm: remove write-protected regular file 'log'? yes
rm: cannot remove 'log': Operation not permitted
[student@uso]$ sudo rm log
rm: cannot remove 'log': Operation not permitted

Task 03 (20p)

Acest task se va testa direct pe VM, fara conexiuni de ssh de pe masina host.

De asemenea este recomandat sa il testati individual folosind sudo uso check 3. Nu tastati nimic in timp ce se executa scriptul de testare! Dupa terminarea checker-ului este posibil sa nu mai apara nimic din ce tastati la terminal desi comenzile merg in continuare. Daca se intampla acest lucru tastati reset si terminal va reveni la normal.

Vă aflați în folderul /home/student/tema04/task03. Pentru acest task va trebui sa implementati un keylogger simplificat, acesta este un software care va inregistra tot ce se scrie la tastatura. Linux va pune la dispozitie un anumit utilitar care va rezolva mare parte din munca.

Hint: man showkey

Cititi cu atentie manualul, nu este nevoie de bucle infinite pentru acest task!

Creati scriptul de bash keylogger.sh care va intercepta cand se apasa o tasta si va inregistra totul in output.log intr-o forma human readible. Exemplu de utilizare/testare/output:

[student@usovm]$ sudo ./keylogger.sh
 

Dupa ce am dat enter porneste procesul si terminalul curent ramane aparent neresponsiv. Intre timp tastez ”# loktar ogar<enter>”. Dupa ce se termina scriptul inspectam rezultatul.

[student@usovm]$ cat output.log
 
3 loktar ogar

Va trebui sa interceptati doar caracterele alfanumerice, spatiu si enter. A se observa ca # a fost capturat ca 3 in acest exemplu.

Task 04 (30p)

Vă aflați în folderul /home/student/tema04/task04. Porniti task-ul cu sudo uso check 4, in momentul acesta aveti executabilul forensics. Executabilul asteapta un input specific de la voi, daca il nimeriti va afisa un Flag ascuns.

Creati scriptul de bash solution.sh care va apela de fiecare data executabilul si va genera input-ul corect pentru a afisa flag-ul.

Task obligatoriu pentru toate temele (0p)

Asigurați-vă că ați submis tema și ați încărcat codul aferent submisiei în formularul din secțiunea de Informații generale. Acest lucru este necesar ori de câte ori modificați tema și o submiteți din nou (detalii aici), până la termenul limită. În caz contrar, punctajul aferent temei va fi nul (0 puncte).

uso/teme/tema-4.1515078235.txt.gz · Last modified: 2018/01/04 17:03 by acaciulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0