ערוץ-שליטה שלא ניתן לזייף: TOFU + חתימה אסימטרית
כשמערכת יכולה לשלוח פקודות למחשבים של לקוחות, השאלה הכי חשובה היא: מי באמת מורשה לשלוח אותן? התשובה האינטואיטיבית — "סיסמה פנימית סודית" — חלשה ממה שנדמה. הנה למה בחרנו במשהו חזק יותר.
הרעיון האינטואיטיבי: סוד משותף
הרעיון המתבקש: יש "סיסמה פנימית" שרק המערכת מכירה, וכל פקודה מאושרת מולה. אם משהו זר ניסה להזריק פקודה — הוא לא יודע את הסוד, אז זה נכשל. נשמע הגיוני.
אבל יש כאן חולשה: כדי לאמת פקודה, הסוד חייב להיות נוכח בנקודת-האימות. אם הענן שלנו או הקופסה נפרצים — הסוד קריא, והתוקף מזייף פקודות כאוות-נפשו. סוד-משותף (גם מתחלף) נשבר ברגע שמישהו רואה אותו.
מה בחרנו: חתימה אסימטרית
במקום סוד-משותף, השתמשנו בצמד-מפתחות אסימטרי. לאופרטור יש מפתח פרטי שלעולם לא עוזב אותו, וכל פקודה נחתמת בו. הסוכן על הקופסה מחזיק רק את המפתח הציבורי — שיכול לאמת חתימה, אבל לא יכול לזייף אחת.
ההבדל מהותי: גם פריצה מלאה של הענן שלנו וגם של קופסת-הלקוח לא יכולה לזייף פקודה, כי המפתח הפרטי פשוט לא נמצא באף אחד מהמקומות האלה. הענן שלנו רק מעביר את הפקודה החתומה — הוא לא מאמת ולא מריץ דבר.
הקשחה שנייה: TOFU — נעילת-מפתח
אבל מה אם תוקף שפרץ לענן שלנו יחליף את המפתח הציבורי בשלו? אז הוא יוכל לחתום בעצמו. כדי לסגור את זה, הוספנו TOFU (Trust On First Use): הסוכן נועל את מפתח-האופרטור פעם אחת, בהרשמה הראשונה. בכל בדיקה לאחר מכן הוא מוודא שהמפתח שהענן מציג זהה לזה שנעוץ — ואם לא, הוא מסרב.
רוטציה של המפתח היא לכן פעולה מכוונת out-of-band, לא דריסה שקטה מהענן. תוקף שהשתלט על הענן שלנו לא יכול להחליף את המפתח הנעוץ — הסוכן פשוט לא יקבל את ההחלפה.
הקשחה שלישית: אין shell חופשי
גם אם איכשהו הייתה נוצרת חתימה תקפה, רצינו שהנזק האפשרי יהיה חסום. לכן הפעולות הן רשימת-היתר סופית ופרמטרית (כמו reboot או restart-service) — ואין פעולת "הרץ פקודה חופשית". מחקנו במכוון כל מסלול שמעביר מחרוזת לתוך shell. גם חתימה תקפה לא מגיעה ל-shell של root.
איך בדקנו
אימתנו את המודל בהתנהגות, לא רק בתיאוריה: הדמינו את התרחיש שבו הענן מציג מפתח שונה מהנעוץ, ווידאנו שהסוכן אכן מסרב (rc=2) ולא מריץ. הדפוס הזה — pin → verify → refuse — הוא הליבה של חוסן ה-supply-chain שלנו.
איך אנחנו משפרים את זה — בקרת-איכות מתמשכת
אמון הוא לא "הגדר ושכח". כל פקודה נרשמת ל-audit בלתי-משתנה (מי, מתי, מה, איזו חתימה), כך שאפשר לשחזר כל פעולה בדיעבד. הצעדים הבאים שכבר מתוכננים: anti-replay (nonce + חותמת-זמן בקנוני, כדי שפקודה ישנה לא תשוחזר), per-server token במקום token משותף, ו"kill-switch" ברמת-לקוח. אנחנו גם תוקפים את עצמנו (purple-team מורשה) כדי להוכיח שההגנות באמת מחזיקות. השכבה הזו ממשיכה להתחזק.
כתבה זו מתארת את מודל-האמון ברמת-עיקרון — וזו דווקא נקודת-חוזק לפרסם, כי הידיעה כיצד ההגנה עובדת אינה מסייעת לתוקף (המפתח הפרטי אינו נחשף). אין כאן מפתחות, סודות, או פרטי-מימוש רגישים.
← כל הכתבות