Sérülékenységek I.
2009. 04. 07.
Á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.
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.
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
- Tesztelt állományok
- vuln1_files_js_html.txt - a tesztelt .js és .html állományok md5 hash-einek listája
- vuln1_files_pdf.txt - a tesztelt .pdf állományok md5 hash-einek listája
- vuln1_files_swf.txt - a tesztelt .swf állományok md5 hash-einek listája
- vuln1_files_wma_mp3.txt - a tesztelt .wma és .mp3 állományok md5 hash-einek listája
- vuln1_files_win_exec.txt - a tesztelt Windows alatt futtatható állományok md5 hash-einek listája
Naplófájlok
- AVG Internet security
- vuln1_avg.txt - az AVG naplóállománya
- ESET Smart Security
- vuln1_eset.txt - az ESET naplóállománya
- McAfee VirusScan Enterprise
- vuln1_mcafee.txt - a McAfee naplóállománya
- Panda Internet Security 2009
- vuln1_panda.txt - a Panda naplóállománya
- Sunbelt VIPRE Antivirus + Antispyware
- vuln1_sunbelt.txt - a Subelt naplóállománya
- Trend Micro Internet Security 2009
- vuln1_trendmicro.txt - a Trend Micro naplóállománya
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 |