על אבטחה ובני אנוש – איתור סיסמאות חלשות ב SQL SERVER

14/05/2014

שמעון גיברלטר

3495162

DBA בפרוייקט ממשלתי מטעם נאיה טכנולוגיות


(ניתן ללחוץ על התמונות בפוסט להגדלה)

באחד לאפריל השנה (2014) פורסם פוסט מעניין בsqlservercentral ,

כותרתו הייתה מאוד מושכת "Script Out Passwords"…

איתור סיסמאות חלשות


הקוד נמצא כאן : ScriptOutPasswords

זאת התוצאה המתקבלת מהרצת השאילתא:

איתור סיסמאות חלשות

אכן תכסיס מצחיק ל1 באפריל,

בקוד הנ"ל הצפינו את המילים WE CANNOT REALLY RECOVER… באחת משיטות ההצפנה (המירו לבינארי) ובעת הרצת השאילתא בוצע פיענוח למחרוזת בעזרת המרה לטקסט

זוהי לא הצפנה מוצלחת כמובן כי ניתן להמיר את הערך הבינארי לטקסט בעזרת פונקציית המרה פשוטה (CAST/CONVERT) ולכן לסיסמא היא לא תתאים.

לעומת זאת,

מערכת ניהול הסיסמאות של SQL SERVER  משתמשת בהצפנה מסוג SHA  ומאחסנת את הסיסמאות בתור מחרוזת מוצפנת (HASHED)

**Secure Hash Algorithm = SHA היא שיטת הצפנה וניתן לקרוא עליה בהרחבה פה

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

את ההצפנה מבצעים באמצעות פונקצייה הנקראת HASHBYTES  אשר מקבלת 2 פרמטרים

איתור סיסמאות חלשות

אם נייצר מחרוזת מוצפנת לערך 123456 נקבל את התוצאה הבאה:

איתור סיסמאות חלשות

אך אם אייצר SQL LOGIN  עם סיסמא זהה האם התוצאה בטבלת sql_logins  תהיה זהה?

אבדוק זאת למענכם:

איתור סיסמאות חלשות

אז יצרתי לוגין ומייד לאחר מכן שלפתי את הסיסמא המוצפנת,

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

מדוע?

זה כתוב למעלה, המחרוזת שמאוחסנת בטבלת המערכת מכילה בתוכה  HEADER  + SALT  חוץ מהסיסמא,

כשהם מוצפנים יחד זה נראה כך

Capdfsdfsdfture

על מנת להדגיש את המכנה המשותף ואת דרך פענוח הHEADER  והSALT  אצור עוד כמה לוגינים ואשלוף את הסיסמאות

איתור סיסמאות חלשות

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

והוא יכול להשתנות מגירסה לגירסה של השרת (2008/2012/2014…).

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

איתור סיסמאות חלשות

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

אך הם עדיין שונים כמובן כי לא הוספנו את המלח – SALT

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

שאלה מעולה!

לכן, על מנת לענות עליה הצטיידתי בקובץ טקסט המכיל 2 מיליון סיסמאות וזמין להורדה כאן

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

מתחילים להבין לאיפה זה הולך?

בדיוק! באמצעות קוד CLR חיברתי מערכת שמתיזה גז פלפל על כל מפתח שבחר סיסמא כמו –

LETMEIN / TRUSTNO1 / 123456 / PASSWORD / I AM THE REAL MASTER IN HERE  וכו'

טוב, זה לא בדיוק חוקי ואתי לעשות זאת,

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

וכאן נכנס הסקריפט הבא למציאת סיסמאות חלשות / נפוצות / מביכות שכתבתי (ועובד יופי!):

(מומלץ לייבא את התוכן של קובץ הסיסמאות לטבלה מראש)

 הקוד נמצא כאן: Find weak passwords script

ובכן, מה בדיוק הסקריפט עושה?

א.      אוסף את כל הסיסמאות מטבלת המערכת

ב.      מצפין את כל הסיסמאות מטבלת הסיסמאות (אשר מילאתם מקובץ הטקסט) לפי כל האלגוריתמים הקיימים (או אלה שהשארתם בתוך המשתנה הטבלאי ALG) ולפי הSALT  שמפענחים מתוך המחרוזת

ג.       בעזרת CROSS APLY  וביצוע "מתקפת מילון" בודקים התאמה ו   BOOM  יש תוצאות

איתור סיסמאות חלשות

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

 

פרטים נוספים שרצוי שתדעו:

ההרצה לקחה אצלי פחות מדקה עם חומרה לא יוקרתית במיוחד והסקריפט עבד ונבדק על סביבות 2008-2014 (כן, כולל מה שביניהם)

יש לקחת בחשבון ש > יותר אלגוריתמים לבדיקה = יותר זמן ריצה,

לכן הייתי בודק רק את האלגוריתמים SHA-2 256 / SHA-2 512

וגם משום שהם היחידים שבטוחים ונחשבים מאובטחים כיום לעומת השאר אשר קיימים מאזור שנות ה90 (MD2 נוצר ב89) ולכן מאז הספיקו למצוא בהם מיני פגמים וכו'

לסיכום:

למרות שיש מדיניות אכיפה על סיסמאות נאספות בכל שנה מיליוני סיסמאות "נפוצות" מאתרים ומידע שדולף. עדיין ישנה החולשה האנושית שגורמת ל100000 אנשים לחשוב ש LETMEIN /1qazxdr5  הם בחירות לגיטימיות לסיסמה,

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

ניתן גם להשתמש במנוע הקיים בסקריפט לייצר מתקפות BRUTE FORCE  על השרת על מנת לחשוף סיסמאות,

לזה אני לא אתן לכם את הקוד 🙂

The whole notion of passwords is based on an oxymoron."

,The idea is to have a random string that is easy to remember. Unfortunately

.'if it's easy to remember, it's something nonrandom like 'Susan

"And if it's random, like 'r7U2*Qnp,' then it's not easy to remember. — Bruce Schneier

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

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