Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programare și securitate la nivelul arhitecturii x86

Similar presentations


Presentation on theme: "Programare și securitate la nivelul arhitecturii x86"— Presentation transcript:

1 Programare și securitate la nivelul arhitecturii x86
Curs: Drivere Windows

2 Rolul driverelor în sistemele de operare
Driver – colectie de functii utilizate pentru facilitarea accesului la o anumita resursa a sistemului de calcul In particular o componenta software care face legatura intre SO si un dispozitiv Resurse sistem: resurse fizice (hardware): interfete si dispozitive de intrare/iesire magistrale (PCI, USB) sistem de intreruperi, etc. resurse logice (software): sistemul de fisiere canale de comunicatie primitive de sincronizare ceas de timp-real

3 Locul si rolul unui driver
Varianta simplificata Drivere software Varianta mai realista Driver pentru un toaster USB

4 Rolul driverelor in SO standardizarea accesului la resurse
abstractizarea tipurilor de resurse, evitarea unor detalii de implementare (ex: fisier, canal de comunicatie, primitive de sincronizare) compatibilitatea programelor de aplicatie cu diferite tipuri si versiuni de dispozitive cresterea eficientei programarii prin utilizarea unor operatii predefinite controlul unor operatii critice de intrare/iesire prin componente ale sistemului de operare (drivere) acces uniform la resurse

5 Modele de drivere Legacy NT driver model
Drivere mai vechi utilizabile inca in Windows NT Nu necesita operatii PnP (plug-and-play) si PM (power management) Driverele sistemului de fisiere intra in aceasta categorie WDM modell (Windows Driver Model) Pt. Win 9x si 2000/XP Acopera in totalitate functiile PnP si PM Pentru drivere de dispozitive fizice Mai multe modele de drivere mini-port Pentru NDIS, SCSI, Storage etc. Necesita mai putin cod decat legacy drivers minifilter model (File System Mini-filters) Ajuta scrierea de drivere FS, FS filter, registry filter drivers Drivere pentru criptare, compactare, antivirusi WDF (Windows Driver Foundation/Framework) Pt. scrierea mai usoara a driverelor WDM , abordare obiectuala Acceptat de la Windows Vista in sus Doua componente: KMDF (Kernel Mode Driver Framework), UMDF (User Mode DF)

6 Ierarhizarea driverelor
highest level drivers file system drivers (NTFS, FAT, CDFS, UDFS) intermediate level drivers function drivers Pentru comanda unui anumit tip de dispozitiv hardware sau virtual filter drivers Modifica driverele de “bus” sau de functie Se pun deasupra celor de functie software bus drivers Pentru dispozitive derivate (copil) class drivers for class/miniport pairs Pentru controlul unei clase de dispozitive (ex. SCSI, NDIS) Pentru fiecare dispozitiv se scrie cate un driver miniport (care contine elemente specifice hardware-ului) lowest level drivers hardware bus drivers Pt. comanda unor magistrate (PCI, PCI Express, ISA etc.) legacy drivers Drivere clasice care controleaza cate un dispozitiv

7 Locul driverelor in arhitectura Windows
Aplicaţie Win32 API Drivere mod utilizator Rutine suport pentru drivere exportate Nucleul Sistemului de operare Drivere în modul Kernel Driverele sist. de fişiere Nivelul de adaptare al maşinii fizice HAL - Hardware Adaptation Layer Maşina fizică Modul Utilizator Modul Kernel

8 Clasificarea driverelor Dupa modul de executie:
Drivere executate în modul utilizator (modul neprivilegiat): beneficiază de rutinele conţinute în Win32 API; nu au acces direct la resurse ci numai prin intermediul rutinelor conţinute în Win32 API; sunt mai uşor de implementat şi mai ales de testat. Driverele executate în modul kernel (modul privilegiat): folosesc numai rutine oferite de nucleul sistemului de operare rulează ca parte a „executivului” sunt mai greu de implementat şi de testat au posibilităţi mai mari de acces la resurse - Cele două tipuri, utilizator şi kernel, diferă semnificativ prin: structură, puncte de acces şi interfaţă - Majoritatea driverelor rulează în modul kernel.

9 Clasificarea driverelor Din punct de vedere al destinaţiei:
Drivere pentru dispozitive oferă servicii de intrare/ieşire pentru dispozitivele pe care le deservesc Exemple: clasă de driver pentru flux video pentru un set de dispozitive video, driver pt. filtrare flux video, driver pentru dispozitive audio, pentru interfaţa paralelă, etc. majoritatea rulează în modul kernel şi se dezvoltă cu mediul de programare Windows DDK Drivere pentru sistemul de fişiere oferă servicii de intrare/ieşire independente de dispozitivele fizice pe care se bazează (pe care le deservesc). drivere pentru sistemul NTFS, pentru FAT toate rulează în modul kernel driverele filtru oferă facilităţi suplimentare de filtrare (ex: scanarea împotriva viruşilor) se dezvoltă cu Windows IFS – Instalable File System Kit.

10 Arhitectura multinivel a driverelor Windows
Aplicaţie Win32 API Driver client în mod utilizator în mod kernel Driver de clasă Driver de port Driver de magistrală fizică Mod utilizator Mod kernel Driver de miniclasă Driver de miniport

11 Arhitectura multinivel a driverelor Windows
Aplicaţia soluţionează cereri utilizator sau de la altă aplicaţie apelează rutine Win32 API şi drivere client mod utilizator Driver client mod utilizator soluţionează cereri de la aplicaţie sau de la Win32 API apelează rutine Win32 API implementate prin DLL imprimanta are astfel de driver, discul, reţeaua şi dispozitivele de intrare nu au Driver client în modul kernel soluţionează cereri similare cu cel anterior dar se execută în modul kernel Perechea Driver de clasă şi miniclasă oferă partea semnificativă (grosul) pentru suportul specific unui dispozitiv. Driverul de clasă oferă suportul solicitat de sistem, dar independent de dispozitiv; driverele de clasă sunt oferite în mod uzual de Microsoft Driverul de miniclasă oferă suport pentru un anumit tip de dispozitiv dintr-o clasă; aceste drivere sunt oferite de producătorul dispozitivului

12 Arhitectura multinivel a driverelor Windows
Driverul de port (uneori „controlor gazdă”- host controller sau host adaptor driver) suportă operaţii de intrare/ieşire pentru un port, hub sau alt dispozitiv fizic prin care dispozitivul este ataşat poate să fie o pereche driver port driver miniport exemple: driver pt. port SCSI, driver pt. hub şi host controller USB Driverul pentru magistrala hardware Windows oferă drivere pentru majoritatea magistralelor, ele nu se înlocuiesc de utilizator Driverele pentru reţea au propria filozofie de construire (modelul OSI) Exemplu: driverele unei plăci grafice: driver de dispay - driver client mod kernel - oferă facilităţi generale de desenare independente de placă driver port video - oferă operaţii grafice independente de placă minidriver port video - oferă funcţionalitate specifică unei plăci Drivere de tip filtru se pot interpune între oricare nivele de mai sus nu operează cu dispozitivele hard ci filtrează după o anumită regulă fluxul de intrare/ieşire

13 Tipuri de drivere în Windows XP
Driver de dispozitiv virtual (VDD) Driver mod Kernel Driver pentru sistemul de fişiere Drivere PnP Drivere moştenite (legacy) Driver WDM Drivere de clasă Mini-drivere Drivere funcţionale monolitice Drivere filtru

14 Tipuri de drivere în Windows XP
Driverele de dispozitive virtuale (VDD Virtual Device Driver) permit aplicaţiilor DOS sa acceseze resursele calculatorului ca si cum acest lucru s-ar întâmpla în mod direct; folosesc măştile de I/E care permit accesul unui program utilizator la resursele fizice ale calculatorului (vezi memmap, giveio); a nu se confunda cu VxD din Windows 98 sunt drivere executate în mod utilizator Drivere moştenite sunt drivere moştenite din versiunile anterioare de Windows; lucrează independent de alte drivere Drivere PnP drivere care recunosc protocolul Plug and Play al sistemului Windows XP Driver WDM (Windows Driver Model) un driver PnP care în plus recunoaşte şi protocolul de management al consumului şi este compatibil la nivel de sursă cu Windows 98, 2000 şi XP

15 Arhitectura sistemelor de operare de tip NT (windows XP, 2000, si NT)
Subsistemul de securitate Subsistemul POSIX Subsistemul Win32 Mod utilizator Mod kernel Manager LAN Servicii sistem Managerul de I/E Manager de configurare Manager de memorie Structură proces Apel procedură locală Manager obiecte Monitor de securitate Sistem de fişiere, Drivere Manager Plug-and-Play Suport pt. executiv Manager de alimentare Nucleul (Kernel) Nivelul de adaptare la maşina fizică (HAL - Hardware Adaptation Layer) Maşina fizică

16 Tipuri de drivere kernel
Drivere pentru sistemul de fişiere (FAT, NTFS, CDFS) Drivere filtru PnP de nivel înalt (opţional) Drivere funcţie PNP Drivere WDM de clasă/ miniclasă Drivere filtru PnP de nivel scăzut (opţional) Drivere software PNP Drivere WDM de magistrală software Drivere de magistrală hardware PnP Drivere de dispozitive moştenite Drivere de nivel înalt Drivere de nivel intermediar Drivere de nivel inferior Drivere de disc virtual sau "oglindă" moştenite, Drivere de clasă moştenite

17 Tipuri de drivere kernel
Driverele de nivel înalt includ driverele pentru sistemul de fişiere (FSD- File System Drives) cum ar fi: NTFS, FAT şi CDFT (CD-ROM File System) Driverele intermediare pot fi: discuri virtuale, drivere oglindă sau drivere de clasa pentru tipuri specifice de dispozitive. Ele se subdivid în: drivere funcţie care controlează dispozitive periferice de pe o magistrală de intrare/ieşire drivere filtru drivere de magistrală software prezintă un set de dispozitive copil la care se conectează driverele enumerate mai sus; de exemplu un driver pentru o placă multifuncţională care conţine dispozitive eterogene drivere de clasă furnizate de sistem care exportă o interfaţă predefinită de clasă/miniclasă; o pereche clasă/miniclasă oferă funcţionalitate echivalentă cu un driver funcţie sau driver de magistrală Driverele de nivel inferior controlează o magistrală de intrare/ieşire la care se conectează dispozitive periferice. Sub aceste drivere nu mai sunt altele drivere de magistrale hardware sunt furnizate de sistem şi controlează magistrale de I/E configurabile dinamic; colaborează cu Managerul de PnP pentru configurarea şi reconfigurarea resurselor hardware ale sistemului, pt. dispozitivele copil; de exemplu se configurează maparea memoriei şi a intreruperilor. drivere "moştenite" (legacy) care controlează direct dispozitive periferice fizice

18 Modelul de driver Windows (WDM - Windows Driver Model)
standard pentru proiectarea de drivere pe platforme Windows se recomandă, dar nu este obligatoriu Condiţii impuse pentru driverele WDM: sa suporte "Plug and Play" sa suporte "Power management" sa suporte Windows Management Instrumentation (WMI) să fie proiectat ca un driver de magistrală, driver de tip funcţie sau filtru sa creeze obiecte driver descrise in "WDM Device Objects and Device Stack" să includă wdm.h şi nu ntddk.h (primul este un subset al celui de al doilea)

19 Modelul de driver Windows
Drivere Plug and Play drivere pentru dispozitive care sunt configurate automat de sistemul de operare ele dispun de suportul necesar pentru identificarea tipului de dispozitiv şi a driverului necesar Exemple de dispozitive: placi conectate pe magistrala PCI; magistrala are un spaţiu special de configurare dispozitive USB; returnează un descriptor standard pentru o tranzacţie de control standard placa de memorie de tip PCM-CIA; are un atribut de memorie prin care se poate identifica tipul de placă

20 Tipuri de drivere WDM driver de magistrală driver funcţie
controlează o magistrală de I/E şi oferă funcţionalitate pe un slot (locaţie în magistrală) independentă de dispozitive driver funcţie controlează un anumit dispozitiv driver filtru filtrează cererile de I/E pentru un dispozitiv, clasă de dispozitive sau magistrală

21 Tipuri de drivere WDM Driver filtru de clasă, de nivel superior 5
Driver filtru de dispozitiv, de nivel superior Driver funcţie Driver filtru de clasă, de nivel inferior Driver filtru de dispozitiv, de nivel inferior Driver filtru de magistrală Driver de magistrală Drivere de dispozitiv Drivere de magistrală 5 4 3 2 1

22 Tipuri de drivere WDM 1. Driverul de magistrală
deserveşte un controlor de magistrală, un adaptor sau o punte (bridge) Microsoft oferă drivere pt. majoritatea magistralelor existente este un driver obligatoriu 2. Un driver filtru de magistrală adaugă "valoare" (caracteristici suplimentare) unei magistrale este furnizat de Microsoft este opţional 3. Un driver filtru de nivel scăzut modifică comportamentul unui dispozitiv fizic 4. Driverul funcţie este principalul driver al unui dispozitiv este scris de producătorul dispozitivului este de obicei obligatoriu 5. Driverul filtru de nivel înalt adaugă caracteristici noi pentru dispozitiv este opţionale

23 Exemplu de set de drivere WDM pentru un dispozitiv USB
Schema electrica magistrala PCI controlorul USB Hub USB dispozitiv joystick

24 Exemplu de set de drivere WDM pentru un dispozitiv USB
Aplicaţie Client HID Driver filtru de clasă de nivel superior Driver miniclasă pt. HID USB Driver de clasă HID Driver filtru de clasă de nivel inferior Driver de magistrală Hub USB Driver miniclasă de magistrală pt. controlor USB Driver clasă de magistrală pt. controlor USB Driver de magistrală PCI Mod client Mod kernel HID – Human Interface Device

25 Structura Driverelor WDM
Driver WDM - colecţie (container) de rutine care facilitează accesul la resursele calculatorului Rutine de bază DriverEntry AddDevice Rutine de control I/E StrartIO AdapterControl OnInterrupt DpcForISR DispatchPnP DispatchPower DispatchWmi DispatchRead DispatchWrite Rutine obligatorii Rutina StartIO pt. tratarea cozii de cereri Rutina AdapterControl pt. DMA Rutine pentru tratarea întreruperilor Rutine opţionale de dispecerizare IRP

26 Scenariu de utilizare a unui driver WMD:
La cuplarea unui dispozitiv sistemul de operare încarcă driverul în memoria virtuală şi apelează rutina DriverEntry; rutina face anumite lucruri după care revine în sistem Managerul PnP apelează rutina AddDevice Managerul PnP trimite câteva IRP-uri; dispecerul driverului prelucrează fiecare IRP O aplicaţie deschide un "handler" către noul dispozitiv cuplat, la care sistemul trimite câteva IRP-uri dispecerizate şi soluţionate de driver Aplicaţia încearcă să citească date de la dispozitiv, la care sistemul trimite un IRP la driver; IRP-ul este pus în coada de aşteptare Terminarea unei operaţii anterioare de I/E se semnalizează prin activarea unei întreruperi hardware; rutina de întrerupere lucrează ceva, planifică un DPC după care revine Se rulează rutina DPC; aceasta scoate IRP-ul pus în coadă la pasul 5 şi programează hardul pentru o operaţie de citire de date Timpul trece şi sistemul face şi alte apeluri la subrutinele din driver Dispozitivul este decuplat; Managerul PnP trimite driverului ceva IRP-uri care sunt soluţionate; sistemul apelează rutina DriverUnload după care driverul este descărcat in memoria virtuală IRP – I/O Request Packet DPC – Deferred Procedure Call

27 Incarcarea unui driver
la dispozitivele PnP se caută o semnătură electronică şi pe baza ei, cu ajutorul "registry"-ului si al unui fişiere INF se încarcă driverul potrivit la dispozitivele non-PnP (dispozitive moştenite) nu există semnătură electronică; utilizatorul iniţiază procesul de identificare a dispozitivului prin activarea funcţiei "Add New Hardware wizard“ sistemul foloseşte registry-ul şi fişierul INF pentru încărcarea driverului

28 Structuri de date folosite pentru WDM
obiect driver este driverul propriu-zis care conţine poantori la subrutinele incluse obiect dispozitiv este o instanţă a unui hardware (dispozitiv fizic) datele conţinute ajută la tratarea instanţei

29 Nivele de drivere şi obiecte asociate
FiDO – Filter Data Object FDO – Function Data Object PDO – Physical Device Object IRP – Input/Output Request Packet FiDO Driver filtru de nivel ridicat FDO Driver funcţie Driver filtru de nivel scăzut PDO IRP Driver de magistrală

30 Obiect Driver Managerul de I/E foloseşte câte un obiect driver pentru a reprezenta fiecare driver de dispozitiv Un obiect driver conţine câmpuri accesibile pentru utilizator şi câmpuri invizibile (opace). Câmpurile vizibile sunt: DeviceObject - este o legătură la lista de obiecte dispozitiv pe care driverul le gestionează DriverExtension – face legatura către o structură care conţine printre altele poantorul la rutina AddDevice HardwareDatabase - un şir de caractere (string) care descrie o cheie în registry FastIoDispatch - poantor la o tabelă de funcţii DriverStartIo - poantor la o funcţie care tratează cererile de I/E DriverUnload - poantor la o funcţie de curăţare MajorFunction - poantor către o tabelă de funcţii care tratează în jur la două duzini de tipuri de cereri I/E

31 Obiecte Dispozitiv Se creează prin apelul funcţiei IoCreateDevice. Conţine următoarele câmpuri vizibile: DriverObject - poantează către obiectul driver care tratează dispozitivul respectiv NextDevice - poantează următorul obiect dispozitiv tratat de driverul respectiv CurrentIRP – poantor catre IRP-ul curent Flags - colecţie de indicatoare; determină tipul sau modul de transfer Characteristics - colecţie de indicatoare; descriu caracteristici opţionale ale driverului; pot descrie tipul dispozitivului (ex: floppy, reţea, dispozitiv ROM, etc.) DeviceExtension - poantează o structură care conţine date referitoare la o instanţă a obiectului DeviceType - o constantă enumerativă care arată tipul de dispozitiv StuckSize - numără obiectele dispozitiv începând de la cel curent AlignmentRequirement - specifică tipul de aliniere al bufferelor folosite

32 Cereri de operatii de intrare/iesire (IRP – Input/Output Request Packets)
Orice cerere de intrare/iesire se transmite catre un driver printr-un IRP Continutul unui IRP: MdlAddress - este adresa unei liste de descriptori pentru memorie (MDL- Memory Descriptor List) care descrie bufferul din modul utilizator, asociat cererii Flags - conţine indicatoare care pot fi citite dar nu pot fi modificate de driverul dispozitivului; aceste indicatoare nu sunt relevante pentru un driver WMD AssociateIrp - este o colecţie de 3 poantori posibili; managerul de I/E creează un buffer a cărui poantor se păstrează aici IoStatus - în acest câmp driverul complectează starea cererii (modul de soluţionare a cererii) la încheierea tratării acesteia; RequestorMode - arată modul de lucru al celui care a iniţiat cererea: modul utilizator sau modul Kernel PendingReturned, Cancel, indicatoare ce caracterizează starea cererii UserBuffer - conţine adresa virtuală a bufferului din modul utilizator pentru un Irp de control Taile - o sturctură de date utilă pentru driver

33 Structura IO_STUCK_LOCATION
pentru fiecare cerere IRP transmis de un program se creeaza o structura IO_STUCK_LOCATION continutul structurii IO_STUCK_LOCATION: MajorFunction codul funcţiei majore asociat IRP-ului; codul este folosit ca un index în tabela de dispecerizare a cererilor IRP (Ex: IRP_MJ_READ) MinorFunction detaliază tipul de IRP pentru câteva coduri de funcţii majore; de exemplu codul major IRP_MJ_PNP are un set de coduri minore IRP_MN_START_DEVICE, IRP_MNREMOVE_DEVICE, etc.) Parameters colecţie de substructuri, câte unul pentru fiecare tip de cereri care are parametri specifici DeviceObject adresa obiectului dispozitiv care corespunde acestei intrări în stiva IO FileObject este adresa obiectului fişier kernel la care IRP-ul este direcţionat. CompletionRoutine adresa unei rutine instalat de driver deasupra celui la care această stivă corespunde;

34 Procesarea unei cereri IRP
DISPATCH COMPLETION

35 Pachet de instalare a unui dispozitiv
dispozitivul hardware - trebuie să se conformeze standardelor platformei în care va lucra fişiere driver - furnizează interfaţa de intrare/ieşire a dispozitivului; sunt de obicei fişiere DLL cu terminaţia ".sys" când un driver este instalat atunci programul Setup copiază fişierul .sys în directorul %windir%\system32\drivers fişiere de instalare: fişiere cu informaţii de instalare (fişier .INF) - programul Setup copiază acest fişier în directorul %windir%\inf ; fiecare driver trebuie să aibă un fişier INF fişiere catalog (.CAT) - conţine semnăturile digitale obţinute de la autoritatea WHQL - Windows Hardware Quality Lab unul sau mai multe co-instalatoare - este un DLL care asistă instalarea pe sisteme NT; furnizează cod pentru instalare interactivă sau dacă este nevoie de citirea/scrierea registry-ului altele - ex: icoană, aplicaţii de instalare, etc.

36 Informatii necesare pentru incarcarea unui driver
fisierul .INF contine toate datele necesare pentru incarcare: numele şi versiunea SO suportate GUID-ul clasei setup a dispozitivului numele, sursa şi destinaţia fişierelor driver informaţii specifice pt. hardwer (ex: ID-ul disp. şi ID-uri compatibile) numele unui fişier catalog (.CAT) informaţii privind când şi cum se încarcă funcţiile din driver in mediul DDK (Driver Design Kit) fisierul .INF se genereaza cu utilitarul GenINF

37 Instrumente utilizabile pentru dezvoltarea de drivere
Visual Studio 6 / 2005 Folosit doar pentru editare cod C/C++ compilarea se face separat Instrumente de dezvoltare si testare drivere Driver Development Kit (DDK, 3790) Windows 2000, XP (32 / 64 bit) , 2003 (32 / 64 bit) Se poate descarca liber Necesita Visual Studio 6 SP5 Contine compilerul de drivere pt. C/C++ Installabel File System Kit (IFSK, 3790) Pentru dezvoltarea de drivere pt. sistemul de fisiere Este pe bani Hardware Compatibility Test Kit (HCT, 12.1) Windows XP (32 / 64 bit) , 2003 (32 / 64 bit) Contine teste de compatibilitate cu Windows Windows Driver Kit (WDK, 6000RTM) Windows 2000, XP, 2003, 2003 R2, Vista, Longhorn Necesita Visual Studio 2005l Contine IFSK si DTM (Driver Test Manager, inlocuieste HCT-ul)

38 Alte instrumente utile
DDKBUILD.BAT Simplifica compilarea driverelor pe diferite platforme OsrLoader Permite inregistrarea, pornirea si oprirea rapida a driverelor PoolTag Urmareste alocarea memoriei kernel paged/non-paged kernel ProcessExplorer Inlocuieste Task managerul DbgView Permite urmarirea mesajelor debug / trace chiar si remote DeviceTree Vizualizarea obiectelor device si driver WinObj Vizualizeaza intregul spatiu de nume de obiecte NT (objet namespace) RegMon / FileMon Urmareste Windows Registry si operatiile Windows FS I/O Windows Debugging Tools – WinDBG Debuger in mod kernel (chiar si remote)

39 Resurse de documentare
DDK / WDK helper Contine multe exemple concrete tutoriale NT Insider, exemple si articole Forumuri NTDEV, NTFSD, WINDBG Instrumente de dezvoltare Mark Russinovich, David Solomon – Microsoft Windows Internals, 4th edition, Microsoft Press, 2004 Walter Oney – Programming the Windows Driver Model, 2nd edition, Microsoft Press, 2003 !!! Exemplu de scriere a unui driver:


Download ppt "Programare și securitate la nivelul arhitecturii x86"

Similar presentations


Ads by Google