Bezbednost u My Sqlu Faktori koji utiu na
Bezbednost u My. Sql-u
Faktori koji utiču na sigurnost My. Sql servera i aplikacija koje ga koriste • Opšti faktori koji utiču na sigurnost – Biranje adekvatnih šifara (passwords) – Davanje odgovarajućih prava pristupa korisnicima – Sprečavanje napada (npr SQL injection) • Sigurnost same instalacije My. Sql servera – Data files, log files, application files – njihovo čitanje i pisanje treba da bude dozvoljeno samo autorizovanim korisnicima • Kontrola pristupa i sigurnost unutar baze podataka – Korišćenje My. Sql sistema za kontrolu pristupa (My. Sql Access Privilege System) i My. Sql sistema za upravljanje korisničkim nalozima (My. Sql User Account Management System)
Faktori koji utiču na sigurnost My. Sql servera i aplikacija koje ga koriste - nastavak • Instaliranje odgovarajućih dodataka za sigurnost (security plugins) i korišćenje njihovih funkcionalnosti • Sigurnost mreže na kojoj se nalazi server – Davanje pristupa autorizovanim korisnicima – Ili, može se ograničiti pristup My. Sql-u tako da mu se može pristupiti samo lokalno, ili samo sa određenih spoljnih lokacija • Obezbeđivanje načina za oporavak podataka – Čuvanje kopija (backups) datoteka sa podacima (database files), kao i konfiguracionih i log datoteka – Plan za oporavak (recovery) podataka iz backup datoteka i testiranje da li su svi podaci uspešno oporavljeni
Sql injection • Napadač izvršava maliciozne Sql naredbe • Osetljivost na Sql injection može postojati u zavisnosti od načina izvršavanja Sql skriptova u web aplikaciji
Sql injection – primer 1 Uobičajen programski kod na serverskoj strani koji autentifikuje korisnika (pseudo-kod) # Definisanje POST promenljivih uname = request. POST['username'] passwd = request. POST['password'] # SQL query osetljiv na SQLi sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’” # Izvršavanje SQL naredbe database. execute(sql)
Sql injection – primer 1 – nastavak SELECT id FROM users WHERE username=’nesto’ AND password=’nesto’ Postavljanje passsword polja na formi na vrednost: nesto' OR '1'='1' # SELECT id FROM users WHERE username=’nesto’ AND password=’nesto’ OR ’ 1 ’ = ’ 1 ’ # Često je rezultat user. ID prvog korisnika u tabeli, što je u velikom broju slučajeva upravo administrator baze!
Sql injection – uslovi • RDBMS koji koristi SQL jezik • Ugrađivanje podatka koji korisnik unosi direktno u SQL upit
Sql injection – primer 2 http: //testphp. vulnweb. com/artists. php? artist=-1 UNION SELECT 1, pass, cc FROM users WHERE uname='test'
Prevencija Sql injection • Programski kod u kojem se pristupa bazi podataka i izvršavaju Sql upiti treba da bude takav da spreči Sql injection • Postoje preporuke za svaki programski jezik i odgovarajuću tehnologiju za kreiranje web aplikacija koje rade sa bazom http: //download. oracle. com/oll/tutorials/SQLInjection/ind ex. htm https: //www. acunetix. com/websitesecurity/sql-injection 2/ http: //bobby-tables. com/
http: //bobby-tables. com/
Najčešći tipovi SQl injection napada • In-band SQLi – napadač koristi komunikacioni kanal da sprovede napad i prikupi rezultate – Error-based • Oslanja se na poruku o grešci koju RDBMS generiše i prikazuje napadaču • Poruka sadrži podatke o strukturi baze (nazivi tabela i kolona) • Prevencija: Poruke o grešci treba da budu isključene na livebazi, one se koriste samo u development fazi – UNION-based • Koristi UNION klauzulu da dobije rezultate drugih tabela koje nisu bile uključene u upit
Drugi tipovi SQl injection napada • Inferential SQLi (Blind SQLi) – Time-based Blind SQLi
- Slides: 12