וירוס ללינוקס?

יצא לי לקרוא לפני מס' ימים את כתבתו של ניב ליליאן על סוס טרויאני שנמצא בתוכנת שרת IRC (בשם UnrealIRCd) ותהייתו האמנם ללינוקס אין וירוסים.

נתחיל בעובדה פשוטה אחת: האם אפשר לכתוב וירוס שירוץ על לינוקס? התשובה היא חד משמעית: כן. תמיד אפשר לכתוב סקריפט שיעשה נזקים גדולים, שידע לטעון דברים אחרים (אם יש תקשורת החוצה) ואם הסקריפט ינצל פרצות קיימות ידועות שלא נסגרו, יהיה אפשר עם הסקריפט לתת למשתמש רגיל הרשאות root ומכאן והלאה הנזק שניתן לגרום יהיה ממשי ומבעית. אפשר יהיה לגרום לוירוס לרוץ כל פעם שמשתמש מתחבר לשרת ב-ssh לדוגמא ע"י הוספת שורה אחת ב-bashrc / bash_profile (תלוי בנסיבות), אפשר יהיה לגרום לסקריפט להשתמש להשתמש במפתחות שנמצאות בתיקית ssh. כדי לחדור למחשבים אחרים ו"להדביק" אותם.

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

  • תוכניות שנכתבות ב-bash/tcsh או ב-perl או python וכו' כשהן מורדות דרך דפדפן אינן מסוגלות לרוץ לאחר ההורדה. בשביל שקובץ יוכל לרוץ, חייב להיות לאותו קובץ ביט דלוק בהרשאות שלו ואות ביט נקרא Executable (או בקיצור: x). בלי הביט הזה, אם ננסה לפתוח אותו דרך מנהלי הקבצים של KDE או GNOME, יפתח עורך טקסטים עם תוכן הקובץ. הוא פשוט לא ירוץ, ובשביל להריץ אותו יש צורך בהרצאה ידנית: או להפעיל את הביט של executable לגבי הקובץ ואז להפעיל, או להשתמש ב-sh (או בפקודה שצריך, בהתאם לשפה שבה נכתבה התוכנה, כמו perl או python או php וכו'), כלומר אין אפשרות שאדם שלא מכיר לינוקס יוריד סקריפט, ילחץ עליו והסקריפט ירוץ אחרי הקלקה.
  • קיימים קבצי "חבילות" בינאריות כמו RPM או DEB להפצות לינוקס שונות, אולם גם כאן ישנם אמצעי מניעה ואזהרה. רוב המשתמשים מתקינים תוכנות אך ורק דרך מאגרים רשמיים (repositories) וכל מאגר חתום בחתימה מיוחדת שאותה יש לייבא לפני שימוש במאגר חיצוני. אמצעי מניעה נוסף הוא הצורך בסיסמת root על מנת להתקין קבצים בינאריים אלו. אין סיסמא, אין התקנה.
  • המאגרים שהזכרתי בסעיף הקודם מנוהלים ע"י אנשים אחראים ובמקרים רבים אותם מנהלים הם הם אלו שבונים את החבילות הבינאריות ולא כל טלאי קוד עלום מוכנס כך סתם לתוך החבילות הבינאריות, כך שהסיכוי לכך שחבילה בינארית תצא עם קוד זדוני הוא די קטן.
  • מודעות לאבטחה: בניגוד ליצרניות מערכות הפעלה אחרות שלוקחות את עניין אבטחה המידע כאקט שיווקי ורק לאחר מכן יישומי, יצרני ההפצות לוקחים את עניין האבטחה מאוד ברצינות ומיישמים זאת בהפצות השונות של לינוקס. התקנת CentOS או Fedora לדוגמא ישאלו לאחר סיום ההתקנה איזה שרותים הינך רוצה להריץ ועל איזה יציאת רשת הינך "סומך", כדי שהמערכת תכתוב אוטומטית חוקים לחסום את השאר. בניגוד למיקרוסופט שמציגים חלון השואל אם לפתוח פורט לאפליקציה (והמשתמשים, גם כשאין להם מושג מה החלון אומר, לוחצים "yes"), בלינוקס אתה צריך לפתוח פורט ידנית בחומת האש לאפליקציה אם היא צריכה תקשורת מבחוץ פנימה, ובמקרים מסויימים גם צריך לשנות את חומת האש לשם התקשרות מבפנים החוצה.

שום הפצת לינוקס אינה חסינה מוירוסים וטריקים שונים, אולם המודעות לעניין אבטחה ועדכוני אבטחה היא הרבה יותר גבוהה ממה שקורה בעולם של מיקרוסופט. הדוגמא הכי פשוטה להתנהגות גרועה היא דווקא מהצד של מיקרוסופט: אנשים רבים מפחדים להתקין עדכוני אבטחה כשהמערכת שלהם אינה חוקית והם חוששים שמיקרוסופט יכניסו להם "בסיבוב" איזה "עדכון אבטחה" שישבית להם את מערכת ההפעלה, ולכן הם מתעלמים מכל אזהרת אבטחה. התוצאה? מאות אלפי מחשבים בעולם הם לא יותר ממחשבים "זומבי" המשמשים כ"עבדים" לרשתות בוטנט שונות הזורעות הרס בכל מיני כיוונים (התקפות DDOS, הפצת דואר זבל, וירוסים ושאר מרעין בישין). ב-לינוקס אף אחד לא יחסום אותך עם טריקים כאלו וכל מה שלוקח להתקין עדכוני אבטחה הם 2-3 קליקים. כל זה מוביל לכך שבלינוקס מאוד נדיר למצוא וירוס כלשהו וחברות המייצרות אנטי וירוסים מייצרות תוכנה גם עבור לינוקס, אך השימוש שלה הוא בד"כ כדי להתממשק לשרת הדואר הארגוני ולסרוק מיילים יוצאים ונכנסים.

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