לדלג לתוכן

הרצת קוד מרוחק ברשת - הסיכון שהופך פרצה בודדת לשליטה מלאה על שרת

יש דרגות חומרה שונות בעולם החולשות. יש חולשה שמאפשרת לתוקף לקרוא קובץ אחד. ויש הרצת קוד מרוחק - Remote Code Execution, בקיצור RCE - שבה תוקף שיושב במקום כלשהו ברשת, לפעמים אפילו בצד השני של העולם, מצליח להריץ פקודות משלו על מחשב שהוא לא נמצא לידו בכלל. זו בדרך כלל הדרגה הכי חמורה שיש, כי ברגע שיש RCE, כמעט כל שאר החולשות בשרת נעשות רלוונטיות פחות.

למה RCE כל כך שונה מחולשות אחרות

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

מהיכן RCE ברשת מגיע בדרך כלל

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

למה זה מסוכן ברמת הרשת, לא רק ברמת השרת הבודד

חולשת RCE בשרת בודד לא נשארת שם, כי היא נותנת לתוקף דריסת רגל שממנה הוא יכול לנוע רוחבית ברשת - לסרוק את הרשת הפנימית, לחפש שרתים נוספים, ולנסות טכניקות תנועה רוחבית כמו Pass the Hash אם מדובר בסביבת Windows. זו הסיבה שחולשת RCE בודדת בשירות שולי לכאורה יכולה, בשרשרת נכונה, להוביל להשתלטות על רשת שלמה.

שכבות ההגנה שבאמת עוצרות RCE

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

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

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

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

למה זה תחום שכל מפתח ואיש תשתית צריך להכיר

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

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

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

הצטרפו לקהילה בדיסקורד

לסיכום

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