על מודל האבטחה של ארנקי תוכנה | פִּנקָס

על מודל האבטחה של ארנקי תוכנה | פִּנקָס

צומת המקור: 2671485

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

לפני שבועיים, סיפורים אסורים חשף מתקפה ממוקדת נגד אלפי אנשים ברחבי העולם. מתקפה זו ניצלה נקודות תורפה באנדרואיד ו-iOS, כדי להתקין תוכנות ריגול שפותחו על ידי קבוצת NSO: Pegasus. תוכנה זדונית זו מסוגלת לנטר את כל הפעילות של המכשיר, ולחלץ מידע אישי: שיחות SMS, WhatsApp ושיחות איתות, שיחות טלפון וכו'. מאמר זה מסביר כיצד, בתנאים אלה, תוכנה זדונית כזו תוכל לחלץ את כל הסודות של ארנקי תוכנה, וההבדלים מנקודת מבט אבטחה בין ארנקי תוכנה בטלפונים ניידים ובמחשבים שולחניים.

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

הגנה על סודות

מה מאוחסן בארנק קריפטו?

ארנקים למעשה אינם מאחסנים את המטבעות הקריפטו של המשתמשים: הם מאחסנים רק את הסודות, בעיקר את המפתחות הפרטיים, המאפשרים גישה למטבעות הקריפטו ואת היכולת לבזבז אותם. מפתחות פרטיים אלו הם בעיקר מפתחות פרטיים ECC (Eliptic Curve cryptography) על עקומות שונות בהתאם לבלוקצ'יין. העקומות הנפוצות ביותר הן secp256k1 (ביטקוין, Ethereum...), Ed25519 (Monero), או BLS12-381 (Ethereum 2).

מפתחות אלה משמשים לחתימה על עסקאות, ובאופן כללי יותר לאינטראקציה עם נכסי בלוקצ'יין.

אחסון המפתחות הללו תלוי בסוג הארנק: דטרמיניסטי או לא. ארנק דטרמיניסטי היררכי (HD) מאפשר יצירת עץ מפתחות מסוד אב אחד הנקרא הזרע (cf BIP44). הזרע הזה נגזר לעתים קרובות מרצף זכרון של 12, 18 או 24 מילים שנוצרו או נבחרו באקראי על ידי המשתמש (ראה.BIP39). הזיכרון הזה מאפשר להגביל את מספר המפתחות שיש לאחסן: ניתן לחשב אותם מחדש בכל עת מתוך הזרע. ארנקי HD מאחסנים רק את המנמון הזה או את הזרע.

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

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

  • הגנה מפני התקפות "עוזרת רעה": תוקף עם גישה זמנית לארנק לא אמור להיות מסוגל להוסיף דלת אחורית בתוך הארנק המאפשרת לגנוב את ה-PIN או את סודות ההגנה על הסיסמה.
  • חומר הצפנה מאובטח: אסור שיהיה ניתן לחיזוי מפתחות ואי-נונס שנוצרו על ידי הארנק. יתר על כן, ידיעת הסודות (למעט הזרע) שנוצרה בנקודת זמן מסוימת לא תאפשר לחזות את הסוד שייווצר בעתיד.
  • הגנה במנוחה: אם תוקף משיג נתונים מתמשכים של ארנק תוכנה, אסור לו לחלץ את המפתחות.
  • הגנה במהלך שימוש סודי: כאשר הארנק אינו נעול, אסור שהמפתחות יהיו נגישים על ידי תוקף או תוכנה זדונית.
ארנקי חומרה

מודל האבטחה של ארנק חומרה נועד למנוע איומי אבטחה אלה. ארנקי חומרה מגנים מפני תוכנות זדוניות בתכנון. הם מכשירים עצמאיים החותמים על עסקאות בעצמם. חומרי ההצפנה נשארים תמיד בתוך המכשיר ולעולם אינם נשלחים לאפליקציית התוכנה שאליה הם מתקשרים. ממשק התקשורת הוא תמיד פשוט מה שמפחית באופן דרסטי את משטח ההתקפה. זה יכול להיות USB, Micro SD או מצלמה + מסך (באמצעות קוד QR), או Bluetooth Low Energy.

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

ארנקי חומרה נועדו גם להגן מפני התקפות "משרתת רעה" ומפני תוקף עם גישה פיזית. בהתאם לארנק החומרה, יש להם רמות שונות של אבטחה, אבל בכל המקרים הם נועדו לאבטח מפני איומים אלה. ניתן למצוא תיאור מפורט של מודלים של איום Ledger Nano כאן.

ארנקי תוכנה

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

בהמשך, נחשבים ארנקים שולחניים (Windows, macOS, Linux) וארנקים ניידים. ההבדלים העיקריים ביניהם מסתמכים בעיקר על מנגנוני האבטחה שמציעה מערכת ההפעלה.

ארנקי תוכנה במחשב

כמה ארנקים פופולריים, כמו Electrum, Exodus, Atomic או ליבת ביטקוין, פועלים על מחשבים.

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

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

רוב הזמן, הזרע מאוחסן במיכל מוצפן המוגן על ידי סיסמה. התקפה פשוטה מורכבת, עבור תוכנה זדונית או כלי ניהול מרחוק, לאחזר את המיכל המוצפן הזה ולשלוח אותו לתוקף. אז ניתן להכריח את הסיסמה בכוח או להשיג באמצעות א keylogger.

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

רוב הסיסמאות כן רע. יש מיליארדי סיסמאות שדלפו לרשת, ואנשים רבים נוטים לעשות שימוש חוזר בסיסמאות שלהם למספר שירותים. כלים מוכנים מאפשרים לך לאחזר סיסמאות עבור ארנקי מטבעות קריפטוגרפיים, כגון btcrecover or hashcat. סיסמאות יכולות להיות מורכבות, אבל מאחורי כל ארנק יש כסף אמיתי, ולכן התוקפים לא יהססו להשקיע משאבים כדי לשבור סיסמאות כאלה.

שני עקרונות אבטחה בסיסיים לשמירה על אבטחת הסיסמאות שלך הם שימוש במנהל סיסמאות, ולעולם לא לעשות שימוש חוזר בסיסמה שלך למטרות שונות.

האיום המדאיג ביותר עבור ארנקי תוכנה הם תוכנות זדוניות וגנבות ייעודיות, שפותחו במיוחד כדי לרוקן את הכספים שלך. תוכנות זדוניות כאלה, כגון KPOT או ElectroRAT, אפילו לא צריך לאלץ את הסיסמה שלך: הם יכולים ללכוד אותה ישירות כשאתה מזין אותה, לפענח את נתוני תצורת הארנק ולחלץ את ה-Seed.

הנה אפליקציית צעצוע, שפותחה עבור מאמר זה, שמכוונת לארנק אלקטרום (אם כי זה יכול היה להיות עוד ארנק תוכנה). הוא מדמה תוכנה זדונית שגונבת את סיסמת המשתמש כאשר הקורבן מזין אותה. לאחר מכן משתמשים בסיסמה כדי לפענח את נתוני הארנק ולהצגת ה-Seed:

כפי שאתה רואה, גם אם הסיסמה מורכבת, האפליקציה מסוגלת לאחזר אותה כשהיא מרחרח אותה ישירות בזיכרון.

דוגמה זו דומה מאוד לזו האחרונה תוכנות זדוניות מסוג SCR קמפיינים המשמשים לגניבת מטבעות קריפטוגרפיים. פושעים השתמשו בטכניקות של הנדסה חברתית כדי להערים על משתמשים להוריד שומר מסך זדוני. שומר מסך זה למעשה גנב מידע מהקורבן של המחשב, כולל מידע על חילופי ארנק ומטבעות קריפטוגרפיים.

לסיום על ארנקי תוכנה הפועלים על מחשבים:

  • ברוב המקרים ארנקי תוכנה הפועלים על מחשבים מגנים על הזרע של המשתמש באמצעות סיסמה.
  • בקרת הגישה לקבצי ארנק אלו מסתמכת בעיקר על אבטחת המחשב. בפועל, קשה להגן על מחשבים מפני תוכנות זדוניות, וככל שמטבעות קריפטוגרפיים יהפכו למיינסטרים, ההתקפות נגד ארנקים ילכו ויתחכמו.
  • שימוש בארנקי תוכנה כאלה לאבטחת נכסים דיגיטליים אינו רעיון טוב. כל תוכנה זדונית מיוחדת תוכל לקבל את קבצי הארנק ולמצוא את הסיסמאות במצב לא מקוון, או לקבל את הסיסמה דרך keylogger.
ארנקי תוכנה בסמארטפון

סמארטפונים אנדרואיד ו-iOS מציעים כברירת מחדל תכונות אבטחה שאינן בשימוש נרחב במערכות הפעלה שולחניות.

מערכות הפעלה ניידות מציעות הגנה על נתוני אפליקציות ומשתמשים. בפרט, ארגזי חול של אפליקציות הם חובה עבור כל האפליקציות. זה לא המקרה, למשל, ב-Windows: כברירת מחדל, כל יישום יכול לגשת לנתוני משתמש.

לפיכך, אפליקציה זדונית אינה יכולה לקרוא נתונים מאפליקציה אחרת, אלא אם:

  • זה מוצא פגיעות באפליקציה הזו.
  • או שהוא מצליח להסלים הרשאות, למשל על ידי ניצול פגיעות ליבה המאפשרת לו לקבל גישת שורש למערכת.

למרבה הצער, התקפות כאלה קיימות. הם הרבה יותר קלים בגרסאות מיושנות של אנדרואיד ו-iOS, ובמכשירים ישנים או זולים שבהם קוד צד שלישי לרוב פחות מאובטח.

במערכת הפעלה עדכנית, התקפות אלו קשות יותר אך אינן בלתי ניתנות לביצוע מרחוק. לדוגמה, איאן באר הראה א מתקפת אפס קליק מרשימה ביותר ב-iOS 13.5 בדצמבר 2020. גואנג גונג הציגה א שרשרת לנצל לשרש מרחוק מגוון רחב של מכשירי אנדרואיד מבוססי קוואלקום ביוני 2020. ולפני שבועיים, סיפורים אסורים חשף כי קבוצת NSO השתמשה בשרשרת ניצול כדי למקד למכשירי iOS ואנדרואיד עדכניים תוך שימוש בפרצות של 0 ימים.

תוקפים פחות מתוחכמים יכולים להשתמש בפגיעויות מקומיות המאפשרות להם לחלץ נתוני ארנק מאפליקציה זדונית. מתווכים בנושא פגיעות כמו Zerodium משלמים עד $ 200,000 להסלמה של הרשאות ל-root באנדרואיד וב-iOS, אך עד 1,500,000 דולר עבור התקפות מרחוק.

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

שתי שיטות להגנה על הזרע משמשות בדרך כלל:

  • הגנה באמצעות סיסמה - נתוני הארנק מוגנים על ידי סיסמה שהוזן על ידי המשתמש. העיצוב זהה לארנקים שולחניים. בפועל, קשה יותר לחלץ נתונים מאשר ממחשב, שכן שליפת נתוני אפליקציה מאפליקציה זדונית היא קשה יותר מבחינה טכנית, מהסיבות שהוסבר לעיל. עם זאת, שליפת הסיסמה לאחר גניבת הנתונים היא בפועל קלה יותר: הזנת סיסמאות מורכבות בטלפונים ניידים היא מייגעת, ומכאן שמשתמשים נוטים לבחור סיסמאות פשוטות יותר. יתרה מכך, מנגנוני גזירת מפתח (המשמשים ליצירת מפתח מסיסמה) במכשירים ניידים הם בדרך כלל פשוטים יותר לשבירה, מכיוון שהם לרוב קלים יותר מסיבות ביצועים.
  • קוינומי ו-Metamask הן דוגמאות לארנקים כאלה.

בסרטון הבא, אנו מראים אפליקציית צעצוע נוספת שפותחה עבור מאמר זה. זוהי תוכנה זדונית המחופשת כווידג'ט מזויף של ביטקוין. תוכנה זדונית מנצלת פגיעות ידועה במכשיר שלא תואם כדי לקבל גישה לשורש במכשיר, וכדי להוציא את ה-Seed המוצפן לשרת מרוחק. לאחר מכן השרת מכריח את הסיסמה כדי לפענח את הזרע.

שיטה זו אינה ספציפית לארנק. ניתן להתאים אותו (פחות או יותר) בקלות לכל ארנק מוגן בסיסמה. הנה אותה דוגמה עם ארנק Coinbase:

[תוכן מוטבע]

  • אבטחה המבוססת על חנות המפתחות של אנדרואיד (או מחזיק מפתחות iOS) – במקרה זה, נתוני הארנק מוצפנים באמצעות מפתח הצפנה המאוחסן בחנות המפתחות של Android (מחזיק מפתחות iOS). שירותים אלה תוכננו בתחילה לאחסון מאובטח של מפתחות הצפנה, ואפליקציות רבות משתמשות בהם כדי ליצור מפתח שיצפין את כל נתוני המשתמש הרגישים. יישומים המשתמשים ב-Keystore מיישמים את המנגנון הבא:
    • האפליקציה מבקשת מחנות המפתחות ליצור מפתח הצפנה עבור מזהה נתון. מאגר מפתחות מייצר את המפתח ומאחסן אותו בצורה מאובטחת.
    • כאשר האפליקציה רוצה להצפין או לפענח כתם, היא שולחת את הכתם יחד עם מזהה המפתח לחנות המפתחות.
    • לבסוף, מאגר המפתחות בודק אם לאפליקציה יש באמת את הזכויות להשתמש במפתח זה ושולח אחורה נתוני פלט לאפליקציה.

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

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

זה אומר שתוקף עם הרשאות שורש לא יוכל לחלץ מפתחות הצפנה ממאגר המפתחות. עם זאת, הם יוכלו להשתמש ב-Keystore כאורקל לפענוח, ולהצפין או לפענח כל מידע שהם רוצים.

Keystore מציעה הצפנה, אך גם שירותי חתימה. אז האם ארנק יכול להגן על מפתחות ההצפנה שלו, מה שמקשה על חילוץם? התשובה היא לצערי לא: ארנקי תוכנה אינם משתמשים ב-Keystore כדי לחתום על עסקאות, ו מפתחות פרטיים מטופלים תמיד בטקסט רגיל על ידי האפליקציה.

זאת מסיבה פשוטה: KeyStore ו-KeyChain מציעות שירותי חתימה והצפנה גנריים, אך אינן תומכות בקריפטוגרפיה המשמשת במטבעות קריפטוגרפיים. לדוגמה, ה-KeyStore מיישמת ECDSA Signature אך רק על עקומות NIST המוגדרות ב- FIPS 186-4 (P-224, P-256, P-384 ו-P-521). ביטקוין משתמש בעקומה אחרת, secp256k1, שאינו נתמך עדיין.

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

לסיום לגבי ארנקים ניידים:

  • מנגנון הבידוד בין אפליקציות שמספק iOS/אנדרואיד מעלה את רף האבטחה בהשוואה לארנק תוכנה הפועל על מחשב. התוקף זקוק תחילה להסלמה של הרשאות כדי לגשת לנתוני האפליקציה. זה אפשרי במכשירים מיושנים. תוקפים מיומנים (איאן באר עשה את זה ב-6 חודשים לבד אבל... זה איאן באר) יכולים לעשות את זה גם במכשירים שהתוקנו לאחרונה.
  • שירותי הגנת מפתח (KeyStore, KeyChain) יכולים להוסיף שכבת אבטחה נוספת להגנה על סודות בזמן מנוחה. עם זאת, מכיוון שהם אינם תומכים באלגוריתמים קריפטוגרפיים עבור יישומי מטבעות קריפטוגרפיים, עדיין ניתן לחלץ מפתח.
  • בכל המקרים, תוקף עם גישת שורש יכול לאחזר את ה-Seed במצב מנוחה, כאשר נעשה בו שימוש, או למנף את זכויות המשתמש לרוקן את הארנק באמצעות ארנק התוכנה כאורקל.

הנה דוגמה אחרונה לתוכנת ריגול צעצוע המכוונת לארנק Blockchain.com (אם כי ניתן לבצע זאת בארנקים רבים אחרים באותה קלות). הוא מותקן מרחוק, ומנטר את הארנק. לאחר אימות המשתמש באמצעות טביעת האצבע שלו, מפתח ההצפנה בוטלה ונתוני הארנק מפוענחים. תוכנת הריגול מכשירה את האפליקציה לאחזר מפתח הצפנה זה. לאחר מכן הוא מחלץ את המפתח ואת נתוני הארנק לשרת מרוחק:

[תוכן מוטבע]

סיכום

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

  • מנגנון הבידוד בין אפליקציות שמספק iOS/אנדרואיד מעלה את רף האבטחה בהשוואה לארנק תוכנה הפועל על מחשב. התוקף זקוק תחילה להסלמה של הרשאות כדי לגשת לנתוני האפליקציה.
  • שירותי הגנת מפתח (KeyStore, KeyChain) יכולים להוסיף שכבת אבטחה נוספת להגנה על סודות בזמן מנוחה. עם זאת, מכיוון שהם אינם תומכים באלגוריתמים קריפטוגרפיים עבור יישומי מטבעות קריפטוגרפיים, יש לתפעל מפתחות ישירות מהאפליקציה, כך שהם מציעים הגנה מוגבלת.
  • בכל המקרים, תוקף עם גישת שורש יכול לאחזר את ה-Seed במצב מנוחה, כאשר נעשה בו שימוש, או למנף את זכויות המשתמש לרוקן את הארנק באמצעות ארנק התוכנה כאורקל.

בול זמן:

עוד מ פנקס