1 Weboldalak Biztonsági Kérdései2 Kliens szerver modellek3 Kliens szerver modellek Offline világ Online világ és a programokkal szemben támasztott elv...
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
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...
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
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 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.
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,...
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ása Idegen 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>alert(document.cookie) Minden elem sebezhető, mely támogatja a STYLE, SRC, OBJECT, TYPE mezőket...
Képek scriptelése Ké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(””)
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.