Twindows Internals (RO) despre Windows, software si alte lucruri de care ne mai lovim

14Jan/097

Cum sa scapi de securitatea din NTFS

Aveam nevoie zilele trecute sa copiem fisiere de pe un hard-disk mai vechi formatat cu NTFS care avea permisiile de securitate foarte restrictive. Era vorba de mii de fisiere si ar fi durat foarte mult ca sa aplic metoda clasica in acest caz: take ownership. Imaginati-va ce inseamna pentru sistem sa modifice pe rand permisiile a mii de fisiere. Problema era ca aveam nevoie rapid de datele respective.

Solutia a venit de la o metoda (pe care am descoperit-o acum ceva timp) de pacalire a securitatii din NTFS. Ideea de baza a aparut citind MSDN-ul, mai specific aceasta precizare referitoare la parametrul dwDesiredAccess al functiei CreateFile:

"If this parameter is zero, the application can query certain metadata such as file, directory, or device attributes without accessing that file or device, even if GENERIC_READ access would have been denied."

Ceea ce a iesit in final este un driver-filtru peste sistemul de fisiere care intermediaza deschiderea fisierului printr-o discutie de genul:

Aplicatie: Vreau drepturi de scriere pentru fisierul restrictionat.doc. Ce spui?

Driver-ul nostru catre sistemul de fisiere: Aplicatia vrea drepturi de scriere pentru fisierul restrictionat.doc

Sistemul de fisiere catre driver-ul nostru: Permisiile de securitate setate pe fisierul respectiv nu-mi permit sa fac acest lucru. Raspunsul este NU.

Driver-ul nostru catre sistemul de fisiere: Aplicatia vrea zero drepturi (dwDesiredAccess = 0) pentru fisierul restrictionat.doc

Sistemul de fisiere catre driver-ul nostru: Ok. Pot permite acest lucru. Raspunsul este DA.

Driver-ul nostru catre aplicatie: Sistemul de fisiere a spus DA.

Astfel pacalim sistemul de fisiere sa ne dea ok-ul pentru o anumita cerere, punand intrebarea la care stim ca sistemul de fisiere va raspunde intotdeauna DA. Deoarece sistemul de fisiere raspunde cu DA, sistemul de operare permite deschiderea handle-ului catre fisierul restrictionat.

In mod intuitiv ati putea crede ca handle-ul deschis are zero drepturi de acces, deci este inutil. Totusi sistemul de operare va crea un handle cu drepturile cerute initial de aplicatie. Folosind aceasta metoda puteti accesa orice fisier, indiferent de permisiile de securitate setate pentru el. Partea si mai frumoasa este ca tot codul din driver care implementeaza aceasta metoda are doar 3 linii. Nu este vorba de hook-uri complicate sau functii nedocumentate. Totul se realizeaza cu API-uri documentate.

Pentru a vedea o demonstratie despre cum lucreaza driver-ul respectiv si mai multe detalii tehnice, puteti accesa post-ul in limba engleza ce contine un video si un document PDF:

http://www.hobeanu.com/blog/bypassing-file-system-security-in-windows/

Aceasta metoda nu este considerata o gaura de securitate deoarece necesita incarcarea unui driver. In momentul in care un atacator are drepturi de a executa cod in kernel mode, sistemul este considerat compromis.

VN:F [1.9.3_1094]
Rating: 5.0/5 (4 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Cum sa scapi de securitatea din NTFS, 5.0 out of 5 based on 4 ratings

Most Commented Posts

Comments (7) Trackbacks (0)
  1. Nice one!

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  2. Salutare,

    Daca deja esti administrator (ceea ce e necesar pt instalarea unui driver), o metoda simpla de a trece peste securitatea NTFS este sa enablezi privilegiul de backup si sa deschizi fisierele cu Createfile cu flag-ul FILE_FLAG_BACKUP_SEMANTICS. Asa fac toate aplicatiile de backup, de ex.

    Merci, Adi

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  3. Salut Adi,

    Ai dreptate, daca ai nevoie doar de citire, poti folosi FILE_FLAG_BACKUP_SEMANTICS in colaborare cu privilegiul de backup pe aplicatia ta.

    Totusi, in cazul copierii multor fisiere despre care vorbeam, imi era imposibil sa modific codul aplicatiei care facea copierea (explorer, total commander) pentru a putea adauga flag-ul necesar la apelul lui CreateFile.

    Mai mult, FILE_FLAG_BACKUP_SEMANTICS permite doar citirea unui fisier (nu si scrierea sau alte operatii) si acest lucru este posibil numai in cazul in care fisierul nu a fost deschis exclusiv.

    Metoda prezentata in articol nu are niciunul din neajunsurile metodei “FILE_FLAG_BACKUP_SEMANTICS” si in plus permite scrierea (inclusiv in fisierele executabile ale aplicatiilor care ruleaza in acel moment).

    In concluzie, metoda sugerata de tine este cea pe care o recomandam si noi in cazul in care poti sa modifici codul aplicatiei.

    In cazul in care vrei doar sa ai acces la fisiere si nu poti modifica sursa aplicatiei (ex: file manager-ul preferat), poti folosi metoda prezentata in articol.

    VN:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  4. “Aceasta metoda nu este considerata o gaura de securitate deoarece necesita incarcarea unui driver. In momentul in care un atacator are drepturi de a executa cod in kernel mode, sistemul este considerat compromis.”

    Dar faptul ca in Windows se poate incarca un driver malitios prin diferite metode, cum este considerat?

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  5. Incarcarea unui driver necesita privilegii de administrator, prin urmare Microsoft nu o considera un vector de atac.

    Totusi, daca ne gandim la cat malware incarca drivere prin diverse metode de inginerie sociala, cel putin pe sistemele Windows XP, putem spune ca declaratia Microsoft nu ne incalzeste prea mult.

    Din fericire, pe sistemele x64, toate drivere-le trebuie sa fie semnate digital. Acest lucru limiteaza oarecum numarul celor ce isi pot incarca propriul driver pe aceste sisteme, deoarece pot fi identificati mai usor prin certificatul cu care este semnat driver-ul lor.

    Totusi, daca creatorii de virusi pun mana pe certificatul unei companii “curate”, ii pot crea foarte usor probleme.

    VN:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  6. Asa e,
    dar nu numai inginerie sociala. Bineinteles ca au fost si diferite metode de a incarca un driver neavand privilegii de administrator.

    Oricum, ideea este: Daca ar fi sa luam statistic, oare cati utilizatori Windows din acest moment sunt autentificati cu conturi cu privilegii de administrator? Eu cred ca marea majoritate. Probabil motivul ar fi ca esti cam legat cu mainile la spate daca nu ai privilegii de administrator, care pana la urma tot intr-o gaura de securitate se traduce.

    Daca sa zicem 80% dintre utilizatori (nu am facut statistica pentru procentul acesta, poate ma insel) de Windows au privilegii de administrator, spune totusi ceva despre acest OS.
    Cum ar fi in linux ca 80% din utilizator sa fie root? :)
    Dar e imposibil, pentru ca e altfel gandit.

    Ba mai mult, sunt de parere ca doar oamenii cu o cultura in domeniu peste medie, vor folosi Windows cu un cont cu privilegii reduse.

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  7. De acord cu comentariul tau.

    De-abia incepand cu Windows Vista a fost introdus UAC-ul, in speranta ca va mai diminua problema respectiva. Si ai vazut care a fost reactia oamenilor, majoritatea erau indignati de atatea prompt-uri de securitate.

    VN:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.3_1094]
    Rating: 0 (from 0 votes)

Leave a comment


No trackbacks yet.