אחד מהאתגרים הגדולים שעומדים בפני ארגונים הוא לזהות דליפות מידע. מה זאת אומרת? בדרך כלל חברים בארגונים (עובדים) שנתקלים במידע פנימי של הארגון שאם הוא יתפרסם הוא יביך את הארגון ומועניינים לחשוף אותו החוצה. למשל טיוח של שחיתות, עדות לתשלום שוחד, הטרדה מינית של ההנהלה כלפי העובדים וכו'. מה שהעובדים האמיצים האלו עושים הוא בדרך כלל להעתיק את הטקסט שהוא המידע הפנימי ולשלוח לעיתונאי באופן אנונימי. העיתונאי עושה את מלאכתו ומפרסם את הטקסט בעיתון – בפרינט ובאתר. הארגון חוטף על הראש, נפתחת חקירה ומנהלים מפוטרים והעובד האמיץ? נותר במחשכים. יש עובדים שמשתמשים באתרים כמו 'ויקיליקס' כדי להדליף כמויות גדולות של מידע.
ארגונים וחברות, במיוחד חברות אפלוליות שהאתיקה היא לא נר לרגלן (אהם אהם פייסבוק, אני מסתכל עליכם) לא אוהבים את זה. וזו הסיבה שהם מנסים למצוא את העובד ש"סרח". אבל איך מוצאים אותו? דרך הטקסט שהוא העתיק! ישנן דרכים רבות לשייך טקסט לאדם שהעתיק אותו ויש חברות שממש מתמחות בכך. במאמר הזה אני אציג דרך שלפי דעתי היא חכמה במיוחד. המאמר כולו מתבסס על הטכניקה של חוקר האבטחה Tom.
בשנים האחרונות, יוניקוד נכנס חזק לכל מערכת וובית וכמעט כל אתר שהוא תומך ביוניקוד. מאוד טבעי עבורנו כישראלים דוברי עברית או ערבית להכנס לכל אתר, גם אם הוא לא תומך 'רשמית' בשפתנו ולהקליד שם בשפה שלנו כאוות נפשנו. כך למשל כתבתי ציוצים בעברית שנים לפני התמיכה 'הרשמית' של טוויטר בשפת האם שלי. למה? כיוון שיוניקוד הפכה להיות הסטנדרט. ביוניקוד יש גם תוים יותר מעניינים מעברית, ערבית או קירילית. למשל ? – אמוטיקונים מוכרים ביוניקוד כמו כל תו אחר. מאחורי ? למשל עומד תו ביוניקוד U+1F610. זה מייצג את התו הזה. ישנן המון אותיות ביוניקוד וסימנים. למשל ניקוד בעברית או בשפות אחרות. הגרשיים ״ הייחודיים לעברית מיוצגים על ידי תו היוניקוד U+05F4. יש המון המון תוי יוניקוד ובכללן גם כאלו שאינם נראים ואמורים לסייע להדפסה. אני אתעכב על שניים מהם.
הראשון הוא Zero-width space – תו שאומר רווח ברוחב אפס. למה צריך כזה דבר? זה מאותת למערכת התצוגה שזה "בסדר" לשבור את הטקסט בנקודה שבה ה-Zero-width space מופיע, אך מדובר עדיין במחרוזת טקסט אחת. זה רלוונטי מאוד במחרוזות טקסט ארוכות מאוד כמו כתובות URL.
השני הוא Zero-width non-joiner – תו שאומר שלא מדובר בהלחמה של מילים. למשל אני יכול לשים אותו ב-deafly בין dea ל-fly על מנת לסמן למערכת שלא מדובר בהלחמה אלא בתואר הפועל של deaf.
נשמע איזוטרי ולא מעניין, נכון? מה שחשוב הוא שמדובר בתוים לא נראים. כלומר לא יראו אותו כלל. רוצים דוגמה? בטח שאתם רוצים. הנה, כאן הכנסתי את המילה hello ואחריה Zero-width space וגם Zero-width non-joiner.
נראה לכם שאני מקשקש? בדקו את הדמו הבא
See the Pen Need a Zero Width Space on your Clipboard? by Ran Bar-Zik (@barzik) on CodePen.
מתעצלים? הכנתי אפילו סרטון קטן ומטופש.
בסרטון אני מעתיק את הטקסט ומדביק אותו בעורך טקסט שיודע לזהות תוי יוניקוד בלתי נראים. שימו לב שיש שני תוים כאלו.
טוב, לא צריך להיות שרלוק הולמס על מנת להבין מה הצעד הבא. נכון? ניתן ליצור מחרוזת ייחודית משני התוים האלו ולהדביק אותה בסוף הטקסט (או במקום כלשהו באמצע הטקסט). למשל, אם יש לי טקסט שנמצא באתר פנימי של החברה וחשוף אך ורק לעובדים, אני יכול לקחת את שם המשתמש של העובד שבוחן כרגע את האתר ולהמיר אותו למחרוזת בינארית של 0-ו-1. בג'אווהסקריפט זה נראה ככה:
function zeroPad(num) {
return '00000000'.slice(String(num).length) + num;
}
function textToBinary(username) {
let answer = username.split('').map(char =>
zeroPad(char.charCodeAt(0).toString(2))).join(' ');
return answer;
};
const binaryName = textToBinary('barzik');
console.log(binaryName); // "01100010 01100001 01110010 01111010 01101001 01101011"
השם שלי, barzik, יראה כך: "01100010 01100001 01110010 01111010 01101001 01101011" כל מה שנותר לי לעשות זה לקחת את המחרוזת הזו ולהמיר את ה-0 ל-Zero-width space ואת ה-1 ל-Zero-width non-joiner. יהיה לי מחרוזת ארוכה ביותר של…. תוים ריקים שמייצגים את הזהות של המשתמש. עכשיו אני יכול לשתול את התוים הריקים איפה שבא לי 🙂
הנה דוגמה חיה:
See the Pen string to binary by Ran Bar-Zik (@barzik) on CodePen.
היפוך התהליך הוא גם פשוט יחסית. רק להמיר חזרה את התוים הריקים ל-0 ול-1 ואז לקבל את השם של המשתמש.
איך מתגוננים?
זו רק דוגמה *אחת* למה שאפשר לעשות עם טקסט. ואני שם כסף שלא ידעתם על זה. אבל יש עוד דוגמאות – למשל לשחק עם מקפים (לשנות את הסוג שלהם), לשנות מילים נרדפות ועוד מגוון שיטות. זו פשוט שיטה זולה ופשוטה ביותר. כדי לקחת טקסט ולהעביר אותו הלאה – צריך להעביר אותו תהליך של התממה – כלומר להפשיט אותו ממגוון הדרכים לזהותו. אבל זה קשה.אם אתם מדליפים פוטנציאליים, העבירו את הטקסטים המקוריים דרך notepad ודרך הכלים שהזכרתי לעיל על מנת לראות שאין תוים מוחבאים, מיחקו את כל המקפים השונים (וכמובן לשנות את הפונט או להסירו לחלוטין). אם אתם עיתונאים, השתדלו ככל האפשר שלא לפרסם את הטקסטים המקוריים או לפרסמם באופן חלקי לאחר עיבוד גרפי כבד שיטשטש חלק מהפרטים.
12 תגובות
כרגיל כתוב מעניין, מוסבר היטב, תענוג
(לא כותב קוד)
כרגיל כל כתבה היא בית ספר תענוג לקרוא!
זה צירוף מקרים שאתה מפרסם את זה קצת אחרי ״פצצת הוואטסטפ״ האחרונה?
סרטון של טום סקוט אודותיה: https://www.youtube.com/watch?v=jC4NNUYIIdM
זהות המדליף תיחשף אם הוא מעביר לצד שלישי את העותק הדיגיטלי של הטקסט.
אבל אם הוא מדפיס עותק ושולח להדלפה את קובץ המודפס או עותק דיגיטלי (למשל pdf) של ההדפסה, אז אותם תווים סמויים לאמופיעים ולא מתגלים.
או שיש דרך לגלות גם עותק מודפס, למשל ע"י צורה/תוכן אישי?
1. אפשר גם לעשות צילום מסך, ולשלוח.
2. אפשר גם לעשות מיני תוכנה שמזהה את הטקסט דרך התמונה (שנוצרה מהטקסט) (OCR), וכותבת אותו מחדש (וכך תווים בלתי נראים לא יופיעו).
אחר כך כל תו שלא במאגר מילים שלה, היא מחליפה אותו בדומה (למשל '—' ב '-', וכו').
אחר כך כותבת את הטקסט בגוגל טרנסלייט ומתרגמת אותו לשלל שפות (אנגלית -> רוסית -> ערבית -> אנגלית). וככה המשמעות נשארת, אך רוב המילים מתחלפות.
ואחר כך החלפת X מילים רנדומליות מהטקסט למילים בעלי אותה משמעות (שמש חמה)
וזהו.
הרבה מדפסות מסמנות על גבי ההדפסה את זהות המדפיס.
ראה למשל פה: https://www.eff.org/pages/list-printers-which-do-or-do-not-display-tracking-dots
ב pdf נשמר הטקסט המקורי. בהדפסה בש/ל אכן, אבל במדפסת צבעונית מודפסות סדרת נקודות בלתי נראות לעין המאמתות את זהותה.
לא כתבת את השיטה הכי פשוטה .
להמיר את זה לANSI בNotepad
ולשמור . ואז כל התווים החבויים נמחקים
1. ואז מה עם העברית?
2. גם בANSI יש תווים בלתי נראים (למשל: 0x00 ו0xFF ו0xFA [כמעט בלתי נראה])
אמ"לק – גופנים טיפה שונים שכל שינוי מייצג מידע וכך הם מקודדים מידע בתוך טקסט קריא ללא סימנים חבויים.
חוקרים עובדים עכשיו על שיטה עם כוונות טובות שתחליף בדיוק את זה.
https://www.bleepingcomputer.com/news/technology/fontcode-technique-can-hide-secret-messages-inside-font-glyphs/
הכוונה של החוקרים היא טובה, להחליף קוד QR במשהו קריא יותר אבל ישר חשבתי על הכתבה שלך.
כתיבה יפה קיבלתי המון ידע
"יהיה לי מחרוזת ארוכה ביותר של…. תוים ריקים שמייצגים את הזהות של המשתמש" ממש מגניב, רק לא מובן איך זה אמור לתת מענה שהמשתמש הזה הוא זה שהעביר את המידע הלאה? אם מדובר בארגון של 3000 איש, שנאמר 80% מתוכם קראו את הכתבה, ורק אחד בסופו של דבר העביר אותה הלאה