+− THE DAILY DIFFdev & AI news
SHIP IT

ביטוי רגולרי הפיל את Cloudflare. למשך 27 דקות.

2 ביולי 2019, 13:42 UTC: כלל חדש אחד עבור ה-Web Application Firewall של Cloudflare עולה לאוויר ביותר מ-180 ערים תוך כשתי שניות.

2 ביולי 2019, 13:42 UTC: כלל חדש אחד עבור ה-Web Application Firewall של Cloudflare עולה לאוויר ביותר מ-180 ערים תוך כשתי שניות. זהו כלל XSS במצב סימולציה, כך שהוא לא חוסם דבר, אך הוא עדיין פועל על כל בקשה, והוא מסתיים ב-.*(?:.*=.*). PCRE מבצע חזרה לאחור (backtracking), כל ליבת CPU המשרתת בקשות HTTP מגיעה ל-100%, וכל אתר מתווך על ידי Cloudflare מחזיר 502 למשך 27 דקות; התעבורה יורדת ב-82%. מתג ההריגה יושב מאחורי Cloudflare Access, שיושב מאחורי Cloudflare. לאחר מות, מתוך הדו"ח של Cloudflare עצמה: מגן ה-CPU שהוסר שבועות קודם לכן בשינוי מבנה שנועד לחסוך ב-CPU, הפרוצדורה שאפשרה לכל כלל לדלג על שלב ה-staging, המנוע ללא ערובת מורכבות, 11 הגורמים ו-7 התיקונים. פסק דין על התיקון: SHIP IT.

קראו את המהדורה הכתובה (אנגלית) ↗

מה מכסה הסרטון הזה

  • 13:31–13:42 UTC: בקשת משיכה (PR) מוזגה, CI ירוק (אין בדיקת CPU), Quicksilver דוחף את הכלל ליותר מ-180 ערים; כללי WAF מדלגים על שלבי DOG → PIG → Canary
  • 13:45–14:07: דף ראשון; CPU 100% ברחבי העולם, תעבורה −82%, 502s בכל מקום; לוח הבקרה הפנימי נמצא מאחורי Cloudflare Access, שמושבת; חלק מהאישורים פגו; עקיפה שמעולם לא תורגלה כמעט
  • 14:07–14:09: הפסקת WAF גלובלית; תעבורה ו-CPU רגילים לאחר 27 דקות; 14:52 WAF חוזר ללא הכלל
  • 2 ביולי (15:50 UTC) ו-12 ביולי: Cloudflare מפרסמת את ההודעה מהיום ואת הדו"ח המלא לאחר מות; מגן CPU מתווסף מחדש, 3,868 כללים נקראים מחדש, פריסות מדורגות, מעבר למנוע ביטויים רגולריים בזמן ליניארי

תמליל מתורגם

תורגם מהקריינות המקורית באנגלית. זמינות אודיו וכתוביות נשלטת על ידי YouTube.

0:00 ביטוי רגולרי אחד עולה לאוויר על כל שרתי Cloudflare בבת אחת, ולמשך עשרים ושבע הדקות הבאות האתרים שמאחוריו מציגים דף 502, שעבור חומת אש, זוהי ההגדרה המחמירה ביותר האפשרית. 2 ביולי 2019, 13:42 UTC. Cloudflare מפרסמת תוך שעתיים: לא התקפה, אלא פריסה שגויה, תעבורה ירדה ב-82 אחוז. עשרה ימים לאחר מכן ה-CTO ג'ון גרהם-קאמינג מפרסם את הדו"ח המלא לאחר מות, כולל הביטוי הרגולרי, ו-Hacker News נותן לו 698 נקודות,

0:26 שעבור תקלה זוהי מחיאות כפיים סוערות. איך זה קורה, מדוע זה אפשרי, ומי למעשה מקבל את האשמה. זהו The Daily Diff, דו"ח לאחר מות. 13:31. בקשת משיכה מוזגה: כלל חומת אש חדש אחד נגד סקריפטים בין אתרים, במצב סימולציה, כך שהוא לא חוסם דבר. 13:37, בדיקות עוברות; אף אחת לא מודדת CPU. 13:42, הכלל נשלח ל-180 ערים תוך שתי שניות, מכיוון שכללי WAF מדלגים על שלבי הכלב, החזיר והקנרית שמהדורות אחרות מקבלות.

0:54 13:45, הדף הראשון. 13:49, ב-Hacker News יש שרשור על דף הסטטוס, שעדיין אומר שכל המערכות פועלות. הכלל מסתיים בנקודה-כוכבית, נקודה-כוכבית, שווה, נקודה-כוכבית: כל דבר, ואז כל דבר, ואז סימן שווה. PCRE מנחש בחמדנות, נכשל, ומבצע חזרה לאחור דרך כל פיצול אחר. x שווה x לוקח 23 צעדים. עשרים איקסים אחרי השווה: 555.

1:15 עשרים איקסים, ללא סימן שווה: 4,067 צעדים כדי לא למצוא דבר. הפעל זאת על כל בקשה וכל ליבה תהיה במאה אחוז, לא עושה כלום, ביסודיות. שני שומרים היו צריכים לתפוס את זה. מגבלת ה-CPU על כללים הוסרה בטעות שבועות קודם לכן, בשינוי מבנה שנועד לגרום ל-WAF להשתמש בפחות CPU. והפרוצדורה מאפשרת לכל כלל לדלג על שלב ה-staging, מכיוון שכללים קיימים כדי לעצור התקפות חיות; זה לא היה מצב חירום, וזה בכל זאת עבר גלובלית.

1:37 14:00, ה-WAF מזוהה; אין התקפה. 14:02, מישהו מציע את ההפסקה הגלובלית: רכיב אחד, כבוי, ברחבי העולם. המתג נמצא מאחורי Cloudflare Access. Cloudflare Access נמצא מאחורי Cloudflare. חלק מהאישורים פגו מחוסר שימוש, אז הרשת המהירה ביותר ב- אינטרנט מבלה חמש דקות על עקיפה שאף אחד לא תרגל. 14:07, הריגה. 14:09, תעבורה רגילה. git blame: פריסה במהירות אחת, גלובלית; מגן CPU שבוצע עליו שינוי מבנה והוסר ב-

2:04 טעות; מנוע ביטויים רגולריים ללא גבול עליון. לא המהנדס שכתב את הכלל: הדו"ח לאחר מות מפרט אחד עשר גורמים ו- לא מזכיר אף אחד בשם. רדיוס פיצוץ: 27 דקות, 82 אחוז מהתעבורה, 100 אחוז CPU על כל ליבה, בכל עיר. לוח המחוונים וה-API יושבים מאחורי אותו קצה, כך שלקוחות אפילו לא יכולים לכבות את זה. Hacker News, תחת הדו"ח לאחר מות: הייתה להם בעיה אחת, השתמשו בביטוי רגולרי, עכשיו יש להם שתיים. בדיחה ישנה. עדיין מתקמפלת.

2:28 פסק דין, דו"ח לאחר מות: SHIP IT. מגן ה-CPU חזר, כל 3,868 הכללים נקראים ביד, כללים עוברים דרך שלב ה-staging, והמנוע עובר לאחד עם ערבויות זמן ליניארי, שפורסמו על ידי קן תומפסון ב-1968. יום שני: אין נקודה-כוכבית נקודה-כוכבית בשום דבר שרץ לכל בקשה, ושמור את מתג ההריגה מחוץ לדבר שהוא הורג. שלח לי את האירוע שעדיין אסור לך לדבר עליו, בתגובות, או ב-the daily diff dot dev.

2:53 וזה הדיף להיום. אני ניקו מ-Axrisi. Merge responsibly.

מקורות

  1. John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
  2. Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
  3. Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
  4. Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
  5. Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
  6. Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
  7. Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
  8. TechCrunch, Jul 2, 2019techcrunch.com

סרטונים קשורים