אני יודע, זו שאלה שעלולה להשמע קצת מוזרה. בכל זאת, אני אשאל. יש לכם בבית מחשב. אתם שילמתם על החומרה, אתם משלמים על החשמל שהוא צורך, על החום שהוא מפיק כשהוא עובד (לא בעיה בחורף, אבל בקיץ זה בפירוש דורש עוד מזגן), על המקום שהוא תופס וכו’. חלקנו אפילו שילמו על התוכנות שהוא מפעיל. ההגיון מחייב שאנחנו גם נשלוט על מה המחשב הזה עושה.
אבל האם זה המצב? מי שמחליט מה יבצע המחשב זו התוכנה שרצה עליו. כאשר המחשב נדלק לראשונה, הוא מריץ תוכנה שכתב ייצרן המחשב. אחר כך הוא עובר להריץ תוכנה שנכתבה ע”י מי שייצר את מערכת ההפעלה, ואחר כך איזו תוכנה שלא תהייה על המחשב. למעט ייחידי סגולה, ניתן להניח, במידה רבה של ביטחון, שאף אחד מכם לא ממש כתב את כל התוכנות האילו.
אבל יש פה פרדוקס מסויים. רובינו מבינים מה התוכנות אמורות לבצע. חלקינו אפילו שילמנו כסף למי שכתב את התוכנה כנגד הטענה שהתוכנה מבצעת פעולה מסויימת. איך אנחנו אמורים, אבל, לדעת שזה באמת מה שהתוכנה עושה? איך אנחנו יודעים שהתוכנה לא עושה עוד דברים, מעבר למה שאנחנו מעוניינים שתעשה, ללא ידיעתינו?
בעוד שלפעמים מדובר בכוונת זדון של כותב התוכנה, לא תמיד זה המצב. לפעמים כותב התוכנה אפילו לא מודע לזה שיש לתוכנה שלו שימושים אחרים.
הבעיה הזו רחוקה מלהיות בעיה תיאורתית. אם היום בעיות הרוגלות (spywares) הינן בעיות נפוצות וידועות, הרי שצריך להבין שכמות לא קטנה מהרוגלות לא פרצו למחשב שלנו, אלא נכנסו בדלת הקידמית, גם אם בתוך סוס מעץ. תוכנות שאנחנו הורדנו והתקנו, מתוך ציפיה שיעשו דבר א’, בעצם עושות (גם) דבר ב’, שאינו מה שרצינו.
ההגנה היחידה כנגד התופעה הזו היא אם כמה שיותר אנשים יוכלו לנתח את התוכנה ולתת חוות דעת לגבי מה התוכנה עושה באמת. לכל מי שקרא עד עכשיו צריך להיות ברור שלא ניתן לסמוך על כותב התוכנה שייעשה כן, הן מכיוון שלפעמים הוא כתב את השימוש הזדוני בעצמו, והן בגלל שלפעמים הוא פשוט לא מודע לו. הדרך היחידה היא אם כמה שיותר אנשים, ללא אפליה, יוכלו לנתח את התוכנה אם ירצו.
הדרך לשם עוברת דרך שני מונחים. Reverse Engineering ו-Decompiling. הסבר:
הינדוס לאחור, או Reverse Engineering, הינו היפוך של תהליך הבניה של מערכת. בד”כ מערכת מתוארת על פי מה שרוצה המתכנן שתעשה. אחר כך מגיע מהנדס שמחליט איך תעשה המערכת את מה שהיא אמורה לעשות, ולסיום המערכת עצמה נבנית.
התהליך פה הינו התהליך ההפוך. ראשית מתחילים ממערכת בנויה. המערכת נבחנת לחלקיה, והתיאור של איך היא עושה נמצא. התיאור הזה מורכב חזרה לתיאור של מה המערכת עושה.
המונח השני הינו “Decompiling”. לקמפל קוד הינו תהליך של הפיכת קוד שכתוב בשפה עילית לקוד שהמכונה מבינה ויודעת לבצע. בתהליך הזה הרבה מידע, שאינו נחוץ לצורך ביצוע הקוד, הולך לאיבוד. התהליך ההפוך הינו תהליך של לקיחת קוד שפת המכונה, ונסיון להסיק ממנו על איך נראה קוד המקור שייצר את התוכנית.
חשוב להבין
Decompiling איננו Reverse Engineering. תהליך הינדוס לאחור יכול להכיל תהליך Decompiling בתור אחד השלבים, אולם זה לעולם לא יהיה השלב היחידי. כמו כן, רבים המקרים שבהם ניתן לוותר על Decompiling לחלוטין. כך או כך, שני התהליכים הינם יקרים ודורשים ידע רב.
אז איך קשור כל זה אל נושא השליטה על המחשב? התשובה היא, שהינדוס לאחור הינה הדרך היחידה שבה מישהו שאיננו כותב התוכנה יכול לקבל תמונה של מה באמת עושה תוכנה מסויימת. פשוט לא קיים אף תהליך אחר. אפילו אם נותנים לכם את קוד המקור של התוכנה, חסכתם את שלב ה-Decompiling, אבל אתם עדיין צריכים לדלות משורות הקוד שמספרות “איך” את ה”מה”. במובן זה, אין כל הבדל עקרוני בין תוכנה קניינית לבין תוכנה חופשית.
אז אם מדובר בתהליך כל כך יקר, וכל כך מקצועי, ובפרט, אחד כזה שלא כל אחד יכול לעשות, מדוע אני מכלה כל כך הרבה מילים עליו? התשובה היא שבעוד שאכן רק מעטים יכולים לעשות את זה, בפיזור מספיק רחב הם נותנים ביטחון לכולם.
אני אתן דוגמאות. בעבר הרחוק היו מספר גרסאות של DOS. אחת מהן היתה של חברה בשם Digital Research, וכונתה “DR-DOS”. מסתבר שבגרסאות הבטא של חלונות 3.11, מיקרוסופט ביצעה זיהוי של איזו גרסת Dos רצה על המחשב, ואם היה מדובר בגרסה של DR-Dos, חלונות לא היה עולה. התומכים הטכניים הונחו להאשים את DR-Dos בתקלה. אקט של השמצה עסקית פשוטה. הדרך היחידה לגלות את זה, אבל, היא באמצעות הינדוס לאחור את מקור השגיאה. אם הינדוס לאחור לא היה קיים (או היה אסור), אקטים בריוניים שכאילו היו עוברים מבלי שאיש היה מבחין בהם.
עוד דוגמא. מספר תוכנות שחלקינו מתקינים במחשב מתקינות גם רוגלות. זה כולל תוכנות לכאורה ידועות, כמו קאזה, נגנים חכמים, תוספים לדפדפנים וכו’. רק מעטים יודעים איך לברר אם תוכנה כלשהי מתקינה רוגלה לא ידועה או לא, אבל כולנו נהנים מהידע הזה באמצעות תוכנות ניקוי רוגלות.
במילים אחרות, הינדוס לאחור הינו אינטרס ברור של כלל החברה, בנסיון לקבל חזרה קצת מהשליטה על המחשב שאנחנו קנינו בכספינו, ואנחנו מממנים את הפעלתו. הבעיה היא שאותם אנשים שלהם האינטרס להחביא את התנהגותם, הם אילו שנמצאים בעמדת שליטה יחסית. כמעט כל הסכם משתמש שתקראו כולל סעיף שאוסר על הינדוס לאחור (אני אזכיר שגם לשבת מול התוכנה ולהסתכל עליה אגב תהייה איך היא עובדת הינו הינדוס לאחור). בטיוטת חוק זכויות היוצרים החדש יש סעיף שאינו מתיר הינדוס לאחור. נושא ההינדוס לאחור נמצא במתקפה מתמדת מצד אילו שמעדיפים שדברים מסובכים לא ייעשו.
יש שיטענו שצריך לאפשר הינדוס לאחור, אבל ללא שימוש ב-Decompilation. אני לא מסכים לטענה זו. אני לחלוטין מסכים ש-Decompilation חושף את המבנה הפנימי של התוכנה, ועל כן אסור להעתיק את התוכנה לתוכנה אחרת. המידע שנמצא מתוך ביצוע Decompilation, אבל, הינו מידע ששייך למי שביצע את הניתוח, וזכותו לעשות בו כרצונו.
כל ראיה אחרת פירושה שלחברות אין יותר מה לחשוש מאנשים שמפרסמים בעיות אבטחה במוצרים שלהם (דבר שהנסיון מלמד שמוביל לכך שבעיות אבטחה לא מתוקנות, ונשארות נחלתם הבלעדית של ה”אנשים הרעים”). זה אומר שחברות יכולות לנער תחרות ע”י הכנסת רכיבים לא מתועדים לתוכנה, שמונעים מהתחרות להתממשק איתה. זה אומר שלא ניתן לנתח וירוסים ורוגלות. זה אומר שלא ניתן לדעת מתי תוכנה אוספת, ושולחת, מידע אישי עלינו. במילים אחרות, אם אסור לאף אחד לבצע Decompilation, הרי שהמחשב אינו יותר המחשב שלנו. המחשב הופך להיות מכשיר שעובד בשירות מי שמכר לנו את התוכנה שאנחנו משתמשים בה, ואנחנו נמצאים בידיו חסרי אונים להתגונן.
שחר
נ.ב.
הנה המאמר ב-slashdot שהביא אותי לכתוב את הפוסט הזה דווקא היום.
ש.
אם אדם קנה מוצר בידיעה שהוא אמור לבצע X, והוא מבצע Y הוא יכול לבטל את העסקה.
לבוא ולאמר שבגלל שאתה לא יודע איך המוצר עובד הופך אותו ללא שלך, זה טפשי.
האם האדם הממוצע יודע איך הטלוויזיה שלו עובדת? ואולי הממיר שולח לחברת הכבלים/לווין את הרגלי הצפיה שלו?
אתה יכול לבוא ולאמר שהדבר הוא בעייתי, אבל גם לזה יש פתרונות. לדוגמא, אתה יכול לנטר את תעבורת הרשת שלך ע"י כלים מתאימים ולבדוק אם התוכנה שקנית לא שולחת מידע שהיא לא צריכה לשלוח. כך זה לא דורש ממך לבצע פעולה היכולה (ביודעין, או שלא) לפגוע בזכויות היוצרים של מפתח התוכנה.
לגבי ביטול העסקה – איך הוא אמור לדעת שזה עושה Y?
תראה, כפי שאמר כבר עומרי, ניטור תעבורת רשת אינו מכסה את כל מה שאתה רוצה לעשות. מה שיותר גרוע, ניטור תעבורת רשת הינו רק עוד דרך לעשות Reverse Engineering.
בוא נשאל את זה כך. האם אתה רוצה לדעת שהממיר של הכבלים שלך מרגל אחריך? אם כן, איך תדע את זה? הדרך היחידה שלך, בתור מישהו שלא יודע איך לחבר סקופ לקו הקבלים ולוגיק למעגלים בפנים, זה לקוות שאם הממיר עושה את זה, מישהו אחר כבר יגלה ויפרסם.
אבל כדי שזה יקרה, צריכה להיות סביבה אוהדת לפירסום. בתוכנה זה לא המצב. אם אתה מפרסם נתונים שקיבלת דרך הינדוס לאחור, יש סיכוי טוב שיתבעו אותך. אם אתה מעוניין רק לפרוץ למערכות, מה איכפת לך לא לפרסם. זה רק השימושים החיוביים של הינדוס לאחור שנפגעים מהמדיניות הזו.
שחר
אם מישהו רוצה לדעת איך הטלויזיה שלו עובדת, זכותו המלאה לפרק אותה. לא?
ניטור תעבורת רשת מכסה רק חלק קטנטן מהעניין.
מה אם זו בכלל לא תוכנת רשת?
מה אם זו תוכנת רשת, אבל עושה עוד דברים חוץ מזה, כמו לחשב מספרים ראשוניים וכל פעם שהיא מוצאת מספר חדש לשלוח אותו כחלק מההודעות הרגילות שלה?
אתה תהיה שם באותו רגע כדי לשים לב שמשהו קצת שונה?
במקרה כזה, תוכנית כזו תשתמש במעבד בצורה לא סבירה, כלומר גם כאשר אין לה לכאורה מה לעשות, וככה יהיה אפשר לגלות שהיא מתנהגת מוזר.
זה עדיין לא אינדיקציה וודאית כמובן שהיא באמת עושה דברים לא לגיטימיים.
הדרך היחידה לדעת מה היא עושה היא להריץ אותו בדיבאגר, פקודה פקודה.
וזה, בלי קוד מקור, משימה מאוד קשה. (אגב, גם לופמיק (ההיפך מקימפול :), לא כל כך עוזר כי שמות המשתנים והפונקציות אובדות אם התוכנית לא קומפלה עם מידע דיבאג (ותוכניות מסחריות בד"כ לא מכילות את המידע הזה).