אבטחה רצינית: Microsoft Office 365 הותקף עקב הצפנה חלשה של PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

אבטחה רצינית: Microsoft Office 365 הותקף עקב הצפנה חלשה

אנחנו לא ממש בטוחים איך לקרוא לזה כרגע, אז התייחסנו לזה בכותרת בשם ההיברידי Microsoft Office 365.

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

אנו בטוחים שאנשים ימשיכו להשתמש בשמות האפליקציות הבודדים (Word, Excel, PowerPoint וחברים) והכינוי של הסוויטה Office במשך שנים רבות, אם כי מצטרפים חדשים לתוכנה כנראה בסופו של דבר יכירו זאת 365, לאחר שחרור הקידומת של Microsoft שנמצאת בכל מקום.

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

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

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

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

OME תחת אור הזרקורים

או שיש לך?

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

התכונה שבה השתמשו הבודקים היא מה שהם מכנים הצפנת הודעות של Office 365, או שתי בקיצור.

לא שחזרנו את הניסויים שלהם כאן, מהסיבה הפשוטה שמוצרי הליבה של Office, סליחה, 365 לא פועלים באופן מקורי על לינוקס, שבה אנו משתמשים לעבודה. הגירסאות מבוססות האינטרנט של כלי ה-Office אינן כוללות את אותה מאפיינים כמו האפליקציות המלאות, כך שסביר להניח שכל התוצאות שאנו עשויים להשיג לא יתאימו לאופן שבו רוב המשתמשים העסקיים של Office, אה, 365 הגדירו את התצורה של Word, Excel, Outlook וחברים במחשבים הניידים של Windows.

כפי שהחוקרים מתארים זאת:

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

אבל הם גם מציינים כי:

לרוע המזל, הודעות ה-OME מוצפנות במצב פעולה לא מאובטח של ספר קודים אלקטרוני (ECB).

ECB הסביר

להסביר.

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

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

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

(אל תבלבלו גודל בלוק עם גודל המפתח - מפתחות הצפנת AES יכולים להיות באורך 128 סיביות, 192 סיביות או 256 סיביות, תלוי באיזו סבירות אתה רוצה שהם ינחשו, אבל כל שלושת גדלי המפתחות עובדים על בלוקים של 128 סיביות בכל פעם שהאלגוריתם מתנהל.)

המשמעות היא שאם אתה בוחר מפתח AES (ללא קשר לאורך) ואז משתמש בצופן AES ישירות על נתח נתונים...

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

כמו ספר קודים ענק באמת

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

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

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

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

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

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

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

הנה דוגמה המבוססת על מאמר שפרסמנו לפני כמעט תשע שנים, כאשר הסברנו מדוע השימוש הידוע לשמצה של אדובי בהצפנה במצב ECB כדי "גיבוב" את הסיסמאות של המשתמשים שלה. לא רעיון טוב:

אבטחה רצינית: Microsoft Office 365 הותקף עקב הצפנה חלשה של PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.
שמאלה. תמונת RGBA מקורית.
ימין. נתוני תמונה מוצפנים עם AES-128-ECB.

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

בדוגמה זו, כל פיקסל בקובץ המקורי תופס בדיוק 4 בתים, כך שכל ריצה של 4 פיקסלים משמאל לימין בנתוני הקלט היא באורך 16 בתים, מה שמתיישר בדיוק עם כל בלוק הצפנת AES של 16 בתים, ובכך מדגיש "אפקט ה-ECB".


התאמת דפוסי טקסט צופן

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

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

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

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

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

מה לעשות?

אל תשתמש במצב ECB!

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

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

אם אתה משתמש ב-AES, המצב שאתה כנראה רוצה לבחור בימים אלה הוא AES-GCM (Galois Counter Mode), אשר לא רק משתמש ב-IV כדי ליצור זרם נתוני הצפנה אחר בכל פעם, גם אם המפתח נשאר זהה, אלא גם מחשב את מה שמכונה קוד אימות הודעה (MAC), או סכום בדיקה קריפטוגרפי, במקביל לערבול או ביטול ערבול הנתונים.

המשמעות של AES-GCM היא לא רק שאתה נמנע מדפוסי טקסט צופנים חוזרים, אלא גם שאתה תמיד מקבל "צ'קsum" שיגיד לך אם הנתונים שפיענחת זה עתה טופלו במהלך הדרך.

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

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

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

AES-GCM בעצם ממירה AES לצופן זרמים ומוסיפה אימות בצורה של MAC, אבל אם אתם מחפשים צופן זרמים ייעודי שתוכנן במיוחד כדי לעבוד כך, אנו מציעים את ה-Daniel Bernstein של ChaCha20-Poly1305 (החלק של Poly1305 הוא ה-MAC), כמפורט ב RFC 8439.

להלן, הראינו מה קיבלנו באמצעות AES-128-GCM ו-ChaCha20-Poly1305 (השלכנו כאן את קודי ה-MAC), יחד עם "תמונה" המורכבת 95,040 בתים RGBA (330×72 ב-4 בתים לכל פיקסל) מה- מחולל פסאודו אקראי של ליבת לינוקס.

זכור שעצם העובדה שהנתונים נראים לא מובנים לא אומר שהם באמת אקראי, אבל אם הם לא נראים אקראי, ובכל זאת הם טוענים שהם מוצפנים, אתה יכול גם להניח שנשאר מבנה כלשהו מאחור, ושההצפנה היא חָשׁוּד:

מה קורה עכשיו?

לפי WithSecure, מיקרוסופט לא מתכננת לתקן את ה"פגיעות" הזו, ככל הנראה מסיבות של תאימות לאחור עם Office 2010...

גרסאות מדור קודם של Office (2010) דורשות AES 128 ECB, ומסמכי Office עדיין מוגנים בצורה זו על ידי אפליקציות Office.

... ו ...

הדו"ח של [חוקרים של WithSecure] לא נחשב לעמוד בדרישות של שירות אבטחה, והוא גם לא נחשב להפרה. לא בוצע שינוי בקוד ולכן לא הוצא CVE עבור דוח זה.

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

כך, אתה יכול לבחור צופן מודרני ואופן פעולת צופן מודרני, ללא צורך לחזור לקוד הפענוח הישן המובנה ב-Office 2010.


איך יצרנו את התמונות במאמר התחל עם sop330.png, שתוכל ליצור לעצמך על ידי חיתוך הלוגו של SOPHOS הנוקה מהתמונה העליונה, הסרת הגבול הכחול של 2 פיקסלים ושמירה בפורמט PNG.  התמונה אמורה להגיע לגודל של 330x72 פיקסלים.
 המר ל-RGBA באמצעות ImageMagick: $ convert sop330.png sop.rgba הפלט הוא 330x72 פיקסלים x 4 בתים/פיקסל = 95,040 בתים.
 === הצפנה באמצעות Lua וספריית LuaOSSL (ל-Python יש קישור OpenSSL דומה מאוד): -- טען נתונים > fdat = misc.filetostr('sop.rgba') > fdat:len() 95040 -- צור אובייקטי צופן > aes = openssl.cipher.new('AES-128-ECB') > gcm = openssl.cipher.new('AES-128-GCM') > cha = openssl.cipher.new('ChaCha20-Poly1305') -- אתחול סיסמאות ו-IVs -- AES-128-ECB צריך סיסמה של 128 סיביות, אבל אין IV -- AES-128-GCM צריך סיסמה של 128 סיביות ו- IV של 12 בייט -- ChaCha20 צריך סיסמה של 256 סיביות ו a 12-בתים IV > aes:encrypt('THEPASSWORDIS123') > gcm:encrypt('THEPASSWORDIS123','andkrokeutiv') > cha:encrypt('THEPASSWORDIS123THEPASSWORDIS123','qlxmtosh476g את נתוני קובץ ההצפנה') -- > aesout = aes:final(fdat) > gcmout = gcm:final(fdat) > chaout = cha:final(fdat) -- צופן זרם מייצר פלט בייט-by-byte, -- כך שטקסט צופן צריך להיות באורך זהה לטקסט רגיל > gcmout:len() 95040 > chaout:len() 95040 -- לא נשתמש כאן בקודי MAC מ-GCM ו-Poly1305, -- אבל כל צופן מייצר "checksum" של 128 סיביות (16 בתים) - - משמש לאימות הפענוח לאחר סיומו, -- כדי לזהות אם טקסט הצופן הקלט פגום או נפרץ -- (ה-MAC תלוי במפתח, כך שתוקף לא יכול לזייף אותו) > base.hex(gcm:getTag( 16)) a70f204605cd5bd18c9e4da36cbc9e74 > base.hex(cha:getTag(16)) a55b97d5e9f3cb9a3be2fa4f040b56ef -- צור 95040 "תמונה/אקראי" ישר מ-/devrdomet/rndomout >/.cb1a8be330fa72f8b330ef. fdat) -- שמור את כולם - שימו לב שאנו חותכים במפורש את פלט צופן הבלוק לאורך התמונה המדויק הנדרש, מכיוון ש- ECB צריך ריפוד כדי להתאים את גודל הקלט לגודל הבלוק > misc.strtofile(aesout:sub(72) ,#fdat),'aes.rgba') > misc.strtofile(gcmout,'gcm.rgba') > misc.strtofile(chaout,'cha.rgba') > misc.strtofile(rndout,'rnd.rgba') === כדי לטעון את הקבצים במציג תמונות רגיל, ייתכן שיהיה עליך להמיר אותם ללא הפסדים בחזרה לפורמט PNG: $ convert -depth 8 -size 330x72 aes.rgba aes.png $ convert -depth 8 -size 330x72 gcm.rgba gcm.png $ convert -depth XNUMX -size XNUMXxXNUMX cha.rgba cha.png $ convert -depth XNUMX -size XNUMXxXNUMX rnd.rgba rnd.png === בהתחשב בכך שתהליך ההצפנה מערבל את כל ארבעת הבייטים בכל פיקסל RGBA, המתקבל לתמונה יש שקיפות משתנה (A = alpha, קיצור של שקיפות).
 צופה התמונות שלך עשוי להחליט להציג סוג זה של תמונה עם רקע לוח דמקה, שבאופן מבלבל נראה כמו חלק מהתמונה, אבל לא.  לכן השתמשנו בכחול Sophos מהתמונה המקורית כרקע לקבצים המוצפנים כדי להקל עליהם לצפייה.  לכן הגוון הכחול הכולל אינו חלק מנתוני התמונה. 

בול זמן:

עוד מ ביטחון עירום