Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII...
Transcript of Securitate Software VII Vulnerabilit˘aţi specifice …mihai-suciu/ss/curs05_2.pdfII...
Securitate SoftwareV.II Vulnerabilitaţi specifice sistemelor
de operareNeprotejarea 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
Continut
1 Neprotejarea datelor stocate
2 Permisiunile fisierelor in Linux, vulnerabilitatiPermisiunile fisierelorCrearea unui fișierLegaturiRace conditionsFisiere temporare
3 / 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
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
Neprotejarea datelor stocate
Relevanţa - numarul vulnerabilităţilor legat de privilegii
6 / 50
Neprotejarea datelor stocate
Relevanţa - numarul vulnerabilităţilor legat de privilegii (II)
7 / 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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