כתב ויתור : יצרתי את PfP: סיסמאות ללא כאבים כתחביב, זה יכול להיחשב מתחרה ב- LastPass.
הייתי בודק את סוגיות האבטחה של כמה מנהלי סיסמאות במספר הזדמנויות. בפרט דיווחתי על שתים עשרה בעיות אבטחה ל- LastPass עד כה וניתחתי את החלטות התכנון שהובילו לכך. אז בעוד ש- paj28 נתן תשובה כללית טובה מאוד לגבי מנהלי סיסמאות, אני יכול לספק כמה פרטים.
כאשר אנשים מדברים על אבטחה של מנהלי סיסמאות מקוונים, הם בדרך כלל מתמקדים באבטחת שרתים. המיקוד הוא כמה קל להתפשר על השרת ומה יקרה אז. אולם זהו רק וקטור התקפה אחד מכיוון שתקיפת מופע מנהל הסיסמאות המקומי שלך עשויה להוביל לאותן תוצאות. למעשה, תקיפת סיומת הדפדפן עשויה להיות דרך פעולה מבטיחה יותר, מכיוון שהנתונים כבר מפוענחים שם ולא תשאיר עקבות בשום יומן.
תן לי להסתכל על שני ההיבטים הללו בנפרד.
תקיפת סיומת הדפדפן
יש הרבה נתונים היסטוריים על נקודות תורפה בסיומת הדפדפן LastPass. ניתן לנצל את כל הפגיעות הללו באמצעות דפי אינטרנט שרירותיים. לכל הפחות, אלה הם:
שמתם לב לדפוס כאן? LastPass נאבקה כבר שנים על מנת לאבטח את פונקציונליות המילוי האוטומטי שלהם ולהגביל את הגישה ל- API הפנימי שלהם. בכל פעם שדוח חדש הוכיח שהתיקון הקודם שלהם לא הושלם.
עכשיו זה לא יוצא דופן שמנהלי הסיסמאות לא מצליחים ליישם את 'מילוי אוטומטי' באופן מאובטח, לרובם היו בעיות בתחום זה כשבדקתי. למרות שנמנע לחלוטין, נושאים אלה נפוצים מספיק כדי שאפילו ריכזתי רשימה עם המלצות כדי למנוע את המלכודות.
אך סוגיות ה- API הפנימיות די מדהימות. LastPass חושף את ה- API הזה לאתרים במספר דרכים שונות. זה נועד להיות מוגבל ל- lastpass.com, אך ההיגיון הוא כה מורכב, עד כי המגבלות נעקפו מספר פעמים בעבר. ובעוד LastPass עשו כמיטב יכולתם להמעיט בחומרת ההודעות הרשמיות שלהם, כל אחת מהסוגיות הללו אפשרה לאתרים לקרוא את כל הסיסמאות בבת אחת. גרוע מכך, הדו"ח האחרון של טביס אורמנדי הוכיח שניתן להשתמש בממשק ה- API הפנימי כדי לגרום לרכיב ה- LastPass הבינארי לבצע קוד שרירותי במחשב המשתמש. זה יכול להיעשות ככל הנראה עם כל הפגמים הקודמים שחשפו את ה- API הפנימי.
אפשר כמובן לשאול מדוע LastPass לא הצליחה להגביל את הגישה ל- API הפנימי כראוי. אך השאלה הטובה יותר היא מדוע ה- API הזה בכלל נחשף לאתרים. הסיבה לכך היא שחלק משמעותי מפונקציונליות LastPass אינו כלול בתוסף אלא מסתמך על אתר LastPass שיפעל. זו החלטה עיצובית בעייתית מאוד אך עד כה נראה כי LastPass לא היה מעוניין לתקן אותה.
תקיפת נתונים בצד השרת
בואו נאמר זאת בצורה ברורה מאוד: איננו סומכים על השרת. זה לא שאנחנו סומכים במיוחד על LogMeIn, Inc. - לפחות לא יותר מכל חברה אחרת. אך הסיסמאות שלנו הן נתונים רגישים מאוד, ואפילו בחברה האתית ביותר עשוי להיות עובד סורר. הוסף לכך את האפשרות שרשויות ארה"ב דורשות מהם לייצר את הנתונים שלך, דבר שאינו קשור אפילו בהכרח לחקירה פלילית. לא משנה מהי האפשרות שהשרתים שלהם נפרצים, כמו שזה כבר קרה פעם אחת.
לכן חשוב מאוד שהנתונים שלך בשרת יהיו מוצפנים וחסרי תועלת לכל מי שיכול להשיג להחזיק בזה. אך מה יכול למנוע את התוקפים מפענוחו? דבר אחד בדיוק: הם לא מכירים את סיסמת המאסטר שלך שמשמשת להפקת מפתח ההצפנה. אז השאלה המהותית היא: האם LastPass מגן מספיק על סיסמת האב שלך ועל מפתח ההצפנה?
בתחום זה, אני לא מודע למחקר מתוקשר אלא לשלי, שרובו כתוב ב זה פוסט בבלוג. המסקנה שלי כאן: LastPass סובל ממספר פגמים בתכנון כאן, חלקם נפתרו עד כה בעוד שאחרים עדיין פעילים. חבורה של נתונים מוצפנים, גישת הפענוח הכי פשוטה היא: נחשו את סיסמת האב המשמשת להפקת מפתח ההצפנה. אתה יכול לנסות מספר בלתי מוגבל של ניחושים באופן מקומי, בכל חומרה שאתה יכול להרשות לעצמך, כך שתהליך זה יהיה מהיר באופן דומה.
LastPass משתמש באלגוריתם PBKDF2 כדי להפיק את מפתח ההצפנה מהסיסמה הראשית. למרות שהוא נחות מאלגוריתמים חדשים יותר כמו bcrypt, scrypt או Argon2, לאלגוריתם זה יש את המאפיין החשוב להאט את גזירת המפתח, כך שתוקפים שעושים ניחוש מקומי יואטו. הזמן הנדרש הוא פרופורציונלי למספר האיטרציות, כלומר: ככל שמספר האיטרציות גבוה יותר, כך יהיה קשה לנחש סיסמת מאסטר.
במשך זמן רב, ברירת המחדל של LastPass הייתה 5,000 איטרציות. זהו ערך נמוך במיוחד המספק מעט מאוד הגנה. חישבתי שניתן להשתמש בכרטיס גרפי אחד של GeForce GTX 1080 Ti לבדיקת 346,000 ניחושים לשנייה. זה מספיק כדי לעבור במאגר עם למעלה ממיליארד סיסמאות המוכרות מדליפות אתרים שונות בקושי יותר משעה.
בעקבות הדיווחים שלי, LastPass הגדילה את ברירת המחדל ל 100,000 איטרציות באמצע -2018 שהוא הרבה יותר הולם. כמובן שאם אתה יעד חשוב שיכול לצפות למשאבים ברמת המדינה שנזרקים על מנת לנחש את סיסמת המאסטר שלך, אתה עדיין צריך לבחור בסיסמת מאסטר חזקה במיוחד.
אחיזת נתונים ל- bruteforce
אחד הממצאים שלי בתחילת 2018 היה כי ניתן לטעון את התסריט https://lastpass.com/newvault/websiteBackgroundScript.php
על ידי כל אתר. סקריפט זה הכיל גם את שם המשתמש של LastPass וגם פיסת נתונים מוצפנים (מפתח RSA פרטי). כששם המשתמש שלך ב- LastPass הוא גם מלח נגזרת הסיסמה, זה כל מה שמישהו צריך לאכזב את סיסמת המאסטר שלך באופן מקומי.
בעיה זו נפתרה במהירות כמובן. עם זאת, הפגם היה ברור מספיק כדי שנשארתי תוהה אם הייתי הראשון שגיליתי אותו. אמנם דחקתי ב- LastPass לבדוק ביומנים שלהם אם יש סימנים לפגיעות זו המנוצלת בטבע, אך למיטב ידיעתי חקירה זו מעולם לא התרחשה.
"סבבים בצד השרת" כהגנה חסרת תועלת
בעקבות אירוע אבטחה בשנת 2011, LastPass הטמיע מנגנון אבטחה נוסף: בנוסף לאיטרציות ה- PBKDF2 שלך בצד הלקוח הם יוסיפו עוד 100,000 איטרציות בשרת. אז בתיאוריה, אם מישהו יכול להוריד נתונים מהשרת, זה יגביר את המאמץ הדרוש לנחש את סיסמת המאסטר שלך.
בפועל, אוכל להוכיח באופן סופי כי 100,000 האיטרציות הנוספות האלה מוחלות רק על חשיש הסיסמה. כל שאר נתוני המשתמשים (סיסמאות, מפתחות RSA, OTP ועוד) מוצפנים רק באמצעות מפתח ההצפנה הנגזר באופן מקומי מהסיסמה הראשית שלך, אין הגנה נוספת כאן. מסקנה: "הגנה" נוספת זו היא בזבוז מוחלט של משאבי השרת ואינה מספקת ערך כלשהו.
כניסה דרך הדלת האחורית
לא משנה כמה חלשה ההגנה, התקפות כוח אכזרי תמיד לא יעילות כנגד סיסמאות המאסטר החזקות ביותר. עם זאת, העיצוב של LastPass מכיל שפע של דלתות אחוריות שיאפשרו לפענח את הנתונים מבלי להשקיע כל מאמץ. ללא עזרה של סיומת דפדפן. עם זאת, תכונה זו היא מלכודת: בכל פעם שתזין את סיסמת המאסטר שלך לטופס כניסה באינטרנט, אין שום דרך לדעת אם היא תשלח את הסיסמה הראשית שלך עם PBKDF2 לפני שתשלח אותה לשרת או שהיא תעביר אותה כברורה. טקסט.
זוכרים שאנחנו לא סומכים על השרת? עם זאת די בשינוי טריוויאלי של קוד ה- JavaScript המוגש על ידי השרת בכדי לפגוע בכל הסיסמאות שלך. גם אם אתה בודק את קוד ה- JavaScript, יש בו יותר מדי מכדי שתוכל להבחין במשהו. ואפשר יהיה להגיש את הקוד שהשתנה רק למשתמשים ספציפיים.
הגדרות חשבון
גם אם אתה משתמש בתוסף הדפדפן באופן עקבי, בכל פעם שתעבור להגדרות החשבון זה יהיה טען את אתר lastpass.com. שוב, אין שום דרך לדעת שאתה אתר זה אינו מתפשר ולא יגנוב את הנתונים שלך ברקע.
כמה חלקים אחרים של פונקציונליות ההרחבה מיושמים גם על ידי חזרה ל אתר lastpass.com, ו- LastPass אינו רואה את הבעיה כאן.
OTP לשחזור
ל- LastPass יש את הרעיון של סיסמאות חד פעמיות (OTP) בהן תוכל להשתמש כדי לשחזר נתונים מחשבונך אם תשכח אי פעם את סיסמת המאסטר. OTP אלה מאפשרים פענוח הנתונים שלך אך בדרך כלל אינם ידועים לשרת.
כדי להפוך את ההתאוששות לאמינה עוד יותר, LastPass תיצור OTP לשחזור באופן אוטומטי כברירת מחדל ותאחסן אותה בנתוני ההרחבה. הבעיה כאן: תהליך השחזור תוכנן כך שההרחבה תיתן באופן מיידי ל- lastpass.com את ה- OTP לשחזור על פי דרישה, מבלי להודיע לך אפילו על כך. אז שרת LastPass שנפגע יכול לבקש מהסיומת את ה- OTP לשחזור שלך ולהשתמש בו כדי לפענח את הנתונים שלך.
על פי LastPass, בעיה זו נפתרה באוגוסט 2018. אני לא יודע איך הם פתרו את זה עם זאת, לפחות לא יכולתי לראות אף אחד מהפתרונות הברורים בקוד שלהם.
חשיפת מפתח ההצפנה
יש גם מספר מקרים שבהם הסיומת תחשוף ישירות מפתח ההצפנה המקומי שלך לשרתי LastPass. זה אמור לעזור לפונקציונליות LastPass מבוססת אינטרנט להשתלב טוב יותר עם סיומת הדפדפן, אך היא מבטלת את ההשפעות של הצפנת נתונים באופן מקומי. הפעולות הבאות כולן בעייתיות:
- פתיחת הגדרות חשבון, אתגר אבטחה, היסטוריה, חוברות, ניטור אשראי
- קישור לחשבון אישי
- הוספת זהות
- ייבוא נתונים אם הרכיב הבינארי אינו מותקן
- הדפסת כל האתרים
- לחיצה על הודעת הפרה
האחרון הוא רציני במיוחד מכיוון ששרת LastPass יכול לשלוח לך התראות על הפרה כרצונו. אז זה מאפשר ל- LastPass לקבל גישה לנתונים שלך מתי שהם רוצים, במקום לחכות שתשתמש בפונקציונליות בעייתית לבד.
עוד פגמים בעיצוב
- כפי שאתה יכול לראות בעצמך על ידי פתיחת https://lastpass.com/getaccts.php בזמן שאתה מחובר, הכספת LastPass היא בשום אופן לא כתם מוצפן של נתונים. במקום זאת יש נתונים מוצפנים פה ושם, בעוד ששדות אחרים כמו ה- URL המתאימים לחשבון פשוט משתמשים בקידוד hex. נושא זה צוין ב מצגת 2015 זו ושדות נוספים הוצפנו מאז - עדיין עדיין לא כולם. בפרט, דוח שהגשתי ציין כי דומיינים מקבילים שאינם מוצפנים אפשרו לשרת LastPass לשנות את הרשימה ולחלץ את הסיסמאות שלך בדרך זו. נושא מסוים זה נפתר באוגוסט 2018 על פי LastPass.
- אותה מצגת נוזפת ב- LastPass על השימוש בהם ב- AES-ECB לצורך הצפנה. בין היתר, הוא נותן אילו מהסיסמאות שלך זהות. LastPass עבר ל- AES-CBC מאז ועדיין, כאשר הסתכלתי על ה"כספת "שלי ראיתי שם הרבה אישורי AES-ECB מוצפנים (אתה יכול לדעת כי AES-ECB הוא בסך הכל כתם מקודד בסיס 64 ואילו LastPass גרסה של AES-CBC מתחילה בסימן קריאה. זה למעשה מתועד ונחשב לסיכון נמוך. אולי אחד העמיתים לעבודה שלך התעלל בך על ידי שליחת דוא"ל על שמך כי שכחת לנעול את המחשב שלך - בפעם הבאה הם עשויים להשתלט על חשבון LastPass שלך גם אם אתה מחובר מ- LastPass.
- אם כבר מדברים על היותך מחובר, זמן תפוגת ברירת המחדל של הפגישה הוא שבועיים. אמנם בהחלט נוח, אך יש סיבה לכך שרוב המוצרים המטפלים בנתונים רגישים כוללים מרווחי זמן תפוגה קצרים בהרבה, בדרך כלל הרבה מתחת ליום אחד.
- לשילוב ערך עם סוד (למשל כחתימה) בדרך כלל ישתמש ב- SHA256-HMAC. במקום זאת, LastPass משתמש בגישה מותאמת אישית ומיישם את SHA256 hashing פעמיים. בעוד שההתקפות שאליהן HMAC נועדה לטפל נראה כי לא משחקות תפקיד כאן, לא הייתי מהמר על מישהו עם ידע טוב יותר בקריפטו ממני שלא אמצא כאן פגיעות. כמו כן, צד השרת יפיק מדי פעם גם כמה אסימונים של SHA256 - מעניין איזה סוג של humbug קורה במקום בו אני לא יכול לראות אותו והאם הוא באמת מאובטח.