1. ספרייה
  2. יציאות
  3. מדריך יציאות נפוצות

עודכן לפני חודש

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

מה פועל על פורט 27017

MongoDB היא מסד נתונים מבוסס-מסמכים. במקום שורות וטבלאות, היא שומרת נתונים כמסמכים גמישים הדומים ל-JSON, עם סכמות שיכולות להתפתח ללא מיגרציות. כאשר MongoDB מופעלת, היא מאזינה על פורט 27017 וממתינה לחיבורים. אפליקציות מתקשרות איתה באמצעות פרוטוקול תקשורת בינארי המותאם למהירות. אפליקציית Node.js שלך, סקריפט Python שלך, מעטפת mongo — כולם מדברים באותה שפה עם פורט זה.

פורט אחד מטפל בהכל: קריאת מסמכים, כתיבת מסמכים, יצירת אינדקסים, הרצת אגרגציות, פקודות ניהוליות.

מתקפת הכופר הגדולה של MongoDB

בין סוף 2016 לתחילת 2017, מנהלי מסדי נתונים החלו להגיע לעבודה ולגלות שמופעי MongoDB שלהם ריקים מנתונים. במקום הנתונים שלהם ישב אוסף בודד, בדרך כלל בשם כמו WARNING או PLEASE_READ. בפנים: פתק כופר הדורש ביטקוין.

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

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

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

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

מדוע אבטחת ברירת המחדל חשובה

צוות MongoDB תיקן את ברירות המחדל בגרסה 3.62. כעת מסד הנתונים מאזין רק על localhost‏ (127.0.0.1) כברירת מחדל, וחיבורים מהרשת נחסמים אלא אם מוגדרים במפורש על ידי מנהל מערכת.

אך הלקח חורג הרבה מעבר ל-MongoDB.

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

כל פורט של מסד נתונים הוא דלת. השאלה תמיד היא: מי אמור להיות מסוגל לפתוח אותה?

אבטחת פורט 27017

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

כאשר גישה מרחוק הכרחית, השתמש בחומות אש. הוסף לרשימת ההיתרים כתובות IP ספציפיות. לעולם אל תאפשר ל-0.0.0.0/0 (כל האינטרנט) להגיע לפורט מסד הנתונים שלך. שכב את ההגנות: חומת אש של מערכת ההפעלה, קבוצות אבטחה בענן, רשימות בקרת גישה לרשת. הנח שכל שכבה בנפרד עלולה להיכשל.

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

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

פורטים נוספים בפריסות מבוזרות

תכונות הזמינות הגבוהה של MongoDB מציגות פורטים נוספים שיש לאבטח:

  • 27018: שרתי shard באשכול מחולק
  • 27019: שרתי תצורה המאחסנים את המטא-נתונים של האשכול
  • חברי קבוצת שכפול: מתקשרים דרך הפורטים המוגדרים שלהם (בדרך כלל 27017) כדי לסנכרן נתונים ולבחור שרת ראשי

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

MongoDB המתארחת בענן

שירותים מנוהלים כמו MongoDB Atlas,‏ AWS DocumentDB ו-Azure Cosmos DB מטפלים בחלק גדול מכך באופן אוטומטי. הם פועלים בתוך רשתות פרטיות ללא חשיפה ישירה לאינטרנט. החיבור נעשה דרך VPC peering או רשימת היתרי IP.

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

הלקח הכולל

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

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

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

כל פורט שאתה פותח הוא החלטה. קבל אותה במודע.

שאלות נפוצות על פורט 27017 של MongoDB

מדוע MongoDB אפשרה כברירת מחדל חיבורים מכל מקום?

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

האם אני יכול לשנות את פורט ברירת המחדל של MongoDB?

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

כיצד אוכל לבדוק אם MongoDB שלי חשוף לאינטרנט?

מחוץ לרשת שלך, נסה להתחבר: mongo --host YOUR_PUBLIC_IP --port 27017. אם תקבל חיבור — גם אם האימות נכשל — הפורט שלך נגיש. עוד יותר טוב: השתמש בשירות כמו Shodan כדי לראות מה האינטרנט רואה על התשתית שלך.

האם MongoDB בטוח לשימוש כיום?

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

מקורות

האם דף זה היה מועיל?

😔
🤨
😃