הרשת תמיד מחביאה כלים והפתעות, היום נכיר כמה טכניקות שניתן להשתמש בתמונות.
החומרים שכאן ללמידה בלבד - בתכלית האיסור להשתמש בכאלו כלים על מנת לרמות אנשים.
האם האימייל פעיל?
ספאם נועד לא רק כדי להזביל לנו את החיים אלה גם לגלות מוקדים פעילים - אחת הסיבות למה אני נמנע מלפתוח מיילים בכלל.
אז איך הרעיון הזה יכול לעבוד…
אנחנו מעתיקים תמונה ומשנים לה את השם עם האימייל הספציפי שאנחנו רוצים לעשות לו בדיקה.
ואז נוכל לבנות HTML
שיכיל את התמונה:
1 | <div> |
במקרה שלנו אנחנו משתמשים במיקום לוקאלי כי אני לא באמת הולך להריץ סאקם כזה.
- וגם אתם לא!
כעת נצטרך שרת שיודע לקבל הודעות לתמונות האלו.
שימו לב שצירפתי שם גם קוד שיודע להעתיק את התמונה המקורית בשביל ליצור אותם בצורה אוטומטית.
1 | from http.server import HTTPServer, BaseHTTPRequestHandler |
ואז כשהמשתמש פותח את האימייל שלנו אנחנו מקבלים על זה התראה:
באותה דרך אנחנו יכולים להריץ קישורים רבים ולא רק בעזרת תמונות - ולכן כל ניווט אינטרנטי מכיל שובלים של מידע על מי הגיע ואיך.
זה נתון למתקפות Phishing
או אם מגיע אליכם מייל זה, זה יכול להיקרא Spear Phishing
כי הוא מאוד ספציפי.
את הקוד תוכלו למצוא כאן:
https://github.com/Ilya122/EmailActiveChecker_Learning
להחביא מידע בתמונות
תמונות מכילות מידע על פיקסלים, תמונה סטנדרטית נבנית ע”י שלושה צבעים עבור כל פיקסל: אדום, כחול וירוק.
למשל בפיקסל הראשון נוכל לראות שתמונת החתול מכילה ערכי:
201 לאדום
182 לירוק
142 לכחול
כל אחד מהם נקרא “ערוץ” או Channel
.
נוכל לערוך רק ערוץ אחד כדי להסתיר מידע וככה לא לפגוע יותר מדי בצבע הפיקסל.
אם התמונה תכיל פיקסלים מוזרים אז זה ייראה מוזר לאנשים וייחשדו בה!
באלגוריתם נשתמש בספריית PIL
- או Pillow
,
כדי לטעון תמונה ולערוך את הערוצים שלה.
בקוד הנ”ל נשתמש באורך בלבד ולכן בתמונה בגודל 256 על 256 נוכל לשמור מידע עד 256 תווים בלבד.
נצטרך לערוך גם את ה-X
על מנת שנוכל להשתמש בכל הפיקסלים.
1 | from PIL import Image |
כמובן שאלגוריתם כזה הוא מאוד פשטני ויש אלגוריתמים להסתרת מידע יותר מוצלחים.
להחביא קוד בתמונות
אם אנחנו יכולים להסתיר מידע בתמונות ז”א נוכל להסתיר קוד בתמונות!
איך נצליח להסתיר קוד?
בשביל זה נשתמש ב-javascript
ביחד עם שרת - כדי להביא את התמונה.
המטרה היא להחביא את - eval('alert("hello world")')
בתוך התמונה.
אז כרגע אנחנו שומרים את המידע כטקסט - אם מישהו ייסתכל על הפיקסלים כאותיות אז יוכל לזהות ישר שאנחנו משתמשים בזה:
בשביל הפשטות נשתמש באלגוריתם די פשוט שנקרא base64
.
האלגוריתם הוא פשוט משום שכל מה שהוא עושה הוא ממיר את התווים לתווים בבסיס 64.
כמו שיש לנו בסיס בינארי והקסאדצימאלי.
הקוד שלנו ייראה ככה: ZXZhbCgnYWxlcnQoImhlbGxvIHdvcmxkIiknKQ==
.
נצטרך לתקן את הקוד למעלה כדי לשמור בייס 64:
1 | def HideBase64(self, message): |
ולבסוף נכתוב קוד js
על מנת לקחת את המידע מהתמונה ולהריץ אותו דרך eval
.
בכוונה שמו eval
כי אנחנו לא יכולים להסתיר את דרך ההרצה.
1 | <script lang="javascript"> |
והתוצאה:
הקוד עצמו לא עושה משהו מיוחד.
טוענים תמונה בעזרת context canvas
ומשיגים את הפיקסלים דרך getImageData
.
שימו לב שכאן השתמשתי ב-Cross Origin
Anonymous
.
בדרך כלל זה לא ייעבוד לכם בכזו צורה פשוטה.
את כלל הקוד תוכלו למצוא כאן:
https://github.com/Ilya122/HideInJpeg_Learning
ללמוד ולדעת
הקונספטים פה מציגים איך ניתן להשתמש בכלים ידודותיים ככלים זדוניים להסתיר.
זו רק שכבת הבצל הראשונה - תחשבו על כמה שכבות על גבי שכבות נוכל ליצור ולהסתיר.
אם בדוגמא השלישית השתמשנו ב - תמונה ובסיס 64 שאלו רק 2 שכבות, היינו יכולים להשתמש במגוון כלים נוספים.
כמו Http או tcp Packets
, הצפנה אמיתית ולא רק encoding
וכדו’…
כמו כן, רוב הכלים היום לא יודעים לפרוץ באמת לנקודת קצה סתם ככה - דרושים יכולות גבוהות מאוד לפרוץ מרחוק מחשבים.
אך - הפריצות הכי נפוצות הן בעזרת עבודת עיניים על אנשים.
גורמים לאנשים להוריד קבצים שלא נראים חשודים אך בתוכם מוסתרים כלים זדוניים.
לכן - אל תפתחו, אל תריצו ואל תורידו שום דבר שמישהו שאתם לא מכירים הביא לכם ותחשדו בכל דבר שאתם לא מכירים.
תודה על הקריאה!