כל הזכויות שמורות לטל בן שושן – Shushan.co.il
פיצוח Hash ע"י HashCat והסבר על Rainbow Tables ו Salting
על מנת לבצע את המאמר, יש לעבור תחילה על המאמרים הבאים:
התקנת Kali 2017.3
הגדרה ראשונית של Kali והוספת Repository
כאשר משתמש רוצה להגדיר סיסמא חזקה הוא צריך שסיסמא תיהיה ארוכה, המורכבת מאותיות, אותיות גדולות מספרים וסימנים ככל שהסיסמא ארוכה יותר כך הסיסמא חזקה יותר.
אם נבדוק את Hashcat לדוגמה
נבחין שהוא מנסה לסרוק
1421327633024
טריליון ארבע מאות מילארד סיסמאות ואילו המחשב (כוח העיבוד הגרפי) מסוגל לסרוק מאות אלפי סיסמאות בשניה אחת ואילו אם היה לי מעבד גרפי חזק יותר בתצורת SLI לדוגמה היכולת מבחינת מהירות הייתה גדולה פי כמה.
נתחיל בדרישות המדריך
- HashCat מותקן
- כרטיס מסך בינוני \ חזק
נוריד את Hashcat
נוכל לאתר ב Pastebin סיסמאות Hash למשל
https://pastebin.com/MBFgjsLS
נעתיק אותם ל CyberChef
https://gchq.github.io/CyberChef
ונשתמש ב Regular Expression
^([^,]+)
על מנת להוציא רק את ה Hashs
כעת נשמור את הקובץ ונשמור אותו בתיקייה של Hashcat
תחילה אסביר על Brute Force Password Attack –
Brute Force Password Attack
נוריד את Hashcat ל Windows
בצורה זו, נוכל להגדיר נאמר שאורך הסיסמא הוא 7 תווים ואז המערכת תנסה בהתחלה רק A גדול נאמר AAAAAAA ואז AAAAAAB וכך לפי כל האותיות והמספרים.
אז נוכל להגדיר לHashcat
hashcat64.exe -a 3 GoovHash.hash
3 אומר לו Brute Force ו -a קיצור של Attack
אלו הם סוגי ההתקפות לפי מספר:
0 | Straight 1 | Combination 3 | Brute-force 6 | Hybrid Wordlist + Mask 7 | Hybrid Mask + Wordlist
כעת חלק מהסיסמאות 30 אחוז ליתר דיוק מהרשימה שלי נמצא את הסיסמא – מדוע? כי הן פשוטות מידי.
כיצד ניתן לשפר את ההתקפה?
Dictionary Attack
בתצורה זו נשתמש בקובץ למשל Rockyou שנוכל להוריד אותו מכאן
כעת נשתמש בקובץ + בחוק – החוק אומר שניקח את הסיסמאות ששמורות שם ונוסיף לחלקם אות גדולה \ מספרים וכו'
hashcat64.exe -a 0 -r ./rules/dive.rule GoovHash.hash ./rockyou.txt
Rainbow Tables
היא טבלה המכילה קובץ סיסמאות + ה Hash של כל סיסמא, לדוגמה Hashcat כמו שהסברתי למעלה HashCat שהוא כלי הלוקח את קובץ הסיסמאות Rockyou ויוצר טבלה שבה ליד כל סיסמא יש את ה Hash Value של כל SHA שכולל NTLM או SHA1 או SHA256 וכך כאשר אתם רוצים לדעת מה הסיסמא המקורית ולא ה Hash אז אתם יכלים לבצע Rainbow Cracking.
חשוב להבין, החישוב מבוצע על ידי כוח עיבוד גרפי GPU, על ידי כרטיס מסך חזק מאוד \ כמה כרטיסים במערך SLI או Crossfire נוכל ליצור בתוך עשרות שניות מליוני \ טרליוני סיסמאות שנמצאות כ- Plain Text ולהפוך אותם ל Hash וככל שה Hash פשוט יותר (כמו MD5) נוכל ליצור יותר.
כך למעשה, ניתן ליצור טבלת Rainbow גדולה ולנסות לאתר את הסיסמא של המשתמש
Salting
הוא הצורה בה אנו רוצים למנוע מתוקפים לזהות את סיסמת המשתמש על ידי זיהוי של Hash ולבצע לו התאמה.
אבל כדי להבין מה המטרה, צריך להבין איפה הבעיה, הבעיה היא כזאת:
רוב אתרי האינטרנט משתמשים במסדי הנתונים שלהם ב Salting זאת אומרת שהסיסמא נשמרת כHash ומתווספת אל הסיסמא של המשתמש Salt, נאמר יש את הסיסמא 123456 אז ה Hash של 123456 הוא * אני משתמש כאן ב MD5
e10adc3949ba59abbe56e057f20f883e
מנגנון Salt יוסיף לסיסמא 123456 Salt (לרוב רצף מספרים \ אותיות אל הסיסמא הקיימת, נניח שהSalt של אתר מסוים הוא 545485, כעת זה יהיה
545485 + 123456
ומכאן ה Hash שיהיה באתר הוא:
a42d329dbba1c89e95bc4dcf92e41c2e
כך שאם ה Hash יגנב, יהיה לתוקף הרבה יותר קשה לבצע התאמה של Hashים שכן ה Hash הזה הוא Salt + Hash
ביצוע התאמה של הHash
משתמש יצר אצלכם באתר "שם משתמש" וסיסמא ב SHA256 , התוקף \ אתם נכנסים למסד הנתונים ומוצאים שה Hash הוא
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
אתם בטח אומרים שHash הוא "פונקציה חד כיוונית" ולא ניתן לגלות את הסיסמא, אתם לגמרי צודקים!
התוקף לא מעוניין "לשבור" את ה Hash או לגלות כיצד לבצע Reverse ל Hash, התוקף נסה לבצע "התאמה" הוא יקח קובץ (RainBow Table) או יבצע זאת סיסמא סיסמא, הוא יקח סיסמא יהפוך אותה ל SHA256 וינסה להתאים אותה לHash שקיים
דוגמה: הוא יקח את הסיסמא 123456, יהפוך אותה ל SHA256 ויבדוק או זה זהה לHash הקיים במסד הנתונים ואז הוא יכול לדעת מה הסיסמא
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 = 123456
Salting כפתרון Bcrypt
ברגע שנוסיף לסיסמא הקיימת אות \ אותיות אנחנו בעצם נשנה את כל ה Hash וכך נמנע מביצוע של Rainbow Cracking כדוגמת – Hashcat
על מנת לבצע את זה:
Hash ( Password + Salt)
זאת אומרת שהHash נוצר משילוב של הסיסמא וה Salt.
אם מסד הנתונים שלנו נפרץ גם ה Salt שהוא "רצף מספרים ואותיות" שהתווסף לסיסמא וממנו נוצר ה Hash גם אותו יש לתוקף
אבל כאן נכנס האלגוריתם Bcrypt שהוא בדומה ל SHA אבל המיוחדות שלו היא האיטיות, כאשר כתבתי הסברים על Secure Hash Algorithm הסברתי שהHash מצד אחד צריך להיווצר מהר שכן יהיה יעיל, כאן Bcrypt הוא בדיוק ההפך, הוא איטי יותר ולא רק איטי יותר כאשר התוקף ינסה ליצור Dictionary Attack יקח לו הרבה יותר זמן, שכן הוא יצטרך להמיר את כל הסיסמאות בקובץ הסיסמאות שלו ל Salt + Password
כך הוא יצור Rainbow Table ואז יוכל להשוות את ה Hash שנוצר לסיסמאות שנמצאות במסד הנתונים שהוא רוצה.
Hashcat With Salt
אם הצלחתם להשיג מסד נתונים שקיים בו גם הHash וגם ה Salt
הוא אמור להיראות כך
01dfae6e5d4d90d9892622325959afbe:7050461
או הפוך, נקיש את הפקודה
hashcat64.exe -a 0 -m 10 Pass.txt
-m 10 אומר איזה מצב של Hash הכנסו את ה Hash לקובץ (הרשימה של ה Hash שלנו)
רשימה מלאה ניתן למצוא כאן:
https://hashcat.net/wiki/doku.php?id=example_hashes
למשל 20 זה salt:password ולא ההפך (כמו למעלה שזה 10)
על מנת לבצע זאת ביעילות נקיש את הפקודה כך:
hashcat64.exe -a 0 -m 10 -r ./rules/dive.rule Pass.txt ./rockyou.txt
בתוך הקובץ Pass.txt נמצא ה Hash שאנחנו רוצים למצוא
WordPress Attack
ניסוי, הקימו שרת WordPress צרו משתמש חדש עם הסיסמא 123456
כעת קחו את ה Hash אשר מתחיל ב $P$
נקיש את הפקודה כך:
hashcat64.exe -a 3 -m 400 tal.txt ?d?d?d?d?d?d?
-400 אומר שזה Hash ששייך לפורמים וכו'
?d?d?d?d?d?d? – אומר שיש 6 תווים, d ספציפית אומר 6 תווים מסוג מספר שכן הסיסמא היא 123456
יקח למחשב כמה שניות לאתר את ה Hash
?l = abcdefghijklmnopqrstuvwxyz ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ ?d = 0123456789 ?h = 0123456789abcdef ?H = 0123456789ABCDEF ?s = «space»!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ ?a = ?l?u?d?s ?b = 0x00 - 0xff