Mémoire - protection : FORTIFY_SOURCE   Version imprimable de cet article Enregistrer au format PDF

Là encore, c’est une feature de GCC. Elle permet de remplacer des fonctions dîtes non-sécurisées (tel que strcpy, strcat, sprintf...) par des fonctions sécurisées.


par Tosh , S3cur3D

GCC calcule par exemple automatiquement la taille des buffers pour la passer en paramètre des fonctions "sécurisées".

Voici un exemple d’un programme compilé sans FORTIFY_SOURCE et avec (-D_FORTIFY_SOURCE=2) :

  1. 08048400 <foo>:
  2. 8048400: 83 ec 3c sub esp,0x3c
  3. 8048403: 8b 44 24 40 mov eax,DWORD PTR [esp+0x40]
  4. 8048407: 89 44 24 04 mov DWORD PTR [esp+0x4],eax
  5. 804840b: 8d 44 24 1c lea eax,[esp+0x1c]
  6. 804840f: 89 04 24 mov DWORD PTR [esp],eax
  7. 8048412: e8 b9 fe ff ff call 80482d0 <strcpy@plt>
  8. 8048417: 83 c4 3c add esp,0x3c
  9. 804841a: c3 ret

Télécharger

  1. 08048420 <foo>:
  2. 8048420: 83 ec 3c sub esp,0x3c
  3. 8048423: c7 44 24 08 14 00 00 mov DWORD PTR [esp+0x8],0x14
  4. 804842a: 00
  5. 804842b: 8b 44 24 40 mov eax,DWORD PTR [esp+0x40]
  6. 804842f: 89 44 24 04 mov DWORD PTR [esp+0x4],eax
  7. 8048433: 8d 44 24 1c lea eax,[esp+0x1c]
  8. 8048437: 89 04 24 mov DWORD PTR [esp],eax
  9. 804843a: e8 d1 fe ff ff call 8048310 <__strcpy_chk@plt>
  10. 804843f: 83 c4 3c add esp,0x3c
  11. 8048442: c3 ret

Télécharger

On voit que la fonction appelée dans le code compilé avec FORTIFY_SOURCE n’est plus strcpy, mais strcpy_chk, qui prends un paramètre de plus : la taille du buffer.

On voit que gcc calcule automatiquement le dernier paramètre à passer à strcpy_chk.

Documentations publiées dans cette rubrique Documentations publiées dans cette rubrique