Sérülékenységek I.

Állítólag a vírusvédelmi rendszerek különbözőképpen viselkednek egyes sérülékenységeket kiaknázó kártevőkkel szemben. Mostani tesztünkben annak jártunk utána, hogy a védelmi rendszerek mennyire képesek a különböző biztonsági réseket kihasználó kártékony kódok azonosítására.

A számítógépes rendszerek köztudottan rendelkeznek sérülékenységekkel. De mik is azok a sérülékenységek? Ha immunrendszerünk legyengült, sokkal érzékenyebbek vagyunk mindenfajta külső hatásra. Ilyenkor sokkal könnyebben megbetegedhetünk. Így van ez a számítógépek esetén is.

Ha a számítógépünk valamely szoftver eleme – elsősorban programozási problémá(k)nak köszönhetően – nem megfelelő kódolást tartalmaz, akkor a számítógépünk is könnyebben támadható. Ezek a problémák biztonsági réseket, más néven sérülékenységeket jelentenek. Egy támadó egy sérülékenységet akkor tud kihasználni, ha el tudja azt érni, hogy a sérülékenység segítségével a saját kódja hajtódjon végre. Ennek alapelve a számítógépek Neumann-elvének köszönhető: A Neumann-elv szerint ugyanis a számítógépek adatai és programjai nem válnak szét. Egy adatot reprezentáló bájtsorozatot értelmezhetünk végrehajtható programként, amit a processzor képes lefuttatni.

lakat

Puffertúlcsordulás

A biztonsági rések legnagyobb részét a puffertúlcsordulással kapcsolatos programozási hibák jelentik. A puffertúlcsordulás problémáját először a 70-es években ismerték fel a C nyelvben. Kártevőkben történő első megjelenése sem valamely Microsoft operációs rendszerhez köthető, hanem a UNIX-hoz. A Morris féreg 1988-ban ugyanis egy, a finger nevű Unix programban előforduló puffertúlcsordulást használt fel saját kódjának a terjesztésére. Hosszú története ellenére a puffertúlcsordulás még ma is jelentős számítógép-biztonsági probléma.

A Microsoft az alábbiakban definiálja a puffertúlcsordulásos támadást:

„A puffertúlcsordulásos támadás egy olyan támadás, amelyben egy rosszindulatú felhasználó egy ellenőrizetlen puffert használ ki egy programban, és saját adataival írja felül a programkódot. Ha a programkódot az új végrehajtható kód felülírja, annak az az eredménye, hogy úgy változik meg a program működése, ahogy a támadó diktálja. Ha egyéb adatokkal is felülírják, a fertőzött program valószínűleg összeomlik.”

A következők szükségesek a sikeres támadáshoz:

  • Kell legyen egy azonosított puffertúlcsordulásos sérülékenység.
  • Ismert legyen a puffer mérete.
  • A támadónak tudnia kell ellenőrizni a bemenő adatokat.
  • A visszatérési címet le kell cserélni (control flow corruption).
  • Be kell szúrni a saját kódot (kódinjektálás).

Az alábbi kis példaprogrammal kipróbálhatjuk, hogy mit okozhat, ha egy programban ellenőrízetlen pufferterületet használunk...

int main()
{
	function();
	printf("A\n");
	printf("B\n");
	printf("C\n");
	printf("D\n");
	printf("E\n");
	printf("F\n");
	return 0;
}

void function()
{
	int buffer[1];
	buffer[2] += 0x18;
}
					

A kódban szereplő 0x18 érték C fordító függő lehet. Ezt attól függően változtathatjuk, hogy a main() függvényben lévő printf utasítás valójában mennyi bájtot igényel a lefordított kódban.


Biztonsági rések a kártevőkben

Számos kártevő kihasználja a biztonsági rések, a sérülékenységek adta lehetőségeket terjedése érdekében. A sérülékenységek alapvetően valamilyen programhoz kapcsolódhatnak. Ez lehet az operációs rendszert kezelő valamely program, illetve lehet egy alkalmazás is. Mindkét esetben a támadó egyrészt támadhatja a számítógépet valamilyen hálózati kapcsolaton, szolgáltatáson keresztül, illetve ehhez felhasználhat egy fájlt is. Ez utóbbi esetben tulajdonképpen off-line kommunikáció zajlik a támadó és a megtámadott számítógép között: a támadónak el kell juttatnia a megtámadott fájlt a célszámítógépre. Ilyen esetben a puffertúlcsordulás problémáját tévesen a fájltípushoz szokták kötni, holott az esetek többségében nem a formátummal van a probléma, hanem az azt feldolgozó programmal.

Sérülékenység vizsgálata on-demand keresés esetén

Sérülékenység vizsgálata on-demand keresés esetén
Kattintson a képre a részletekért!


Biztonsági rések felismerésének a vizsgálata

A Checkvir tesztlabor mostani tesztjében a biztonsági réseket kiaknázó kártevőkkel foglalkoztunk. Azt vizsgáltuk, hogy a legelterjedtebb, sérülékenységet kihasználó kártevőket a védelmi rendszerek mennyire ismerik. A teszthez használt kártevőket az alábbi csoportokban vizsgáltuk: Windows alatti futtatható állományok; Valamely böngésző sérülékenységét kihasználó HTML, illetve JavaScript kártevők; WMA, illetve MP3 fájlok; SWF állományok; PDF dokumentumok. Az utóbbi néhány csoport azért érdemel különös figyelmet, mert ebbe a körbe olyan kártevők tartoznak, amelyek alapvetően nem végrehajtható kódot tárolnak, hanem csupán adatot. A vizsgálat első lépéseként on-demand ellenőrzést végeztünk, azt vizsgáltuk, hogy a felhasználó általindított kereső algoritmus megtalálja-e a kártevőt. A teszt következő részében a folyamatosan figyelő védelmeket ellenőrizzük.

Tesztelt termékek és verziók

Termék Fejlesztő Verzió
AVG Internet Security AVG 8.5.285
ESET Smart Security ESET Software 4.0.314.0
McAfee VirusScan Enterprise McAfee 8.7i
Panda Internet Security 2009 Panda Software 14.00.00
Sunbelt VIPRE Antivirus + Antispyware Sunbelt Software 3.2.2019.2
Trend Micro Internet Security 2009 Trend Micro 17.1.1171

Eredmények

Típus AVG ESET McAfee Panda Sunbelt Trend Micro
Windows futtatható (296) 293 296 287 293 266 18
JavaScript, HTML (65) 43 65 55 39 6 39
WMA, MP3 (18) 17 13 9 8 0 12
SWF (30) 26 27 15 13 0 18
PDF (23) 22 23 12 4 9 6
Összesen (432) 401 424 378 357 281 93

Tesztelt állományok

Naplófájlok

Tesztkörnyezet

Valamennyi tesztet az alábbi környezetben végeztük el:

Hardver Intel Pentium 4 CPU 1.7 GHz
ABIT BD7 II
512 MB RAM
80 GB Maxtor HDD
Szoftver Microsoft Windows XP Professional v2002 SP3