Új /GS ellenőrzés a Visual Studio 11-ben

2012 január 30 - admin

A Microsoft Visual Studio következő kiadásában új automatikus ellenőrzéssel bővül a /GS fordítási paraméter funkcionalitása. A /GS alapvetően az úgynevezett stack sütik (stack cookie, stack canary) bekapcsolására szolgál. A kapcsoló használatával fordított binárisok függvényeinek elejére és végére a fordító egy-egy plusz kódrészletet pakol. Az első egy véletlen szót (sütit) helyez a stackre a helyi változók és a függvényhívához elmentett metaadatok (pl. visszatérési cím) közé. Amennyiben egy stack túlcsordulás következtében egy támadó megpróbálja felülírni ezeket a metaadatokat, a sütit is felül kell csapnia, ezt a változást pedig érzékeli a függvény végén található ellenőrző kód, és megszakítja a program futását, mielőtt a rossz visszatérési címre ugrana a vezérlés. 

Ez a megoldás azonban nem hatékony, ha a támadó közvetlenül képes megadni a memória írás eltolását:

void foo(int n, TCHAR val){  TCHAR buf[256];  // ...  buf[n]=val; }

Ha a támadó képes befolyásolni n értékét, közvetlenül elérheti az elmentett visszatérési címet, érintetlenül hagyva a stack sütit. A Microsoft szakértői úgy találták, hogy az ilyen típusú problémák egyik jelentősebb részhalmazát azok az esetek teszik ki, amikor sztring termináláshoz használt NULL byte kerül támadó által kontrollált pozícióba. Ezért a Visual Studio 11-ben automatikusan bekerül egy egyszerű értékellenőrzés (nagyobb-e a megadott eltolás a puffer hosszánál?) bizonyos értékadások elé. Ahhoz, hogy ez megtörténjen, a következő feltételeknek kell teljesülnie:

  • Az írandó tömb mérete ismert és nem változik
  • A tömb 1 vagy 2 byte méretű elemekből áll (tipikusan valamilyen karakterlánc)
  • Az írás értéke nulla (sztring terminátor)

Fontos megjegyezni, hogy ez nem csak stacken tárolt változókra vonatkozik, hanem a globálisakra is. Látható, hogy az új védelem korántsem fedi le az összes lehetséges problémás esetet, mindazonáltal a Microsoftnál úgy gondolják, hogy ezzel a változtatással jelentős mennyiségű sebezhetőséget lehet majd megelőzni, nem befolyásolva jelentősen az új alkalmazások méretét illetve teljesítményét.

Megosztom Facebookon!
Megosztom iWiWen!
Megosztom Twitteren!
Megosztom Google Buzzon!
Megosztom Google Readeren!
Megosztom Tumblren!


Szólj hozzá, vagy olvass bővebben a témáról itt: BuheraBlog

Szólj hozzá!

Ha az eredeti cikkhez nem lehet, itt megteheted!