מ"עקרון קרצ'וף" עד "התקפת מילון" - מה שצריך לדעת על סיסמאות והגנתן
מאת:
איליה דוידוב, 23.7.18, 07:20
מרבית האנשים לא יודעים ולו דבר על הדרך בה סיסמאות מאוחסנות ומאובטחות. המאמר בא לשפוך אור על הנושא, על הדרכים היצירתיות בהן האקרים מנסים לגלות את הסיסמאות ועל דרכי התגוננות.
אי שם, על גבי שרתים או במערכת המחשוב, נשמר קובץ סיסמאות. הקובץ מכיל רשימה של שמות המשתמשים, הדרך לאמת את הסיסמה ("השם הראשון של הכלב שלך?" למשל), מספר החשבון שלך, איזה משתמש הוא האדמין וכד'.
במערכת 'יוניקס' (
Unix) הקובץ נשמר באופן מסורתי תחת השם
/etc/passwd והוא ניתן לקריאה ע"י כל אחד. על כן, הדבר הברור מאליו הוא, שלא ניתן פשוט לאחסן את הסיסמאות בקובץ עצמו, שכן אז הוא קריא לכולם.
אולם, כיום הדרישה היא, שמידע זה
לא יהיה חשוף לכולם. אם תרצו לבדוק זאת, ויש לכם מחשב של אפל למשל, תוכלו לפתוח חלון "מסוף", הקלידו
Is / etcand, קובץ בשם "
master.passwd" ייפתח (וסביר להניח, שהוא מכיל את הסיסמא למחשב). יחד עם זאת, אם תנסו לקרוא אותו - הבקשה תידחה.
רוג'ר נידהאם (מדען מחשוב בריטי) אמר, שסיסמאות צריכות להיות מוצפנות בעזרת, מה שנקרא בשנות ה-70, 'פונקציה חד כיוונית' וכיום נקרא 'פונקציה קריפטוגרפית' (מוצפנת).
אם הסיסמאות היו מאוחסנות בקובץ טקסט פשוט, אזי תהליך הכניסה לחשבון בוודאי היה משהו בסגנון "מחשב - קח את הסיסמא המוקלדת, תראה אם זה תואם לסיסמא בקובץ ואם כן – תאפשר למשתמש להתחבר". במקרה זה, מה ששמור על הקובץ (לאחר שהמשתמש יצר / חידש את הסיסמא), זו הסיסמא לאחר "ערבול" התווים בעזרת הפונקציה החד כיוונית.
כיום, הליך ההתחברות הוא שונה. הבקשה מהקוד תהיה "קח את הסיסמא המוקלדת, תריץ אותה דרך הפונקציה החד כיוונית, תראה אם זה תואם את הקובץ. אם כן – אפשר למשתמש להתחבר".
פונקציה חד -כיוונית, או פונקציות קריפטוגרפיות, הן למעשה דרכים לקחת את התווים האמיתיים של הסיסמא ולהפוך אותם לאורך קבוע (וארוך למדי) הנקרא "בליל" (
Hash), ובפשטות - מיקס. אותם תווים יובילו לאותו בליל. אפילו השינוי המזערי ביותר לסיסמא שהוקלדה, יוביל לבליל אחר לגמרי.
האופי הדטרמיניסטי של השיטה הזו, מוביל לכך, שגם אם התגלה הערך של הבליל,
אין באמת דרך לגלות את הסיסמא עצמה. כמובן, שניתן לנסות את כל האופציות, אך זו הסיבה, שאנו מתבקשים להשתמש באלפבית עשיר, "אות גדולה, סימן ומספר".
אפילו הבנק לא צריך לדעת את הסיסמה וזה היבט חשוב מאוד בכל הקשור לדרך בה סיסמאות מאוחסנות. אם תתקשרו אל הבנק ותגידו, ששכחתם את הסיסמא לכספומט, לא תקבלו תשובה בטלפון מהסיבה הפשוטה, שלנציג/ה בצד השני של הטלפון פשוט אין גישה לסיסמאות שלכם. המחשב חוסם להם את הגישה וזה לא רק כי תוכנת המחשב כתובה היטב, אלא גם כי המערכת לא מכירה את מספר הזיהוי האישי שלכם ואין לה דרך לגלות זאת.
בעת הפעלת הקוד בכספומט, המערכת של הכספומט קוראת את ה'בליל' הנוצר ובודקת התאמה לפי מסד הנתונים. פונקציה חד כיוונית, כשמה כן היא - פועלת רק בכיוון אחד.
ישנן מספר דרכים, שהאקרים יכולים לנסות, כדי לגלות סיסמאות. בעזרת מערכת ממוחשבת או מערכת ההפעלה של הסמארטפון, ניתן לנסות את כולן כמובן, עם מקלדת באופן ידני זה לא מעשי, שכן יש מיליארדי קומבינציות אפשריות.
כדי להפוך זאת לקשה יותר, מערכות מתחילות להאט את התגובה ברגע שמוזנות אליהן מספר סיסמאות שגויות. מה שיכול להתחיל כהפרש של 10 שניות בין ניסיונות, יכול להגיע לדקה במעבר בין הקלדה להקלדה. באייפון, אם האופציה מופעלת (והיא צריכה להיות), המערכת למעשה תמחק את כל הנתונים לאחר 10 ניסיונות כושלים.
הדרך המעשית והיחידה לפצח סיסמאות היא, למעשה, לגנוב את קובץ הסיסמאות ולנסות אותן באופן לא מקוון. יש 2 דרכים עיקריות לעשות זאת:
האחת, לפעול בכוח. כלומר, לנסות את כל הסיסמאות לפי הסדר (מ-
a ועד
z. ולאחר מכן
aa וכן הלאה).
השנייה, לפעול בשכל - "התקפת מילון". מרבית הסיסמאות הן פשוטות למדי, מילים במילון, לעתים עם שינוי מזערי (להוסיף ספרה, אות גדולה וכד'). בפער ניכר יש פחות מילים במילון מאשר קומבינציית הסיסמאות, שבשיטה הראשונה.
וריאציה אחת של שיטה זו היא לנסות כל מילה, בכל קובץ במערכת. תאמינו או לא, ישנם אנשים המשתמשים בחשבונות הבנק שלהם כסיסמא (עצתי, אל תעשו זאת).
באבטחת מידע, אחת ההנחות היא, שהאבטחה עצמה תלויה בקומבינציית המקשים, זה דבר ידוע בתחום ואף יש לו שם - "עקרון קרצ'וף" (על שם הקריפטוגרף ההולנדי
אוגוסט קרצו'ף) או
Shannon's Maxim, על שם
קלוד שאנון (תיאורטיקן מידע, שיצר את תיאוריית המידע).
עקרון זה פועל מתוך הנחה, ש"הרעים" מודעים לאלגוריתם שבשימוש והצליחו להשיג עותק של מאגר הסיסמאות. אין זה אומר, שלא צריך לשמור על האלגוריתם בחשאיות ולא להגן על מאגר הסיסמאות. זה אומר רק, שאבטחת המערכת אינה תלויה רק ב-2 הדברים הנ"ל (הקומבינציה ומאגר הסיסמאות). בשורה התחתונה, גם אם 2 הדברים מחוץ לשליטתך וזה אכן כבר אבוד, עדיין לא צריכים למצוא את הסיסמאות.
קו ההגנה הראשון, בניגוד לרוב הזמן באינטראקציה עם מחשבים, הוא להפוך את הפונקציה הקריפטוגרפית לאיטית ויקרה לחישוב (במונחים של צריכת משאבים). בעת ההתחברות לסמארטפון או למחשב, זה לא באמת משנה אם זה ייקח פחות משנייה ליישם את הסיסמא, זה רק צריך להיעשות פעם אחת בכל כניסה.
עבור אלה הפועלים בזדון, שינסו את כל הסיסמאות ו/או הקומבינציות, זה עשוי להיות ההבדל בין לנסות מיליארד ספרות לבין לנסות למשל 4 ספרות. ניתן, כמובן, להשתמש ביותר ויותר כוח מחשוב, אך עדיין, האופציות הן רבות מאוד, גם אם ישתמשו ב-1,000 מחשבים, יצטרכו לנסות 4,000 סיסמאות בשנייה.
יש גישה נוספת בה נוקטים האקרים, והיא "חישוב מראש" (
Pre-Compute) של כל הסיסמאות, או חלק ניכר מהן. ניתן להריץ את כל הקומבינציות האפשריות דרך הבליל ולשמור את התוצאות. במובן מסוים, הפעולה הזו הופכת את הפונקציה החד כיוונית לדו-כיוונית. זו שיטה שימושית ביותר בהינתן גניבה של מאגר גדול, או מאגר, שנבנה מכמה מערכות ביחד.
עם זמינותו של כוח חישוב כמעט אינסופי וזול, בעזרת הענן, גניבת הסיסמאות הופכת להיות ריאלית יותר ויותר. אפילו עם 'בליל' חזק. בנוסף, בדיוק כמו כריית ביטקוין, אם הרצון הוא לעשות זאת מהר, ניתן להשתמש ב-
GPU (מעבד חזק יותר מה-
CPU המסורתי), לבנות מנוע מצפין חזק או, לפחות בתיאוריה, להרכיב שבב מותאם אישית. בהנחה, ש"הרעים" יכולים להשיג משאבים רבים (כוחות מחשוב, שבבים וכד'), הם יכולים פשוט לבדוק אם יש בידם התאמה, ואם כן, אז הסיסמה בידם.
על רקע דברים אלה, נשאלת השאלה:
איך בכל זאת נגן על עצמנו? שיטה אחת מעניינת במיוחד היא "להוסיף מלח" לתחילת הסיסמה, מחרוזת אקראית של תווים, שפשוט מתווספת לסיסמה. יש ליצור מחרוזת כאשר הסיסמא מאוחסנת כבר במסד הנתונים, ביחד עם הבליל.
אבל, וזו נקודת המפתח, ה"מלח" לא צריך להישמר בסוד. חשיבותו של המלח נשענת על כך, שהוא מסבך את העניין, מסבך מאוד. סביר, שאינכם עושים זאת, אך אם כן הייתם עושים זאת, למשל, להוסיף 6 ספרות לתחילת כל סיסמה, אזי היו לכם מיליון מאגרים שונים לכל סיסמה. עכשיו להאקר יש עבודה קשה בהרבה ואיטית הרבה יותר. בפועל, המלח הוא כאורך הבליל (כזכור, הבליל הוא התוצאה של ההצפנות - "פונקציית הקריפטוגרפיה"), בד"כ 256 סיביות (32 בתים).
כלל אצבע של האקרים הוא לא לתקוף את ההצפנה, שכן ישנן חולשות נוספות. למשל, הנדסה חברתית.
סיפור שהיה כך היה: גנרל בפנטגון במהלך פגישה עם יועצת אבטחה, שידועה במומחיותה בהנדסה חברתית, טען, שהסיסמא שלו בלתי ניתנת לחדירה. היועצת לקחה את כרטיס הביקור של הגנרל, חייגה למשרדו ועוזרו ענה. היא טענה, שהיא עוזרת של אדם
X בפנטגון, עמו נפגש הגנרל, וכי הגנרל שכח את סיסמתו ומבקש, שהיא תסייע. תוך 30 שניות הסיסמא הייתה בידיה. כלומר, מכיוון זה, אין אנו מצפים להיות מותקפים, אך זה עובד כמו קסם. עוזרו של הגנרל ידע, שהוא בפנטגון, ידע עם מי הוא נועד, לא כל שכן, השיחה הגיעה מהפנטגון, אז למה לחשוד? זו הנדסה חברתית.
חולשה נוספת נובעת מההנחה, יש דרכים נוספות להיכנס למערכת. 'שאלות אבטחה' זו דרך אחת ברורה. לנסות "בכוח" למצוא את הסיסמא דרך הבליל זו לא משימה ריאלית, אבל למצוא את שם הנעורים של אמי? אולי זה לא במרחק חיפוש בגוגל, אבל לא בעיה למצוא זאת. העיר שבה נולדתי? לא סוד.
הנה כיוון שאולי לא חשבתם עליו, אם תכננתם לגלות את שם הנעורים של אם הקורבן, או את שם חיית המחמד הראשונה לצורך העניין, תוכלו להקים אתר "עסיסי", כזה שימשוך תנועה רבה כגון "סודותיהם של הכוכבים בהוליווד" או אולי "המציאות שאמזון לא רוצה שתראו", ולגרום לאנשים להירשם אליו. בתהליך הרישום, הזינו כמה שאלות אבטחה (למשל, הדוגמאות שלעיל), וכך הנתונים כבר יגיעו אליכם.
דרך נוספת לעיבוי ההגנה על הסיסמאות היא האימות הדו-שלבי. יש לציין, שאבטחת מידע נשענת על מספר עקרונות:
- משהו שאתם יודעים (סיסמא, שמות נעורים וכו').
- משהו שברשותכם (סמארטפון, מחשב וכו').
- אתם (טביעת אצבע, זיהוי פנים וכו').
סיסמאות רגילות לרוב תהיינה רק סביב עקרון אחד. שימוש ב-2 עקרונות זה כבר אימות דו-שלבי. למשל, כספומט, משהו שברשותכם (כרטיס אשראי) ומשהו שאתם יודעים (הקוד למשיכה). הקוד, בד"כ בין 4 ל-6 ספרות, אינו מאובטח כשלעצמו (למשל כשנרצה להיכנס לחשבון הבנק באינטרנט, אין אנו עושים זאת עם הקוד של האשראי).
בד"כ, כאשר מדובר באימות דו-שלבי, הסיסמא חזקה יותר כאשר עולה הדרישה להשתמש בסמארטפון (למשל, כאשר נשלח קוד ייחודי כהודעת טקסט אל המכשיר). אם אתם יכולים, עבור כל מערכת, שאתם נרשמים אליה, עשו זאת באמצעות אימות דו-שלבי, כזה הנשען על 2 גורמים.
אם עולה הצורך לבצע אתחול לסיסמא, לרוב כי היא פשוט נשכחה לה, עולים במקרה זה 2 דגלים, שיש לשים לב אליהם:
הראשון: הליך איפוס הסיסמא כשלעצמו צריך להיות מורכב לפחות כמו הכניסה למערכת. אחרת, כל האקר ממוצע פשוט יבחר לאפס את סיסמתכם. לצורך העניין, אם בעת הכניסה יש צורך באימות דו שלבי, אזי כך גם בהליך האיפוס - יש צורך ב-2 גורמים כדי לאפס / לשנות הסיסמא.
השני: אם המערכת שולחת לכם את הסיסמא האבודה בדואר אלקטרוני, פעלו מהר. אם המערכת יכולה פשוט לשלוח את הסיסמא, אזי סביר כי היא מאוכסנת בקובץ טקסט רגיל, ואין היא מקשה על האקרים למיניהם. אם מישהו גונב את מאגר הנתונים, יש ברשותו את הסיסמאות של כולם, וזה פשוט
סוף המשחק.
מאת:
איליה דוידוב, יולי 2018.
ארכיטקט מערכות,
Cadence