180 likes | 329 Views
בס"ד. אביב התשס"ט 236349. COVERT CHANNELS. פרויקט באבטחת מידע. מגישים: קופרמן יוסי בוכריס זוהר. COVERT CHANNEL "Communication channel that can be exploited by a process to transfer information in a manner that violates a system's security policy". מטרת הפרויקט
E N D
בס"ד אביב התשס"ט 236349 COVERT CHANNELS פרויקט באבטחת מידע מגישים: קופרמן יוסי בוכריס זוהר
COVERT CHANNEL"Communication channel that can be exploited by a process to transfer information in a manner that violates a system's security policy" • מטרת הפרויקט • יצירת ערוץ תקשורת סמוי והעברת מידע מסווג • דגשים שלנו לפרויקט • מניעת הגילוי • תעבורה תקינה של מידע (Correctness) • כמות קיבול התקשורת (Throughput)
תוכן ענינים: • סקר ספרות • השיטה שלנו • שלבי התקדמות הרעיון • הסבר כללי + דוגמת הרצה • תוספות • יתרונות • צורת מימוש • האתגר ותוצאותיו • הגלאיים – הסבר קצר • תוצאות • ניתוח תוצאות ורעיונות להמשך
סקר ספרות • Timing channels using page fault • TCP/IP Timing Channels • Model-Based Covert Timing Channels: Automated Modeling and Evasion • Correlating Packet Timing with Memory Content Detects IP Covert Timing Channels • Steganography
1 0 Correlating Packet Timing with Memory Content Detects IP Covert Timing Channels • אֶנְטְרוֹפְּיָה-"מדד לאי סדר של מערכת חומרית המורכבת מחלקיקים רבים" • שיטה זו מבוססת על: • מדידת זמני הגעת החבילות • מניחים שהתשדורת מתפלגת נורמאלית (תוחלת וסטיית תקן ) • מתקבל פעמון גאוס כלשהו • זמן שליחת החבילות יקבע לפי ההודעה הרצויה • לפי הביט הרצוי נקבע צד • ההיסטוגרמה נשמרת
השיטה שלנו - התחלה התחלנו לחשוב איך אפשר לשפר את השיטה הנפוצה, ניתוח לפי היסטוגרמה של זמני הגעת החבילות נמנה חלק מיתרונותיה וחסרונותיה: • יתרונות • שומרת על ההיסטוגרמה הכללית • לא מעכבת חבילות יותר מדי • קלה לתכנון וביצוע • חסרונות • קלה לזיהוי ע"י בדיקת רצפי זמנים • בגלל היותה נפוצה, כל גלאי פשוט מסוגל להתחקות אחריה • לא מקיימת היסטוגרמות פרטניות יותר (עבור כל טווחי זמן או גודל שונים ) • לא שומרת על יחס של גודל-זמן • לא מאפשרת שמירה על יחסי זהות בין רצפים של חבילות NEXT
השיטה שלנו - המשך • ניצור טבלת זמני חבילות כפונקציה של גודל • נמיין לפי גדלי החבילות, לכל טווח גדלים נבנה היסטורגמה • בהינתן הגודל והביט שרוצים לשלוח נקבע זמן החבילה • יתרונות • שומר על היחס בין זמן לגודל • היסטוגרמה פר גודל נשמרת • חסרונות • ההיסטוגרמה הכללית לא נשמרת • לא נשמר היחס בין רצפים של חבילות • ניסיון לשלב בין שיטות שונות לא צלח NEXT
השיטה שלנו – דה פקטו • מצאנו שיטה שמתגברת על רוב החסרונות ומקיימת את היתרונות • ניצור טבלה של גדלי החבילות כפונקציה של זמן • נחשב התפלגות וסטיית תקן של הגדלים עבור כל יחידת זמן • בהינתן הזמן הרצוי והביט הרצוי נקבע את גודל החבילה שנשלח • זמני החבילות ישלחו בדיוק כפי שהם הגיעו • גודלי החבילות יהיו כמעט זהות לתעבורה התקינה לפי FIFO במילה אחת: פרמוטציה_על_גדלי_החבילות
שלבי התהליך • שלב הלמידה - Filter • כל חבילה שתתקבל תשמר במטריצה לפי הזמן והגודל שלה • מטריצה זו נותנת לנו היסטוגרמה מדויקת לגבי הקורולציה שבין זמן לגודל • שלב הניתוח - Analyzer • חישוב תוחלת גדלי החבילות • יצירת מקרא, זמן – גודל ממוצע • שני שלבים אלו מבוצעים ע"י שני הצדדים על מנת שהם יהיו מתואמים ביניהם Peer & Trojan
שלבי התהליך • שלב השידור – Encoder & Transmitter • נאגור לנו את החבילות במחסנית (למשך שניה) • השליחה תתבצע לפי הזמן שבראש התור • החבילה שתשלח תקיים: • זמן ההגעה יהיה אותו הזמן • המוקדמת מבין החבילות שגודלה מתאים להודעה ( כך שלא יהיה עיכוב גדול מדי של החבילה) • המאזין שיקבל את החבילה יקבע מהו הביט שהתקבל באותו האופן, לפי זמן הגעת החבילה והמקרא
651 דוגמת הרצה 742 • נניח שההודעה הסמויה הינה : 01011 • אחרי שבשלב הלמידה יצרנו לנו מקרא • ואירגנו לנו קצת נתונים התחלתיים כדי לרוץ • נסתכל על הראשון במחסנית : • זמן : 90 גודל : 1375 • נבדוק מול המקרא שלו מה התוחלת של 90 • התוחלת היא : 742 • אנחנו מעונינים לשלוח את הביט "0" ולכן נרצה לשלוח חבילה שגודלה קטן מ 742 , נחפש חבילה אחרת בזמן 90 רק עם גודל קטן מ 742 • מצאנו חבילה שגודלה 455 . נחליף ביניהם ונשלח אותה • וחוזר חלילה ... עבור זמן 0 התוחלת היא 651 • אנחנו מעוניינים לשלוח את הביט "1" ואכן החבילה הבאה בתור גודלה גדול מ651 ולכן נשלח אותה ! כלומר כל חבילה שגודלה מעל 742 תחשב כ- "1" ואחרת "0" חבילה נשלחה: גודל 455 זמן 90 חבילה נשלחה: גודל 1235 זמן 0 כלומר כל חבילה שגודלה מעל 651 תחשב כ- "1" ואחרת "0"
דוגמת הרצה • נניח שההודעה הסמויה הינה : 01011 • כעת המאזין בצד השני מחזיק אף הוא את אותו המקרא • החבילה הראשונה הגיעה • זמן 90 גודל 455 • תוחלת עבור זמן 90 היא 742 • הגודל קטן מהתוחלת ולכן "0" לוגי • החבילה השניה הגיעה • זמן 0 גודל 1235 • תוחלת עבור זמן 0 היא 651 • הגודל גדול מהתוחלת ולכן "1" לוגי • וכך הלאה ... חבילה התקבלה: גודל 455 זמן 90 חבילה התקבלה: גודל 1235 זמן 0 0 1 0 1 1 SECRET MESSAGE :
השיטה שלנו - תוספות • מניעת רצף ביטים זהה • לא נרצה רצף של אחדים/אפסים, שלא נסטה מההתפלגות ושלא יתרוקן לנו המאגר • כל רצף של 5 ביטים למשל "11111" נשלח אחריו "0" בתור חבילות דמה לאיזון, וה Peer יתעלם מהן • לא לעכב חבילות יותר מדי • נשמור את זמן ההגעה של כל חבילה ושעון כללי כך שאם אנחנו חורגים ממסגרת הזמן נשלח אותה כאחת מחבילות הדמה והמאזין יתעלם ממנה • Bit stream – אמניות תשדורת הנתונים • כל ביט שנרצה לשלוח נשלח אותו 3 פעמים • יתרון: • אפשר לדעת בוודאות שמה שקיבלנו הוא אכן מה שהתכוונו לשלוח, גם אם נפגם ביט כלשהו בדרך • חסרונות: • פוגם בהיסטוגרמה • אנחנו לא שומרים על היחס בין הזמן לגודל המקוריים של התעבורה התקינה • אנחנו לא שומרים על יחס של רצפי חבילות • מנגנון Injection – הזרקת חבילות "דמה" • במידת הצורך נשלח חבילות דמה עבור ביטים שלא מצאנו חבילות מתאימות עבורם • בהסתברות נמוכה מאוד נשתמש במנגנון זה על מנת שלא נפר את האיזון הקיים
השיטה שלנו-יתרונות • אין שינוי בזמני החבילות בכלל!!! • יתרונות השיטה שלנו בולטים בעיקר בזכות זה שרוב הטכניקות לזיהוי פירצות וסוסים טרויאנים מתבססות על זמני החבילות, בין אם זה ההתפלגות הרגילה של הזמנים או התפלגות של רצפי זמנים. • ישנן גם שיטות מעטות שמסתמכות על היחס בין זמן לגודל וגם הם יתקשו לזהות תעבורת רשת לא תקינה, שכן אנחנו כמעט ומקיימים יחס זו במלואו • שמירה על האנטרופיה הנכונה של זמני החבילות • החבילות נשלחות בדיוק באותו סדר של זמנים שקיבלנו אותם, כך שכל גלאי שמנסה לזהות תוכנה זדונית שמעבירה מידע סמוי יכשל • שמירה על רצפי זמנים בין חבילות • שוב כל גלאי שינסה לזהות תעבורה לא תקינה על בסיס הזמנים של רצפי חבילות ( כל 3,5 חבילות ) יכשל • שמירה על היחס בין גודל-זמן תקין של התעבורה • אנחנו מחשבים את התוחלת של כל יחידת זמן ועל פי זה מחליטים איזה חבילה לשלוח ולכן היחס בין גודל לזמן נשמר אף הוא עד כמה שאפשר • שמירה על התפלגות גודלי החבילות ביחס לזמן • שמירה על עיקרון FIFO, עוזר לנו לשמור על ההתפלגות של גודלי החבילות, החבילות נשלחות הלאה בסדר שהם הגיעו עד כדי השהייה קלה
השיטה שלנו - מימוש • מבנה נתונים: • מטריצה זמן x גודל • מקרא (מערך), תוחלת עבור כל יחידת זמן • תור FIFO • פלטפורמת עבודה: • סביבת פיתוח Microsoft Windows XP • שפת תכנות:C++ • צורת מימוש: • שלושה תהליכים , לכל אחד מהרכיבים השונים • Windows Sockets – using UDP protocol
השיטה שלנו – רכיבי התוכנה הפרויקט בנוי מארבעה רכיבי תוכנה • Traffic Generator • תפקידו הוא לשדר חבילות לTrojan לפי דרישה מקובץ נתון • נשתמש בפרוטוקול UDP מעל port שנבחר • Trojan • לסוס הטרויאני יש שני מצבים • מצב למידה – בו הוא בוחן את התעבורה הנורמאלית ולומר את מאפיניה, במצב זה הוא שקוף ומעביר הכל כמו שמגיע אליו • מצב פעיל – משדר את ההודעה הסמויה באמצעות הנתונים שהוא אסף דרך הערוץ הסמוי • Detector • ממומש על ידי הצוות שמגן • Peer • גם כאן יש שני מצבים • מצב למידה בדומה ללמידה שמבצע ה Trojan • מצב פעיל – בו הוא מפענח את התשדורת הסמויה שהוא מקבל
תוצאות הניסוי • אתגר ראשון • טעות קוד גרמה גם לשיטה מבוססת זמן לזהות אותנו • בנוסף ה BitStream פעל, כך שזוהינו גם ע"י שיטות נוספות • 100% נכונות מידע • אתגר שני • BitStream פעיל • נפלנו די מהר על השיטות שמסתמכות על רצפים של גדלי חבילות (שיטה 1,2) מכיוון שה BS מאלץ שליחה של כל ביט 3 פעמים • 100% נכונות מהמידע שהתקבל אצל ה PEER • BitStream כבוי • לא היה זיהוי של תעבורת רשת לא חוקית(למעט גלאי אחד , וזאת אחרי 3642 חבילות!) • יותר מ 98% נכונות מידע שהתקבל אצל ה PEER אתגר שני – ניסוי שלישי פעילBitStream לא זוהינו (רק שיטה 3 פעילה) 7646 324 אתגר שני – ניסוי חמישי כבויBitStream לא זוהינו (שיטה 1 כבויה) 7646 478 אתגר שני – ניסוי רביעי כבויBitStream זוהינו ע"י שיטה 1 3642 228 אתגר שני – ניסוי ראשון פעילBitStream זוהינו ע"י שיטה 2 550 49 אתגר שני – ניסוי שני פעילBitStream זוהינו ע"י שיטה 1 2913 135
ניתוח תוצאות , שיפורים ורעיונות להמשך • מסקנות מהאתגר: • אכן שיטות שהסתמכו על זמני חבילות לא זיהו שום תוכנה זדונית או תעבורה לא תקינה ברשת • השימוש בוידוא הגעת החבילות בעזרת מנגנון ה BitStream אולי שיפר במעט את איכות ההודעה שהתקבלה אבל פגם משמעותית בזה שה Trojan שלנו נהיה קל לזיהוי • בכך שאילצנו את עצמנו לשלוח כל ביט 3 פעמים ( BS ) יצרנו לנו פערים הן ביחסים בין גודל לזמן והן בשמירה על רצפי החבילות • רעיונות לשיפור: • ניתן לבצע קוד לתיקון שגיאות פשוט יחסית שיתקן את אותם ביטים בודדים שהתקבלו לא נכון • עקב שגיאת קוד שהתגלתה אחרי האתגר השני, אחרי כל ביט של ההודעה נשלח ביט דמה נוסף, היינו צריכים להמעיט יותר במספר חבילות הדמה ששלחנו אולי כך היינו פחות חשופים • סיכום: • נחשפנו לחומר חדש ומעניין ולתחום שלא היה מוכר לנו • גילינו שיש הרבה מאוד מאמרים וכתבי עט בנושא