Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII...

49
Securitate Software V.II Vulnerabilit˘ aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1 / 50

Transcript of Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII...

Page 1: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Securitate SoftwareV.II Vulnerabilitaţi specifice sistemelor

de operareNeprotejarea datelor stocate pe disc

1 / 50

Page 2: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Obiective

prezentarea vulnerabilitaţiilor ce rezulta din manipularea greșita apermisiunilor datelor stocate pe discprezentarea mecanismelor de asignare a permisiunilor (UNIX șiWindows) și vulnerabilitaţiile asociate

2 / 50

Page 3: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Continut

1 Neprotejarea datelor stocate

2 Permisiunile fisierelor in Linux, vulnerabilitatiPermisiunile fisierelorCrearea unui fișierLegaturiRace conditionsFisiere temporare

3 / 50

Page 4: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Descriere

neprotejarea datelor stocate pe disc (data at rest)cel mai rau caz: neprotejarea datelorneprotejarea corecta a datelor

doua componente1 mecanism absent / slab pentru controlul accesului2 criptare slaba / inexistenta a datelor

cazuri pentru controlul slab al accesuluise permite accesul la toata lumease permite accesul la utilizatorii neprivilegiaţiacces pentru scriere pe un executabilacces pentru scriere pe fișiere de configurareacces pentru citire pe fișiere importanteutilizarea fișierelor sistem fara mecanisme de control al accesului

4 / 50

Page 5: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Referinţe CWE

CWE-264: ”Permissions, Privileges, and Access Controls”foarte generalalegat de managementul permisiunilor, privilegiilor și alte mecanisme desecuritate necesare pentru controlul accesului

CWE-284: ”Improper Access Control”nu restricţioneaza corect accesul la resurse persoanelor neautorizate

CWE-693: ”Protection Mechanism Failure”folosirea incorecta a mecanismelor de protecţie

CWE-282: ”Improper Ownership Management”CWE-275: ”permission Issues”

atribuirea incorecta sau manipularea greșita a permisiunilor

5 / 50

Page 6: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Relevanţa - numarul vulnerabilităţilor legat de privilegii

6 / 50

Page 7: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Relevanţa - numarul vulnerabilităţilor legat de privilegii (II)

7 / 50

Page 8: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Vulnerabilităţi

scurgeri de informaţiiscurgerea accidentala de informaţii prin mesaje de eroare și alte surse

race conditionsfolosirea de parole slabe

indiferent de calitatea criptarii, parolele folosite pentru a proteja datelesunt slabe

folosirea greșita a algoritmilor criptograficifolosirea algoritmilor de criptare dezvoltaţi de voi sau a unora cesuporta doar chei de dimensiune mici

8 / 50

Page 9: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Identificarea vulnerabilităţiilor

uitaţiva dupa cod careconfigureaza / controleaza accesul șiasigneaza drepturi de acces utilizatorilor neprivilegiaţi

uitaţiva dupa cod carecreeaza un obiect fara a configura controlul accesului șicreeaza obiectul într-un loc unde utilizatorii neprivilegiaţi au drepturi descriere

uitaţiva dupa cod carescrie informaţii de configurare într-un loc partajatscrie informaţii sensibile într-o zona unde utilizatorii neprivilegiaţi audrepturi de citire

uitaţiva dupa fișiere cu permisiuni slabeex. Linux: find / -type f -perm +002

9 / 50

Page 10: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Neprotejarea datelor stocate

Recomandări

atenţie la permisiuni și criptaţi datele corecttrebuie sa aveţi grija la fiecare bit configurat în schema de permisiuniaveţi grija sa nu expuneţi date sau fișiere binarefișierele binare ar trebui sa fie în directoare sistem sau zone protejatescrieţi datele legat de un utilizator în directorul local al utilizatorului

10 / 50

Page 11: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Permisiunile fisierelor

File IDs

informaţii de proprietate: UID și GIDconfigurate la crearea fișierului

owner UID = effective UID al procesului care a creat fișierulpentru GID sunt doua abordari

BSD: GID primește valoarea GID directorului parinteLinux: GID primește valoarea effective GID al procesului care a creatfișierul

pot fi schimbate cu chown(), lchown(), fchown()în mod normal doar root poate schimba drepturile de accesdeţinatorul unui fișier poate schimba GID cu un alt grup de careaparţine

11 / 50

Page 12: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Permisiunile fisierelor

Permisiuni asupra fişierelor

12 biţi în grupe de câte 3 biţi: special, owner, group, otherpermisiuni: citire (r), scriere (w), execuţie (x)

citire: deschidere, citirescriere: deschidere, scriereexecuţie: execve

special: SUID, SGID, sticky (sau tacky)specificat prin numere în octal: 0644pot fi schimbate cu chmod și fchmoddoar root și proprietarul pot schimba drepturile

12 / 50

Page 13: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Permisiunile fisierelor

Permisiuni asupra directoarelor

asemenea fișierelor dar alta interpretarecitire: deschidere director, citire directorscriere: creare (mkdir, link, unlink, rmdir)execuţie (cautare, parcurgere): chdirSUID: nu are semnificaţieSGID: moștenire GID (semantica BSD)sticky: doar proprietarul fișierului din director are drepturi deredenumire și ștergere (ex. /tmp)umask influenţeaza mkdir

13 / 50

Page 14: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Permisiunile fisierelor

Umask

masca de 9 biţi este folosita la crearea fișierelor / directoarelorspecificata de numere în octal: 022fiecare proces poate sa-și configureze propria mascamoștenita de un procespermisiunile pot fi schimbate cu chmod

14 / 50

Page 15: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Permisiunile fisierelor

Managementul privilegiilor în operaţiile cu fişiere

atunci când un proces lucreaza cu fișiere se verifica privilegiilese iau în considerare

UID și GID ale fișieruluimasca de permisiuni a fișieruluiUID, GID ale procesului

15 / 50

Page 16: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Permisiuni

sintaxa:int open(char *pathname, int flags, mode_t mask)permisiuni

verifica permisiunile la crearea fișieruluise ia în considerare umask

daca se uita indicatorul O_EXCLopen poate fi folosit pentru a deschide un fișier existent și a crea unfișier nou (O_CREAT )trebuie avut grija sa nu se deschida un fișier existentfolosirea O_EXCL restricţioneaza crearea unui fișier daca acesta exista

exemplu cod ce nu verifica existenţa fisierului

i f ( ( fd=open ( ”/tmp/ tmp f i l e . out ” , O_RDWR|O_CREAT, 0600)) < 0)d i e ( ” open ” ) ;

16 / 50

Page 17: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Directoare publice

cod vulnerabil: nu se verifica existenţa fișierului în directorul comun(director accesibil)i f ( ( fd = open ( ”/tmp/ t m p f i l e . out ” , O_CREAT|O_RDWR, 0600)) < 0)

d i e ( ” cannot open f i l e ” ) ;

daca fișierul exista, este deschisun atacator poate crea anterior o legatura simboloca - symlink (namedlike the file) catre fișiere ce conţin informaţii confidenţiale

daca fișierul exista, permisiunile de creare sunt ignorateun atacator poate crea anterior fișierul cu permisiuni mai puţinrestrictive pentru a avea acces la fișier

17 / 50

Page 18: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Proprietar neprivilegiat

un program privilegiat își coboara privilegiile pentru a crea un fișierutilizatorul neprivilegiat poate citi / schimba permisiunile fișierului șiconţinutul acestuiaexemplu cod vulnerabil: nu se verifica existenţa fișierului într-undirector accesibil tuturor utilizatorilor

d r o p _ p r i v s ( ) ;

i f ( ( fd = open ( ”/ u s r / account / r e s u l t f i l e ” , O_CREAT|O_RDWR, 0600)) < 0)d i e ( ” cannot open f i l e ” ) ;

r e g a i n _ p r i v s ( ) ;

18 / 50

Page 19: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Recomandări - siguranţa directorului

permisiunile fișierului nu sunt suficiente pentru a proteja un fișierpermisiunile directorului parinte trebuie luate în considerareexemplu: un fișier cu permisiuni doar pentru citire, poate fi șters /creat daca directorul parinte are drepturi de scrierebitul sticky reduce doar suprafaţa de atacdaca directorul parinte este deţinut de atacator, acesta poate schimbapermisiunile directoruluirecomandari

toate directoarele din calea fișierului trebuie sa fie sigure

19 / 50

Page 20: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Concepte legat de calea unui fişier

o secvenţa de unul sau mai multe directoare separate de un caracterspecial (ex. ”/”)de doua tipuri: cai absolute și cai relative

”.” - directorul curent”..” - directorul parinte

pentru directorul radacina (root) ”..” indica directorul curentmai multe caractere separator sunt reduse la unul singurex.”/.///./../usr/..///../usr////./bin//.//file” =⇒ ”/usr/bin/file”pentru a naviga la un fișier, fiecare director din cale trebuie sa aibadrepturi de execuţie (cautare)

20 / 50

Page 21: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Trucuri legat de calea unui fişier

multe aplicaţii privilegiate construiesc caile dinamic, adeseaincorporând și date de la utilizatorverificarea datelor primite de la utilizator este necesaraexemplu de cod vulnerabil la parcurgeri (path traversal)i f ( ! st rncmp ( f i l e name , ”/ u s r / l i b / s a f e f i l e s /” , 19) ) {

debug ( ” data f i l e i s i n / u s r / l i b / s a f e f i l e s ” ) ;p r o c e s s _ l i b f i l e ( f i l e name , NEW_FORMAT) ;

} e l s e {debug ( ” i n v a l i d data f i l e l o c a t i o n ” ) ;e x i t ( 1 ) ;

}

un atacator ar putea furniza ca și date de intrare șirul”/usr/lib/safefiles/../../../../../etc/passwd”

21 / 50

Page 22: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Caracterul NUL incorporat

caracterul NUL termina o cale de fișier, calea este doar un șir în Ccând limbaje de nivel înalt (ex. Java, PHP, Perl) interacţioneaza cusistemul de fișiere nu folosesc șiruri terminate cu NUL=⇒ vulnerabilitaţi path truncation

22 / 50

Page 23: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Locuri periculoase

fișiere / cai furnizate de utilizatorfișiere / directoare noidirectoare publice temporarefișiere controlate de alţi utilizatori

23 / 50

Page 24: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Crearea unui fişier

Fişiere interesante

fișiere de configurare sistem”/etc/*”, “/etc/passwd”, “/etc/shadow”, ”/etc/hosts.equiv”,“.rhosts”, “.shosts”, “/etc/ld.preload.so”

fișiere personale“.history”, “.bash_history”, “.profile”, “.bashrc”, “.login”, mail spools

fișiere de configurare pentru programe“.htpasswd”, cod sursa pentru scripturi, “sshd_config”,“authorized_keys”, fișiere temporare

altele“/var/log/*”, kernel și boot files, executabile și biblioteci, “/dev/*”,“/proc/*”, named pipes

24 / 50

Page 25: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Atacuri folosind legături simbolice

pot fi folosite pentru a forţa programe privilegiate sa accesezeinformaţii senzitiveexemplu cod vulnerabilv o i d s t a r t _ p r o c e s s i n g ( cha r ∗unsername ) {

cha r ∗homedir , tmpbuf [PATH_MAX] ;i n t f ;homedir = get_user_homedi r ( username ) ;i f ( homedir ) {

s n p r i n t f ( tmpbuf , s i z e o f ( tmpbuf ) , ”%s / . o p t c o n f i g ” , homedir ) ;i f ( ( f = open ( tmpbuf , O_RDONLY) ) < 0)

d i e ( ” cannot open f i l e ” ) ;p a r s e _ o p t _ f i l e ( f ) ;

c l o s e ( f ) ;}}

un atacator poate crea o legâturâ simbolica la un fișier sistemimportant$ l n −s / e t c /shadow ~/. o p t c o n f i g

25 / 50

Page 26: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Crearea fişierelor si legături simbolice

context periculos$ l n −s /tmp/ n o n e x i s t e n t /home/ john / n e w f i l eopen ( ”/home/ john / n e w f i l e ” , O_CREAT|O_RDWR, 0 6 4 0 ) ;// c r e e a z a f i s i e r u l ”/tmp/ n o n e x i s t e n t ”

programele privilegiate pot fi pacalite în a crea noi fișiere oriunde însistemul de fișierestrategie de protecţie

folosirea ”O_EXCL” în funcţia open (exclusiv și nu urmareștelegaturile)folosirea ”O_NOFOLLOW ” în funcţia open

crearea accidentala (folosind fopen cu drept de scriere)

26 / 50

Page 27: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Atac pe apel sistem ce ţine cont de legaturi simbolice

apeluri sistem ţin cont de legaturile simbolice, acţioneaza doar peultima componenta din calea unui fișier=⇒ apoi urmeaza celelalte componenteexemplu$ l n −s /tmp/ /home/ john

# c r e a za f i s i e r u l ”/tmp/ n ew f i l e ”$ echo ” t e s t ” > /home/ john / n ew f i l e

# s t e r g e ”/tmp/ n ew f i l e ”$ u n l i n k /home/ john / n ew f i l e

27 / 50

Page 28: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Hard links attacks

daca utilizatorului i se permite creearea de legaturi fizice (hard links)catre anumite fișiere sistem

=⇒ poate pastra accesul la ele chiar și dupa ce acestea sunt ștersesimilar: prevenind un program sa ștearga un fișier

daca atacatorul creeaza o legatura fizica intr-un director sticky catreun fișier al altui utilizator=⇒ utilizatorul nu poate șterge legatura fizica!

în practica, pe sisteme UNIX (Linux) procesul de creearea alegaturilor fizice este foarte restrictiv

e.g. crearea unei legaturi fizice catre un fișier deţinut de root nu estepermisa

28 / 50

Page 29: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Fişiere sensibile

contextcând programe privilegiate deschid fișiere existente și modificaconţinutul acestora sau schimba proprietarul / permisiunile fișierului

codul vulnerabil e rulat de un program SUID; userbuf dat deutilizatori f ( ( fd = open ( ”/home/ j im / . con f ” , ORDWR)) < 0)

d i e ( ” cannot open f i l e ” ) ;w r i t e ( fd , u s e rbu f , l e n ) ;

exemplu de atac (atacatorul este jim)$ cd /home/ j im$ l n / e t c /passwd . con f$ run_su id_prog$ su e v i l

29 / 50

Page 30: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Fişiere sensibile (II)

cod vulnerabili f ( ( fd = open ( ”/home/ j im / . con f ” , ORDWR)) < 0)

d i e ( ” cannot open f i l e ” ) ;fchmod ( fd , 0644 ) ;

atac$ cd /home/ j im$ l n / e t c /shadow . con f$ run_su id_prog$ ca t / e t c /shadow

30 / 50

Page 31: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Legaturi

Ocolirea mecanismelor de interzicere a legăturilor simbolice

lstat poate fi folosit pentru detecţia și analiza legaturilor simbolicelstat nu face distincţie între diferite legaturi fizice catre același fișierexemplu: cod vulnerabil la legaturi fizice, se presupune ca este rulatde un program privilegiat

i f ( l s t a t ( fname , &s t ) != 0)d i e ( ” cannot s t a t f i l e ” ) ;

i f ( ! S_ISREG( s t . st_mode ) )d i e ( ” not a r e g u l a r f i l e ” ) ;

f d = open ( fname , O_RDONLY) ;

31 / 50

Page 32: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Race conditions - Context

o aplicaţie ce interacţioneaza cu sistemul de fișiere poate fi atacataprin metoda race condition - defecte de sincronizare, daca estesuspendata într-un moment inoportunexemplu cod vulnerabil

i f ( ( r e s = ac c e s s ( ”/tmp/ u s e r f i l e ” , R_OK) ) < 0)d i e ( ”no a c c e s s ” ) ;

// . . . moment i nopo r t un

// s i g u r pen t ru d e s c h i d e r e a f i s i e r u l u if d = open ( ”/tmp/ u s e r f i l e ” , O_RDONLY) ;

32 / 50

Page 33: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Time of Check To Time of Use (TOCTOU)

starea unei resurse poate fi schimbata întretimpul în care starea ei este verificata (check) șitimpul când este folosita (use) efectiv

nu corespunde doar cazurilor de manipulare a sistemului de fișierepare improbabil, dar se poate întâmpla sau se poate produce

încetinește sistemul: trafic mare în reţea, utilizarea intensiva asistemului de fișieretrimiterea semnalului de control de stop și start constant într-o buclamonitorizarea execuţiei explicaţiei

33 / 50

Page 34: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Sintaxa şi funcţionalitatea stat()

sintaxa:int stat(const char *pathname, struct stat *buf)întoarce informaţiilstat acţioneaza asupra legaturilor simbolice, nu le urmarește

=⇒ poate fi folosita pentru a evita atacuri de legaturi simboliceverificarea numarului de legaturi fizice poate preveni atacurilevulnerabilitate: schimbarea fișierului dupa verificarea stat

34 / 50

Page 35: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Încercare de evitare a problemelor de sincronizare

se încearca inversarea ordinii acţiunilor: verificarea se face în timpulfolosirii ”check and use” → ”use (open) and check”exemplu vulnerabil

i f ( ( fd = open ( fname , O_RDONLY) < 0)d i e ( ” open ” ) ;

i f ( l s t a t ( fname , &s t ) < 0)d i e ( ” l s t a t ” ) ;

i f ( ! S_ISREG( s t . st_mode ) )d i e ( ” not a r eg f i l e ” ) ;

35 / 50

Page 36: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Încercare de evitare a problemelor de sincronizare (II)

atac1 crearea unei legaturi simbolice catre un fișier sensibil =⇒ aplicaţia

deschide fișierul2 înaintea apelului lstat, șterge / redenumește legatura simbolica și

creaza un fișier −→ se trece peste verificare (dar fișierul sensibil va fifolosit în continuare!)

observaţie: ștergerea unui fișier deschis merge și pentru fișiere normale

36 / 50

Page 37: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

File race redux

probleme cu apeluri sistem ce folosesc caiexemplu: vulnerabil - poate investiga fișiere diferites t a t ( ”/tmp/ f i l e ” , &s t ) ;s t a t ( ”/tmp/ f i l e ” , &s t ) ;

audit: cand vedeţi mai multe apeluri sistem succesive ce folosescaceeași cale, evaluaţi ce se întâmpla daca se schimba calea întreapeluristrategie de protecţie: folosiţi apeluri sistem ce folosesc descriptori=⇒ utilizarea și verificarea se fac împreunaexemplu: cod sigur (ambele fstat acceseaza același nod)

f d = open ( ”tmp/ f i l e ” , O_RDWR) ;f s t a t ( fd , &s t ) ;f s t a t ( fd , &s t ) ;

37 / 50

Page 38: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Permission Races

problemao aplicaţie creeaza fișiere temporarepermisiuni greșite (ex. acces public)

atacdaca un atacator poate deschide fișierul în perioada când este expusmenţine acces la fișier chiar daca ulterior aplicaţia restricţioneazaaccesul

38 / 50

Page 39: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Permission Races (II)

cod vulnerabil: expune pentru un anumit timp fișierul (permisiunigreșite, depinde de valoarea umask)

FILE ∗ f i l e ;

// ap e l open ( fname , . . . , 0666) ! ! !i f ( ! ( f i l e = fopen ( fname , ”w+” ) ) )

d i e ( ” fopen ” ) ;

i n t fd = f i l e n o ( f i l e ) ;

// e v i t a a t a c u r i TOCTOU, se f o l o s e s t e fdi f ( fchmod ( fd , 0600) < 0)

d i e ( ” fchmod” ) ;

39 / 50

Page 40: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Ownership Races

contextun fișier creat cu privilegiile unui utilizator neprivilegiatdeţinatorul acelui fișier este schimbat mai târziu la un utilizatorprivilegiat

nesincronizariutilizatorul neprivilegiat (atacatorul) poate accesa fișierul întremomentul când a fost creat și când se schimba deţinatorul fișierului

40 / 50

Page 41: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Ownership Races (II)

exemplu cod vulnerabil

d rop_p r i v s ( ) ;

i f ( ( fd = open ( fname , O_RDWR | O_CREAT | O_EXCL, 0666)) < 0)d i e ( ” open ” ) ;

r e g a i n_p r i v s ( ) ;

// schimba d e t i n a t o r u l f i s i e r u l u ii f ( fchmod ( fd , g e t e u i d ( ) , g e t e g i d ( ) ) < 0)

d i e ( ” fchmod” ) ;

41 / 50

Page 42: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Directory Races

context: aplicaţie ce parcurge sistemul de fișiereproblema: legaturi simbolice infinit recursive (cicluri)

kernel detecteaza cicluri când stabilește caleaproblemele apar când aplicaţia traverseaza mai multe fișiere

directoarele referite simbolic nu pot fi referite în comenzi shellapeluri sistem (ex getcwd)exemplu

$ cd /home/ j im$ l n −s /tmp mydir$ cd /home/ j im /mydir$ pwd/home/ j im /mydir

42 / 50

Page 43: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Legături simbolice pentru directoare - exploatarea unlink()

efectul utilizatorilor rau intenţionaţi ce manipuleaza directoare caresunt cu unul sau doua nivele mai sus în ierarhia de directoareexemplu: cod vulnerabil în unele implementari ale comenzii ”at”c h d i r ( ”/ va r / s poo l / c ron / a t j o b s ” ) ;

s t a t 6 4 (JOBNAME, &s t a t b u f ) ;i f ( s t a t b u f . s t_u id != ge t u i d ( ) )e x i t ( 1 ) ;

u n l i n k ( ”JOBNAME” ) ;

primul vector de atac$ at −r . . / . . / . . / . . / . . / tmp/ s ome f i l e

care ar șterge un alt fișier decât cel programat, dar deși numai dacaaparţine utilizatorului apelant

43 / 50

Page 44: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Legături simbolice pentru directoare - exploatarea unlink()(II)

dar: exista o vulnerabilitate de sincronizare (race condition) întretimpul în care se verifica fișierul și ștergerea acestuia, vulnerabilitatece poate fi exploatata

între cele doua momente: ștergerea fișierului utilizatorului și înlocuireaacestuia cu o legatura simbolica catre un fișier sensibil

$ mkdir /tmp/bob$ touch /tmp/bob/shadow$ at −r . . / . . / . . / . . / . . //tmp/bob/shadow$ rm − f r /tmp/bob/$ l n −s / e t c /tmp/bob # daca apare problema de s i n c r o n i z a r e

# se s t e r g e / e t c /shadow ! !

unlink() nu urmarește legatura simbolica pentru ultimul element dincale

44 / 50

Page 45: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Race conditions

Mutarea directoarelor

program vulnerabilrm − f r /tmp/a # se s t e r g e /tmp/a/b/c

ce se întâmplac h d i r ( ”/tmp/a” ) ;c h d i r ( ”b” ) ;c h d i r ( ” c ” ) ;c h d i r ( ” . . ” ) ;rmd i r ( ” c ” ) ;c h d i r ( ” . . ” ) ;rmd i r ( ”b” ) ;f c h d i r ( 3 ) ;rmd i r ( ”/tmp/a” ) ;

vector de atacacţionaţi înainte de primul ”chdir(”..”);”mutaţi directorul ”c” într-un subdirector din ”/tmp”

45 / 50

Page 46: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Fisiere temporare

Crearea fişierelor unice cu mktemp()

preia un șablon dat de utilizator pentru un fișier și îl completeazaastfel încât sa reprezinte un fișier unic, nefolositșablonul conţine caracterele XXX pentru locul unde se v-a completacu datepoate fi prezis ușor deoarece este bazat pe ID procesului și un modelsimpluexemplu cod vulnerabil:

cha r temp [ 1 0 2 4 ] ;

s t r c p y ( temp , ”/tmp/myfileXXXX” ) ;i f ( ! mktemp( temp ) )

d i e ( ”mktemp” ) ;

i f ( ( fd = open ( temp , O_CREAT | O_RDWR, 0700) ) )d i e ( ” open ” ) ;

46 / 50

Page 47: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Fisiere temporare

Crearea fişierelor unice cu mktemp() (II)

vulnerabilitate: race condition între apelul mktemp și openexemplu: unele versiuni GCC

gcc folosește mktemp pentru a crea un model comun pentru toatefișierele sale din /tmp (primul se termina în ”.i”)un atacator poate monitoriza apariţia unui fișier ”.i” și poate crealegaturi simbolice pentru alte tipuri de fișiere, ”.o”, ”.s”daca root compileaza, poate sa suprascrie fișiere sensibile

47 / 50

Page 48: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Fisiere temporare

Crearea fişierelor unice

mkstemp() o alternativa mai sigura la mktempgasește un nume de fișier uniccreeaza fișierul și îl deschideîntoarce descriptorul de fișier

tmpfile similar cu mkstempmkdtemp folosit pentru a crea directoare temporare

48 / 50

Page 49: Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII Vulnerabilit˘aţi specifice sistemelor de operare Neprotejarea datelor stocate pe disc 1/50

Permisiunile fisierelor in Linux, vulnerabilitati Fisiere temporare

Bibliografie

“The Art of Software Security Assessments”, chapter 9, “UNIX 1.Privileges and Files”, pp. 476 – 576“24 Deadly Sins of Software Security”, chapter 17, “Failure toProtect Stored Data”.

49 / 50