התקפת SQL

מה זה sql injection, איך האקרים מבצעים את ההתקפה וכיצד נגן על האתר/אפליקציה מפניה? חלק ראשון

הזרקת sql היא אחת ההתקפות הוותיקות והנפוצות ברשת. היא בנויה מהזרקת שאילתת sql באמצעות input לאתר/אפליקציה ברשת. התקפת sql מוצלחת יכולה לשאוב מידע יקר מהדאטהבייס ואפילו לשנות בו מידע. למרות שזאת אחת ההתקפות הוותיקות היא עדיין גורמת נזק רב וOWASP  עדיין מדרגים אותה במקום הראשון מדי שנה.

אחרי כל כך הרבה שנים,איך התקפת sql עדיין רלוונטית?

שאלה מצוינת. איך באמת לא הצליחו להכחיד סוג כזה של התקפה אחרי כל כך הרבה שנים?

קל למצוא חולשות sql – מאוד קל אפילו. ניתן לזהות חולשה כזו על ידי הוספת גרש פשוט ב Url. גם גוגל עוזר להאקרים לגלות אתרים עם חולשה כזאת. מנסחים שאילתה פשוטה ומקבלים רשימה ארוכה של אתרים עם חולשות sql injection.

תפוצה – חולשות sql נפוצות מאוד וגם כאן מספיקה שאילתת חיפוש בגוגל כדי לקבל רשימת אתרים ארוכה. רק בשנים האחרונות נמצאו חולשות כאלו במערכת דרופל ובפלאגינים שונים של וורדפרס שהם סיכון אבטחה ענק שמגיע לו כתבה נפרדת. כשיש להאקר רשימה של אתרים, הוא יכול לכתוב או להעתיק סקריפטים שיבצעו תקיפה אוטומטית.

קלות לפריצה – חולשות sql קלות מאוד לפריצה לעומת חולשות אבטחה אחרות הקיימות ברשת. המבנה עצמו של החולשה יכול להיות מורכב ומסובך אבל כל מי שפתח קאלי לינוקס (מערכת הפעלה של האקרים המבוססת על Debian) יודע שקיימים אינספור כלים אוטומטיים לניצול החולשה. כל מה שההאקר צריך לעשות זה להעתיק את ה url של האתר, להכניס אותו ל  GUI הגראפי של אחד הכלים וואללה, הוא פרץ עוד אתר.

נזק – הגורם האחרון לרלוונטיות של ההתקפה הוא הנזק העצום שיכול להיגרם למערכת כתוצאה מהשתלטות על בסיס הנתונים. מידת הנזק תלויה במידת הדמיון של ההאקר ויכולה לנוע מגניבת פרטים ולידים, השתלת קוד מעקב זדונית אחרי משתמשים, דרישת כופר ועד הריסה טוטאלית של האתר.

אפשר להבין מה זה sql injection גם בלי לדעת SQL?

הצלחה של התקפת SQL מתקדמת והיכולת לבלום אותה תלויים בידע שלכם. נכון שאפשר לבצע התקפה גם עם כלים אוטומטיים אבל במידה ואתם באמת רוצים להבין איך SQL עובד, אנחנו ממליצים לכם ללמוד את השפה שהיא די קלה או לפחות להכיר את הבסיס. תוכלו לעשות זאת עצמאית באתר Codeacademy או דרך האפליקציה Sololearn ובאלף מקומות אחרים שתמצאו ברשת. התקפת sql משתנה בהתאם לטכנולוגיה שקיימת באפליקציית הרשת. הסינטקס של התקפה על mysql יהיה שונה מהסינטקס של התקפה על oracle או Microsoft sql. אתם לא צריכים ללמוד לעומק כל אחת מהטכנולוגיות אך אתם כן צריכים להבין בקווים כלליים איך הן עובדות.

רוצים דוגמא מעשית? בואו נניח שהאקר הצליח לבצע הזרקת sql ולחדור לדאטהבייס של חנות ווקומרס בוורדפרס. ההאקר מכיר וורדפרס טוב מספיק כדי לדעת שקיים table בשם users המנהל את התפקידים והססמאות של המשתמשים. גם אם הוא לא יודע שקיים table כזה או מדובר במערכת כמו ג'ומלה או דרופאל או אפילו במערכת עצמאית שנבנתה מאפס, אם קיימת אופציית התחברות, סביר להניח שנמצא בדאטהבייס אזור של שמות משתמש ויוזרים. ההאקר שולח request לשרת של האתר כדי ליצור query בדאטהבייס. יתכן שהבקשה תעבור דרך firewall אבל זה לא ממש ישנה לו, כי אנחנו עדיין מדברים על דפדפן שמשוחח עם שרת ולא על נסיון לעקוף את הפיירוול. השאילתה – query מבוצעת בדאטהבייס והדאטהבייס מחזיר להאקר מידע.

קללת ה Authentication

התקפת SQL נפוצה בעיקר במערכות הבנויות על php או asp וכמו שאמרנו, מידת החומרה שלה תלויה בדמיון ובידע של ההאקר. כאן מגיע אחד החלקים היותר מעניינים של ההתקפה, על מנת שאפליקציית הרשת תשלח בקשה לדאטהבייס היא חייבת לבצע תהליך של זיהוי – Authentication. ללא הזיהוי הזה לא ניתן כלל לגשת למסד הנתונים. הבעיה שכמעט כל אפליקציית רשת משתמשת באותו משתמש כדי לפנות לדאטהבייס ולכן ההרשאות שלו לבצע שינויים הן עצומות.

איך בודקים אם קיים סיכוי לפריצה?

הצעד הראשון הוא לבדוק היכן האפליקציה מתחברת לדאטהבייס וכותבת בו: כאשר משתמש חדש נרשם, כאשר משתמש קיים מתחבר, כאשר ממולא טופס. ההתקפה מתרחשת בעיקר כשהיוזר צריך להקיש פרטים כמו שם משפחה או כתובת אימייל במערכת לא מאובטחת ובמקום להקיש פרטים לגיטימיים מקיש שאילתות sql המבוצעות על ידי הדאטהבייס.

' OR 1=1

כאשר משתמשים בהזרקת sql אחת הטכניקות הנפוצות היא לבצע פקודת SELECT כאשר התנאי לביצוע תמיד נכון – TRUE. שאילתת ה sql הבאה תביא לנו את כל המשתמשים בטבלה Users מכיוון שתמיד 1 יהיה שווה ל1. שימו לב שהפגיעות הזאת יכלה להימנע אם המערכת היתה מסננת כל input שמופיע בו הסימן גרש בודד  '

SELECT * FROM Users WHERE User = 30 OR 1=1;

ובואו נניח שטבלת המשתמשים מכילה גם ססמאות ב plain text, זאת אומרת ססמאות שלא עברו תהליך של hashing או encryption (קידוד):

SELECT User , Password FROM Users WHERE User = 30 or 1=1;

אבל איך ההאקר פורץ יוזר וססמא? הוא לא באמת מקיש את כל השאילתה ב input.

בוודאי שלא, מטרתו של ההאקר היא לנחש את השאילתה המקורית ולהשלים אותה כדי שתביא לו את התוצאה הרצויה. על ידי הקלדת " or ""=" בשורת input של השם או הססמא, ההאקר יוצר מצב ש = תמיד יהיה נכון. שאילתה כזו תדפיס לנו את כל השמות והססמאות בטבלה במידה וקיימת פגיעות ל sql injection. השאילתה מאחורי הקלעים שאותה לא נראה מתייחסת לשם משתמש ולססמא.

BLind sql injection

התקפת sql עיוורת היא התקפה בה ההאקר מבצע מניפולציה בדאטהבייס אבל לא יכול לראות על הדף את התוצאות שהתקבלו. התקפה זו נחשבת כקשה יותר לביצוע ומערבת הרבה מאוד שאילתות למרות שכיום בעידן הקאלי לינוקס קיימים כלים אוטומטיים שנועדו להקל על ההתקפה.

שימוש ב —   ו ;

אחת הטכניקות הנפוצות בהזרקת SQL היא שימוש בקומנטס אחרי הכנסת הקוד הזדוני. קומנטס בעצם אומרים לשרת שכל מה שבא בעקבות הסימון — הוא תגובה ואין לבצע אותו.  הסמי קולון ; אומר לשרת שהשאילתה ששלחנו הסתיימה ומתחילה שאילתה חדשה. לכן אם אנחנו מוסיפים ; — אנחנו בעצם מסיימים את השאילתה ומסמנים מה שאחריה כקומנט (הערה). אתם לא צריכים ללמוד את זה בעל פה אבל אתם כן צריכים להבין שמספיק תו אחד או שניים כדי לשנות כליל את השאילתה המקורית שמתכנת האתר או האפליקציה בנה.

SELECT * FROM users WHERE name = " OR '1'='1' — ';

שלוש שיטות להתקפה שלי…

קיימות שלוש שיטות לביצוע התקפת SQL. באתר עם חולשה ברורה ניתן בדרך כלל להשתמש בהתקפה הבסיסית והפשוטה אך באתרים שיש בהם הגנות כנגד הזרקות קוד, יש צורך להשתמש בצורות מתוחכמות יותר של הזרקת SQL

התקפה שתוצאותיה הודעת שגיאה – ERROR

בהתקפה זאת הדאטהבייס יוצר הודעת שגיאה שעולה בדף ובעצם מספק לנו מידע יקר מה קיים בתוך המסד נתונים. ניתן לבדוק אם האתר פגיע לסוג כזה של התקפה על ידי בדיקה פשוטה שבה אנחנו מוסיפים גרש יחיד – SINGLE QOUTE ' לסוף של כתובת ה url

https://israelrich.com/?p=1363'

במקרה שהאתר אכן פגיע, נקבל הודעת שגיאה כמו בתמונה הבאה:

התקפת SQL

הודעה זאת היא מסר ברור ממסד הנתונים שמשהו לא פועל כשורה ובדרך כלל היא מוסרת לנו מידע חשוב מאוד כמו שמות ה TABLES או סוג הדאטהבייס. כאשר אנחנו מוסיפים גרש יחיד ל URL אנחנו בעצם משנים את ה GET REQUEST שנשלח לשרת. אבל כמו שתראו בהתקפות מתקדמות יותר – SQL INJECTION יכולה להתבצע גם ב POST REQUEST ובעוד דרכי בקשה אחרות.

כולנו מכירים את מבנה ה url השכיח: https://israelrich.com?p=56 נסו להוסיף אחרי ה url הזה את הביטוי:    –OR 1=1 '

זאת התוצאה שתקבלו:

SQL INJECTION

המודול שמותקן בשרת של האתר בשם mod_security זיהה שקיימת כוונה זדונית לבצע התקפת sql ובלם אותה. באתר עם פגיעות להתקפה, הייתם מקבלים את כל הדפים הקיימים בדאטהבייס. למי שלא יודע הסימן — ב SQL אומר שמתחילה תגובה ולכן מסד הנתונים יתעלם מכל דבר שיבוא אחרי הסימן — אם לא היינו מוסיפים את הסימן הזה, היינו מקבלים הודעת שגיאה שחסר גרש כמו שקיבלנו קודם.

התקפה המבוססת על איחוד – פקודת SQL UNION

בהתקפה זאת אני ניקח תוצאה של QUERY לגיטימי קיים ואז נוסיף לו QUERY חדש שיביא לנו שתי תוצאות משתי שאילתות שונות. תוצאה אחת לגיטימית והשניה קוד זדוני שהאקרים מכניסים.

התקפה עיוורת – BLIND SQL INJECTION

התקפה מתקדמת יותר מהשתיים הקודמות. האקרים משתמשים בהתקפה זו כאשר אינם מצליחים להוציא לפועל את שתי ההתקפות הקודמות. היא נקראת עיוורת כי אנחנו לא יכולים לראות בדף האינטרנט את הודעות השגיאה או המידע שהדאהבייס מייצר. אנחנו נאלץ לנחש כיצד עובד הדאטהבייס מתחת לפני השטח בהתבסס על התוצאות שקיבלנו.

כן או לא – BOOLIAN

בהתקפה עיוורת זאת אנחנו שואלים את מסד הנתונים שאלות של כן ולא. אם זה כן, עשה כך ואם זה לא עשה אחרת. בהתבסס על התוצאה שנקבל אנחנו יכולים לנחש מה קורה בשרת.

התקפת טיימינג – TIME ATTACK

אנחנו מבקשים ממסד הנתונים להגיב מאוחר יותר אם תשובה מסוימת היא נכונה.

סינון input

הגבלה על הקלט שניתן להקיש על מנת למנוע הזרקות SQL. הסינון הטוב ביותר הוא להגדיר רשימת whitelist של הביטויים שניתן להכניס לקלט או להגדיר לדוגמא שהקלט צריך להיות בין 5-8 אותיות ללא מספרים או תווים מיוחדים כמו גרש סימון שווה או מרכאות. סינון כזה ימנע כל התקפת SQL שתיארנו.

ההאקר המתוחכם יחפש אילו תווים או הגדרות קיימות בסינון. הבעיה היא שלפעמים חייבים להשתמש בתווים מיוחדים. בכתובת אימייל יופיע תמיד @ ובשמות צרפתיים לדוגמא יופיע גרש יחיד כחלק מהתחביר של השם. J'apprends le piratage. סינון לא יכול להיות עד כדי כך קפדן שלא יהיה ניתן להשתמש באפליקציית ווב שימוש נרחב ויומיומי.

עד כאן החלק הראשון על אחת ההתקפות המסוכנות ונפוצות בעולם ה web. בחלק הבא נעבור על התקפות מתקדמות יותר, אוטומציה בהזרקות SQL ודרכי מניעה יעילות.

4 comments

  1. מאמר סוף הדרך. טוב שמישהו מרים את הכפפה ללמד ווב האקינג (אתיקל כמובן 🙂
    ניתן לבצע התקפת SQL על Table שלא קיים במסד נתונים?

    • לא בטוחים לגמרי שהבנו למה אתה מתכוון. ככלל, אם אתה מצרף כמה queries ואחד מהם לא עובד אז גם הqueries אחריו לא עובדים כך שהמטרה של ethical hacker היא לנחש את ה tables הקיימים.

  2. אוראל אמביני

    נהניתי מאוד לקרוא את המאמר שלך. אני רוצה ללמוד להיות Ethical hacker ולבצע PT, בעיקר בתחום הווב והסרברס. יש מסלול לימודים מומלץ?
    איזו הסמכה עדיפה CEH או OSCP?

    • מכר טוב שלנו הוסמך ל CEH V9 והוא נהנה מאוד מהלימוד. למרות שהוא יכל לעבור את המבחן גם בלי ללמוד. לOSCP צריך ידע יסודי חזק בלינוקס, רשתות ועוד הרבה יכולות טכניות. בגלל זה גם מעסיקים מעריכים אותה יותר.
      לא חייבים מכללות כדי ללמוד היום. יש מספיק חומר באינטרנט. הבחינה עצמה עולה קרוב ל900$ שזה מטורף אם אתה לא הולך לעבוד בתחום. מי שחייב כיתה ומסגרת ימצא שקורסים פרונטליים לא חסרים.
      התעודה עצמה זה סתם נייר זה לא באמת מה שמשנה , מה שמשנה זה מה אתה עושה בזמנך הפנוי על מנת ליישם את מה שלמדת.
      אם אתה מנסה להשתלב בתעשיה יהיה לך קל יותר להתחיל בתמיכה טכנית או SOC. לPT מחפשים נסיון של שנים.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *