PHP ואבטחה - חלק שני

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    PHP ואבטחה - חלק שני - Presentation Transcript

    1. ‫, אפליקציות ווב ואבטחה‬PHP II ‫חלק‬ ‫שחר עברון‬ .Copyright © 2007, Zend Technologies Inc
    2. ...‫בפרק הקודם‬ ‫ מאובטחת‬PHP ‫סביבת‬ • ‫התקפות הזרקה‬ • XSS  SQL Injection  Shell Command Injection  Code Injection  http://www.slideshare.net/shahar/php-233962 • | Feb 7, 2008 ‫ ואבטחה‬PHP | 2
    3. Sessions ‫אבטחת‬
    4. ‫‪ - Session Hijacking‬חטיפה‬ ‫”חטיפה” של ‪ session‬פעיל ע”י גניבה של ה- ‪session ID‬‬ ‫•‬ ‫באמצעים שונים‬ ‫‪ ‬ניצול של בעיית ‪ XSS‬ושימוש ב- ‪ JavaScript‬לשליחת ‪Cookies‬‬ ‫‪ ‬ניחוש של ‪ – Session ID‬לא סביר אבל אפשרי במקרים מסויימים‬ ‫‪ ,Packet sniffing ‬פריצה למחשב וכו'‬ ‫אין בד”כ הרבה מה לעשות נגד ‪ ,Session Hijacking‬אבל‬ ‫•‬ ‫אפשר לצמצם את הסיכון‬ ‫‪ ‬מניעה של ‪ ,XSS‬שימוש ב- ‪ Session Ids‬אקראיים‬ ‫‪ ‬שימוש באמצעים נוספים לזיהוי ה- ‪ – Session‬לדוגמה ‪ referrer‬או‬ ‫‪user agent string‬‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫4 |‬
    5. ‫‪ – Session Hijacking‬חטיפה - מניעה‬ ‫אין בד”כ הרבה מה לעשות נגד ‪ ,Session Hijacking‬אבל‬ ‫•‬ ‫אפשר לצמצם את הסיכון‬ ‫מניעה של ‪XSS‬‬ ‫•‬ ‫שימוש ב- ‪ Session Ids‬אקראיים‬ ‫•‬ ‫‪ ‬תנו ל- ‪ PHP‬לייצר לכם את ה- ‪session ID‬‬ ‫שימוש באמצעים נוספים לזיהוי ה- ‪Session‬‬ ‫•‬ ‫‪ ‬לוגמה ‪ referrer‬או ‪user agent string‬‬ ‫‪ ‬לא יעיל במיוחד, אבל יכול לעזור‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫5 |‬
    6. ‫ – דוגמה‬Session Hijacking session_start(); if (isset($_SESSION['UA'])) { if ($_SESSION['UA'] != $_SERVER['HTTP_USER_AGENT']) { // Destroy the session $_SESSION = array(); setcookie(session_name(), '', time() - 365 * 24 * 3600); session_destroy(); // Redirect to home page header(\"Location: http://example.com/\"); } } else { $_SESSION['UA'] = $_SERVER['HTTP_USER_AGENT']; } | Feb 7, 2008 ‫ ואבטחה‬PHP | 6
    7. ‫‪ - Session Fixation‬קיבוע‬ ‫קיבוע של ‪ Session ID‬ידוע מראש אצל המותקף ע\"י‬ ‫•‬ ‫שליחתו ב- ‪URL‬‬ ‫לדוגמה:‬ ‫•‬ ‫•‬ ‫0987654321=‪http://example.com/?PHPSESSID‬‬ ‫לאחר שהמותקף מבצע ‪ ,log in‬אפשר להשתלט לו על‬ ‫•‬ ‫החשבון‬ ‫מסוכן רק אם ה- ‪ ID‬עדיין ידוע לאחר ביצוע ‪log in‬‬ ‫•‬ ‫מסוכן רק כאשר אפשר לשלוח ‪ Session ID‬ב- ‪URL‬‬ ‫•‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫7 |‬
    8. ‫ – קיבוע - מניעה‬Session Fixation URL -‫ ב‬Session ID ‫ביטול האפשרות לשליחת‬ •  session.use_only_cookies=On ‫ לא אפשרי במקרים מסויימים‬ :(!‫ ייעודית )חשוב‬PHP ‫שימוש בפונקציית‬ •  PHP 4.x: session_regenerate_id()  PHP 5.x: session_regenerate_id(true) | Feb 7, 2008 ‫ ואבטחה‬PHP | 8
    9. ‫ - דוגמה‬Session Fixation session_start(); // Handle log-in form $user = User::authenticate($_POST['username'], $_POST['password'); if ($user) { $_SESSION['logged_in'] = true; $_SESSION['user_name'] = $user->getName(); $_SESSION['user_id'] = $user->getId(); // Regenerate session ID session_regenerate_id(true); } | Feb 7, 2008 ‫ ואבטחה‬PHP | 9
    10. ‫שגיאות לוגיקה וארכיטקטורה‬
    11. ‫‪CSRF‬‬ ‫‪Cross Site Request Forgeries‬‬ ‫•‬ ‫‪ ‬לא ממש קשור ל- ‪XSS‬‬ ‫‪ ‬לא התקפת הזרקה‬ ‫באופן בסיסי, ‪ CSRF‬היא ניצול של ‪ trust‬של האתר‬ ‫•‬ ‫במשתמש, ללא בדיקה שהבקשה באמת לגיטימית‬ ‫‪ ‬המשתמש ‪ ,logged in‬ולכן אני בוטח בו‬ ‫‪ ‬אבל לא כל ‪ request‬מהמשתמש הוא מכוון‬ ‫>/ ”4321=‪ <img src=”http://mystore.com/add_to_cart.php?pid‬‬ ‫אחת מבעיות האבטחה הנפוצות והקשות יותר לתיקון‬ ‫•‬ ‫‪ ‬ברוב המקרים קשה בכלל להבין מה זה בדיוק ‪CSRF‬‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫11 |‬
    12. ‫‪ - CSRF‬המשך‬ ‫אפשר להפעיל התקפת ‪ CSRF‬בדרכים שונות‬ ‫•‬ ‫‪ ‬מאותו אתר שרוצים להתקיף, בעזרת ‪XSS‬‬ ‫• קבועה - ‪Persistent‬‬ ‫• חד פעמית - ‪Non-Persistent‬‬ ‫‪ ‬מאתר אחר, שלתוקף יש עליו שליטה‬ ‫‪ ‬כל עוד למשתמש יש ‪ session‬פתוח, ניתן להתקיף בעזרתו‬ ‫‪ ‬בעזרת תגים של ‪:HTML‬‬ ‫...>‪• <img>, <link>, <meta refresh>, <script>, <iframe‬‬ ‫‪ ‬בעזרת ‪ CSS‬כולל ‪:in-line CSS‬‬ ‫.. ,‪• background-url‬‬ ‫‪ ‬בעזרת ‪:JavaScript‬‬ ‫• כולל שליחה של טפסים ב- ‪POST‬‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫21 |‬
    13. ‫‪ - CSRF‬מניעה‬ ‫כל פעולה משנת-מצב )‪ (state changing‬צריכה להיות‬ ‫•‬ ‫‪POST request‬‬ ‫‪\" ‬כמו שהתכוון המשורר”‬ ‫‪ ‬מצמצם את הסיכוי ל- ‪ ,CSRF‬אבל לא מבטל אותו‬ ‫‪ ‬טוב גם מסיבות אחרות )‪(.crawlers, bookmarking, etc‬‬ ‫פתרון מהיר ומלוכלך: ‪session.referer_check‬‬ ‫•‬ ‫‪ ‬לא באמת מספיק טוב, אבל קל ביותר לביצוע ‬ ‫שימוש ב- ‪ token‬חד פעמי ע”מ לזהות שה- ‪ request‬מגיע‬ ‫•‬ ‫מהמקום הנכון‬ ‫‪ ‬לא קשה לביצוע, ועובד מצויין!‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫31 |‬
    14. ‫חשיפת מידע \"פרטי“‬ ‫טעות נפוצה: אם אין קישור, אי אפשר להגיע ל- ‪resource‬‬ ‫•‬ ‫מסויים‬ ‫‪ ‬מה, אי אפשר לנחש את ה- ‪?URL‬‬ ‫‪ http://example.com/invoices/customer001/3456.pdf‬‬ ‫לדוגמה: שמירה של מסמכי ‪ PDF‬או תמונות פרטיות ב- ‪URL‬‬ ‫•‬ ‫לא מוגן‬ ‫‪ ‬אין ‪ - session‬אין דרך לוודא שהמשתמש באמת ‪ logged in‬כאשר‬ ‫הוא ניגש לתוכן סטטי‬ ‫איך מונעים?‬ ‫•‬ ‫‪ ‬שימוש ב- ‪ PHP‬להגשת תוכן סטטי‬ ‫‪ ‬שימוש בשמות קבצים שקשה מאוד לנחש‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫41 |‬
    15. ‫טיפים וכלים לשיפור אבטחה‬
    16. ‫שימוש ב- ‪ - Cookies‬מתי?‬ ‫ממש לא כדאי להעביר מידע רגיש ב- ‪cookie‬‬ ‫•‬ ‫המידע עובר ב- ‪cleartext‬‬ ‫‪‬‬ ‫המידע עובר שוב ושוב, בכל ‪request‬‬ ‫‪‬‬ ‫המידע זמין על המחשב של המשתמש, וניתן לשינוי‬ ‫‪‬‬ ‫המידע חשוף לבעיות אבטחה של ה- ‪browser‬‬ ‫‪‬‬ ‫אז מה לעשות במקום?‬ ‫•‬ ‫‪ ‬לשמור מידע על השרת, ולהעביר ‪ ID‬במקום‬ ‫• מישהו אמר ‪?session‬‬ ‫‪ ‬להשתמש ב- ‪https‬‬ ‫‪ ‬להצפין את המידע )לא לקודד, להצפין!(‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫61 |‬
    17. ‫הצפנה‬ ‫‪ PHP‬מספקת מספר ‪ extensions‬שמטפלים בהצפנה:‬ ‫•‬ ‫‪mcrypt ‬‬ ‫• הצפנה בשיטות שונות, סימטרית או א-סימטרית‬ ‫‪OpenSSL ‬‬ ‫• שימוש ב- ‪ SSL‬להצפנה, חתימה ווידוא זהות‬ ‫• הצפנה של תקשורת ‪TCP‬‬ ‫‪GnuPG ‬‬ ‫• חתימה דיגיטלית והצפנה א-סימטרית בעזרת ‪PGP‬‬ ‫רצוי להשתמש כאשר צריך לאחסן או להעביר מידע רגיש‬ ‫•‬ ‫באופן מאובטח‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫71 |‬
    18. ‫ - דוגמה‬mcrypt ‫הצפנה עם‬ define('ENC_CIPHER', MCRYPT_BLOWFISH); define('ENC_MODE', MCRYPT_MODE_CFB); // Encryption - create a key $keySize = mcrypt_get_key_size(ENC_CIPHER, ENC_MODE); $key = 'this is my secret key, please dont tell it to anyone!'; $key = substr($key, 0, $keySize); // Encryption - set \"remember me\" cookie if ($_POST['remember_me'] == 'On') { $string = $_POST['username']. \" \" . md5(microtime()) . $_POST['password']; $crypted = mcrypt_encrypt(ENC_CIPHER, $key, $string, ENC_MODE); $cookie = base64_encode($crypted); setcookie('remember_me', $cookie, time() + 14 * 24 * 3600, '/'); } | Feb 7, 2008 ‫ ואבטחה‬PHP | 18
    19. ‫ - דוגמה‬mcrypt ‫הצפנה עם‬ // Decryption - decode a \"remember me\" cookie if (! $_SESSION['logged_in'] && isset($_COOKIE['remember_me'])) { $crypted = base64_decode($_COOKIE['remember_me']); $userdata = mcrypt_decrypt(ENC_CIPHER, $key, $crypted, ENC_MODE); list($username, $password) = explode(\" \", $userdata, 2); $password = substr($password, 31); // Sign in using $username and $password... } | Feb 7, 2008 ‫ ואבטחה‬PHP | 19
    20. ‫‪ – Hashing‬הצפנה חד כיוונית‬ ‫הצפנה של מידע באופן שלא ניתן לשחזר את המקור‬ ‫•‬ ‫נוח לשמירת סיסמאות, לדוגמה‬ ‫•‬ ‫‪ ‬אין צורך לשחזר את הסיסמה המקורית‬ ‫‪ ‬מספיק רק לוודא שה- ‪ hash‬של הססימה שהתקבלה מתאים ל-‬ ‫‪ hash‬השמור בבסיס הנתונים‬ ‫פונקציות ‪ hashing‬זמינות תמיד: ()1‪md5)(, sha‬‬ ‫•‬ ‫פונקציות ‪ hashing‬נוספות זמינות כחלק מ- ‪ hash‬ו- ‪mhash‬‬ ‫•‬ ‫‪ - :Salting‬הוספת ערך קבוע למחרוזת המקורית לפני‬ ‫•‬ ‫ההצפנה ע”מ למנוע יכולת לבצע ‪dictionary attacks‬‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫02 |‬
    21. ‫ - דוגמה‬Hash Salting $salt = \"qwdlkjsdvo94u5t908sdv4089dfbmqwre04325\"; // Save password in DB $passwordHash = md5($_POST['password'] . $salt); $stmt = $pdo->prepare( \"INSERT INTO user (nickname, password) VALUES (?, ?)\" ); $stmt->execute(array($_POST['nickname'], $passwordHash)); // Check password $passwordHash = md5($_POST['password'] . $salt); $stmt = $pdo->prepare( \"SELECT id FROM user WHERE nickname = ? AND password = ?\" ); $res = $stmt->execute(array($_POST['nickname'], $passwordHash)); | Feb 7, 2008 ‫ ואבטחה‬PHP | 21
    22. ‫‪ - Security by obscurity‬הסוואה‬ ‫שימוש בשמות לא ברורים ל- ‪resources‬‬ ‫•‬ ‫‪ URL ‬לממשקי ניהול: ‪http://www.foo.com/admin‬‬ ‫‪ Session Ids ‬ופרמטרים אחרים‬ ‫‪ ‬הסוואה של שימוש בתוכנות קוד פתוח‬ ‫לא באמת אמצעי אבטחה – לא יעצור אף פורץ רציני‬ ‫•‬ ‫\"לשים את הכסף מתחת לבלטות בלי לנעול את הדלת”‬ ‫•‬ ‫•‬ ‫‪http://www.youtube.com/watch?v=zekiZYSVdeQ‬‬ ‫8002 ,7 ‪| Feb‬‬ ‫‪ PHP‬ואבטחה‬ ‫22 |‬
    23. ‫שאלות?‬
    24. ‫תודה רבה‬

    + Shahar EvronShahar Evron, 2 years ago

    custom

    1302 views, 0 favs, 2 embeds more stats

    More info about this document

    CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

    Go to text version

    • Total Views 1302
      • 1249 on SlideShare
      • 53 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 9
    Most viewed embeds
    • 38 views on http://php-israel.org
    • 15 views on http://www.php-israel.org

    more

    All embeds
    • 38 views on http://php-israel.org
    • 15 views on http://www.php-israel.org

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories