דבר ראשון – אני חייב לכם פוסט על נפלאות שורת הפקודה. תזכירו לי.
ידיעה בסלאשדוט מפנה לידיעה ב-The Inquirer, שבתורה מפנה לידיעה ב-Computer World, ולהלן התמצית.
הדור הבא של הרוגלות יהיה כזה שתוכנות נגד רוגלות רגילות לא יוכלו להפתר ממנו. הוא יהיה כזה שהדרך הבטוחה היחידה להפתר ממנו תהיה על ידי התקנה מחדש של המחשב. הוא יהיה כזה שכאשר הרוגלות יתחילו לריב בינהם על שליטה, במקום שדף הבית שלכם יברח לכל מקום אפשרי, המחשב יוציא מסכים כחולים.
וכל הסימנים מראים שהוא כבר כאן.
מאיפה אני יודע את זה? תשובה: כל מאבקי הרוגלות למניהם בסך הכל הולכים בעקבות כלי ה-rootkit.
עכשיו ההסבר.
rootkit הינו כלי שמטרתו לאפשר למי שפרץ לכם למחשב לחזור אל המחשב ביתר קלות. הפורצים לא רוצים להסתבך עם שאלות כמו “מה יקרה אם המחשב ישנה את כתובתו”, או “מה יקרה אם יסגרו את החור”. במקום זה, הם מנצלים את העובדה שהם כבר על המערכת כדי לשנות אותה כך שהם יוכלו לעשות את מה שהם רוצים לעשות, בכל מקרה.
הדור הראשון של rootkits היה תמים ביחס. על יוניקס היה פשוט נהוג להתקין כלים חלופיים לפקודות כמו “ls”, “top”, “ps” וכו. על חלונות זה התבטא בלהתקין ברקע תוכנות שליטה מרחוק, כמו “Backoriffice“. הבעיה עם הכלים האילו היתה שהיה יחסית קל לגלות ולהוריד אותם.
ועל כן הגיע הדור השני של כלי rootkit. אילו כלים שמנסים בדרכים יותר פתלתלות לעשות את אותו הדבר. על יוניקס זה כלל דברים כמו לשנות את preload או להתלבש על PAM. על חלונות, זה כלל כלים שעשו את אותו הדבר, אבל הזריקו את עצמם לכל כך הרבה מקומות במערכת, עד שהורדה שלהם היתה עניין לא נעים בעליל. אפילו על דברים אילו, אבל, ניתן היה להתגבר.
ואז הגיע הדור השלישי. אילו מכונים “kernel mode rootkit”. הרעיון מאחוריהם (בניגוד לביצוע) הוא פשוט. במקום לנסות לשנות את הקריאות למערכת של התוכנות שעליהן רוצים להשפיע, משנים את מה שהמערכת עושה כשהיא מקבלת את הקריאות הרגילות. במילים אחרות – מזריקים את הקוד העויין לליבה של המערכת, וברמה הזו משנים את מה שהמערכת עושה.
מכיוון שהקוד העוין נמצא בתוך הליבה, הוא יכול לדאוג לכך שלא ניתן יהיה אפילו לראות את קיומו. מבקשים רשימה של קבצים על המחשב? אין בעיה. הרשימה לא מכילה את המחיצה שבה נמצאת הרוגלה. מבקשים רשימה של תהליכים שרצים על המחשב? אין בעיה. הרשימה לא כוללת את התהליכים של הרוגלה.
לפני כארבע שנים, כאשר דיברתי עם אנשים על האפשרות הזו, רובם פתרו אותי ב”אף אחד לא יטרח”. למרבה השמחה, עלה לאויר אתר שמזים את הטענה הזו בדוגמאות חיות. מאז נפוץ מאוד לראות מערכות פרוצות עם לינוקס שמכילות קוד עויין בתוך רמת הקרנל.
שימו לב שאמרתי לינוקס. זה לא שאין kernel rootkits לחלונות. למעשה, אתם יכולים להוריד כמה וכמה מהאתר שציינתי קודם. בכל זאת, כמעט ולא התגלו כאילו בעולם האמיתי. הסיבה היא, ככל הנראה, שמי שהמחשב שלו מכיל kernel mode rootkit על חלונות בד”כ פשוט לא יודע מזה.
העניין עלה כאשר היה באד באחד מהכלים הנ”ל שהסתובב בעולם. בניגוד לבאג בתוכנה רגילה, באג בליבה גורם לקריסת כל המחשב, עם הודעה מטעם הליבה שמשהו רע קרה. מכיוון שההודעה הנ”ל, בחלונות, כתובה בלבן על רקע כחול, היא זכתה לשם “Blue Screen of Death”, או BSOD (מסך כחול בעברית). במילים אחרות, kernel rootkits על חלונות נגלים רק כאשר יש בהם באג.
לפני שאני ממשיך, אני ממליץ לכל משתמשי הלינוקס מבין קוראי להוריד ולהריץ תוכנה בשם chkrootkit, אשר עושה עבודה לא רעה בלגלות האם יש kernel mode rootkit על המכונה (וגם rootkits רגילים יותר).
חזרה לנושא הבלוג היום. אני עומד לבצע ניחוש מוסכל לגבי מקור הידיעה. חברת מיקרוסופט התחילה להפיץ לאחרונה תוכנה לניקוי רוגלות. כאשר התחילו לבדוק את התוכנה על מערכות נגועות, הם גילו שלפעמים הם יכולים להריץ את התוכנה, מתחילתה ועד סופה, במצב הניקוי הקפדני ביותר. אחרי שהתוכנה תסיים לנקות את המחשב ותדווח שהמחשב נקי, הם הריצו אותה שוב. הפלא ופלא, יש רוגלה על המחשב שוב, עוד לפני שהמחשב התחבר לאינטרנט בשנית.
ואיך אני יודע שזה מה שקרה? פשוט. זה קרה לי, ביותר מהזדמנות אחת (לא על המחשב שלי). ההסבר היחידי לזה הוא שהרוגלה מסתתרת באיזשהו מקום, כך שכלי הניקוי לא מצליח למצוא אותה.
זה, כשלעצמו, דבר פשוט יחסית לפתרון. הבעיה זוהתה, לדעתי, כשמהנדסי מיקרוסופט חיפשו את מקור התוכנה המסתתרת, וגילו שהם לא מוצאים אותה. במילים אחרות, כלי הרוגלה עברו את אותו המסלול שכלי ה-rootkit עברו, והגיעו לאותה נקודה מיוחלת. מרגע שנכנסת, אי אפשר להוריד אותך.
מסקנות
להלחם בכלים שמסוגלים להפעיל את הליבה של מערכת ההפעלה שלך נגדך זוהי מלחמה חסרת סיכוי. במוקדם או במאוחר, מישהו יצליח להכנס, ואז התוכנות שאתה מפעיל על המחשב כדי להגן על עצמך פועלות בעצמן בסביבה עויינת.
נסיון העבר מראה שלמנוע הכנסת תוכנות לרמת הקרנל זוהי משימה לא פשוטה. פחות פשוטה על חלונות מאשר על לינוקס. למשל, עלי לינוקס אני יכול, במגבלות מסויימות, לדרוש שתהיה פעולה שמרגע שהיא קוראת, לא ניתן יהיה יותר לטעון קוד חדש לקרנל. בחלונות כמות הדרכים להכנס לרמת הליבה היא פשוט יותר מידי גדולה.
בכל מקרה, הפתרון נגד אויב מסוג זה הוא אחר. אל תיתנו להם להגיע למכונה שלכם מלכתחילה. למרבה הצער, על חלונות זה לא דבר פשוט.
שחר