CVE-2020-0601 – פגיעות בפונקצית שמוודא את אמינות התעודה ב windows, יכולה לגרום לתוקף לזייף תעודות דיגיטליות שמבוססות על Elliptic Curve

CVE-2020-0601 הינה פגיעות בפונקציה המוודא את אמינות התעודה הדיגיטלית , בתעודות דיגיטליות המשתמשות ב Elliptic Curve , היכולה לגרום לתוקף לזייף תעודה דיגיטלית בצורה כזאת שמערכת ההפעלה תחשוב שהתעודה מקורית. 

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

מי , מה , איך ?

הפגיעות , שבנתיים קיבלה גם את השם "CurveBall" , נחשפה ע"י ה NSA (פעם ראשונה שה NSA משחרר פגיעות לטובת תיקון) ושוחררה כתיקון ב 14.01.2020 למערכות ההפעלה , windows 10 , windows server 2016 and 2019.

איפה הבעיה?

הפגיעות נמצאת ב CryptoAPI של מערכת ההפעלה חלונות , שהינו חלק מקובץ ה crypt32.dll. הפגיעות מאפשרת לתוקף לזייף תעודה דיגיטלית שמבוססת על elliptic curve encryption ע"י שינוי של משתנה בתעודה הדיגטלית האחראי על המחולל של המפתחות.  כאמור הפגיעות משפיעה רק על תעודות דיגיטליות מסוג Elliptic Curve.

ECDSA & RSA מה ולמה ?

חתימה דיגטלית עובדת בעזרת הצפנה א-סימטרית . הצפנה זו מכילה 2 מפתחות הצפנה שונים , בצורה כזאת שמפתח אחד יכול לפענח את מה שהמפתח השני הצפין. ולהפך (בניגוד להצפנה סימטרית בה אותו מפתח מצפין ומפענח). בהצפנה א-סימטרית , נהוג לכנות את מפתחות ההצפנה כמפתח פרטי ומפתח ציבורי (public & private).

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

ECDSA הינו פרוטוקול הצפנה א-סימטרית כמו RSA, אולם הוא משתמש במבנה האלגברי-גאומטרי הנקרא עקום אליפטי. בניגוד ל RSA , הוא לא משתמש במספרים ראשוניים למפתחות ההצפנה שלו, אלה משתמש במספר גדול (לא חייב להיות ראשוני) כמפתח פרטי , ובנקודה על העקום כמפתח ציבורי. ECDSA שנכנס לשימוש בסביבות שנות 2005 , נותן עדיפות מסוימת ביצור המפתחות ע"י שאינו מכריח כי המפתח יהיה מספר ראשוני, ולכן די קל לייצר אותו. אפשר לקרוא עוד על ECDSA בויקיפדיה

אז אם ECDSA כל כך טוב , איפה הבעיה ?

הבעיה היא כי ישנו משתנה בתעודה הדיגיטלית של ECDSA , הנותן את היכולת לייצר מפתח פרטי במידה וידוע לך המפתח הציבורי, ומכיוון שהמפתח הציבורי (כשמו כן הוא) ציבורי וידוע לכל , ניתן בפשטות לייצר מפתח פרטי שיתאים לו.

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

הבעיה היא ש CryptoAPI מסתכל בתעודות שנמצאות אצלו ב Cache ומתאים אותם ל trusted CA Certificate ע"י בדיקה של המפתח הציבורי והמספר הסיריאלי , ולא מתייחס לכל שאר הפרמטרים של התעודה. אחד הפרמטרים שיש לתעודות דיגיטליות מסוג Elliptic Curve זה המחולל. ע"י שינוי של המחולל , ניתן לייצר מפתח פרטי חדש לפתח ציבורי קיים ובעצם לייצר תעודה "תיקנית" .

POC , יש !

קיים POC לפגיעות המדוברת , מה שאומר כי קיים חשש סביר ביותר להתקפות המשתמשות בפגיעות הקיימת.

כיצד עובד ה POC  ?  

דבר ראשון , יש למצוא תעודה המצויה ב Trusted Root  ואשר משתמשת ב ECC (Elliptic Curve Crypto)

שלב 2 , יש להוריד את התעודה ולחלץ ממנה את המפתח הציבורי

שלב 3 , יוצרים מספר רנדומלי ומחשבים את המחולל

שלב 4 , בעזרת המחולל מייצרים תעודה דיגיטלית מזויפת

זהו , ניתן עכשיו להתשמש בתעודה על מנת לרמות את ה CryptoAPI של windows (בתנאי שהיא כבר נמצאת ב cache ! )

מי מושפע ?

כמו שאמרנו , מערכת הפעלה חלונות , ההשפעה היא על הגלישה וגם על התקנות של יישומים .

מי שלא מושפע זה דפדפן Firefox שלא משתמש ב CryptoAPI של windows .

מי שעוד לא מושפע זה העידכונים של windows , כנראה בגלל ששם התעודה היא "נעוצה" בתוך המערכת.

חומרה

מדובר על פגיעות חמורה ביותר

עוד לינקים ודרכי בדיקה:

באתר של מיקרוסופט תמצאו רשימה של מערכות הפעלה המושפעות מהפגיעות , כמו כן תמצאו לינקים להורדה של עידכונים ועוד דרכי פעולה : https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0601

באתר הזה יש מאמר מפורט מאוד על הנושא  וגם אתר שיאפשר לכם לבדוק האם אתם פגיעים (באנגלית) :  https://research.kudelskisecurity.com/2020/01/15/cve-2020-0601-the-chainoffools-attack-explained-with-poc/

השארת תגובה