אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » פיתוח אינטרנט » פתרונות ומאמרים על פיתוח אינטרנט » לעשות fingerprinting לטקסט

לעשות fingerprinting לטקסט

רן בר-זיק מאי 13, 2018 10:09 am 12 תגובות

שיטה נאה, מבוססת ג׳אווהסקריפט, לדעת מי העתיק את הטקסטים שלכם.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

אחד מהאתגרים הגדולים שעומדים בפני ארגונים הוא לזהות דליפות מידע. מה זאת אומרת? בדרך כלל חברים בארגונים (עובדים) שנתקלים במידע פנימי של הארגון שאם הוא יתפרסם הוא יביך את הארגון ומועניינים לחשוף אותו החוצה. למשל טיוח של שחיתות, עדות לתשלום שוחד, הטרדה מינית של ההנהלה כלפי העובדים וכו'. מה שהעובדים האמיצים האלו עושים הוא בדרך כלל להעתיק את הטקסט שהוא המידע הפנימי ולשלוח לעיתונאי באופן אנונימי. העיתונאי עושה את מלאכתו ומפרסם את הטקסט בעיתון – בפרינט ובאתר. הארגון חוטף על הראש, נפתחת חקירה ומנהלים מפוטרים והעובד האמיץ? נותר במחשכים. יש עובדים שמשתמשים באתרים כמו 'ויקיליקס' כדי להדליף כמויות גדולות של מידע.

ארגונים וחברות, במיוחד חברות אפלוליות שהאתיקה היא לא נר לרגלן (אהם אהם פייסבוק, אני מסתכל עליכם) לא אוהבים את זה. וזו הסיבה שהם מנסים למצוא את העובד ש"סרח". אבל איך מוצאים אותו? דרך הטקסט שהוא העתיק! ישנן דרכים רבות לשייך טקסט לאדם שהעתיק אותו ויש חברות שממש מתמחות בכך. במאמר הזה אני אציג דרך שלפי דעתי היא חכמה במיוחד. המאמר כולו מתבסס על הטכניקה של חוקר האבטחה Tom.

בשנים האחרונות, יוניקוד נכנס חזק לכל מערכת וובית וכמעט כל אתר שהוא תומך ביוניקוד. מאוד טבעי עבורנו כישראלים דוברי עברית או ערבית להכנס לכל אתר, גם אם הוא לא תומך 'רשמית' בשפתנו ולהקליד שם בשפה שלנו כאוות נפשנו. כך למשל כתבתי ציוצים בעברית שנים לפני התמיכה 'הרשמית' של טוויטר בשפת האם שלי. למה? כיוון שיוניקוד הפכה להיות הסטנדרט. ביוניקוד יש גם תוים יותר מעניינים מעברית, ערבית או קירילית. למשל ? – אמוטיקונים מוכרים ביוניקוד כמו כל תו אחר. מאחורי ? למשל עומד תו ביוניקוד U+1F610. זה מייצג את התו הזה. ישנן המון אותיות ביוניקוד וסימנים. למשל ניקוד בעברית או בשפות אחרות. הגרשיים ״ הייחודיים לעברית מיוצגים על ידי תו היוניקוד U+05F4. יש המון המון תוי יוניקוד ובכללן גם כאלו שאינם נראים ואמורים לסייע להדפסה. אני אתעכב על שניים מהם.

הראשון הוא Zero-width space – תו שאומר רווח ברוחב אפס. למה צריך כזה דבר? זה מאותת למערכת התצוגה שזה "בסדר" לשבור את הטקסט בנקודה שבה ה-Zero-width space מופיע, אך מדובר עדיין במחרוזת טקסט אחת. זה רלוונטי מאוד במחרוזות טקסט ארוכות מאוד כמו כתובות URL.

השני הוא Zero-width non-joiner – תו שאומר שלא מדובר בהלחמה של מילים. למשל אני יכול לשים אותו ב-deaf‌ly בין 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 ודרך הכלים שהזכרתי לעיל על מנת לראות שאין תוים מוחבאים, מיחקו את כל המקפים השונים (וכמובן לשנות את הפונט או להסירו לחלוטין). אם אתם עיתונאים, השתדלו ככל האפשר שלא לפרסם את הטקסטים המקוריים או לפרסמם באופן חלקי לאחר עיבוד גרפי כבד שיטשטש חלק מהפרטים.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
אבטחת מידע

12 תגובות

  1. גיא הגב מאי 13, 2018 בשעה 10:30 am

    כרגיל כתוב מעניין, מוסבר היטב, תענוג
    (לא כותב קוד)

  2. איתי הגב מאי 13, 2018 בשעה 10:45 am

    כרגיל כל כתבה היא בית ספר תענוג לקרוא!

  3. עכבר העיר הגב מאי 13, 2018 בשעה 10:57 am

    זה צירוף מקרים שאתה מפרסם את זה קצת אחרי ״פצצת הוואטסטפ״ האחרונה?
    סרטון של טום סקוט אודותיה: https://www.youtube.com/watch?v=jC4NNUYIIdM

  4. ח. הגב מאי 13, 2018 בשעה 11:34 am

    זהות המדליף תיחשף אם הוא מעביר לצד שלישי את העותק הדיגיטלי של הטקסט.
    אבל אם הוא מדפיס עותק ושולח להדלפה את קובץ המודפס או עותק דיגיטלי (למשל pdf) של ההדפסה, אז אותם תווים סמויים לאמופיעים ולא מתגלים.
    או שיש דרך לגלות גם עותק מודפס, למשל ע"י צורה/תוכן אישי?

    • yeo4 הגב מאי 13, 2018 בשעה 1:43 pm

      1. אפשר גם לעשות צילום מסך, ולשלוח.
      2. אפשר גם לעשות מיני תוכנה שמזהה את הטקסט דרך התמונה (שנוצרה מהטקסט) (OCR), וכותבת אותו מחדש (וכך תווים בלתי נראים לא יופיעו).
      אחר כך כל תו שלא במאגר מילים שלה, היא מחליפה אותו בדומה (למשל '—' ב '-', וכו').
      אחר כך כותבת את הטקסט בגוגל טרנסלייט ומתרגמת אותו לשלל שפות (אנגלית -> רוסית -> ערבית -> אנגלית). וככה המשמעות נשארת, אך רוב המילים מתחלפות.
      ואחר כך החלפת X מילים רנדומליות מהטקסט למילים בעלי אותה משמעות (שמש חמה)
      וזהו.

    • זיו הגב מאי 13, 2018 בשעה 2:26 pm

      הרבה מדפסות מסמנות על גבי ההדפסה את זהות המדפיס.
      ראה למשל פה: https://www.eff.org/pages/list-printers-which-do-or-do-not-display-tracking-dots

    • Nachum37 הגב מאי 13, 2018 בשעה 6:07 pm

      ב pdf נשמר הטקסט המקורי. בהדפסה בש/ל אכן, אבל במדפסת צבעונית מודפסות סדרת נקודות בלתי נראות לעין המאמתות את זהותה.

  5. אוא הגב מאי 13, 2018 בשעה 1:39 pm

    לא כתבת את השיטה הכי פשוטה .
    להמיר את זה לANSI בNotepad
    ולשמור . ואז כל התווים החבויים נמחקים

    • yeo4 הגב מאי 13, 2018 בשעה 1:45 pm

      1. ואז מה עם העברית?
      2. גם בANSI יש תווים בלתי נראים (למשל: 0x00 ו0xFF ו0xFA [כמעט בלתי נראה])

  6. שחר הגב מאי 27, 2018 בשעה 9:38 am

    אמ"לק – גופנים טיפה שונים שכל שינוי מייצג מידע וכך הם מקודדים מידע בתוך טקסט קריא ללא סימנים חבויים.

    חוקרים עובדים עכשיו על שיטה עם כוונות טובות שתחליף בדיוק את זה.
    https://www.bleepingcomputer.com/news/technology/fontcode-technique-can-hide-secret-messages-inside-font-glyphs/
    הכוונה של החוקרים היא טובה, להחליף קוד QR במשהו קריא יותר אבל ישר חשבתי על הכתבה שלך.

  7. שמעון הגב יוני 6, 2018 בשעה 8:11 pm

    כתיבה יפה קיבלתי המון ידע

  8. עמי הגב נובמבר 8, 2018 בשעה 12:14 pm

    "יהיה לי מחרוזת ארוכה ביותר של…. תוים ריקים שמייצגים את הזהות של המשתמש" ממש מגניב, רק לא מובן איך זה אמור לתת מענה שהמשתמש הזה הוא זה שהעביר את המידע הלאה? אם מדובר בארגון של 3000 איש, שנאמר 80% מתוכם קראו את הכתבה, ורק אחד בסופו של דבר העביר אותה הלאה

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

    הפרויקטים שאני כותב ושוחררו לציבור ברישיון קוד פתוח נמצאים ברובם בגיטהאב.
חיפוש

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד