C20.0046: Database Management Systems Lecture #19 M.P. Johnson Stern School of Business, NYU Spring, 2008 M.P. Johnson, DBMS, Stern/NYU, Spring 2008 1 Agenda Security Web issues Transactions RAID? Stored procedures? Implementation? M.P. Johnson, DBMS, Stern/NYU, Spring 2008 2 Review: hashes Hash tables Hash functions Secure hash functions Families of secure hash functions M.P. Johnson, DBMS, Stern/NYU, Spring 2008 3 New topic: Security on the web Authentication If the website user wants to pay with George’s credit card, how do we know it’s George? If the website asks George for his credit card, how does he know it’s our site? Secrecy Maybe it’s a phishing site… When George enters his credit card, will an eavesdropper be able to see it? Protecting against user input Is it safe to run SQL queries based on user input? M.P. Johnson, DBMS, Stern/NYU, Spring 2008 4 Security on the web Obvious soln: passwords What’s the problem? Slightly less obvious soln: passwords + encryption Traditional encryption: “symmetric” / “private key” DES, AES – fast – solves problem? “Newer” kind: “asymmetric” / “public key” Public key is published somewhere Private key is top secret RSA – slow – solves problem? M.P. Johnson, DBMS, Stern/NYU, Spring 2008 5 Hybrid protocols (SSH,SSL/HTTPS, etc.) Neither private- nor public-key alone suffices They each only solve half of each problem But together they solve almost everything Recurring strategy: We do private-key crypto Where do we get the key? You send it (encrypted) to me M.P. Johnson, DBMS, Stern/NYU, Spring 2008 6 SSH-like authentication (intuition) sales has a public-key When you connect to sales, 1. 2. 3. 4. You pick a random number Encrypt it (with the cert) and send it to them They decrypt it (with their private key) Now, they send it back to you Since they decrypted it, you trust they’re sales M.P. Johnson, DBMS, Stern/NYU, Spring 2008 7 HTTPS-like authentication (intuition) Amazon has a public-key certificate Encrypted with, say, Verisign’s private key When you log in to Amazon, 1. 2. They send you the their Verisign-encrypted cert You decrypt it (with Verisign’s public key), and check that it’s a cert for amazon.com Since the decrypt worked, the cert must have been encrypted by Verisign So this must really be Amazon M.P. Johnson, DBMS, Stern/NYU, Spring 2008 8 Authentication on the web Now George trusts that it’s really Amazon But: What if, say, Dick guessed George’s password? Assuming Amazon’s private key is secure And excluding man-in-the-middle… Another way: What if George claims Dick guessed his password? Soln: same process, but in reverse But now you need to get your own cert… M.P. Johnson, DBMS, Stern/NYU, Spring 2008 9 Hybrid protocol for encryption Amazon just sent you their public-key cert When you log in to Amazon, 1. 2. 3. You pick a random number (“session key”) You encrypt it (with the cert) and send it to them They decrypt it (with their private key) Now, you both share a secret key can now encrypt passwords, credit cards, etc. M.P. Johnson, DBMS, Stern/NYU, Spring 2008 10 Query-related: Injection attacks Here’s a situation: Prompt for user/pass Do lookup: SELECT * FROM users WHERE user=u AND password=p; If found, user gets in test.user table in MySQL http://pages.stern.nyu.edu/~mjohnson/dbms/php/login.php / txt http://pages.stern.nyu.edu/~mjohnson/dbms/php/users.php / txt Modulo the no hashing, is this a good idea? M.P. Johnson, DBMS, Stern/NYU, Spring 2008 11 Injection attacks SELECT * FROM users WHERE user = u AND password = p; We expect to get input of something like: user: mjohnson pass: topsecret SELECT * FROM users WHERE user= 'mjohnson' AND password = 'topsecret'; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 12 Injection attacks – MySQL/Perl/PHP SELECT * FROM users WHERE user = u AND password = p; Consider another input: user: ' OR 1=1 OR user = ' SELECT * FROM users pass: ' OR 1=1 OR pass = ' WHERE user = '' OR http://pages.stern.nyu.edu/~mjohnson/dbms/php/login.php 1=1 http://pages.stern.nyu.edu/~mjohnson/dbms/eg/injection.txt OR user = '' SELECT * FROM users AND password = '' WHEREOR user 1=1= '' OR 1=1 OR user = '' AND password ' OR 1=1 OR pass = ''; OR pass = ' ''; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 13 Injection attacks – MySQL/Perl/PHP SELECT * FROM users WHERE user = u AND password = p; Consider this one: user: your-boss' OR 1=1 # pass: abc http://pages.stern.nyu.edu/~mjohnson/dbms/php/login.php SELECT SELECT ** FROM FROM users users WHERE WHERE user user == 'your-boss' 'your-boss' OR 1=1 #' AND password 'abc'; OR 1=1 #'= AND password = 'abc'; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 14 Injection attacks – MySQL/Perl/PHP SELECT * FROM users WHERE user = u AND password = p; Consider another input: user: your-boss pass: ' OR 1=1 OR pass = ' http://pages.stern.nyu.edu/~mjohnson/dbms/php/login.php SELECT * FROM users SELECTuser * FROM users WHERE = 'your-boss' WHEREAND user = 'your-boss' AND password password = '' = '' OR OR 1=1 1=1 OR pass = ''; OR pass = ''; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 15 Multi-command inj. attacks (other DBs) SELECT * FROM users WHERE user = u AND password = p; Consider another input: user: '; DELETE FROM users WHERE user = 'abc'; SELECT FROM users WHERE password = ' pass: abc SELECT SELECT ** FROM FROM users users WHERE user = ''; DELETE FROM =users WHERE user 'abc'; WHERE user ''; DELETE FROM =users SELECT FROM =users WHERE password WHERE user 'abc'; SELECT FROM = '' password = 'abc'; usersAND WHERE password = '' AND password = 'abc'; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 16 Multi-command inj. attacks (other DBs) SELECT * FROM users WHERE user = u AND password = p; Consider another input: user: '; DROP TABLE users; SELECT FROM users WHERE password = ' pass: abc SELECT SELECT ** FROM FROM users users WHERE user = ''; DROP WHERETABLE user users; = ''; DROP TABLE users; SELECT FROM FROM users users WHERE WHERE password password == '' SELECT ANDpassword password=='abc'; 'abc'; '' AND M.P. Johnson, DBMS, Stern/NYU, Spring 2008 17 Multi-command inj. attacks (other DBs) SELECT * FROM users WHERE user = u AND password = p; Consider another input: user: '; SHUTDOWN WITH NOWAIT; SELECT FROM users WHERE password = ' pass: abc SELECT SELECT ** FROM FROM users users WHERE user = ''; SHUTDOWN WITH NOWAIT; WHERE user = ' '; SHUTDOWN WITH NOWAIT; SELECT FROM users WHERE = '' SELECT FROM users WHERE password AND password 'abc'; = 'abc'; password = '' AND=password M.P. Johnson, DBMS, Stern/NYU, Spring 2008 18 Injection attacks – MySQL/Perl/PHP DELETE FROM users WHERE user = u AND password = p; Consider another input: user: your-boss pass: ' OR 1=1 AND user = 'your-boss http://pages.stern.nyu.edu/~mjohnson/dbms/php/users.php DELETE FROM users Delete your boss! DELETE FROM users WHERE user = 'your-boss' WHERE user = 'your-boss' AND pass = ' = '' = 'your-boss'; ' OR AND 1=1 pass AND user OR 1=1 AND user = 'your-boss'; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 19 Injection attacks – MySQL/Perl/PHP DELETE FROM users WHERE user = u AND pass = p; Consider another input: user: ' OR 1=1 OR user = ' pass: ' OR 1=1 OR user = ' DELETEhttp://pages.stern.nyu.edu/~mjohnson/dbms/php/users.php FROM users WHERE user = '' OR 1=1 Delete everyone! DELETE FROM users OR user = '' WHERE user = '' OR 1=1 OR user = '' AND pass = '' AND pass = '' OR 1=1 OR user = ''; OR 1=1 OR user = ''; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 20 Preventing injection attacks Ultimate source of problem: quotes Soln 1: don’t allow quotes! Q: Is this satisfactory? Reject any entered data containing single quotes Does Amazon need to sell O’Reilly books? Soln 2: escape any single quotes Replace any ' with a '' or \' In Perl, use taint mode – won’t show In PHP, turn on magic_quotes_gpc flag in .htaccess show both PHP versions M.P. Johnson, DBMS, Stern/NYU, Spring 2008 21 Preventing injection attacks Soln 3: use prepare parameter-based queries Supported in JDBC, Perl DBI, PHP ext/mysqli http://pages.stern.nyu.edu/~mjohnson/dbms/perl/loginsafe.cgi http://pages.stern.nyu.edu/~mjohnson/dbms/perl/userssafe.cgi Even more dangerous: using tainted data to run commands at the Unix command prompt Semi-colons, prime char, etc. Safest: define set if legal chars, not illegal ones M.P. Johnson, DBMS, Stern/NYU, Spring 2008 22 Preventing injection attacks When to do security-checking for quotes, etc.? Temping choice: in client-side data validation But not enough! can submit GET and POST params manually Must do security checking on server Even if you do it on client-side too Same with data-validation Example of constraints M.P. Johnson, DBMS, Stern/NYU, Spring 2008 23 POST vars Because of hand-coded HTTP requests, can’t rely on post vars being either safe or “true” Actual past websites: send price by post (why?) More secure than GET Fewer users will know how to break POST than GET But some do! Attack: hand-code the POST request sales% telnet amazon.com 80 POST http://amazon.com/cart.cgi HTTP/1.0 Content-Type:application/x-www-form-urlencoded Content-Length: 32 title=Database+Systems&price=.01 M.P. Johnson, DBMS, Stern/NYU, Spring 2008 24 Hand-written POST example POST version of my input page: http://pages.stern.nyu.edu/~mjohnson/dbms/php/post.php Not obvious to web user how to hand submit And get around any client-side validation But possible: http://pages.stern.nyu.edu/~mjohnson/dbms/eg/postbyhand.txt sales% telnet pages.stern.nyu.edu 80 POST http://pages.stern.nyu.edu/~mjohnson/dbms/php/post.php HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 15 val=6&submit=OK M.P. Johnson, DBMS, Stern/NYU, Spring 2008 25 More info phpGB MySQL Injection Vulnerability "How I hacked PacketStorm“ http://www.securiteam.com/unixfocus/6X00O1P5PY.html http://www.wiretrip.net/rfp/txt/rfp2k01.txt Google hacking… inurl:"ViewerFrame?Mode=" intitle:"Live View / - AXIS" | inurl:view/view.sht intitle:"toshiba network camera - User Login" http://200.71.42.48/ViewerFrame?Mode=Motion&Language=0 http://141.211.44.254/view/index.shtml http://66.186.226.189/view/index.shtml M.P. Johnson, DBMS, Stern/NYU, Spring 2008 26 New-old topic: Transactions So far, have simply issued commands Recall, though: an xact is an operation/set of ops executed atomically Ignored xacts In one instant ACID test: Xacts are atomic Each xact (not each statement) must leave the DB consistent M.P. Johnson, DBMS, Stern/NYU, Spring 2008 27 Default xact behavior (in Oracle) An xact begins upon login By default, xact lasts until logoff Except for DDL statements They automatically commit Examples with two views of tbl… But with TYPE=innodb ! mysql> set autocommit = 0 M.P. Johnson, DBMS, Stern/NYU, Spring 2008 28 Direct xact instructions At any point, may explicitly COMMIT: Conversely, can ROLLBACK SQL> COMMIT; Saves all statements entered up to now Begins new xact SQL> ROLLBACK; Cancels all statements entered since start of xact Example: delete from emp; or delete junk; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 29 Direct xact instructions Remember, DDL statements are autocommitted They cannot be rollbacked Examples: drop table junk; rollback; truncate table junk; rollback; Q: Why doesn’t rollback “work”? M.P. Johnson, DBMS, Stern/NYU, Spring 2008 30 Savepoints (in Oracle?) Xacts are atomic Can rollback to beginning of current xact But might want to rollback only part way Make 10 changes, make one bad change Want to: roll back to before last change Don’t have Word-like multiple undo But do have savepoints M.P. Johnson, DBMS, Stern/NYU, Spring 2008 31 Savepoints Create a savepoint: SAVEPOINT savept_name; --changes emp example: SAVEPOINT sp1; --changes Can skip savepoints SAVEPOINT sp2; But can ROLLBACK --changes only backwards SAVEPOINT sp3 --changes Can ROLLBACK only to last COMMIT ROLLBACK TO SAVEPOINT sp2; ROLLBACK TO SAVEPOINT sp1; M.P. Johnson, DBMS, Stern/NYU, Spring 2008 32 AUTOCOMMIT (in Oracle?) Finally, can turn AUTOCOMMIT on: SQL> SET AUTOCOMMIT ON; Can put this in your config file Can specify through JDBC, etc. Then each statement is auto-committed as its own xact Not just DDL statements M.P. Johnson, DBMS, Stern/NYU, Spring 2008 33 RAID levels RAID level 1: each disk gets a mirror RAID level 4: one disk is xor of all others Each bit is sum mod 2 of corresponding bits E.g.: Disk 1: 10110011 Disk 2: 10101010 Disk 3: 00111000 Disk 4: How to recover? What’s the disadvantage of R4? Various other RAID levels in text… M.P. Johnson, DBMS, Stern/NYU, Spring 2008 34