החברה

האבטחה ב-SLAtech Vantage: איך היא בנויה ואיפה הגבולות שלה

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

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

מי רואה מה: ארגונים, פרויקטים והשתתפויות

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

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

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

כניסה: קוד חד-פעמי במקום סיסמה

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

  • במסד הנתונים נשמר גיבוב של הקוד, לא הקוד עצמו. הקוד חד-פעמי: אחרי הכניסה הוא מבוטל.
  • לכל קוד יש 5 ניסיונות. ניסיון נספר בעדכון מותנה אחד עוד לפני ההשוואה, כך שבקשות מקבילות לא עוקפות את המגבלה.
  • לכל כתובת: עד 5 קודים בשעה, ולא יותר מקוד אחד בכל 30 שניות.
  • כתובת רשת שממנה נשלחו 10 בקשות קוד בלי שאף אחד מהם אומת נחסמת, עד שעוברת שעה מהבקשה האחרונה. קוד נכון מאפס את המונה, ולכן משרד שכולו יוצא לרשת מכתובת אחת לא נחסם.
  • החיבור נשמר 7 ימים ומתארך כל עוד עובדים. גם טוקנים של הזמנות, כמו הקודים, נשמרים כגיבוב.

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

הרשאות בתוך הארגון, ומה נשאר פנימי

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

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

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

מה נשלח למודל השפה ואיך הוא ממוסך

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

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

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

מה המיסוך לא מכסה

המיסוך בנוי על תבניות ועל מילון, ויש לו מגבלות ידועות:

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

מפתחות של מערכות מחוברות, ומה אנחנו כותבים חזרה

כדי למשוך משימות, שעות, קוד ודואר, SLAtech Vantage צריך גישה למערכת שלכם: טוקן של Jira או של GitHub, מפתח API של Freshservice, הרשאה של Google או של Microsoft לקריאת תיבת דואר.

  • המפתח מוצפן לפני שהוא נכתב למסד הנתונים. לכל סוג מפתח יש מפתח הצפנה משלו, כך שחשיפה של סוג אחד לא פותחת את האחרים. מפתחות ההצפנה נשמרים מחוץ למסד הנתונים.
  • אחרי השמירה המפתח לא חוזר לממשק ולא נכתב ליומני השרת.
  • המפתח שייך לאדם שחיבר אותו, ומפתח של מישהו אחר לא נלקח במקומו. כשמסירים חיבור, המפתח המוצפן נמחק איתו.
  • הדואר מתחבר בהרשאת קריאה בלבד (gmail.readonly, Mail.Read). משימות, קוד, שגיאות ושעות רק נקראים.

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

יומן גישה: המזמין קורא אותו בפורטל שלו

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

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

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

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

קבצים, תקופות שמירה ויומני שרת

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

חיבור, כותרות, ומה אין לנו

  • האתר והאפליקציה עובדים רק ב-HTTPS: בקשה ב-HTTP מופנית מחדש, וכותרת HSTS לשנה לא מאפשרת לדפדפן לפתוח את האתר בלי הצפנה.
  • התשובות כוללות X-Content-Type-Options: nosniff ו-Referrer-Policy: strict-origin-when-cross-origin, ואסור להטמיע את הדפים במסגרות של אתרים אחרים.
  • בדפים שנפתחים מקישור לאישור מסמך, מדיניות אבטחת התוכן (CSP) פעילה וחוסמת סקריפטים זרים. בשאר הדפים היא עדיין עובדת במצב דיווח: הפרות נאספות, אבל לא נחסמות.

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

אין לנו הסמכת ISO 27001, SOC 2 או הסמכה אחרת, והעמוד הזה לא טוען לכזו. גם מבדק חדירה חיצוני איננו טוענים כאן.

שאלות נפוצות

האם עובד של SLAtech יכול לראות את נתוני הפרויקט שלנו?
מבחינה טכנית כן. החשבונות של מפעיל הפלטפורמה ב-SLAtech Vantage לא מוגבלים במסנן הפרויקטים: בלי זה אי אפשר לטפל בתקלות ולשייך נתונים נכנסים לפרויקטים. אם הארגון SLAtech משתתף בפרויקט שלכם כספק, הפעולות של העובדים שלו נרשמות ביומן הגישה שלכם כמו הפעולות של כל ספק. כניסה לפרויקט בתפקיד מפעיל הפלטפורמה, בלי השתתפות בו, לא נרשמת ביומן.
האם ארגון אחד יכול לראות נתונים של ארגון אחר?
המערכת בנויה כך שלא. ב-SLAtech Vantage הנתונים של כל הארגונים נמצאים במסד נתונים אחד, וכל שאילתה עוברת מסנן גלובלי שמגביל אותה לפרויקטים שבהם לארגון של המשתמש יש השתתפות פעילה. המסנן רץ במסד הנתונים עצמו. הצ'אט מחפש רק בפרויקט שפתוח על המסך, וקטע שמקורו במשימה נבדק מול מסד הנתונים באותו מסנן של מסך המשימות. בקשה בלי כניסה מקבלת תוצאה ריקה.
אילו נתונים נשלחים למודל שפה חיצוני?
השאלה לצ'אט, ההיסטוריה שלה וקטעים מנתוני הפרויקט שנמצאו בחיפוש, וגם טקסטים לאינדקס החיפוש. לפני השליחה SLAtech Vantage מחליף בתוויות כתובות דואר, מספרי טלפון ותעודות זהות ישראליים, מספרי דרכון ושמות שמוכרים למערכת, וסיסמאות ומפתחות שכתובים בטקסט נמחקים בלי דרך חזרה. בלי מיסוך נשלחים אפיונים להערכת שעות, כולל התמונות, ומילים בודדות למילון השמות. שם שהמערכת לא מכירה יכול לעבור, ושמות מלאים של עובדים וספקים בפרויקט לא ממוסכים.
מה נרשם ביומן הגישה, ומה לא?
ביומן הגישה של SLAtech Vantage נרשמים שינויים בנתוני הפרויקט (נוצר, שונה, נמחק, עם השדות והערכים) והוצאה של נתונים החוצה: קבצים שהורדו, דוח חודשי שיוצא, קישור ציבורי להצעה שנמסר. המזמין קורא את היומן בפורטל שלו. לא נרשמים צפייה במסכים, תהליכי רקע וכניסה של מפעיל הפלטפורמה לפרויקט שהוא לא משתתף בו. יותר מ-20 פריטים מאותו סוג בבת אחת מתקפלים לשורה אחת. הרשומות נשמרות שבע שנים.
איך נשמרים המפתחות של Jira או GitHub שלנו?
מוצפנים. ב-SLAtech Vantage מפתח של מערכת מחוברת מוצפן לפני שהוא נכתב למסד הנתונים, לכל סוג מפתח יש מפתח הצפנה משלו, ומפתחות ההצפנה עצמם נשמרים מחוץ למסד הנתונים. אחרי השמירה המפתח לא מוצג בממשק ולא נכתב ליומני השרת, וכשמסירים את החיבור הוא נמחק. החיבורים ל-Jira ול-GitHub רק קוראים. חיבור אחד כותב למערכת החיצונית, Freshservice: סטטוס של קריאה ותשובה פומבית.
האם ל-SLAtech Vantage יש הסמכת ISO 27001 או SOC 2?
לא. ל-SLAtech Vantage אין הסמכת ISO 27001, SOC 2 או הסמכה אחרת, והעמוד הזה לא טוען לכזו. במקום זאת מתואר כאן איך בנוי כל מנגנון ואיפה הגבולות שלו: הפרדה בין ארגונים במסנן במסד הנתונים, כניסה בקוד חד-פעמי, מיסוך לפני מודל השפה, הצפנת מפתחות ויומן גישה שהמזמין קורא בעצמו. אם הבדיקה שלכם צריכה פרטים מעבר לעמוד הזה, כתבו לנו.

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

התחילו ניסיון חינם