כיצד תאבטחו את אפליקציות ה-Microservices שלכם?

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

מקור: Unsplash

מאת עידו ופנר

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

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

מניעה

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

  • השתמשו במנגנון לניהול סודות – סודות הם לדוגמא סיסמאות, מפתחות הצפנה, API-keys  או כל אמצעי זיהוי אחר שה-Container שלכם זקוק לו כדי להזדהות או ל-microservice אחר. הרבה פעמים סודות נשמרים בקוד (לא טוב!) או בקובצי קונפיגורציה בתוך ה-image container (מאוד לא טוב!). כמו כן, שימו לב שכל תהליך ה-CI/CD שלכם מלא באותן סיסמאות גישה. פתרונות לניהול סודות מתחברים כפלאגין לתוך הפלטפורמה בה אתם משתמשים (k8s, Ansible, Terrafom, Jenkins  וכו׳) ומספקים את הסוד המוצפן אך ורק בזמן הצורך ובזמן הגישה. כך, כל הסודות מוגנים היטב ואתם מורידים את הסיכון שמישהו יוכל להשתלט על סיסמה או מפתח כלשהו, אם זה מתוך המערכת או מתוך הקוד. יש מספר חברות שמספקות פתרון כזה עם תמיכה במספר רב של פלטפורמות באמצעות פלאגינים שמתחברים אליהן.
  • להשתמש ב-HTTPS זאת התחלה טובה. בעולם ה-Microservices התקשורת בין הרכיבים ושירותים מתקשרים ב Rest API ועושים שימוש ב Http ברמת ה  Transport Layer. בעזרת Https נוכל לדעת עם מי אנחנו מתקשרים והצפנה, ומי שחושש להשתמש בתעודות (Certificates) ולהגדיר תהליכי אוטומציה, הפתרון מהיר וללא עלות שמנפיק גם תעודות וגם עוזר בתהליך האוטומציה. בעזרת Let’s Encrypt תוכלו לבצע זאת בקלות.
    הפתרון הזה תקף כמובן לצד שרת ולא לצד ה-Client. אם תרצו לאבטח גם את ה-Client Side, תצטרכו להקים שירות PKI. נכון שבעולם הזה לבצע אוטומציה זה לא פשוט ואף מאתגר מאוד, אך היום יש חברות שיכלו לסייע לכם בתחום. במקום להקים תשתית PKI של מיקרוסופט ואז להסתבך עם סקריפטי, תוכלו בקלות לשמור על התעודות שלכם במקום מאובטח Vault, ולנהל תהליך אוטומטי בקלות וכך תוכלו לדעת עם מי אתם מתקשרים גם בצד ה-Client.

  • שימוש בפרוטוקול 2.0 OAuth לצורך הזדהות (Authentication) – במקום להשתמש בסיסמה, השירות ינפיק לכם Token. השימוש בסיסמה הוא מסוכן ובעזרת ה-Token ניתן לקבל גישה למשאבים הנחוצים. 
  • השתמשו גם בהצפנת ה-DB שלכם – אל תנסו לכתוב קוד הצפנה, סביר להניח שאין לכם את המשאבים הנחוצים לכתוב הצפנה משלכם וזה לא משתלם. השתמשו בשירותי הצפנה של שירותי הענן. אם אתם לקוחות Azure למשל, יש לכם אפשרות להצפין את ה DB (Encryption at rest). למיטב זכרוני, היום כל DB חדש שאתם מקימים ב-Azure הוא מוצפן כברירת מחדל, אך אם לא, שווה לדאוג לכך שהוא יהיה מוצפן. השתמשו באלגוריתם הצפנה מסוג AES 256, כיום רוב החברות שמספקות שירותי ענן בין עם זה Azure או AWS תומכות ב-AES 256 – לא שמעתי עדיין על האקר שהצליח לפרוץ DB שמוצפן ברמת הצפנה כזאת.
  • סרקו את ה-Container Images שלכם – אם אתם מחפשים פתרון קוד פתוח, OpenScap יכול להיות אחת האופציות. אם אתם מחפשים פתרון עם תמיכה ועם יותר אפשרויות Red Hat Quay פתרון מעולה, אך כמובן שהייתי בודק חברות כמו Aqua Security ו-Twistlock הישראליות שמציעות פתרונות סריקה מתקדמים ל-Docker Images  
  • השתמשו ב-Security Updates – נכון שזה נשמע טריוויאלי, אך אתם תתפלאו כמה ארגונים לא מבצעים עדכונים על בסיס שבועי, חודשי ואז הסיכון עולה בהתאם. דאגו גם לשדרג את הגרסאות של ה-Linux שלכם, Java, PHP וכד’. אם אתם עושים שימוש בגרסאות ישנות, קחו בחשבון שאם אתם צריכים להעביר את האפליקציה ללקוח שלכם והוא מבצע Penetration Testing, אתם תצרכו לבצע את השדרוג בכל מקרה. אם הגרסה של ה-Java או ה-PHP Framework היא ישנה ואתם תתעלמו, בסוף זה יחזור אליכם ותצטרכו להשקיע מספר חודשים כדי לעדכן לגרסה העדכנית וחבל. 
  • סריקה אפליקטיבית –  לחשיפות לסיכון (Vulnerability Assessment)  – תוכלו לבצע סריקה באמצעות Nessus לכל השרת או לסריקה אפליקטיבית בלבד. התייחסו לדוח שקיבלתם וטפלו בחשיפות לפי רמת דחיפות. יש עוד מספר רב של כלים, אך Nessus הוא השכיח ביותר בשוק. 
  • ניטור של כל ה-Microservices – מאחר וכל הרכיבים והשירותים מתקשרים דרך הרשת, נצטרך מערכת ניטור אפליקטיבית ותשתיתית מתאימה, שתוכל לתת לנו תמונת מצב מה קורה עם האפליקציות שלנו וכיצד הן מתקשרות ביניהן. אם נזהה התנהגות חשודה נוכל לפעול באופן מידי. אני ממליץ לכל מי שעובד עם Kubernetes להשתמש בפתרון ניטור מסוג Prometheus. לאוהבי קוד פתוח זה אחלה פתרון ואפשר ליצור מספר Custom Dashboards לפי הצורך. 
  • שימוש ב-ISTIO – נותן מענה מעולה לניהול, ניטור ואבטחה של התקשורת בין ה-Microservices שלנו. הוא שילוב של מספר פרויקטים מהקוד-פתוח ועובד מעולה עם Openshift, PKS, TKG, K8s. אחד הכלים שאני מאוד אוהב זה Kiali שמאפשר לנו לקבל Service Graphs לרשת ה Mesh. 
  • שימוש בעקרון Defense-In-Depth – עקרון זה עוזר לנו לחלק את אבטחת המידע לשכבות (Layers) ולוודא שהצלחנו להגן על כל שכבה. אם האקר הצליח למצוא פריצה באפליקציה שלנו, אז השכבה הנוספת תעזור לנו למנוע גישה למקומות נוספים. 

איתור

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

  • סקירת הלוגים של האפליקציות – ודאו שהלוגים של האפליקציה שלכם מוגנים וכשתרצו לעבור על הלוגים ב-Elastic Search, Kibana, Logstash, הכל יהיה לכם נגיש ותוכלו לראות לפי הלוגים את סטטוס האפליקציה. 
  • שימוש בכלים חכמים לאיתור ההתקפה או הבעיה – Qualys אחד הכלים הטובים לניהול חשיפות, איתור וזיהוי סיכונים. יותר מכך, הוא גם עוזר לעמוד בתקנות ורגולציות. 
  • ניטור Containers והקוד שרץ בתוכם – Docker הפך להיות מאוד פופולרי בשנים האחרונות כתשתית להרצת Microservices ולכן אני ממליץ להשתמש ב-Prometheus פתרון קוד-פתוח שיעזור לנו לנטר את Kubernetes ו-Docker.  בנוסף, כלי נוסף בקוד-פתוח הוא Grafana, שיוכל לעזור לכם לבנות Dashboards, לראות את המספר ההודעות שיש לכם ב Queue, Web Avg Response Time, בקשות נכנסות ויוצאות, שימוש במשאבי מעבד של השירותים שפתחתם ועוד.
  • שימוש ב Web Application Firewall (WAF) – מי שרוצה להשתמש בכלי קוד-פתוח יכול להשתמש ב-ModSecurity במטרה להתגונן מפני מתקפה, לקבל תמונה רחבה מה קורה בתוך ה- HTTPS Traffic של הסביבה שלנו ב-Real-Time, לתת לנו גם Access Control ו-HTTP Traffic Login. 
  • ניטור סודות בקוד באמצעות כלי סריקה – Static Code Analysis – שימצאו לכם את הסיסמאות ומפתחות ההצפנה שנשכחו בתוך הקוד. ישנם מספר כלי OSS וכלים מסחריים לבצע זאת, וכמעט כולם מתממשקים לתהליך ה-CI/CD כך שהם אוטומטיים לחלוטין.

תגובה

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

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

כיצד לפעול:

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

שחזור

החלק האחרון הוא לשחזר את השרת או האפליקציה. אני מניח שרובנו עושים גיבויים ומאחר ואנחנו מפתחים אפליקציות בארכיטקטורת Microservices, יש לנו הרבה יותר גיבויים לעשות למספר גדול יותר של Datasets. שימוש ב-Velero יוכל לעזור לכם לגבות את האפליקציות שלכם על Kubernetes בצורה מהירה. כמובן שגם Velero הוא פרויקט קוד פתוח מעולה למי שמחפש פתרון קוד פתוח ומי שמחפש פתרון DR יכול להשתמש ב-CloudEndure. החברה נרכשה ע”י אמזון, והיום לכל מי שיש חשבון באמזון אני מאוד ממליץ להשתמש בה להקמת סביבת DR – וניתן גם לשחזר שרת או שירות בודד. מי שרוצה יכול להשתמש גם ב-Zerto שהוא פתרון מעולה וישראלי. אם אתם לקוחות של Azure תוכלו להשתמש ב-ASR על גבי הענן של Azure כדי להתאושש במהירות. 

כיצד לפעול

  • מחקו את הסביבה – מאחר ואתם עובדים על תשתית של Kubernetes, תוכלו לבנות את ה-Images מחדש בדקות אחדות. הדבר האחרון שאתם רוצים להמשיך לעבוד על Container שיש בו איזה Rootkit. לא לחשוב פעמיים אלא להוריד את הסביבה ולבנות מחדש
  • כבר היום, כשאתם קוראים את הכתבה, תעשו את כל המאמצים לשחזר את הסביבה שלכם בצורה אוטומטית מהשרתים עד בניית האפליקציה. אם אתם בונים את השרתים שלכם בצורה ידנית ואין לכם Pipeline של תהליך CD מלא, יקח לכם המון זמן לשחזר את הסביבה. אם אתם עובדים עם Puppet, Chef, Ansible תוכלו לבנות תהליך כזה בקלות. אני מציע לכל מנהל פיתוח לבנות תהליך CI/CD מלא ללא צורך במגע יד אדם – חוסך במשאבי זמן ועלויות
  • תבחנו את הגיבויים – אני מציע שכל מספר חודשים תבדקו האם אפשר לשחזר מאותם גיבויים ותוך כמה זמן לוקח לכם לשחזר, ואם השחזור לא תהליך אוטומטי, אל תחכו

מספר טיפים למנהלי אבטחת המידע:

  • אל תסמכו על גיבויים שלא בדקתם את תקינותם
  • אין לשמור תעודות על המחשב נייד שלכם או על איזה שרת בארגון שלמספר עובדים יש גישה אליו 
  • השתמשו ב-HSM
  • אל תשמרו Secrets ב-Kubernetes
  • אל תשמרו Secrets ב-Jenkins, גם לא בסביבות נמוכות, גם אם זה עוזר לכם בתהליך האוטומציה

 

 

 

הכותב הינו CTO, Head of R&D באמדוקס

 

Avatar

כתב אורח

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

הגב

14 תגובות על "כיצד תאבטחו את אפליקציות ה-Microservices שלכם?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
Flutterist
Guest

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

מישהו
Guest

כתבה מצוינת

מישהו
Guest

ערימה של שטויות

ניקו
Guest

כתבה מעולה! ממליץ קריאה אנשים :)

Expert
Guest

כתבה מאוד מקיפה, אהבתי

Devops engineer
Guest

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

CTO במייקרוסופט
Guest
CTO במייקרוסופט

גייקטיים כל אחד יכול לרשום מה הטייטל שלו ? אולי תבדקו זה יכול להטעות אנשים …

זוועה
Guest

“אפליקציות ה-Microservices שלכם”?
מאיפה הבאתם את הכותב הזה?

Tech lead
Guest

מאמר מקיף ומקצועי מאוד, אבטחת מידע בראש סדר העדיפויות.

Tech lead
Guest

מאמר מצוין על הדברים החשובים ביותר.

Cyber Expert
Guest

זאת בדיוק הבעיה. רוב צוותי הפיתוח שומרים secrets בכל מיני כלים: git, Jenkins וכד’…. צריך ללמד אותם איך לעבוד נכון ומסודר!

Thor
Guest

Security should be our first priority especially in the cloud

CISO
Guest

Great article about Micro-services security

CISO
Guest

Great article

wpDiscuz

תגיות לכתבה: