Mémoire - protection : FORTIFY_SOURCE    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