שאלה Heartbleed: כיצד לבדוק באופן מהימן ו portable את גרסה OpenSSL?


הסתכלתי על דרך אמינה וניידת לבדוק את גרסת OpenSSL על גנו / לינוקס ומערכות אחרות, כך שמשתמשים יכולים בקלות לגלות אם הם צריכים לשדרג את ה- SSL שלהם בגלל באג Heartbleed.

חשבתי שזה יהיה קל, אבל מהר מאוד נתקלתי בבעיה על Ubuntu 12.04 LTS עם OpenSSL 1.0.1g האחרונה:

פותח גרסה - א

ציפיתי לראות גרסה מלאה, אבל במקום זה קיבלתי את זה:

אופנסל 1.0.1 14 מרץ 2012
נבנה בתאריך: שלישי יוני 4 07:26:06 UTC 2013
פלטפורמה: [...]

להפתעתי הלא נעימה, מכתב הגרסה אינו מופיע. לא F, לא G שם, רק "1.0.1" וזהו. התאריכים המפורטים אינם מסייעים בגילוי גרסה (לא) פגיעה.

ההבדל בין 1.0.1 (a-f) לבין 1.0.1g הוא חיוני.

שאלות:

  • מהי דרך אמינה לבדוק את הגירסה, עדיף לחצות distro?
  • מדוע לא מופיע מכתב הגרסה מלכתחילה? לא הצלחתי לבדוק את זה על שום דבר אחר, אבל Ubuntu 12.04 LTS.

אחרים מדווחים על התנהגות זו גם כן. כמה דוגמאות:

חלק מההצעות (ספציפיות ספציפיות) מתגלגלות ב:

  • אובונטו ודביאן: apt-cache policy openssl ו apt-cache policy libssl1.0.0. השווה את מספרי הגירסאות לחבילות כאן: http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20: yum info openssl (תודה @ znmeb על twitter) ו yum info openssl-libs

בדיקה אם גרסה ישנה יותר של OpenSSL עדיין תושבת:

מתברר כי עדכון חבילת OpenSSL על אובונטו ודביאן לא תמיד מספיק. כמו כן, עליך לעדכן את החבילה libssl1.0.0, ולאחר מכן לבדוק אם openssl version -a מציין built on: Mon Apr 7 20:33:29 UTC 2014.


86
2018-04-07 23:51




לפחות להיות בטוח כי גרסה OpenSSL יש לך לא g בגלל תאריך זה מראה - Pato Sáinz
זה עובד על CentOS [root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013 - Jacob
@ PatoSáinz בדקתי apt-cache policy openssl והיא הגיבה: Installed: 1.0.1-4ubuntu5.12 אשר 1.0.1g שוחרר רק על ידי Ubuntu עבור 12.04 LTS. התנתקתי וחזרתי. האם יש משהו אחר שיכולתי לעשות כדי לאמת? - Martijn
אני אציין, כי זה לא יודע, למקרה שזה מועיל ... Ubuntu 12.04 LTS נשלח עם OpenSSL 1.0.1 (וניל). - HopelessN00b
אם תאריך בנייה זה מדויק, לא ניתן לקבל קוד "גרסה חדשה" יותר מ 1.0.1e, שכן 1.0.1f יצא בשנת 2014 לכל את הערות OpenSSL 1.0.1 שחרור. שורות בודדות או מקטעים בודדים עשויים להיות בגירסת אובונטו שלך לפני שחרור OpenSSL 1.0.1f הרשמי, כמובן. ואת תאריך הבנייה עשוי להיות פחות מועיל לחלוטין. - Anti-weakpasswords


תשובות:


בהתבסס על התאריך המוצג על ידי גרסה של OpenSSL, נראה שאתה הם לראות את הגירסה המלאה המוצגת שם.

פתח את SSL 1.0.1 שוחרר ב -14 במרץ 2012. 1.0.1 שוחרר ב -19 באפריל 2012.

אז, אני הולך קדימה ולהצהיר את זה openssl version -a היא הדרך הנכונה, הצולבת, להציג את הגירסה המלאה של OpenSSL המותקנת במערכת. זה נראה לעבוד עבור כל לינוקס לינוקס יש לי גישה, ו היא השיטה המוצעת בתיעוד help.ubuntu.com OpenSSL, וכן. Ubuntu LTS 12.04 נשלח עם OpenSSL v1.0.1 וניל, המהווה את הגירסה שנראית כמו גרסה מקוצרת, בגלל שלא היה לה מכתב בעקבותיה.

עם זאת, נראה כי יש גדול באג באובונטו (או איך הם חבילות OpenSSL), כי openssl version -a ממשיכה להחזיר את הגירסה המקורית 1.0.1 מ -14 במרץ 2012, ללא קשר לשאלה אם OpenSSL שודרגה לאחת מהגרסאות החדשות יותר. וכמו ברוב הדברים כשיורד גשם, הוא מוזג.

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

לדוגמה, בדביאן, הגרסה הקבועה מציגה מספר גרסה של 1.0.1e-2+deb7u5 במקום הגרסה במעלה 1.0.1g.

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


67
2018-04-08 00:05



ההתקנה שלי היא פשוטה Ubuntu 12.04 LTS ללא שום דבר שאני כבר הידור או להוריד ממקורות אחרים מאשר מאגרים Ubuntu. אם אובונטו מפיצה את OpenSSL עם מספרי גרסה מקוצרים, לאחר מכן openssl version -a היא לא שיטה ניידת (לפחות לא ניידים לאובונטו). בדקתי apt-cache policy openssl והיא הגיבה: Installed: 1.0.1-4ubuntu5.12 אשר 1.0.1g שוחרר רק על ידי Ubuntu עבור 12.04 LTS. התנתקתי וחזרתי לבדיקה. - Martijn
HopelessN00b, אין שום דבר מפוקפק על המדיניות של תיקוני backport במקום גרסאות bumping; זה דרך טובה מאוד להבטיח יציבות פלטפורמה, אשר רצוי מאוד בסביבת שרת. כמו כל החלטה, יש לה השלכות, אשר משתמשים צריכים להיות מודעים; אלא רק משום שהוא שובר את "אני רץ foo x.y.z ולכן אני / לא פגיע לניצול האחרון"שורה של חשיבה, זה לא עושה את זה דבר רע. - MadHatter
@towo מספרי הגירסה קיימים מסיבה. אם אנחנו פשוט הולך לזרוק את מספרי הגירסה במעלה מהחלון כי "enterprisey", או מה שלא יהיה, למה להטריד עם מספרי הגירסה בכלל? מאי כמו גם פשוט להתחיל שמות כל הדברים שלנו עם alliterations. אנו יכולים לקרוא לגרסאות OpenSSL הפגיעות קודש ואת אלה קבוע ערמומי ערמומי. - HopelessN00b
@ HopelessN00b אני חושב שאתה מקבל תפסו על "זה היה קבוע בגרסה X.Y.Z" מלכודת, הם לא בצע את מספרי הגירסה כי כל זה מקבל מיובאים לגירסה האחרונה הם באג ותיקוני אבטחה. אם הם bumped את מספר הגירסה, אתה גם מצפה פונקציונליות נוספת .. "יש לי OpenSSL v X.Y.Z, למה אין לי ECDHA ???? ..". זה הגיוני כאשר אתה מבין שזה רק תיקוני באגים. - NickW
@NickW @Jubal @MadHatter את הדבר עם OpenSSL, אם כי, היא כי: After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features. אז, שום דבר לא זוכה לנטוש את גרסת הזרם upstream; backporting את העדכונים הוא בעצם אותו שימוש בגירסה המעודכנת, שכן העדכון כולל רק אבטחה ותיקוני באגים בכל מקרה. מה שהיא עושה הוא לבלבל דברים ולהשאיר אותנו ללא שום דרך לבדוק portablable גרסה OpenSSL על פני הפצות לינוקס. - HopelessN00b


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

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

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

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

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

אז זה יכול להיראות כך:

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

... למרות ש הוא תוקןYou

$ dpkg -l openssl | grep openssl
ii  openssl  1.0.1-4ubuntu5.12  [truncated]

$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr  7 12:37 /usr/bin/openssl

$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748  /usr/bin/openssl

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


18
2018-04-08 20:52



ברור כי בדיקת גירסאות היא לא קלה כמו שקוף כפי שקיוויתי שזה יהיה. בדיקת הפגיעות היא הפלטפורמות השונות, אך גם קשה יותר לעשות זאת: עליך להיות בעל תו תקן אמין או מבחן שימושי עבור שירות התוכנה הפגיעני שאתה מפעיל. במקרה זה הכל התחיל עם PoC עבור אפאצ 'י ו nginx. מה אם הייתי משתמש רק ב- SMTP עם SSL באותו רגע, ורציתי לבדוק אם אני פגיע? בסופו של דבר יהיו לנו בדיקות עבור רוב השירותים, אבל זה עלול לקחת זמן מה. - Martijn
ללא שם: Martijn, זוהי נקודה הוגנת. כאשר בדיקה אינה זמינה, שיטות משניות (כמו מעקב אחר בדיקת הסיכום עבור הקבצים הבינאריים המושפעים במערכות היעד שלך) הן פחות אופטימליות, אך עשויות להיות טובות מספיק כדי לבצע את העבודה ... ולאחר מכן לעבור לאש הבאה. Youנות - Royce Williams


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

עבור Ubuntu 12.04 בלבד, תוכל לדעת אם עודכן אם כל הפרטים הבאים נכונים:

  1. dpkg -s openssl | grep Versionמראה גרסה 1.0.1-4ubuntu5.12 ואילך.
  2. dpkg -s libssl1.0.0 | grep Versionמראה גרסה 1.0.1-4ubuntu5.12 ואילך.
  3. openssl version -a מראה תאריך "מובנה" בתאריך 7 באפריל 2014 ואילך.

תודה ל- @ danny למידע נוסף.


14
2018-04-08 03:15



בסדר, במקרה זה אני חייב להוסיף את הגירסה החבילה 1.0.1-4ubuntu5.12 הוא רק עבור Ubuntu 12.04 LTS. אם אתה על אובונטו 12.10 אתה צריך לראות לפחות גרסה 1.0.1c-3ubuntu2.7ואם אתה על 13.10 אז זה צריך להיות לפחות גרסה 1.0.1e-3ubuntu1.2, על פי המקור: ubuntu.com/usn/usn-2165-1 - Martijn
זה לצערי לא מספיק. אתה צריך גם לשדרג libssl1.0.0 במפורש על אובונטו. אם אתה רואה בנוי על תאריך לפני אפריל 7 2014 גם אם openssl היא גירסה נראה נכון (1.0.1-4ubuntu5.12 עבור אובונטו 12.04) אתה כנראה עדיין פגיע. - danny
@ danny אתה פשוט הציל אותי כל כך הרבה עבודה. ניסיתי להבין מדוע תאריך הבנייה היה נכון על כמה 12.04 מערכות טועה על אחרים. אתה מציל חיים! - Schof
openssl version -a אולי לא צריך את תאריך הבנייה של 7 באפריל, כי התיקון הוא backported כדי משחרר הישן. - Patrick James McDougle


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

ldd `which ssh` | awk '/\// { print $3 }' | grep crypto | xargs strings  | grep OpenSSL

ייצור

OpenSSLDie
DSA_OpenSSL
...
MD4 part of OpenSSL 1.0.1f 6 Jan 2014 
MD5 part of OpenSSL 1.0.1f 6 Jan 2014
... 
etc

למשל על ג'נטו לפני היציאה

[ebuild     U  ] dev-libs/openssl-1.0.1f [1.0.1c] USE="bindist (sse2) tls-heartbeat%* zlib -gmp -kerberos -rfc3779 -static-libs {-test} -vanilla" 4,404 kB

את הפקודה הנ"ל תוצאות

...
OpenSSL 1.0.1c 10 May 2012

לאחר

...
OpenSSL 1.0.1f 6 Jan 2014

Ouch, עדיין לא g.


4
2018-04-08 14:45



חשבתי שאתה קרוב מאוד לספק פתרון טוב, אבל לצערי זה לא עובד עבור ספריית הצפנה על Ubuntu 12.04 LTS. הוא מציג את כל מחרוזות עם גרסה [...] part of OpenSSL 1.0.1 14 Mar 2012, אותה דרך כמו openssl version -a עושה. זהו טריק שעשוי לעבוד במקרים אחרים למרות! - Martijn
@Martijn ובכן זה מצער, אבל זה עובד על אובונטו 12.10. מוזר שזה יזהה את עצמה ב -12.04. האם יש מספר ליב? האם זה אפשרי ssh אינו משתמש ביותר עדכני? - waTeim
לא הצלחתי למצוא שום קבצים בינאריים אחרים או ספריות הצפנה. מוצע על ידי אחרים כי ההבדל הוא, על 12.04 LTS, אובונטו היא backporting את השינויים 1.0.1 ללא upping את הגירסה. בעוד 12.10 הוא לא LTS ולכן אובונטו משתמש בגרסה האחרונה במקום במקום backport. - Martijn


האם סקריפטים אלה בודקים את כל השירותים, או שהם בודקים רק HTTPS? למיטב ידיעתי, פוסטגרסל הוא פגיע, אבל זה רק שמועה עד שמתקפה בתוך הפרא.

יש מטאספלויט סקריפט זמין לשימוש.

https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a

אתה יכול להקליד את זה (נבדק עם GnuWin32 גרסה בינארית של OpenSSL 1.0.1.6, מתאריך 2014-01-14), או פשוט להשתמש בסקריפט בהערה מתחת זה. זה יותר מדויק ופשוט יותר!

s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state

לאחר חיבור מסוג B ותראה על מארח פגיע ולא תנותק:

B

HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49   ....=.o 5 (0x5))
0000 - 18 03 03 00 3d                                    ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34   .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0   n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f   .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f            .#.w....w.+..
read R BLOCK

אתה תקבל תגובה פעימת הלב שנראית דומה לזה.

על מארח מאולתר, תראה תגובה הדומה למטה ואתה תנותק:

הזן B

HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c   ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56   .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95   .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51   .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6   .~.V..7.@...C...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87   !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47                                    ....G

מקור:

יש גם כלים אלה:


2
2018-04-09 11:43





עבור אובונטו ניתן להשתמש ב:

aptitude show libssl1.0.0 | grep Version

ולהשוות עם http://www.ubuntu.com/usn/usn-2165-1/. לאחר אתחול (!!!) אתה יכול לבדוק עם http://possible.lv/tools/hb.


0
2018-04-08 11:14





כדאי לשדרג את העדכון האחרון של OpenSSL OpenSSL 1.0.1.

http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html


0
2017-10-19 01:57





מצאתי סקריפט זה ב devcentralYou

openssl s_client -connect example.com:443 -tlsextdebug 2>&1| grep 'server extension "heartbeat" (id=15)' || echo safe

החלף example.com עם השם או כתובת ה- IP של השרת שברצונך לבדוק.

יחזור "safe" אם השרת שלך בסדר או "server extension "heartbeat" (id=15)" אם לא.

זה לא מסתמך על מספר הגירסה, אבל על הרישום הרחבת השרת שגורם לבעיה, אז זה צריך להיות חסין לגרסה הספרייה shenanigans.

המכונה שאתה מפעיל openssl s_client on צריך השתמש ב- OpenSSL 1.0.1 ואילך כדי שזה יעבוד.


0
2018-04-08 09:12



שימושי, אבל לא אומר לך אם יש לך גרסה עם ההרחבה ואת התיקון. - mattdm
זוהי אכן דרך טובה לבדוק את הפגיעות ואת מה כמה סקריפטים לעשות. זה לא ממש דורש גישה SSH. - Stefan Lasiewski
BIG SCARY אזהרה חשובה - המכונה שאתה מפעיל openssl s_client על חייב להיות משתמש OpenSSL 1.0.1 או מאוחר יותר כדי שזה יעבוד. אם תפעיל פקודה זו במחשב עם 0.9.8 או 1.0.0 ה- IT תמיד ידווח "בטוח", אפילו עבור שרתים פגיעים. - voretaq7
מוזר. אני מפעיל גירסה של OpenSSL שמשפיעה לכאורה על הבאג הזה, אך מחרוזת זו אינה מופיעה בפלט ... - Michael
@StefanLasiewski עדכנו את התשובה שלי והסיר את החלק "צריך SSH" - egarcia