Browse Source

GROS COMMIT

Béranger 2 years ago
parent
commit
2775781b46

+ 0
- 3
Assembleur/cours.md View File

@@ -254,7 +254,4 @@ jmp                             intrinsèquement saut inconditionnel
254 254
 
255 255
 cmp
256 256
 jmp                             saut conditionnel, cmp va modifier un flag lu par jmp
257
-
258
-
259
-
260 257
 ```

+ 1
- 0
AttaqueSecuReseau/cours.md View File

@@ -0,0 +1 @@
1
+# Attaques et sécurisation des couches OSI, Cartographie de Réseau

+ 29
- 0
Conferences/Lyra_PCI-DSS.md View File

@@ -0,0 +1,29 @@
1
+# Lyra Network
2
+# Entreprise de Paiement
3
+
4
+Société en charge de la bonne circulation des paiements
5
+
6
+Les cannaux de communications TPE-Banque : 
7
+
8
+- RTC
9
+- GPRS
10
+- IP
11
+
12
+# PCI-DSS
13
+## Payment Card Industriy Security Standard Council
14
+
15
+Fondé en 2006 par les réseaux de Cartes Bancaires :
16
+
17
+- Visa
18
+- Mastercard
19
+- AMEX
20
+- Discover
21
+- JCB International
22
+
23
+Cette norme a pour but d'augmenter de façon signifiante la sécurité des données de paiement. On la trouve sous plusieurs déclinaisons : 
24
+
25
+- PCI DSS : Service de traitement de données de cartes bancaires
26
+- PA  DSS : Logiciels de traitement de données de cartes bancaires
27
+- PCI HSM : Hardware Security Module
28
+- PCI-PTS : Terminaux de paiements
29
+

+ 11
- 0
Conferences/Marine.md View File

@@ -0,0 +1,11 @@
1
+# Conférence Marine Nationatle
2
+
3
+## Renseignement
4
+
5
+## Prévention
6
+
7
+## Protection
8
+
9
+## Dissuasion
10
+
11
+## Intervention

+ 73
- 25
Crypto/cours.md View File

@@ -152,18 +152,19 @@ Pour optimiser le chiffrement on souhaiterait
152 152
   <img src="./Images/bloccipher.png">
153 153
 </p>
154 154
 
155
-On considère un chiffrement à bloc réussi si 
155
+On considère un chiffrement à bloc réussi si
156 156
 
157 157
 - Les blocs sont assimilables à des permutations
158 158
 - Un n-bit block chiffré est indistinguable d'un random n-bit block
159 159
 
160
-En pratique, pour valider ce type de chiffrement, on se base sur les propriétés de Shannon : 
160
+En pratique, pour valider ce type de chiffrement, on se base sur les propriétés de Shannon :
161
+
161 162
 - **Diffusion** : Si 1 bit change dans le bloc d'origine, il faut que statistiquement, plus de la moitié du bloc chiffré soit impactée
162 163
 - **Confusion** : 1 bit du bloc chiffré doit être lié à plusieurs bits de la clé
163 164
 
164 165
 ## Réseau de Substitutions/Permutations
165 166
 
166
-Une autre techinque de chiffrement consiste à faier passer le message dans une chaine de bloc de substitutions permutations : 
167
+Une autre techinque de chiffrement consiste à faier passer le message dans une chaine de bloc de substitutions permutations :
167 168
 
168 169
 <p align="center">
169 170
   <img src="./Images/spnet.png">
@@ -184,13 +185,13 @@ on a donc ici $nb_{itération de recherches} = 2^{security level} = 2^{taille de
184 185
 
185 186
 On parle de S-Box pour les substitions et P-Box ou D-Box pour Permutation ( Ou diffusion).
186 187
 
187
-## S-Box 
188
+## S-Box
188 189
 
189
-Substitue un symbole pour un autre. Cela contribue à la confusion puisque ça rend la sortie inintelligible. D'une pière deux coups, cela accentue également la non linéarité de la sortie. 
190
+Substitue un symbole pour un autre. Cela contribue à la confusion puisque ça rend la sortie inintelligible. D'une pière deux coups, cela accentue également la non linéarité de la sortie.
190 191
 
191
-## P-Box ou D-Box 
192
+## P-Box ou D-Box
192 193
 
193
-Echange deux symboles les uns par rapport aux autres. Cela contribue à la diffusion puisque cela déplace les symboles d'un endroit à l'autre. Par contre cela n'a aucun effet sur la linéarité de la sortie. 
194
+Echange deux symboles les uns par rapport aux autres. Cela contribue à la diffusion puisque cela déplace les symboles d'un endroit à l'autre. Par contre cela n'a aucun effet sur la linéarité de la sortie.
194 195
 
195 196
 # AES
196 197
 
@@ -202,21 +203,24 @@ Nous sommes ici avec un chiffrement symétrique.
202 203
   <img src="./Images/AES_round1.png">
203 204
 </p>
204 205
 
205
-On est sur des blocs de 128 bits en général. 
206
+On est sur des blocs de 128 bits en général.
206 207
 
207 208
 L'état interne est composé d'une matrice d'octets de 4x4. 4 operations sont exécutées sur l'état interne à chacun des rounds.
208 209
 
209 210
 1 - AddRoundKey
211
+
210 212
 - xor between state and round-key.
211 213
 - if message independant from key, and key uniform, then the new state
212 214
 - looks uniform.
213 215
 
214 216
 2 - SubBytes
217
+
215 218
 - Non-linearity: Minimization of input-output correlation.
216 219
 - Complexity: Complex expression in GF(28).
217 220
 - Simple implementation: Look-up table (and must be since litteral expression complex).
218 221
 
219 222
 3 - ShiftRows
223
+
220 224
 - Variable byte rotation of each line depending on line index.
221 225
 - First line: no rotation.
222 226
 - Second row: 1 byte rotation.
@@ -224,6 +228,7 @@ L'état interne est composé d'une matrice d'octets de 4x4. 4 operations sont ex
224 228
 - Fourth row: 3 bytes rotation.
225 229
 
226 230
 4 - MixColumns
231
+
227 232
 - Column per column scrambling of coefficients. Equivalent to multiplying each column by following matrix:
228 233
 
229 234
 $\begin{pmatrix}
@@ -244,17 +249,19 @@ $\begin{pmatrix}
244 249
 The message is split into blocks matching the size of Block-Cipher’s block
245 250
 length. Each block is encrypted with the same key.
246 251
 Pros:
252
+
247 253
 - Simplest construction.
248 254
 - Destination can decrypt a specific block without extra computations.
249 255
 - Vulnerabilities?
250 256
 
251 257
 # Comment évaluer la sécurité ?
252 258
 
253
-Propriétés de Sécurité : 
259
+Propriétés de Sécurité :
254 260
 
255 261
 Sans information sur la clé, aucune info du chiffré n'informe d'aucune info du clair. : Sécurité Sémantique
256 262
 
257 263
 Adversary capabilities are defined as indistinguishability games:
264
+
258 265
 - IND-KPA (known plaintext-attack): adversary sees pairs $(m_i
259 266
 , Enc(m_i))$.
260 267
 - IND-CPA (chosen plaintext-attack): adversary SELECTS messages mi
@@ -262,12 +269,14 @@ and ASKS an entity to encrypt $m_i$
262 269
 
263 270
 - IND-CCA: More information during asymmetric encryption lesson.
264 271
 
265
-## IND-CPA 
272
+## IND-CPA
273
+
266 274
 <p align="center">
267 275
   <img src="./Images/IND-CPA.png">
268 276
 </p>
269 277
 
270 278
 Win condition
279
+
271 280
 - L'adversaire gagne si : $Pr[b = b'] > 1/2$.
272 281
 - Si Pr[b = b'] = 1/2, alors l'adversaire peut seulement deviner au hasard quel message a été chiffré.
273 282
 - Advantage: $ACPA = |Pr[b = b'] − 1/2| = \in$
@@ -280,38 +289,42 @@ Win condition
280 289
 
281 290
 - On souhaiterait une robustesse intrinseque aux bitflips.
282 291
 
283
-- On voudrait qu'il soit impossible de trouver un antécédant du code chiffré à partir de ce petit bout code. 
292
+- On voudrait qu'il soit impossible de trouver un antécédant du code chiffré à partir de ce petit bout code.
284 293
 
285
-On parle ici de **codes de contrôles d'intégrité**, ou **fonction de Hash**. 
294
+On parle ici de **codes de contrôles d'intégrité**, ou **fonction de Hash**.
286 295
 
287
-Propriétés usuelles : 
296
+Propriétés usuelles :
288 297
 
289 298
 - En connaissant $h_{m_1} = H(m_1)$, trouver $m_2$ est difficile tel que $H(m_2)=h_{m1}$
290 299
 - Pour un message $m_1$, trouver $m_2$ tel que $H(m_1) = H(m_2)$ est difficile
291 300
 - Trouver $m_1$ et $m_2$ tel que $H(m_1)=H(m_2)$ est difficile.
292 301
 
293 302
 # Etude de la sécurité des fonctions de hashage
294
-## Est ce que la pire des attaques concernant les fonctions de hashage est la recherche exhausitve
295 303
 
304
+## Est ce que la pire des attaques concernant les fonctions de hashage est la recherche exhausitve
296 305
 
297 306
 On parle d'attaque annivesaire en lien avec le paradoxe de l'anniversaire.
298 307
 
299
-## Notation 
308
+## Notation
309
+
310
+Soit $\mathbb{Z}_M -> \mathbb{Z}_H$ une fonction de Hash avec H sorties possibles. On note
300 311
 
301
-Soit $\mathbb{Z}_M -> \mathbb{Z}_H$ une fonction de Hash avec H sorties possibles. On note 
302 312
 - p(n;H) la probabilité de trouver au moins une collision après n essais
303 313
 - n(p,H) le nombre d'essais avant de trouver une collision avec une probabilité p.
304 314
 
305 315
 ## Estimation of p(n; H)
316
+
306 317
 - $p(n; H) = \frac{365!}{(365−n)!365^n} \simeq 1 −e^{−n2 /(2H)}$.
307 318
 - (Birthday attack exact formula + application of stirling formula
308 319
 - $(n! \simeq \sqrt{2\pi n}(\frac{n}{e})^n)$
320
+
309 321
 + application of taylor expansion at order 2).
310 322
 Estimation of n(p; H)
311
-- $n(p; H) = \sqrt{2H\ln\frac{1}{1−p}} $
312 323
 
324
+- $n(p; H) = \sqrt{2H\ln\frac{1}{1−p}} $
313 325
 
314 326
 Au vu des chiffres induits par ces valeurs, on estime qu'un mécanisme sécurisé l'est à partir de 80 bits de niveau de sécurité, soit $2^{80}$
327
+
315 328
 # Construction d'une fonction de Hash - Merkle-Dagmard (MD5, SHA-1, SHA-2...)
316 329
 
317 330
 <p align="center">
@@ -335,6 +348,7 @@ MD5(m1||s1) = MD5(m2||s2). Has been successfully used to forge a
335 348
 fake server certificate from legal authority.
336 349
 
337 350
 Other limitation
351
+
338 352
 - MD5 computation is fast: A GPU can compute about 150 million hashes per second
339 353
 (Yanjun et al., 2014).
340 354
 - Chosen Prefix Attack: $150 millions \simeq 2^{27} =⇒ 2{39}/2^{27} = 2^{12} sec = 1h 8m
@@ -352,7 +366,7 @@ to cover several cryptographic algorithms).
352 366
 
353 367
 ### Limite des fonctions de Hash en pratique
354 368
 
355
-Si on considère qu'un utilisateur télécharge un programme depuis un serveur officiel, un attaquant pourrait intercepter la communication et remplacer le programme par un malveillant. En contre-mesure on pourrait imaginer que le serveur et l'utilisateur partagent un secret, inconnu par l'attaquant, et ils peuvent utiliser une construction appelée MACs, similaire aux fonctions de hash pour authentifier le message reçu. 
369
+Si on considère qu'un utilisateur télécharge un programme depuis un serveur officiel, un attaquant pourrait intercepter la communication et remplacer le programme par un malveillant. En contre-mesure on pourrait imaginer que le serveur et l'utilisateur partagent un secret, inconnu par l'attaquant, et ils peuvent utiliser une construction appelée MACs, similaire aux fonctions de hash pour authentifier le message reçu.
356 370
 
357 371
 ## Préfixe secret
358 372
 
@@ -373,8 +387,9 @@ On note p le block de padding d'un message s||m. Avec une paie (m,MAC=H(s||m)),
373 387
 
374 388
 Pour un message m et un secret s, MAC = H(m||s).
375 389
 
376
-### Quelques faiblesses architecturelles demeurent...
377
-- **Vulnérabilité  hors ligne d'une attaque par seconde-preimage**: 
390
+### Quelques faiblesses architecturelles demeurent
391
+
392
+- **Vulnérabilité  hors ligne d'une attaque par seconde-preimage**:
378 393
 (i.e. For given m1, finding m2 such as H(m1) = H(m2)). An attacker can search second pre-image offline (i.e. without information on the secret s) and find m2. Then, attacker can substitute m1 by m2.
379 394
 
380 395
 - **Vulnerability on offline collision attack (weak collision)**: (i.e. Find m1 and m2 such as H(m1) = H(m2)). If an attacker can ask an authority to compute a MAC, then he asks a MAC for m1 and an substitute this for m2.
@@ -383,7 +398,7 @@ Pour un message m et un secret s, MAC = H(m||s).
383 398
 
384 399
 $ HMAC(S_k,m) = H((S_k)\oplus opad) || H((S_k\oplus ipad)||m)) $
385 400
 
386
-Propriétés: 
401
+Propriétés:
387 402
 
388 403
 Une propriété de HMAC est que la fonction de compression n'est pas résistante aux collisions. (seulement PRF est requis) si elle est utilisée intentionnellement => MD5 et SHA-1 peuvent êtrer utilisée pour HMACs
389 404
 
@@ -401,18 +416,20 @@ Donc HMAC(Sk , m1) = HMAC(Sk , m2)
401 416
 ## Aglo MAC basé sur un chiffrement par blocs - CMAC
402 417
 
403 418
 CMAC est construit à partir d'un chiffrement par bloc qui opère en mode CBC. _NIST SP800-38B_. C'est une amélioration de CBC-MAC qui avait des vulnérabilités lorsque les messages avaient des longueurs variables. La variante XCBC-MAC a été proposée en 2003.
419
+
404 420
 ## Algo MAC basé sur un HASH - HMAC
405 421
 
406
-HMAC est aussi appelée Keyed-Hash message authentification code est construit à partir d'un e fonction de hash. 
422
+HMAC est aussi appelée Keyed-Hash message authentification code est construit à partir d'un e fonction de hash.
407 423
 
408 424
 ## Intégrité, Authentification, et Confidentialité
409 425
 
410 426
 GMC et GMAC sont des modes d'opérations de chiffrement par bloc qui intègrent directement ces principes.
411 427
 
412 428
 ## Exemple de MACs implémentés en OpenSSL
429
+
413 430
 CMAC, GMAC, HMAC, KMAC, SiphHASH, Poly1305 (Bernstein, selectionné par google pour remplacer RC4 dans TLS/SSL).
414 431
 
415
-# MAC + Encryption : How to ? 
432
+# MAC + Encryption : How to ?
416 433
 
417 434
 <p align="center">
418 435
   <img src="./Images/encrypt_mac.png">
@@ -420,7 +437,7 @@ CMAC, GMAC, HMAC, KMAC, SiphHASH, Poly1305 (Bernstein, selectionné par google p
420 437
 
421 438
 Le process le plus rapide pour chiffrer et certifier est Encrypt and Mac puisqu'on parallélise les process Encrypt et Mac.
422 439
 
423
-Le process qui mène à la vérification la plus rapide est Encrypt then Mac, ou on peut vérifier le MAC sans avoir à déchiffrer le plain. 
440
+Le process qui mène à la vérification la plus rapide est Encrypt then Mac, ou on peut vérifier le MAC sans avoir à déchiffrer le plain.
424 441
 
425 442
 Le plus vulnérable au chosen plain-text attack, est la construction Encrypt and MAC puisque le Hash est directement correlé au plain-text.
426 443
 
@@ -447,7 +464,9 @@ GCM utilise donc le parallélisme encrypt then MAC, LA STAR.
447 464
 </p>
448 465
 
449 466
 ## Use-Case : SHA-1
467
+
450 468
 No storage
469
+
451 470
 - Number of combinations is $36^8 = 2^{40} $⇒ brute force requires 240 calls to SHA-1 before expecting finding a password.
452 471
 - Modern 4GHz CPU: 3.5 MHash/sec = $2^{21}$ Hash/sec
453 472
 =⇒ 2
@@ -468,6 +487,7 @@ Ici, H est une fonction de Hash, R, une fonction de réduction qui transforme le
468 487
 
469 488
 **Attack**
470 489
 We note h the hashes obtained by attacker after a successfull attack.
490
+
471 491
 - step 1: Check if h is in database. If it is, take the corresponding password p and compute R2(H(R1(H(p)))) ⇒ done.
472 492
 - step 2: Check if H(R2(h)) is in database. If it is, take the corresponding password p and computes H(R1(H(p))) ⇒ done.
473 493
 - step 3: Check if H(R1(H(R2(h)))) is in database. If it is, take the corresponding password p ⇒ done.
@@ -482,10 +502,38 @@ We note h the hashes obtained by attacker after a successfull attack.
482 502
   - Since attacker must execute hash function many times and legitimate server only one, slowing hash function drastically penalize attacker.
483 503
 
484 504
 ## Autre construction des PasswordCheck
505
+
485 506
 ### Preuve de travail | Proof of work
486 507
 
487 508
 Pour éviter le spam ou le déni de service, oh force les hashes des émetteuurs de message à avoir 20 bits de poids forts à zéro, en utilisant un custom header. C'est également utilisé pour le bitcoin.
488 509
 
489 510
 ### Dérivation de clé
490 511
 
491
-Des que les fonctions de hash ont des sorties uniformes, ont peut également les utiliser pour créer des secrets uniformes.
512
+Des que les fonctions de hash ont des sorties uniformes, ont peut également les utiliser pour créer des secrets uniformes.
513
+
514
+# Definitions of Random Number Generators
515
+
516
+## True Random Number Generator (TRNG)
517
+
518
+- Généralement créé par hardware, avec une forte entroie puisqu'on n'a aucun moyen de remonter à la source.
519
+- Peut être biaisée par la loi utilisée (i.e. si ce n'est ni gaussien ni uniforme), mais chacun des biais peut être contré par des algorithmes que l'on appelle des extracteurs
520
+
521
+## Pseudo  Random Number Generator
522
+
523
+- Entropie Finie, au bout d'un moment on peut prédire les sorties
524
+
525
+Exemple de générateurs d'aléas purs :
526
+
527
+- Bruit thermique autour d'une résistance
528
+- Décomposition atomique 
529
+
530
+# Partage de clés dans un monde symétrique
531
+
532
+**Cas de deux utilisateurs**, si le secret est déjà partagé ok, sinon, il yè a échange de clé sur un canal sûr, ou trouver un moyen de le partager astucieusement.
533
+
534
+**Cas d'un groupe d'utilisateurs** :   Partager un secret peut être dangereux puisqu'il peut y avoir des usurpation d'identité, de l'interception de messages... On peut aussi envisager d'avoir un secret par paire d'uitlisateurs, mais cela nécessiterait énromément de clés. 
535
+
536
+En pratique on adopte un modèle serveur client avec une clé par client.
537
+
538
+## Comment échange-t-on le secret
539
+cf . slides

BIN
OS/Images/64bits_vaddr.png View File


BIN
OS/Images/IDT.png View File


BIN
OS/Images/desc_PDE_PTE.png View File


BIN
OS/Images/pagination.png View File


BIN
OS/Images/v_addr.png View File


+ 176
- 9
OS/cours.md View File

@@ -244,14 +244,13 @@ _Un exemple : DosBox_
244 244
 
245 245
 # Segmentation
246 246
 
247
-
248 247
 ## Gestion mémoire du mode protégé
249 248
 
250
-En mode protégé, on a un espace mémoire en 32 bits, ce qui engendre un espace linéaire de 32 bits => $2^32$ <=> 4Gb. Pendant un temps supérieur à la RAM installée. On va segmenter cet espace, et ainsi mettre en place un adressage relatif au début d'un segment(adresse logique). 
249
+En mode protégé, on a un espace mémoire en 32 bits, ce qui engendre un espace linéaire de 32 bits => $2^32$ <=> 4Gb. Pendant un temps supérieur à la RAM installée. On va segmenter cet espace, et ainsi mettre en place un adressage relatif au début d'un segment(adresse logique).
251 250
 
252 251
 ## La segmentation
253 252
 
254
-Il s'agit donc d'une prolongation du principe de segments du mode réel. On a plusieurs types de modèles, _flat/protected_ et _flat/multiy-segment_. Chaque segment a des propriétés de type, de taille et de droits. 
253
+Il s'agit donc d'une prolongation du principe de segments du mode réel. On a plusieurs types de modèles, _flat/protected_ et _flat/multiy-segment_. Chaque segment a des propriétés de type, de taille et de droits.
255 254
 
256 255
 Avec cette segmentation on peut réellement découper la mémoire et attribuer certaines propriétés à ces segments de mémoire. On peut donc créer des segments read only, read write, execution...
257 256
 
@@ -267,7 +266,7 @@ Pour faciliter ce fonctionnement, on met en place une table GDT - Global Descrip
267 266
 
268 267
 ## Les sélecteurs de segments
269 268
 
270
-Ils permettent l'accès à un descripteur donné. Chaque sélecteur permet de définir : 
269
+Ils permettent l'accès à un descripteur donné. Chaque sélecteur permet de définir :
271 270
 
272 271
 - Un niveau de privilège
273 272
 - Une table (locale ou globale)
@@ -278,11 +277,13 @@ Ils permettent l'accès à un descripteur donné. Chaque sélecteur permet de d
278 277
 </p>
279 278
 
280 279
 Les sélecteurs de segments sont en général **CS, DS, SS** qui pointent vers une table GDTR en mémoire qui elle contient les descripteurs de segments.
280
+
281 281
 ## Descripteur de segment
282 282
 
283
-Ils contiennent toutes les informations relatives auc segments : 
283
+Ils contiennent toutes les informations relatives auc segments :
284
+
284 285
 - base et limite
285
-- type de segment 
286
+- type de segment
286 287
   - code (X,RX), data (R,W)
287 288
   - système : TSS, Task Gate, Interrupt Gate, Call Gate
288 289
 
@@ -291,7 +292,7 @@ Ils contiennent toutes les informations relatives auc segments :
291 292
 </p>
292 293
 
293 294
 - Base : Début du segment
294
-- Limite : Taille - 1, dernier octet accessible 
295
+- Limite : Taille - 1, dernier octet accessible
295 296
 - Granularité, on l'utilise pour multiplier nos bits de limite et ainsi pouvoir arriver à 4GB.
296 297
 
297 298
 # Niveaux de privilèges
@@ -336,7 +337,7 @@ Du point de vue de la sécurité
336 337
 - simulation d’une architecture harvard (contre von Neumann)
337 338
 - imaginez un descripteur par buffer ? anti-overflow
338 339
 - Linux Kernel PaX protection : SEGMEXEC
339
-_https://pax.grsecurity.net/docs/segmexec.txt_
340
+_<https://pax.grsecurity.net/docs/segmexec.txt>_
340 341
 
341 342
 Et pourtant ...
342 343
 
@@ -346,9 +347,175 @@ Et pourtant ...
346 347
 
347 348
 # Interruptions et Exceptions
348 349
 
350
+Les interruptions et les exceptions ont pour intérêt d'éviter l'attente active et bloquer le CPU, d'apporter une composante événementielle à l'OS et peut être réveillé sur demande en fonction des besoins du programme.
351
+
352
+Les exceptions sont générées
353
+
354
+- par le CPU, en cas d'erreurs (#GP, #NP).
355
+- par du code
356
+- ou d'autres sources
357
+  - fault, on la gère et on ré-excécutee l'instruction
358
+  - trap, on la gère et on continue après l'instruction
359
+  - abort, non récupérable
360
+
361
+Il y a une classification qui permet une priorisation des exceptions en cas de déclenchement simultanné.  En général, chacune des erreurs vient en général avec un code d'erreur.
362
+
363
+## Exceptions Usuelles
364
+
365
+- General Protection Fault #GP
366
+  - Survient dans de nombreux cas
367
+    - Liés  la segmentation (taille, droits, pvl...)
368
+    - Configuration invalide des registres de contrôle, MSRs
369
+  - Du type fault
370
+  - Fournit un code d'erreur
371
+    - Sélecteur de segment fautif si erreur de segmentation
372
+    - ou 0 pour les autres erreurs
373
+- BreakPoint #BP
374
+  - Survient quand l'instruction int3 est exécutée
375
+  - Du type trap
376
+  - Pas de code d'erreur
377
+
378
+## Interruptions 
379
+
380
+Qui dit Interruptions dit aussi reprise d'exécution, ainsi, au moment  de l'interruption, l'état actuel du CPU doit être sauvegardé. Ainsi, on doit mettre en oeuvre les concepts de pile d'interruption, d'Interrupt Gate (descripteur de segment d'interruption), et d'appels systèmes (implémentation historique).
381
+
382
+## Table des interruptions IDT
383
+
384
+Les descripteurs référencent des segments de code et du handler associé. Ils indiquent également le DPL nécessaire pour y accéder qui sont généralement en ring 0, à l'exception du handler d'appels systèmes qui sera en ring 3.
385
+
386
+<p align="center">
387
+  <img src="./Images/IDT.png">
388
+</p>
389
+
390
+## Contexte d'interruption
391
+
392
+On parle du contexte pour indiquer l'état du CPU à un instant donné. Cela sous entend 
393
+
394
+- Un niveau actuel de privilèges
395
+- La valeur des registres généraux (eax, ebx, ..., esp)
396
+- Le registre d'état (EFLAGS)
397
+
398
+Dans le cadre du déclenchement d'une exception/interruption, on peut potentiellement changer subitement le niveau de privilèges (ring 3 => ring 0)
399
+
400
+Le CPU doit donc sauvegarder les informations d'état du niveau de provenance pour y retourner après l'exécution de l'exception. Le noyau s'occupe du reste.
401
+
402
+**En trois étapes**
403
+
404
+- Au moment de l'interruption, le CPU sauvegarde le minimum et détermine s'il y a eu changement de niveau de privilèges
405
+- Avant de traiter l'interruption, l'OS sauvegarde ce qu'il pense être nécessaire de restaurer
406
+- Au retour de l'interruption, l'OS utiliser une instruction spécifique (iret)
407
+
408
+## Comment le CPU sait où sauvegarder ?
409
+
410
+Dans le cas d'une transition ring 3 => ring 0 :
411
+
412
+- Le CPU cherche à changer de pile (registre esp)
413
+- Sauver les informations du ring 3 dans le ring de destination
414
+
415
+Mais l'une des question serait , où trouver la nouvelle valeur à mettre dans esp ?
416
+On peut y parvenir grâce au TSS - Task State Segment
417
+
349 418
 # Pagination
350 419
 
420
+Introduction d'un nouveau système de ségragation mémoire, avec l'arrivée de nouveaux concepts, comme les adresses virtuelle. C'est permis par un nouveau composant qui permet les calculs, la MMU, Memory Management Unit
421
+
422
+## Définiition 
423
+
424
+On a un programme qui va avoir des adresses de 1000 à 2000 (adresse relative), qui va être traduite vers une adresses linéaire qui n'est plus nécessaireemnt l'adresse physique finale dans la RAM. Avec la segmentation, au démarrage, bien qu'on ait pas accès à la RAM entière, on pouvait écrire un peu n'importe où, sans que cela ait d'impact. Avec la pagination, on peut dire rajouter une étape, qui va permettre une traduction des adresses linéaires, qui fait que l'on peut dire que l'adresse linéaire 0xffffff (non accessible par segmentation) correspond en réalité à l'adresse 0x00. La pagination introduit donc des une table de traduction des adresses virtuelles  -> adresses physiques par taches.
425
+
426
+On parle ici
427
+
428
+- Espace d'adressage
429
+- mappping memoire
430
+- page trables/directory (via la MMU)
431
+- page table entries (PTE)
432
+
433
+<p align="center">
434
+  <img src="./Images/pagination.png">
435
+</p>
436
+
437
+Chacue page de mémoire physique fait 4kB, et on n'a qu'un seul Page Directory, avec 1024 entrées (PDE - Page DIrectory Entry, 4kB)
438
+
439
+PDE 
440
+
441
+- 1024 entrées, Page Directory Entry, 4kB
442
+  - Une entrée => Une Page Table 
443
+  - Une entrée définit l'adresse physique d'une Page Table
444
+
445
+Page Table
446
+
447
+- 1024 Entrées, Page Table Entry
448
+  - Contient l'adresse de la mémoire physique associée à cette table
449
+
450
+Page 
451
+- 4kB
452
+
453
+Une page table permet de mapper 4Mb de mémoire => Un Page Directory permet de mapper 1024  Page Table => 1024*4Mb = 4Gb.
454
+
455
+Si on a une continuité de pages dans les adresses des pages au niveau de l'entrée d'une page table, on peut également définir des blocs de pages pour avoir une seule page mémoire plus grande.
456
+
457
+### Dans le détail 
458
+
459
+- le PGD voit son adresse physique stockée dans cr3
460
+- chaque table contient au plus 1024 entrées de 4 octets
461
+- une entrée de table (PTE) définie une page de 4KB
462
+- une table de pages couvre donc 1024 ∗ 4KB = 4MB d’espace virtuel
463
+- une entrée de répertoire (PDE) peut définir
464
+- une table de pages de 1024 entrées
465
+- une page de 4MB (bit pse)
466
+- un répertoire de pages couvre donc 1024 ∗ 4MB = 4GB d’espace virtuel
467
+
468
+ON REECRIT CR3 POUR CHACUN DES PROCESS. ET ON DEFINIT AINSI UN PAGE DIRECTRORY PAR PROCESS. 
469
+
470
+A chaque changement de process, on doit flusher les traductions d'adresses, pour ne pas qu'un autre process puisse accéder aux mémoires associées aux autres process. 
471
+
472
+Ce tableau de correspondances @virt <=> @phys s'appelle la TLB, et est flushé à chaque changement de process et de contexte.
473
+
474
+
475
+**Comment le processeur traduit les adresses virtuelles en mode 32 Bits ?**
476
+
477
+On découpe une adresse virtuelle en 3 parties : 
478
+
479
+- 10 bits de poids fort indique l'index de l'entrée dans le page directory
480
+- 10 Bits suivant servent d'index dans la table de page => adresses physique de la page de mémoire associée, à l'offset 0.
481
+- 12 bits de poids faibles qui servent d'offset pour se ballader dans la page de mémoire physique.
482
+
483
+<p align="center">
484
+  <img src="./Images/v_addr.png">
485
+</p>
486
+
487
+
488
+## Découpage des entrées des Page Tables et Page Directory
489
+
490
+- Bit 0 : Flag Present, qui génère une Page fault si = 0
491
+- Bit 1 : Read or Write : 0 = Read Only, 1 = Read Write
492
+- Bit 2 : Niveau de privilège, 0 = User ou 1 = Superviseur
493
+
494
+<p align="center">
495
+  <img src="./Images/desc_PDE_PTE.png">
496
+</p>
497
+
498
+Il a fallu attendre les processeurs 64 bits pour avoir des PTE plus grande, et ainsi préciser en plus de R/W, l'aspect exécutable d'une page de mémoire.
499
+
500
+Si on a plusieurs instances d'un même process, si le Bit G est à 1, on peut la conserver dans les caches de traduction malgré un changement de contexte.
501
+
502
+## En 64 bits...
503
+
504
+<p align="center">
505
+  <img src="./Images/64bits_vaddr.png">
506
+</p>
507
+
508
+## Sécurité et Pagination
509
+
510
+La sécurité proposée par la pagination par défaut est vraiment relative, on a quasiment aucune protection noyau/tache, du au bit User/Superviseur, les données sont peu protégée, on a uniquement un bit read/write qui peut impliquer de l'exécution... et on empêche l'opération XOR.
511
+
512
+Mais petit à petit, le système a été amélioré au fil du temps. On a vu la mise en place de nouvelles normes et notamment la mise en place de iTLB pour les isntructions, et du dTLB pour les données.
513
+
514
+Sous Linux, un patch a été publié sous le nom de PAGEEXEC rajoute une couche de protection.
515
+
516
+Sur les architectures 64 bits, on a vu arriver au niveau des PTE un bit NX, qui empêche une page d'être exécutable. 
517
+
518
+Enfin, d'autres protections ont été mises en oeuvre via cr0, à savoir la mise en place d'un write protect et d'un SMEP/SMAP qui contrôle l'acces et l'exécution.
351 519
 # Composants d'un OS
352 520
 
353 521
 # Conclusions
354
-

+ 0
- 0
ProgrammationDéfensive/cours.md View File


+ 56
- 0
Vulnérabilités/buffer_overflow.md View File

@@ -0,0 +1,56 @@
1
+# Sécurité des applications, débordements de tampon mémoire
2
+
3
+Un programme doit anticiper les actions malveillantes pouvant se produire à chacune des interactions:
4
+
5
+- Entrées du programme vérifiées et assainies
6
+- Contrôle des appels de programmes externes
7
+- Utilisation correcte de fonctions sûres
8
+  - par exemple ```strncpy``` et ```strncat``` au lieu de ```strcpy``` et ```strcat```
9
+
10
+```C
11
+strcat(dst,src)
12
+```
13
+
14
+Cette fonction enlève le caractère de fin de chaine de dst, et concatène src à la fin de dst. Le problème ? On ne vérifie pas la taille de l'espace alloué à dst, et on peut ainsi déborder sur la pile.
15
+
16
+Une bonne façon d'utiliser ```strcat``` est de précéder ```strcat``` d'un test :
17
+
18
+```C
19
+if (strlen(dst)+strlen(src)< sizeof(dst)-1){
20
+    strcat(dst,src);
21
+}
22
+```
23
+
24
+L'alternative est
25
+
26
+```C
27
+/// Le troisième paramètre de strncat est le nombre max de char que l'on va copier de src dans dst
28
+/// -1 pour le symbole de fin de chaine de caractères
29
+strncat(dst, src, sizeof(dst)-strlen(dst)-1);
30
+```
31
+
32
+Accès à l'origine : (lecture) ou (écriture) qui sont causés par de mauvais indices d'un tableau, un strcpy mal maîtrisé, etc...
33
+
34
+## Les possibles conséquences d'un débordement
35
+
36
+**Cela dépend de l'emplacement du débordement :**
37
+
38
+- Pile : données de contrôle d'exécution ou variables du programme
39
+- Tas : Données gérées par la ```libc``` ou variables du programme
40
+- Data : Variables du programme
41
+- Code : Pas en écriture !
42
+
43
+**L'exploitation demande de connaitre la sémantique des données écrasées :**
44
+
45
+- Données de contrôle d'exécution : Specification du processeur
46
+- Données gérées par la ```libc``` => implémentation de ```malloc```
47
+- Variables du progrmame => Sémantique du programme (rétro-conception...)
48
+
49
+**Conséquences de l'exploitation :** Déni de service (```seg fault```), changement de comportement du processus vulnérable, escalade de privilèges, etc...
50
+
51
+**Définition du Tas :** Zone mémoire qui sert de base pour l'allocation dynamique de mémoire ``` malloc free ```
52
+
53
+# Exploiter une vulnérabilité
54
+
55
+## Etape 1 : Recherche de l'adresse de retour
56
+

Loading…
Cancel
Save