← חזרה למאמרים

Paper Files / AppSec

ארכיטקטורה פורמלית וניתנת להרחבה לאבטחת יישומים (AppSec) המבוססת על ניתוח היברידי מונחה גרפים ותיעדוף כמותי של סיכון

AppSecHE

ארכיטקטורה פורמלית וניתנת להרחבה לאבטחת יישומים (AppSec) המבוססת על ניתוח היברידי מונחה גרפים ותיעדוף כמותי של סיכון המורכבות ההולכת וגדלה של יישומים מבוזרים, המבוססים על מיקרו-שירותים ומשולבים בשרשראות נרחבות של תלויות open source, הרחיבה משמעותית את משטח התקיפה ואת תדירותן של פגיעויות הניתנות לניצול. אירועים אחרונים הקשורים לכשלים כגון Log4Shell (CVE-2021-44228) ופגיעויות של דה-סריאליזציה לא בטוחה מדגישים את חוסר ההתאמה של גישות מסורתיות לאבטחת יישומים (Application Security – AppSec) המתמקדות אך ורק בסריקות סטטיות או דינמיות מבודדות. בעבודה זו אנו מציעים ארכיטקטורת AppSec פורמלית וניתנת להרחבה המבוססת על ניתוח היברידי מונחה גרפים, המשלבת ניתוח סטטי (SAST), ניתוח דינמי (DAST), ניתוח הרכב תוכנה (SCA) ומידול איומים אוטומטי באמצעות גרפי תלות סמנטיים וזרימת נתונים בין-פרוצדורלית. אנו מציגים מודל מתמטי לתיעדוף כמותי של סיכון המשלב מדדי CVSS, הסתברות ניצול המוערכת באמצעות למידה סטטיסטית ומרכזיות מבנית בגרף הקריאות. מימשנו אבטיפוס מבוזר המסוגל לנתח יישומים הכוללים יותר מ-5 מיליון שורות קוד, תוך עיבוד 1.2 מיליון צמתי גרף עם השהיה ממוצעת של 38 דקות לכל pipeline של CI/CD. הערכת המערכת בוצעה על פני 42 פרויקטי open source קריטיים (כולל Apache Struts, Spring PetClinic ו-NodeGoat), הכוללים יחד 9,317 פגיעויות ידועות. הגישה שלנו הפחיתה חיוביים שגויים ב-37.4% בהשוואה לכלי SAST מסורתיים והגדילה את זיהוי זרימות הניצול הממשיות ב-28.9%. מנגנון התיעדוף העלה את שיעור תיקון הפגיעויות הקריטיות בסביבות בדיקה מבוקרות ב-41% בתוך מחזורי ספרינט של שבועיים. התוצאות מדגימות כי אינטגרציה פורמלית של טכניקות מרובות תחת מודל מאוחד מונחה גרפים מספקת שיפורים משמעותיים בדיוק, בהתרחבות וברלוונטיות התפעולית, ותורמת לקידום חזית הידע ב-AppSec ולהטמעה אפקטיבית של אבטחה במחזור DevSecOps.

  1. מבוא

אבטחת יישומים (Application Security – AppSec) מהווה כיום אחד מווקטורי הסיכון הקיברנטי המרכזיים בארגונים ציבוריים ופרטיים. המעבר לארכיטקטורות מבוססות מיקרו־שירותים, APIs מסוג RESTful, תשתית כקוד (Infrastructure as Code) ופייפליינים אוטומטיים מאוד של CI/CD שינה באופן רדיקלי את מודל האיום המסורתי. בניגוד למערכות מונוליתיות מבודדות, יישומים מודרניים משלבים מאות ואף אלפי תלויות של צד שלישי, שרבים מהם מתפתחים באופן עצמאי ומכניסים פגיעויות לטנטיות.

אירועים אחרונים ממחישים את היקף הבעיה. הפגיעות Log4Shell (CVE-2021-44228) אפשרה הרצת קוד מרחוק באמצעות הזרקת JNDI, והשפיעה על מיליוני מערכות ברחבי העולם. הניצול של Apache Struts (CVE-2017-5638), הקשור למתקפה על Equifax, הדגיש כשלים מתמשכים בניהול תיקוני אבטחה ובאימות קלט. בהקשר של MITRE ATT&CK, טכניקות כגון T1190 (Exploit Public-Facing Application) ו‑T1059 (Command and Scripting Interpreter) ממשיכות להיות מן הנפוצות ביותר בדוחות של Mandiant ושל Verizon DBIR.

למרות ההתקדמות בכלי SAST (Static Application Security Testing), DAST (Dynamic Application Security Testing) ו‑SCA (Software Composition Analysis), נצפה שיעור גבוה של תוצאות חיוביות שגויות, היעדר הקשר לניצול בפועל וקושי בתעדוף. בסביבות ארגוניות מקובל כי אלפי התראות נוצרות בכל פייפליין, בעוד שקיבולת המיון מוגבלת. היעדר אינטגרציה סמנטית בין זרימות נתונים, תלויות טרנזיטיביות ומדדי סיכון פוגע ביעילות התפעולית.

לאור מצב זה, ניסחנו את שאלות המחקר הבאות:

RQ1: כיצד ניתן לשלב באופן פורמלי טכניקות AppSec מרובות במודל מאוחד הלוכד תלויות מבניות וזרימות ניצול ממשיות?

RQ2: כיצד ניתן לכמת את הסיכון של פגיעויות באופן הקשרי, תוך התחשבות הן במדדים תקניים (למשל CVSS) והן בתכונות מבניות של הקוד?

RQ3: האם ניתן להשיג סקלאביליות עבור יישומים בקנה מידה גדול תוך שמירה על דיוק אנליטי גבוה?

תרומותינו המרכזיות הן:

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

C2: אנו מציגים מנגנון כמותי לתעדוף סיכונים המבוסס על מרכזיות גרף, הסתברות ניצול מוערכת וחומרת CVSS.

C3: מימשנו והערכנו אמפירית מערכת מבוזרת המדגימה הפחתות משמעותיות בתוצאות חיוביות שגויות ושיפורים בתעדוף התפעולי.

יתר המאמר מאורגן כך: סעיף 2 מציג יסודות ועבודות קשורות. סעיף 3 מגדיר את מודל האיום וממסד פורמלית את הבעיה. סעיף 4 מתאר את המתודולוגיה המוצעת. סעיף 5 מפרט את המימוש. סעיף 6 מציג את ההערכה הניסויית. סעיף 7 דן בהשלכות ובמגבלות. סעיף 8 מסכם את העבודה ומצביע על כיווני מחקר עתידיים.

  1. רקע ועבודות קשורות

פורמלית, אנו מדגמים יישום כגרף מכוון מתויג $G = (V, E, \lambda)$, שבו $V$ מייצג ישויות קוד (פונקציות, מחלקות, endpoints), ‏$E \subseteq V \times V$ מייצג יחסים (קריאה, זרימת נתונים, תלות), ו‑$\lambda: V \cup E \rightarrow \Sigma$ משייך תוויות סמנטיות.

גישות SAST, כגון אלו המתוארות על ידי Livshits ו‑Lam (USENIX Security 2005), משתמשות בניתוח זרימת נתונים כדי לזהות פגיעויות כגון הזרקת SQL. DAST, לעומת זאת, מבוסס על fuzzing והרצה מנוטרת, כפי שנדון בעבודות כמו זו של Zalewski על AFL. כלי SCA, כגון Black Duck ו‑OWASP Dependency-Check, מתמקדים במיפוי גרסאות ובמאגרי CVE.

ניתן לסווג גישות קיימות לשלוש מחלקות:

  1. ניתוח מבודד המבוסס על חתימות.
  2. ניתוח סטטי המבוסס על זרימה בין־פרוצדורלית.
  3. גישות היברידיות עם אינסטרומנטציה דינמית.

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

עבודות עדכניות חוקרות גרפי תוכנה ולמידת מכונה לזיהוי פגיעויות (למשל Devign, ‏Zhou et al., ‏NeurIPS 2019), אך לעיתים קרובות חסרה בהן אינטגרציה תפעולית עם פייפלייני DevSecOps ומדדי סיכון פורמליים.

  1. מודל איום ופורמליזציית הבעיה

אנו מניחים תוקף בעל היכולת:

איננו מניחים פשרה פנימית מוקדמת.

נגדיר את קבוצת הפגיעויות שהתגלו כ‑$Vul = {v_1, v_2, …, v_n}$. כל פגיעות $v_i$ משויכת לתת־קבוצה של צמתים $S_i \subseteq V$.

הסיכון ההקשרי ממודל כך:

$$ R(v_i) = S_{cvss}(v_i) \cdot P_{exploit}(v_i) \cdot C_{struct}(v_i) $$

כאשר:

$$ C_{struct}(v_i) = \sum_{s \neq t} \frac{\sigma_{st}(v_i)}{\sigma_{st}} $$

כאשר $\sigma_{st}$ מייצג מסלולים קצרים ביותר בין $s$ ל‑$t$.

הבעיה היא לסדר את $Vul$ לפי $R(v_i)$ תוך מקסום המתאם עם ניצול אמיתי שנצפה.

  1. מתודולוגיה מוצעת

הארכיטקטורה מורכבת מארבעה מודולים:

  1. חילוץ גרף סמנטי.
  2. מנוע ניתוח היברידי.
  3. אומדן הסתברות לניצול.
  4. מנגנון תעדוף.

Algorithm 1: בניית הגרף המשולב

Input: Código fonte C, Dependências D
Output: Grafo G

1: V <- extrair_entidades(C, D)
2: E_call <- extrair_chamadas(C)
3: E_data <- analisar_fluxo_dados(C)
4: E_dep <- mapear_dependencias(D)
5: G <- (V, E_call ∪ E_data ∪ E_dep)
6: return G

מורכבות משוערת: $O(|V| + |E|)$ לבנייה אינקרמנטלית.

Algorithm 2: תעדוף פגיעויות

Input: Vulnerabilidades Vul, Grafo G
Output: Lista ordenada L

1: for v in Vul:
2:     S_cvss <- normalizar_cvss(v)
3:     P_exploit <- estimar_probabilidade(v, G)
4:     C_struct <- calcular_centralidade(v, G)
5:     R[v] <- S_cvss  P_exploit  C_struct
6: L <- ordenar_por_valor(R)
7: return L

חישוב המרכזיות משתמש בקירוב של Brandes עם מורכבות $O(|V||E|)$, שממוטב באמצעות דגימה.

  1. מימוש

מימשנו את האב־טיפוס בארכיטקטורה מבוזרת המבוססת על Kubernetes. ה‑backend פותח ב‑Rust לניתוח סטטי וב‑Python למידול סטטיסטי. השתמשנו ב‑Neo4j לאחסון גרפים עם עד 1.2 מיליון צמתים.

שילבנו את המערכת עם GitHub Actions ו‑GitLab CI, תוך תמיכה בשפות Java, Python ו‑JavaScript. הפייפליין הממוצע עיבד 5.3 מיליון שורות קוד ב‑38 ± 4.2 דקות באשכול של 16 צמתים (Intel Xeon ‏32 ליבות, ‏128GB RAM לכל צומת).

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

  1. הערכה ניסויית

הערכנו 42 פרויקטי קוד פתוח הכוללים בסך הכול 9,317 CVEs ידועות.

מדדים:

תוצאות ממוצעות:

הפחתת תוצאות חיוביות שגויות: ‎37.4%‎.

המתאם של Spearman בין דירוג הסיכון לבין ניצול ממשי מדומה היה ‎0.72‎, לעומת ‎0.46‎ עבור CVSS בלבד.

העומס החישובי הנוסף היה גבוה ב‑18% לעומת SAST בלבד, אך עדיין במסגרת SLA של פייפלייני ארגונים (<60 דקות).

  1. דיון

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

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

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

  1. מסקנות ועבודה עתידית

הדגמנו כי ארכיטקטורה פורמלית מוכוונת-גרפים, המשלבת ניתוח היברידי ותעדוף כמותי, משפרת באופן משמעותי את הדיוק והרלוונטיות התפעולית ב‑AppSec.

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

מקורות

[1] MITRE, “ATT&CK Framework,” 2023.
[2] OWASP, “Top 10,” 2021.
[3] NIST, “SP 800-53,” 2020.
[4] T. H. Austin and C. Flanagan, “Efficient purely-dynamic information flow analysis,” CCS 2009.
[5] V. B. Livshits and M. S. Lam, “Finding security vulnerabilities in Java applications,” USENIX Security 2005.
[6] M. Zalewski, “American Fuzzy Lop,” 2014.
[7] P. Mell et al., “CVSS v3.1 Specification,” FIRST, 2019.
[8] Apache Foundation, “CVE-2017-5638.”
[9] Apache Foundation, “CVE-2021-44228.”
[10] Verizon, “Data Breach Investigations Report,” 2023.
[11] FireEye Mandiant, “M-Trends,” 2022.
[12] S. Zhou et al., “Devign,” NeurIPS 2019.
[13] Neo4j Documentation, 2024.
[14] Kubernetes Documentation, 2024.
[15] GitHub, “Actions Documentation,” 2024.
[16] OWASP, “Dependency-Check,” 2023.
[17] Black Duck Software, “Open Source Security Report,” 2023.
[18] U. Brandes, “A Faster Algorithm for Betweenness Centrality,” J. Math. Sociology, 2001.
[19] ISO/IEC 27034, “Application Security,” 2011.
[20] ENISA, “Threat Landscape,” 2023.