Table of Contents
מדוע API ללא שרת דורש חשיבה חדשה
אדריכלות ללא שרת שינתה את האופן שבו מפתחים בונים ופרות APIs.על ידי ניהול תשתיות מרוחקות, הצוותים יכולים להתמקד בקוד בעוד ספקים כמו AWS Lambda, Azure Functions ו-Google Cloud Functions להתמודד עם קשקשים, תיקון ושעות נוספות. עם זאת, השינוי הזה גם מציג קבוצה נפרדת של אבטחה מבוססת על עלויות לא גורמות יותר; התוקפים מתרחבים לשילוב של שירותים של צד שלישי, מקורות, וגילוי מחדש של אבטחה אמין, כדי להפעיל מגבלות על בסיס קבועות על בסיס קבועות.
מאמר זה בוחן את האיומים הנפוצים ביותר העומדים בפני ממשקי API ללא שרת ומספק שיטות מעשיות, מוכנות לייצור כדי להקל עליהם.אם אתה נודד נקודות קצה קיימות או בונה חדשים, אסטרטגיות אלה יעזרו לך להגן על הנתונים שלך, לשמור על זמינות, להישאר תואמים עם תקני התעשייה.
הבנת איומים משותפים ל- API ללא שרת
APIs ללא שרת פגיעים לאותן קטגוריות רחבות של התקפה כ- API מסורתיים - אי-הזרקה, אימות שבור, חשיפה נתונים - אך פרטי היישום שונים בשל האופי האנפימרי של פונקציות, השימוש בגורמים מונעים אירוע, וההסתמכות על שירותים מנוהלים.
התקפות הזריקה: יותר מ-SQL
התקפות הזריקה נותרו הסיכון העיקרי לכל ממשק API.בפונקציות חסרות השרת, הסכנה מוגברת משום שפונקציות מקבלות לעתים קרובות קלט ממקורות מרובים: בקשות HTTP, זרמי מסד נתונים, הודעות תור, אירועי אחסון אובייקטים, ועוד.אם פונקציה לא תאמת או סניפט את הקלט הזה, תוקף יכול להזריק קוד זדוני או פקודות.
וקטור מתפתח נוסף הוא (FLT:0) הזרקת הזרקת הזרקה 1:1 [התוקפים עשויים ליצור אירועים ממאירים (למשל, אירוע מזויף S3 או הודעת תור מתומרן) שגורם לתפקוד להתנהג באופן בלתי צפוי או דליף נתונים. כי פונקציות השרתות מופעלות לעתים קרובות באופן אוטומטי, אירוע מוזרק יחיד יכול לעגל שירותים רבים לפני כל הודעה אנושית.
גישה בלתי מאובחנת ותיקון שבור
ממשקי API ללא שרת מסתמכים לעתים קרובות על מפתחי API, או על אסימונים של OAuth 2.0, או לוגיקה אימות מותאם אישית.Weakly מיושמת אימות מאפשר לתוקפים לחדור למשתמשים לגיטימיים או להשיג זכויות גבוהות יותר. A נפילה נפוצה מסתמכת אך ורק על מפתח API שנשלח בפרמטר ראשי או שאילתה מבלי לוודא שהמפתח עדיין בתוקף או שייך למשתמש פעיל.
סביבות ללא שרת גם מסבך את האישור כי הגבול בין "משתמש" ו"תפקוד" הוא מטושטש. תוקף שמסכן פונקציה אחת יכול להיות מסוגל להפעיל פונקציות אחרות באותו חשבון אם תפקידי IAM הם אימפולסיביים מדי.זה ידוע בשם FLT:0-to-functional הסלמה פריבילטיבית ההסלמה 1.
מידע על Leakage ו-Exsure
נתונים רגישים יכולים להדליף באמצעות ממשקי API חסרי השרתים במספר דרכים. ראשית, פונקציות לעתים קרובות לייעל פרמטרים ותשובות למחיקה - אם הלוגים הללו נשלחים לשירות מרכזי עם גישה רחבה, סודות או PII ניתן להיחשף.שני, הודעות שגיאה שהוחזרו ללקוח עשויות להכיל עקבות ערימה המחשוף מאגרי מידע פנימיים, חיבורים, או מזהה משאבים ענן, משום שלעתים קרובות הם פונקציות זמניות של אחסון (Fed) של נתונים, או מ-AWS, או מ-APTS.
וקטור עדין אחר:0) דליפת נתונים של ערוצים באמצעות תזמון תזמון תגובה 1 (מתקפת) עשוי למדוד כמה זמן נדרש פונקציה להגיב ולפרור אם שם משתמש קיים במסד נתונים, המאפשר התקף שרפה של כוח-כוח.
הכחשת השירות (DoS) ו-Rehaustion
התקפות DDoS מסורתיות נועדו להציף רוחב פס רשת או יכולת שרת.בחינם, תוקף יכול לנצל את מודל תשלום-שימושי כדי לגרום להכחשה:0 (ההכחשה של שירות LIFLT:1 ), על ידי הצפה ב- API עם בקשות יעילות אך יקרות חישוביות, הם מפעילים את שטר הענן של הקורבן בעוד תנועה לגיטימית היא מכווצת או נשרה, הרבה שרת יש מגבלות מסחריות (מחץ על ידי הגבלת שירות מבוזר) של 1,000 ליטרים).
DoS יכול גם למקד את התלויות של הזרם.אם פונקציה מכנה API של צד שלישי (למשל, שער תשלום) ללא תקלות זמן או שוברי מעגלים מתאימים, שירות חיצוני איטי יכול לגרום לתפקוד לתלות, זמן ביצוע ולהשעיס את תקציב הזמן של הפונקציה.
תפקידים נוספים של IAM Over-Privileged IAM Roles
אולי האיום הספציפי המסוכן ביותר הוא תפקיד IAM שהוקצה לתפקוד.מפתחים לעתים קרובות מייחסים מדיניות רחבה (למשל, FLT 3 או FLT:4) לתפקוד "לעשות את זה עובד" במהלך הפיתוח, ולאחר מכן לשכוח להדק אותו בייצור. תוקף המנצל פגיעות בתפקוד כזה יכול לבצע כל פעולה המאפשרת לענן, לעתים קרובות לפעול על פני מערכת אחסון נתונים אחת או אחרת.
מעבר IAM, תצורה שגויה יכולה להתרחש בשערי API, הגדרות VPC, ושירותי כניסה.לדוגמה, דלי S3 המשמש לאחסון יומני תפקוד יכול להיות קורא בפומבי, או שלב של API Gateway עשוי להיות הגדרות של ReS כי הם lax, המאפשר גניבת נתונים חוצה-אוריג'ין.
שיטות טובות ביותר עבור ממשקי API ללא Server
מיגור האיומים לעיל דורש הגנה שכבתית המשתרעת על פני פיתוח, פריסה ושעות ריצה.
יישום Robust Authentication and Authorization
(הופנה מהדף ההגנה הראשון של הארגון, עבור ממשקי API ללא שרת, השתמש בפרוטוקולים סטנדרטיים בתעשייה כמו FLT:0OAuth 2.0of 2.0FLT:1 עם OpenID Connect או FLT:2 אמזון CognitoFLT 3 / FLT:4Auth 2.0FLT:5 להימנע ממימוש לוגיקה אימות משלך אלא אם כן הכרחי עבור מכונה-מכונה-מכונה, תכונות לטווח קצר רק כדי להשיג API, רק לאחר זמן קצר, רק כדי לקבל אישורים מראש.
הסמכות צריכה לעקוב אחר העיקרון של זכויות לפחות בכל רמה:
- שימוש ב-FLT:0) בקרת גישה מבוססת-החלל (RBACIRFLT) 1:1 כדי למפות את תפקידי המשתמש לנקודות קצה ספציפיות של API או הרשאות תפקוד.
- יישום:0 (תיקון:0) בקרת גישה מבוססת-בסיס (ABAC) 1 לקבלת החלטות בעלות ערך קנס על בסיס תגי משאבים או תכונות משתמש.
- ברמת הענן, להגביל את תפקידו של כל פונקציה ל בדיוק את הפעולות והמשאבים שהיא צריכה.לדוגמה, אם פונקציה רק צריכה לקרוא משולחן דינמו-DB אחד, תפקידו צריך לאפשר ל-FLT:5 על השולחן הזה ARN - לא יותר.
שקול באמצעות FLT:0 ,API Gateway Lambda AuthorizersFLT:1 (לשעבר Authorizers מותאם אישית) כדי מרכזי אימות אסימונים ואת הדור המדיניות.זה שומר את הלוגיקה של פונקציות בודדות והופך את זה קל יותר לביקורת.
2.אימות וסןיטיזציה של כל החפצים, בכל מקום
(הופנה מהדף HTTP TERP TERS, HTTP , לבקש גופים, ראשי תיבות, פרמטרים ואירועים משירותים אחרים (SNS, SQS, S3, וכו ') להשתמש בספריה אימות כגון FLT:0 ג'וייFLT:1 (Node.js), FLT2Cerberus FLT2: 3, וכו ') השתמש בספריהערכת שאילתות ישירות או גירסאות דינמיקה (D.
עבור פונקציות מונחות אירוע, לאמת את המבנה של אירועים נכנסים.לדוגמה, אם הפונקציה שלך מעבדת הודעות אירוע S3, לבדוק כי האירוע מכיל שדות צפויים וכי שם הדלי מתאים דפוס מותר. An התוקף יכול לשלוח אירוע מזויף S3 באמצעות נקודת קצה HTTP אשר מפעילה את הפונקציה.
בנוסף, סנייטיזציה של פלט למניעת זריקה רפלקטיבית.אם ה- API שלך מחזיר נתונים יישומיים למשתמש, לברוח ממנו כראוי להקשר (HTML, JSON, XML) כדי להימנע מתסריטים באתר (XSS) או התקפות הזריקה אחרות שמכוונות לצרכנים במורד הזרם.
3.הפחתת הריבית, Throttling, and Budget Alerts
הגבלת הריבית חיונית למניעת התקפות דוS והתעללות בחשבונות.Conform API Gateway או שער API של צד שלישי להגביל את בקשות הלקוח (על ידי מפתח API או IP) על חלון מזחלות.עבור פונקציות ללא שרת אשר נקראות ישירות (למשל, באמצעות AWS Lambda Function), לשקול שימוש ב-FLT:0Rened מטבע מבוזר 1FLT:1 ל- כמות של פעולות במקביל יכול למנוע תפקוד חד פעמי נגד קודים וקודים אלה.
מעבר לצמצום, להגדיר אזעקה של CloudWatch, כלומר, כאשר Lambda invocations עולה על מספר מסוים בשעה או כאשר עולה על עלייה בלתי צפויה של תחזיות הוא לעתים קרובות הסימן הראשון של התקפה.
4.המידע המוצפן במעבר ובמנוחה
תמיד לאכוף HTTPS עבור כל נקודות קצה API. השתמש ב- TLS 1.2 או גבוה יותר ולהבטיח כי תעודות הן בתוקף והגדרה נכונה. עבור תקשורת פנימית בין פונקציות ומאגרי מידע (למשל, Lambda ל- RDS), לאפשר הצפנה במעבר באמצעות TLS או להשתמש ב- VPC עם תת-נטים פרטיים הצפנה בשכבת ההובלה.
בכל מקרה, להצפין את כל הנתונים העוברים או מאוחסנים על ידי היישום חסר השרת שלך. השתמש מפתחי הצפנה מעובדים בענן (AWS KMS, Azure Key Vault, GCP Cloud KMS) עבור S3 דליים, טבלאות דינמוDB, ושירותי אחסון אחרים.עבור נתונים רגישים כמו אישורים משתמשים או PII, ליישם הצפנה ברמת היישום לפני כתיבת אחסון כך שאפילו מנהלי ענן לא יכולים לקרוא את הטקסט הפשוט.
השתמש בסודות ניהול והסביבה משתנה
(לא) מפתחות API קשיחים, סיסמאות מסד נתונים, או סודות אחרים בקובץ קוד או תצורה, השתמש במנהל סודות ייעודי כגון FLT:0AWS Secrets Manager of PowerFLT:1,FLT:2Zonee Key VaultFLT 3, או FLT:4HashiCorp Vault VFreave:5 Retrieve at Runtime (רצוי בזמן אמת)
להימנע מאחסן סודות במשתנה הסביבה של טקסט גלוי בקונסולת הענן או יומני CI /CD.אם אתה חייב להשתמש במשתנה הסביבה, לאפשר הצפנה עבורם (למשל, AWS Lambda לא צפין באופן מקורי את המשתנים בסביבה אלא אם אתה משתמש ב-FLT 6 או KMS אינטגרציה).
6. Monitor, Log, and alert Proactively
מיקום מרכזי ניטור ו ניטור הם קריטיים לזיהוי של אנומליות מוקדם. Enable מפורטת עבור Gateway API (לוגים הפעלה עם נתונים בקשה / אחריות) ולכל פונקציה באמצעות CloudWatch Logs או שווה ערך. השתמש ברישום מובנה כדי להקל על parse ו יומני שאילתה.עם זאת, להיזהר לא כדי להטמיע נתונים רגישים - החלת קידוד או לסנן שדות כמו סיסמאות, כדי להקל על מידע מזהה, ופרטים מזהה באופן אישי.
חשפו אזהרות לתבניות חשודות:
- ספייק ב 4xx או 5xx שגיאות
- עלייה בלתי רגילה במילוי של IP אחד
- גישה למשאבים שהתפקוד לא צריך להגיע אליהם בדרך כלל
- משך ביצוע גבוה או חזרות
ראה שימוש במידע אבטחה ענן וניהול אירועים (SIEM) כמו (FLT:0AWS Guard DutyFLT:1 עבור גילוי איום ספציפי השרת, או חלופה קוד פתוח כמו FLT:2WazuhcioFLT 3: 3 (FLT:4AWS Guard Duty for LambdaFillo:5 יכול לנפץ פונקציות כי הם מנסים לתקשר זדוני עם IP.
7.תלויים פונקציונליים מאובטחים ושרשרת האספקה
פונקציות ללא שרת מסתמכות לעתים קרובות על חבילות צד שלישי (npm, PyPI, NuGet) אלה יכולים להציג פרצות.ל לסרוק באופן קבוע את התלויות שלך באמצעות כלים כגון FLT:0SnykuaFLT:1, , (FLT:2OWASP תלות-CheckFLT 3: או הסורק התלות של ספק הענן שלך.
(ב) לדוגמה, (ב) ,0) , (ב) , (ב) , (ב) , (ב) , ).
8.החילה של הגנה ב- Depth for Event-Driven Architectures
APIs ללא שרת מסתמכים לעתים קרובות על אירועים סינכרוניים: פונקציות המופעלות על ידי תורי SQS, נושאים SNS, דינמויי סטרימינג או EventBridge. כל מקור אירוע מציג וקטורים פוטנציאליים של התקפה.
- (ב) אם פונקציה צורכת מהתור, תוקף יכול להזריק הודעות זדוניות.לקבוע גופים הודעות ולהשתמש תורים מתים כדי לבודד הודעות ממותגות לניתוח מאוחר יותר.
- (FLT:0)ynamoDB StreamsFLT:1: ודא שרק יישומים מורשים יכולים לכתוב לזרם; אחרת, תוקף יכול להוסיף אירועים של שינוי מזויף.
- (FLT:0) ,UtBridgeveFLT:1: הגבלות אשר חשבונות ושירותים יכולים לפרסם אירועים לאוטובוס האירוע שלך. השתמש בדפוסי אירועים כדי לסנן אירועים לא רצויים.
עבור כל נתיב מונחה אירוע, ליישם אימות קלט וליישם את אותם בדיקות אימות ואישור כפי שהיית עבור נקודות קצה HTTP.
9.הרדיקן התפעולי והפחתת התקפת המשטח
פונקציות ללא שרת צריכות להיות רזה ככל האפשר. Remove הרשאה בלתי משומשות, חבילות מיותרות, ולהימנע מהטמעת אישורים ארוכי טווח. השתמש באחסון אפסי (IRFLT:9) בזהירות: קבצים זמניים ברורים לאחר כל ייעוד, ולעולם לא לאחסן סודות שם.קבע זיכרון הולם וערכי זמן כדי להגביל את הפיצוץ של פונקציה פגום - זמן קצר יותר להפחית את החלון עבור חדירה נתונים.
בהתחשב בפריסת פונקציות בתוך VPC אם הם צריכים לגשת למשאבים פרטיים, אבל להיות מודעים לכך שתפקודי VPC-internal מאבדים גישה לנקודות קצה ציבוריות, אלא אם כן אתה מגדיר שער NAT. לחלופין, השתמש ב- NATFLT:0 (VPC Endpointssssssssssph1) כדי לגשת לשירותים כגון S3 או DDDB ללא ניתוק של האינטרנט.
10.לערוך ביקורת אבטחה רגילה ובדיקת החדירה
אבטחה אינה תצורה חד פעמית של מדיניות IAM, הגדרות של API Gateway ו יומני פונקציה. השתמש בכלים כמו FLT:0CloudSploitFLT:1, FLT:2ScoutSuiterovasFLT 3, או FLT:4ProwlerFLT:5 כדי לבדוק את הסביבה שלך עבור מוטציות מותאם אישית, בדיקות אבטחה, מוטציות ומניעה על ידי ספקי אבטחה רבים, כגון לוגיקה, בדיקות ענן.
(הופנה מהדף CI/CD שלך) לדוגמה, השתמש ב-FLT:0 (CheckovovirFLT:1 או FLT:2tfseccioFLT 3 כדי לסרוק את התשתית כקוד (Terraform, CloudFormation) עבור דפוסים לא מאובטחים, כגון תפקידי IAM עם הרשאות או פונקציות ברירות ללא הצפנה.
מסקנה
שמירה על ממשק API ללא שרת היא לא עניין של יישום כלי או הגדרה יחיד - זה דורש גישה רציפה, הגנה-בפנית-הגנה-בפנית.על ידי הבנת האיומים הייחודיים - הזרקת דרך אירועים, תפקידים IAM , דוחות כספיים, ודליפה נתונים באמצעות יומני היגיינה - אתה יכול לעצב את ה- API שלך כדי לעמוד בפני התקפות בכל שכבה.
זכור כי אחריות אבטחה השרתים: ספק הענן מבטיח את התשתית, אבל עליך לאבטח את הקוד שלך, הנתונים שלך, ואת הרשאות שלך.לבדוק באופן קבוע את הארכיטקטורה שלך נגד מסגרות כמו FLT:0AWS Well-Architected Security PillarsFLT 1 או FLT:2OWASPless Securitylam SheFLT 3 עם מעקב חיובי, ללא יעילות, וגמישות, ללא יעילות, ניתן לקצור את היתרונות של אבטחה, וגמישות, וגמישות, ללא יעילות, וגמישות, וכן הלאה.