---
# System prepended metadata

title: Windows et Active Directory - 1
tags: [' nicolas.loriot', ' moemoea.fierin', ACDA]

---

---
title: Windows et Active Directory - 1
description: Généralités, Architecture, ...
author: Moemoea Fiérin
tags: ACDA, moemoea.fierin, nicolas.loriot
---

# <span style="color:red">1 - Introduction</span>
- **cours:** Moitié théorie et moitié pratique.
- **prof:** Steve Robert, travaille dans ministère des armées.
- **info:** 
    - ramener son ordi. :yellow_heart: 
    - on travaillera avec ++*Window Server 2016*++ standard avec l'interface graphique.
- **summary:**
[TOC]

![](https://i.imgur.com/mz9mvQG.jpg)
![](https://i.imgur.com/t4Kg0VD.jpg)
...
# <span style='color:red'>2 - Généralités</span>

>{%pdf https://51.38.177.120/dokuwiki/lib/exe/fetch.php?media=cours:acda:1-windows-ad-epita.pdf %}

## <span style="color:green">Systeme d'exploitation Microsoft</span>
**Microsoft:** dev des OS depuis longtemps (ex: Windows 10, Windows Server 2019) issue de la famille Windows NT

**Avant on a eu (1981 - 2000):** MS-Dos (non sécurisé, monotache, monochrome, ...), pas de méchanisme de protection de memoire, aucun mechanisme d'audit => mais ils ont été très largement déployé. Ils s'appuient tous sur Dos.

Les systèmes >indows NT: 1993 la premiere Windows NT 3.1
Dans le tableau: 
- W: workstation
- S: serveur

--- 

**Pk ça commence à NT 3.1 ?**
- Il y'avait un NT OS 2 avant, Microsoft voulait un OS portable (cad: compatible sur pas mal d'architecture de processeur (X86, Alpha, PowerPC, Station Mibs, ...))
- Microsoft voulait toucher un max de platforme matérielle.
- IBM voulait que son sys tourne sur ces machines (divergence entre Microsoft et IBM)
- Un sys d'exploitation qui a donné naissance a deux branches
- NT: apporte de la sécu sur le sys microsoft qu'on avait pas sur les sys precedent:
    - par ex: authent obligatoire (va permettre de journaliser ce qu'il font)
    - audit rajouté
    - mécha de controle d'acces discretionnaire (qui peut faire quoi au travers sur sys NTFS)
    - ++discretionnaire def?:++ un sys de controle d'acces, le controle d'acces est laisse a la discretion du prop de l'object que l'on veut proteger (le prop aura a sa disposition les mechanismes pour protéger son système).
    - dans la vraie vie on n'utilise pas ce sys discretionnaire. Contrôle d'accès obligé/imposé par les admins.


# <span style="color:red">3 - Windows NT</span>
## <span style="color:green">Windows NT (1993+ -> 2016+)</span>
1993: Plein de sys NT
1994: NT3.5
...
1996: NT4.0 - Premier succès de Windows
2000: Windows 2000: Il a apporté **"l'active directory"** $\Rightarrow$À partir de cette époque: Micro, utilise des solutions non-proprietaire (par exemple: LDAP, Kerberos, ...) 

2001: Windows XP uniquement station de travail.
2005: Windows version XP 64bits
2006: Windows Realease 2 de Windows Server
2007: Windows Vista
2008: et son server Windows Server 2008 
- une version d'essaie pour windows 7
- amélioration du firewall
- en terme de sécurité il y'a qql éléments en plus.

2009: Windows 7
2012: Windows 8
...
2015: Windows 10: version noyau 10.0 $\Rightarrow$ pk on passe de  windows 8/8.1 ? Windows 10 devait s'appeller Windows 10 et ils ont aligné le nom du noyau au nom commercial. Qu'est-ce que Windows 10 a apporté de nouveau par rapport aux version précedentes ?
- ils ont permis la mise à niveau de Windows 10 (à partir de Windows 7+) gratuitement.

Octobre 2018: Windows Server 2019

:::info
Tous les deux ans: un Windows Server
:::
:::info
Le cours: orienté Windows NT généraliste car il y'a encore bcp de chose communes.
:::

## <span style="color:green">Quelques Caractéristiques</span>
- multi-utilisateur
- multitask ++préemptif++ / Multithread
- ouverture de session obligatoire
- protection de la memoire
    - un processus ne peut pas acceder à la memoire d1 autre procéssus
- controle d'acces discretionnaire
- audit
    - enregistrer dans des journaux de sécurité des traces qu'un utilisateur aurait tenter de creer des utilisateurs, ...
- portabilité
    - support de certain processeurs ...
    - aujourd'hui on supporté sur:
        - ARM
        - 32/64bits
- fonctionnalités serveurs
    - Hyper-V pour faire de la virtualisation 

# <span style="color:red">4 - Architecture d'un sys Windows NT</span>
:::info
Cette partie va permettre de comprendre le fonct
ionnement d1 sys Windows NT
:::

Au debut microsoft, 
- cisc: complexe instruction set computing
    - x86 
    - des jeux d'instructions sont disponible
    - => 4 jeu d'instructions
        - on les represente sous forme d'anneaux concentriques
        - permet de creer une archi à 4 niveaux de privilèges
        - plus on est au centre, moins on est privilégié.
        - *ex: le noyau plutot en 0, le driver plutot en 1, les appli utilisateurs en 3*


| 0   | appli    |
| --- | -------  |
| 1   | services | = processus en arriere plan
| 2   | drivers  |
| 3.  | Noyau    |

Cette architecture engenre des lenteurs. 
On donne ici le juste necessaire au elements.
- risc: reduced instruction set computing
    - Aplha
    - => 2 jeux d'instructions
    - comme un proc alpha dispose que de deux jeu, et que je veux que ca fonctionne sur alpha et x86 bah le cercle en 4 couches c'est mort
    - du coup il faut merge certaines possibilités entre elles.
    - 3 possibilités. Comment choisir ? Quel critères ? 
    - dans la 3: pas ouf pour la sécurité, pour la disponibilité du sys c'est mauvais aussi
    - meilleur ordre pour la sécurité: la 1 d'abord, 2, puis 3
    - meilleur ordre pour la performance: la 3 d'abord, 2, puis 1
    - Pour Windows NT ils ont choisi la 2 (pas trop sécurisé, pas trop performant)

![](https://i.imgur.com/v5qo7Eu.jpg)


![Aujourd'hui](https://i.imgur.com/63jmXEV.png)

Chez Microsoft: 
- le noyau les drivers en ring 0
- les service et appli en ring 3

## Kernel Mode
**Virtual Memory**


**SRM** (Storage Resource Management): lorsqu'un utilisateur veut acceder a un obj qqc (comme un fichier sur une partition NTFS), le SRM va accorder ou nn l'acces (il devra recuper l'identite de l'utilisateur et le contrôle d'acces)

Interface graphique gerer pas le **Windows User GDI**

**couche HAL** va permettre de faire l'interface entre le matos et l'os et s'affranchir de certaine specificité materiel (comme les disques durs)
Va convertir le materiel rendu abstrait au travers d'objet

Sous Windows tout est ++Object++ (un dd c'est un obj, un utilisateur, un canal de comm, un jeton utilisateur, ...)

## User Mode
-  on va retrouver
    -  nos applications
    -  nos services
    -  d'autre composants necessaire au fonctionnement de windows (LSASS, ...)
- on a la pos d'heberger des sous sys windows = un env mise a dispo pour les appli/service (celles ci vont s'apuyer sur ce sous sys). On peut faire tourner des application autre (vestige d'OS2) on a un sous sys POSIX
    - (POSIX: Portable System Interface $\Rightarrow$ windows est compatible posix dès 1993)

---
## Les sous-système
**Windows sous-systeme (csrss.exe):**
- un proc Client server Runtime subserver (CSRSS) qui s'exec obligatoirement
- c'est dans ce sous-sys que s'execute les applications 32bits ou vielle appli via un émulateur NTVM

**POSIX (psxss.exe):**
- Environnementd’exécutiondesprogrammesPOSIX(32bits)
- Remplacé par Windows Services For UNIX (SFU) sous XP/2003
- Remplacé par Windows Subsystem for Unix-based Applications (SUA) (32/64 bits) sous Vista
- Supprimé depuis Windows 8/2012
- Remplacé par Windows Subsystem for Linux (WSL) sous Windows 10 et Windows Server 2016

**OS/2 (os2ss.exe) :**
- Environnement d’exécution des programmes OS/2 en invite de commande uniquement
- Supprimé depuis XP/2003

## Sessions
- apparu sous windows NT 4 (terminal server edition)
- par la suit a donne naissance au serv de bureau a distance
- l'idee c'est de perm a +ieur utilisateurs de se co simulat sur la meme machine
- ensuite ça a ete utiliser dans windows xp (le fast user switching), dnas le bureau a distance, et dans Hyper-V
---
Sous Windows XP 2003 cmt ca marche ?
- utilisateur va se faire affecte une session 0 tous les services/appli de la machines vont s'y executer
- lorsqu'un autre utilisateur sa session sera numéro 1 ...
- les services tournent dans la session d'un utilisateur
- le risque? les env des utilisateurs sont cloissonnées, quel risque sous XP/2003 : l'utilisateur dans la session 0 peut avoir accès aux services
    - c'est avec le compte système (a privilege eleve) que les services sont executé 
    - le compte sys: represente le sys d'exploitation, il est + privilegier que le compte admin
    - sur XP/2003 on a un service planificateur des taches (sous windows il est exec sous le compte sys). Est ce qu'ici elle va s'executer avec les privilege du service ? ça depend. si on utilise la commande AT 
    - "il y'a un trou dans la raquette"

Windows Vista
- il apporte un mechanisme different
- la session 0 devient non interactive 
- PSexec executer une commande de maniere interactive directement avec le systeme

## Processus User mode
**Idle et Systeme**
idle: lorsque le processeur n'a rien a faire il est occupe par le processus idle qui va l'occuper
systeme: c'est notre sys windows lui même.
- pid a 4
- cree le proc SMSS.EXEC (session manager sub sys)
- il ne doit y avoir qu1 seul proc sys sur notre machine windows

**SMSS:**
- tourne en mode utilisateur
- son parent c'est le sys
- sa priorité: 11
- l'utilisateur qui exec ce proc c'est le sys 
- il charge les known DLL
- Effectue des suppressions et renommages différés des fichiers
- Crée la session 0(OS services)
- Crée la session 1 (User session) et les suivantes si plusieurs utilisateurs
- Crée les processus CSRSS et WINLOGON (session 1)
- S’exécute dans la session 0
- qu'1 seul processus SMSS.EXE qui peut s'exec

**CSRSS:**
- Windowssubsystemprocess.
- Enfant de SMSS.EXE
- Priorité de base : 13
- \%SystemRoot%\system32\csrss.exe
- Username:NTAUTHORITY\SYSTEM
- Crée et supprime processus et threads, fichiers temporaires, etc.
- 1 seul processus CSRSS par session dont 1 en session 0

**WININIT.EXE — Windows Initialization Process**
- Parent des processus SERVICES.EXE (Service Control Manager - SCM), LSASS.EXE et LSM.EXE
- il est Enfant de SMSS.EXE
- Priorité de base : 13
- exec avec le compte sys: NTAUTHORITY\SYSTEM
- \%SystemRoot%\system32\wininit.exe
- Réalise des opérations d’initialisation en user-mode
- Crée\%windir%\temp 
- S’exécute en session 0


**SERVICES.EXE — Service Control Manager (c'est le gestionnaire de service)**
- Enfant de WININIT.EXE
- Parent de services tels que SVCHOST.EXE, DLLHOST.EXE, TASKHOST.EXE, SPOOLSV.EXE, etc.
- \%SystemRoot%\System32\wininit.exe
- Username:NTAUTHORITY\SYSTEM
- Prioritédebase:9
- Charge en mémoire une table des services
- S’exécuteensession0
- 1 seul processus SERVICES.EXE

**LSASS:**
- joue un role important dans la sécurité de ce sys
- qu'un seul proc LSASS qui tourne 
- il est responsable de l'application de la strategie de groupe sur un sys, demande la generation d'un event de securite lorsqu'un utilisateur demande qqch, il sera solicite pour verifie si un mdp respecte bien les elements necessaires

**SVCHOST:**
- PlusieursinstancesdeSVCHOST.EXEs’exécutent
- %SystemRoot%\System32\svchost.exe
- Username : l’un des 3 - NT AUTHORITY\SYSTEM, LOCAL SERVICE, ou NETWORK SERVICE 
- Enfant de SERVICES.EXE
- Prioritédebase:8 (priorité normal quoi)
- S’exécute en session0

**LSM: utilise dans la cadre du terminal server**
- gestion de bureau a distance par exemple
- demande d'arret et de demarrage de l'environnement utilsiateur

**Winlogon:**
-  sert à realiser des ouvertures de session 
-  Pasdeprocessusparent
-  Peut avoir comme processus enfant LogonUI si une carte à puce par exemple est utilisée pour s'authentifier
-  LogonUI se terminera une fois que l'utilisateur aura entré son mot de passe. Une fois le mot de passe saisi, la vérification est envoyée à LSASS et vérifiée via Active Directory ou SAM.
-  Priorité de base : 13
-  S’exécute en session 1 et suivante
-  Gère les connexions / déconnexions utilisateur interactives lorsque la combinaison de touches SAS est activée (Ctrl+Alt+Delete)
-  Charge le processus USERINIT.EXE décrit dans la valeur USERINIT de Software\Microsoft\Windows NT\CurrentVersion\Winlogon
    -  userinit: est chargé de demarrer l'env graphique de l'utilisateur 

**EXPLORER.EXE — Windows Explorer**
- Pasdeprocessusparent
- Priorité de base : 8
- Username:utilisateurayantouvertlasession
- %Systemroot%\Explorer.exe
- Multiples processus enfants
:::info
Tous ces proc doivent s'exec sur windows 
certain d'entre eux si on arrive a les tuer, le sys s'arrete.
:::

# <span style="color:red">5 - Modèle de sécurité</span>
- liste des cannaux protégé: au'il soient dans l'active directory ou pas
    - Fichiers/répertoires(NTFS), clésduregistre, namedpipes, mailslots, window/desktop, jobs, objets de synchronisation (events, mutexes, sémaphores, timers), processus, threads, token, anonymous pipes, file-mapping, partages réseau, imprimantes, services...

- a chaqun de ces objects est attribuer un descripteur de securité (qui en est le proprio, qui peut faire quoi sur cet obj, ...)
- j'ai un utilisateur qui veut un acces: que dois faire l'utilisateur avant de demande un acces? s'authentifier sur mon sys (je prouve qui je suis). Ensuite mon sys va me genere un jeton utilisateur. Ce jeton est volatile (stocke en mem vide) quand je ferme la session le jeton disparait. Si j'ai ouvert une session et qu'un utilisateur m'ajoute a un froupe et que je n'ai pas acces a un doc que le groupe est cense avoir acces je dois me relog car le jeton n'est pas dynamique
- on peut ouvrir des sessions:
    - avec un login/mdp
    - carte a puce
    - biometrie 
    - reconnaissance faciale (avec hello?)(depuis windows 10)

## Modèle general
## notions SID
- c'est au travers de ses SID qu'on peut accorder des droits sur le sys
- les SID commence toujours par un S-1
- ![](https://i.imgur.com/8fZLWnV.png)

### Well known SIDs
- S110 = un groupe tout le monde 
- SID local
- S15XX:
    - S1518: compte Système
    - S152: compte service réseau
    - S1510: self (utilisé ds lactive directory) permet a chaque utilisateur de modifier leur info uniquement sur leur machine (par ex si on veut donner la possibilité a l'utilisateur de rentrer eux meme leur numero de tel, on leur accorde le groupe self en SID)
    - S15547: utilisateur avec pouvoir (peuvent pas ex partage des imprimantes, des dossiers) 

- S1521-X-Y-Z
    - crerr une machine = SID Machine $\Rightarrow$ comment générer des X-Y-Z aléatoire unique ? la date, l'heure, des numéros de serie de la machine, un aléa => on hash tout ça et ça nous ressort un X Y Z 
    - creer un user $\Rightarrow$ $SID_u$$_s$$_e$$_r$ = SID(machine) + RID(user)

- SID des comptes et groupes de domaine Active Directory 

1) Installation de Windows Server 2016
    - SID(serv) generer psuedo aleatoire genere pour ce server
2) Installation de l'active directory (je fais de ce server un controller de domaine)
    - SID(domaine) = SID(serv)
    - ce serveur va devenir controller de domaine SID(CD) = SID(DOM) + SID(CD)
3) Creation d'un CPT USER, GRP, COMPT
    - chaque fois qu'on creer un user un groupe ...leur sid sera les suivants:
    - SID(user) = SID(domaine) + RID(user)
    - SID(GRP) = SID(dom) + RID(grp)
    - SID(COMP) = SID(dom) + RID(comp)

:::warning
on ne reutilise jamais le meme id qui a été attribuer a un autre groupe/utilisateur même si on a delete ce grp ou utilisateur
Meme si je recreer mon compte apres l'avoir supprime, il ne recuperera pas son SID => too late
:::

:::info
qu'est-ce qui empêche un brute force ? verouillage du compte au bout d'un certain nb de tentaive
:::

![](https://i.imgur.com/ZSeE5tH.jpg)
:::info
un controleur de domaine ça a quoi comme protocole ?
- LDAP/389
- Kerberos/88 (protocole  d'identificaton reseau pour les utilisateurs)
- NTP/123
- (DNS/53)
- SMB/445
:::

:::danger
Pas une bonne practice de mettre un server DHCP sous le CD
:::
:::info
Dans un SMB il y'a plusieurs dossiers:
- PC, ...

S'authentifier à l'IPC en guest en ligne de commande : 
net use Z: \\NOM SRV\IPC$ "" /USER: ""
Si connexion, permet alors de réaliser une attaque
:::

## Jeton d'accès
un obj volatile en mem vive du processus LSASS qui perm au sys d'iden l'utilisateur tout au long de sa session

Dans ce jeton on va retrouver des infos sur l'util 
- comme son SID)
- On va lister dans le jeton tous les grp auquel l'util appartient
- ensuite les droits accordés à l'utilisateur

:::info
Droit $\neq$ Autorisation 
droit: que peut faire l'utilisateur sur mon sys 
autorisation: ??
:::

### Jeton atributs
- UserAndGroup
- Privilèges

## Descripteur de securité

# <span style="color:red"> Exams précédents </span>
{%pdf http://mastercorp.epita.eu/a1/annales/active.directory/2016_acdi.pdf %}

{%pdf http://mastercorp.epita.eu/a1/annales/active.directory/2015-active_directory.pdf %}

{%pdf http://mastercorp.epita.eu/a1/annales/active.directory/2014-part3_acdi.pdf %}

