התקפת brute force מילונית

כך מייעלים התקפת brute force - משתמשים במילון (או יותר נכון תזאורוס אבל אף אחד לא יודע מה זה)
כיתוב: WEB

במאמר קודם דיברנו על brute force ואיך מחשבים אנטרופיה. לא, לא צריך להכנס ללחץ – אפשר לקרוא את המאמר הקודם שכתבתי כדי להזכר.
בסוף המאמר היתה המלצה להשתמש בסיסמה ארוכה במיוחד אם אנו רוצים להגן עליה מהתקפות של brute force. למה? כיוון שאם אני משתמש באלגוריתם נאיבי במיוחד על מנת לפצח את הסיסמה – כזה שמתחיל ב-a עובר ל-b וכך הלאה (מגיע ל-aa ואז ab וכו' כפי שהסברתי במאמר הקודם) – פיצוח ססמה ארוכה במיוחד הופך לכמעט בלתי אפשרי.
ואז חטפתי מהמגיבים – למה? כי השתמשתי בגישה נאיבית מאוד לפיצוח. במאמר הזה אני מספר על גישה אחרת להתקפה שיכולה לצמצם דרמטית את הזמן הנדרש לססמאות ארוכות.
בואו ונדגים. נניח שיש לי ססמה מאוד ארוכה:

"this is a very long password"

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

log(26) * 25 = 117.51 

מספר הניסיונות המקסימלי שאדרש אליו הוא 2 בחזקת 117.51 שזה המון. האם יש דרך לצמצם את זה? ובכן. בוודאי שיש. אם אני יוצא מנקודת הנחה שאני משתמש במילים באנגלית… אני יכול לצמצם מאוד את כמות הניחושים. איך זה עובד?
ראשית, אצטייד בתזאורוס, בו יש את כל המילים בשפה האנגלית. האלגוריתם שלי יצטרך לעבור מילה מילה.
האם מדובר במילה apple? לא? מה עם banana? לא? מה עם cucumber? גם לא? ככה נעבור על כל המילים. יש 171,476 מילים בשפה האנגלית בסך הכל. לא הצליח? סימן שהמשתמש שלנו השתמש בסיסמה עם יותר ממילה אחת. ועכשיו ננסה: האם הסיסמה היא:

apple apple

או

apple banana

או

apple cucumber

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

Log2(26)

ואז להכפיל באורך הסיסמה, אני צריך לעשות

log2(171,476)

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

log2(171,476) * 5

וזה יוצא 86.93 וזה נמוך משמעותית ביותר מ-117.51, שזו רמת האנרופיה בביטים אם אני משתמש בגישה הנאיבית. להתקפה הזו קוראים התקפה מילונית. נכון, תזאורוס הוא לא מילון אבל אנחנו אנשים פשוטים.
אבל אפשר להוריד עוד את רמת האנטרופיה. יש 171,476 מילים לפי מילון אוקספורד, הכולל ברשימת המילים מילים מאוד איזוטריות שרוב האנשים לא מכירים. אם נצא מנקודת הנחה שרוב האנשים ישתמשו במילים פשוטות כמו password, long, the, a או very ולא במילים מעניינות כמו erinaceous למשל. אם ניקח רשימה של מילים פשוטות, נוכל להוריד את האנטרופיה עוד יותר. אם למשל שימוש בהתקפת מילון של 20,000 מילים לסיסמה על חמש אותיות:

log2(20000 ) * 5

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

happy unicorn day 11/03/1950

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

log2(20000 ) * 5

יהיה לנו

log2(20050 ) * 5

אם התוקף הוסיף 50 תאריכים או כינויי חיבה ואהבה למשל (כמו 'קוקי').
אז מה עושים? כאן מגיע היתרון האדיר שלנו כדוברי שפה זרה נוספת (אחת לפחות). אם נגניב פנימה מילים מועתקות מעברית או ערבית, הסיכוי להצלחת התקפה מילונית יורד דרמטית. למשל הסיסמה:

this is ahla bahla shel sisma

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

pedo mellon a minno speak friend and enter

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

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

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

pedo mellon a minno speak friend and enter

או סיסמה נוסח:

AbCdE1

?

אתם מוזמנים לחשב את הביטים של האנטרופיה בשני המקרים ולראות מה יותר בטוח.

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

פוסטים נוספים שכדאי לקרוא

תמונת תצוגה של מנעול על מחשב
פתרונות ומאמרים על פיתוח אינטרנט

הגנה מפני XSS עם Trusted Types

תכונה ב-CSP שמאפשרת מניעה כמעט הרמטית להתקפות XSS שכל מפתח ווב צריך להכיר וכדאי שיכיר.

פתרונות ומאמרים על פיתוח אינטרנט

המנעו מהעלאת source control לשרת פומבי

לא תאמינו כמה אתרים מעלים את ה-source control שלהם לשרת. ככה תמצאו אותם וגם הסבר למה זה רעיון רע.

ספריות ומודולים

מציאת PII באמצעות למידת מכונה

כך תגנו על משתמשים שלכם שמעלים מידע אישי רגיש כמו תעודות זהות באמצעות שירות אמאזוני.

גלילה לראש העמוד