יום חמישי, 11 בדצמבר 2014

סוני מעבדת את זה (ובדרך יוצרת תקדים מסוכן)...

הרבה זמן לא כתבתי כאן, אך הידיעה שקראתי היום בre/code מאוד הכעיסה אותי ולכן החלטתי לשטף איתכם את מחשבותי בנושא.
לאלה שלא מכירים את הנושא, אסביר במה מדובר - בסוף נובמבר, ב23, ליתר דיוק התבצע חדירה של האקרים לתוך סוני פיקצ׳רס, חטיבת הסרטים של סוני. ההאקרים לא הסתפקו בפריצה וגניבת מידע, ובנוסף השביתו את תחנות העבודה בכל סניפי החברה ( להזכירם, זו חברה בינלאומית!).


לאחר מס׳ ימים החומר שנגנב, פורסם בפייסט-בין ובעוד מקומות. העולם נחשף לתכתובות פנימיות של נציגי סוני, עורכי דין, סוכנים של אומנים, אנשי הפקה ועוד מידע רגיש. אחד ה״הברקות״ של הפריצה היתה תקיית Passwords אשר כוללה, כפי שניתן לתאר לפי השם, קבצי אקסל עם ססמאות לחשבונות החברה ברשתות חבריתיות ובאתרי יחסי ציבור.
       כפי שניתן לראות, בסיפור הזה סוני די נחשפה במערומיה, היא הנפגעת כאן והפצחנים הם העבריינים ללא כל ספק (בין אם מעשיה עסקיים של סוני הם אכזריים ובין אם לא, אף אחד לא נתן להאקרים רשות לעבור על החוק). 
       בעוד אירוע הפריצה לא הסתיים, החלה חברת סוני בנסיון לצמצום נזקים, אך משום מה היא בחרה (שוב) באמצעים לא כלכך כשרים. לפי דיווחי re/code, השתמשה סוני, לכאורה, בטכניקת השבתה מבוזרת (DDoS) מתוך דאטה סנטרים בטוקיו ובסינגפור על אתרים שבהם מוחזק, לטענתם, החומר שדלף בנסיון להאיט או למנוע לחלוטין הפצה של החומרים הללו. חלק מהאתרים אוחסנו על שרתי אמאזון, אשר מאחסנים תוכן לגיטימי של אתרים חשובים אחרים כגון נטפליקס. במילים פשוטות, סוני ביצע, לכאורה, התקפת DDoS על שרתים לגטימיים (ולא משנה מה הסיבה).

       המעשה הזה של סוני מעלה אצלי שאלות מוסריות קשות (ואני בכוונה לא מתייחס לשאלות אודות רמת אבטחת מידע בסוני או איך זה קרה להם - כל ארגון שעובד עם מחשבים הוא פוטנציאלית פגיע) :
    
   א. שאלה ראשונה היא אודות הנוהלים שקיימים למקרה שכזה בסוני. לקנות זמן רשותות בוט להתקפה או,אפילו יותר חמור, להשמיש חוות שרתים שלהם לצורך ההתקפה (אם זה מה שהיה) נראה כתרחיש שחשבו עליו בעבר ויישמו אותו לפי הנוהל.
   ב. למה תאגיד, ולא משנה כמה גדול יהיה, מותר, לכוארה, לבצע התקפות מבלי שאף אחד לא עוצר אותם. להזכירכם, התקפות DDoS הם עדיין מחוץ לחוק ולפי החוק האמריקאי, עונש על העבירה הזאת הוא עד 20 שנות מאסר. אם התקפה אכן התבצעה, זוהי הפרה בוטה של החוק, גם אם היא נעשתה על מנת להתגונן מהפושעים.
   ג. במידה והסיפור הזה יעבור בשקט, יש סיכוי שכמה ״חברה״ יצירתיים אצל יצרני ציוד הבטחת מידע יאמצו את השיטה בתור "countermeasures feature" של מערכות DDoS למשל, ואז בקלות אפשר להגיע למצב של ״תוהו ובוהו״ כאשר חברה אחת תוקפת חברה אחרת בכוונה, או, יותר גרוע, בגלל false positive. ראינו מס׳ פעמים איך תגובה רפה או חוסר תגובה בכלל מצד הרשויות נותנות ״אור ירוק״ ליצירת יכולות בעייתיות מוסרית (למשל ssl inspection).

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

יום רביעי, 4 ביוני 2014

מנוע החיפוש הטוב ביותר שאתה כנראה לא מכיר


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

DuckDuckGo הוא פרי יוזמתו של הבחור האמריקאי גבריאל ויינברג, והוא היה בחיתוליו עד שהחדשות של תכנית הריגול הנרחבת של הסוכנות לביטחון הלאומי פרצו לתודעה שלנו בשנה האחרונה. אבל בזמן שהעולם למד על PRISM ו"הגישה הישירה" של ממשלת ארה״ב לשרתים של חברות כמו גוגל, ויינברג והחברה שיסד צפו בטראפיק למנוע חיפוש שלהם מרקיע שחקים. DuckDuckGo, אחרי הכל, הוא מנוע החיפוש היחיד שמבטיח לא לעקוב אחר המשתמשים שלה ואף מציע להם אנונימיות מלאה. ותוצאות החיפוש שלה הן די טובות!

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

אם זה נשמע כמו משהו שאתה לא רוצה להיות חלק ממנו, תתחיל לחפש בDuckDuckGo. מאחר וDuckDuckGo משתמש בכ50 מקורות חיפוש כמו בינג, יאהו וולפראם אלפא, עבור שאילתות החיפוש שלו, אתה תקבל תוצאות שנראות דומות למה שמחזיר גוגל. DuckDuckGo אפילו משפר את מנועי חיפוש מסורתיים בכמה דרכים; הוא מסנן את התוצאות, מעיף קישורים ודואר זבל ותוכן לא רלוונטיים, כך שהתוצאות שלה הן טובה ונקיות. בינתיים, אפשרות חיפוש בעילום שם משמשת בTor לשליחת שאילתה שלך דרך סדרה של ממסרים מוצפנים. אתה אפילו יכול לעשות חיפוש קולי עם תוספות של Google Chrome החדש.

אבל יש גם חסרונות, כמו היעדר תכונת השלמה אוטומטית. וכמו במנוע חיפוש רגיל, DuckDuckGo גם לא ייתן לך תוצאות מדויקות כמו שהם היו אם השתמשו חיפוש אנכי כמו אלה באמזון, פייסבוק ו-YouTube. אבל אל תדאגו: DuckDuckGo חשב על זה, ויש לו פתרון שהוא מכנה Bang (שימו לב, זה לא Bing של מיקרוסופט). אתה יכול להפנות את החיפוש לאתרים ספציפיים על ידי הוספת קודים כמו "amazon", "!Fb", "!yt!" וכן הלאה לשאילתא החיפוש שלך. אפילו אפשר לבצע חיפוש רק של גוגל; רק תוסיף "g!" לחיפוש, וDuckDuckGo יפעל  בעילום שם בחיפוש בגוגל עבורך.

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

יום שישי, 11 באפריל 2014

ADC - התרופה ללב דולף...


  1. הדברים הידועים.
בשבוע שעבר התגלה באג במודול OpenSSL שאחראי על הצפנת SSL וTLS. מודול OpenSSL קיים ברב מערכות בפעלה של שרתי אינטרנט ורכיבים שעובדים עם הצפנות הללוהפגיעות כתוצאה מהבאג קיבלה שם Heartbleed מכיין שהבאג מאפשר לקרוא את הזיכרון הפעיל של מערכות שמוגנות על ידי גרסאות של מערכת ההצפנה, אם אותה מערכת כוללת את התקלה הזו
לפי מומחי סייבר, זאת הפגיעות הכי חמורה שהתגלתה על כה, והעובדה, שהגרסאות הפגיעות קיימות זה מכבר שנתיים לא מוסיפה לעניין, בלשון המעטה.
למען הסר ספק, להלן הגרסאות הפגיעות:
  • 1.0.1 עד 1.0.1f כולל
  • 1.0.2 בטא
כל גרסת OpenSSL אחרת לא פגיעה לheartbleed. בנוסף, ב7 לאפריל יצאה גרסה 1.0.1g אשר מתקנת את הבאג.
מתחקיר שערכתי, הופתעתי לגלות כי הרבה שרתי ווב (ואני לא מדבר כרגע על הגדולים כמו גוגל,$M, פייסבוק וכו׳) בעולם עדיין רצים עם גרסה 0.9.8y שהיא הגרסה הכי ״מפוצ׳פצ׳ת״ של 0.9.8, או עם 1.0.0 (שרתי RHEL 6.4 בעיקר). זה כנראה נובע מיציבות השרת וממורכבות של שדרוגים במערכות גודולות ומורכבות. השרתים הפגיעים היו לרב שירותי ענן למינהם. הסיבה לכך כנראה קשורה לזה שרב שירותי הענן קמו בשנתיים אחרונות ובהקמתם השתמשו בשרתים חדשים יחסית (למשל RHEL 6.5 הפגיע).

  1. איך מתגוננים מצד צרכן התוכן ?
בקצרה, אין כלכך מה לעשות בצד של הקליינט, אלה לחכות עד שהבאג יטופל בצד השרת (ע״י מפעיל של אותו שרת). אם מדובר באתר שגישה אליו מצריכה הזדהות, אני ממליץ להחליף ססמה בהקדם, to be on the safe side.


  1. איך מגינים על שרתים (הדרך הארוכה)
טיפול בבעיה מסוג כזה מצריכה שינויים בשרתי הייצור. משמעות מעשית של תיקן בעיית Heartbleed היא התקנת גרסה מתוקנת של OpenSSL בשרת, ופעולה שכזאת מעלה בד״כ חששות (ובצדק!) למנהלים התפעולים של השרת, כגון יציבותה של הגרסה החדשה, תקלות משביתות בזמן שדרוג של הגרסה, בעיות באינטגרציה עם מודולים קיימים, בעיות של חסימות false positives ברכיבי אבטחת מידע ועוד. כל אחת מהבעיות האלה יכולה לגרום להפסד כסף ע״י הפסקת שירות לפרקי זמן שונים.
הסיבה שקראתי לדרך הזאת ״דרך ארוכה״, היא בגלל שבפועל מרגע קבלת החלטה על דרך הפעולה, ועד הרגע ששרת נמצא בייצור עם הגרסה החדשה עובר די הרבה זמן. ישיבות יעוץ טכני, אישור אבטחת מידע, אישור תפעול, אישור ייצור בד״כ לוקחים זמן, ולא מעט.

  1. איך מתגוננים על שרתים (הדרך הקצרה)
השימוש בבקרי אספקת יישומים (Application Delivery Controllers – ADC) מבטל את הצורך בכל השלבים שתיארתי בסעיף הקודם, מאחר והבקרים בד״כ משתמשים במודולי הצפנה משלהם. בנוסף ישנם יצרנים, כמו למשל F5, אשר משלבים במוצרי ADC יכולות של Web Application Firewall – WAF שמאפשר איתור וחסימה של התקפה ע״י ניצול של באג Heartbleed )וכמובן, כל התקפת אפליקציה אחרת(. בכך הADC נותן אפשרות להמשיך ולרוץ עם שרת פגיע בייצור מבלי לבצע בו שיניים כלשהם. זה נותן ״אוויר״ לשילוב של תיקון לפגיעות בתוך לוח זמני תחזוקה רגילים בארגון.
יש כאלו שיגידו ״מה קצר בדרך הזאת ?״ - נכון, התקנה של ADC לקחת זמן (וכסף). אבל אני יכול להבטיח לכם שזה לא הבאג האחרון בשרתים, וגם לא ההתקפה האחרונה שמנצלת פגיעות כלשהי בשרת. לתווך ארוך, הADCים מצדיקים את ההשקעה, מאחר וחוץ מהיבט הבטחתי הם כמובן עושים את דברים שלהם יודע כגון בקרת עומסים, ssl offload, התמודדות עם התקפות DDoS וכו׳. מנסיוני, זאת לא הפעם הראשונה שADC מוכיחים את יעילותם בהתמודדות מול פגיעויות בשרתים ואני משוכנע שגם לא האחרונה.
בעיניי עבודה עם ADC היא הדרך הנכונה לטיפול בבעית כאלה. ברב הארגונים הגדולים בארץ עובדים עם ADCים כבר שנים, ואני פונה לאלה שעדיין לא הטמיעו ADCים מסיבות כאלה ואחרות.
אם אתם מעוניינים בעוד מידע על הנושא, אני וקולגות שלי בטלדור ישמחו לדבר איתכם על זה.
קובי ט

www.taldor.co.il

יום רביעי, 9 באפריל 2014

מכללת טרביצקי| פרק שני - DAF





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


מה זה מסד/בסיס נתונים ?

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

מהי חומת האש של מסד נתונים ?

חומות אש של מסד הנתונים (DAF - Database Firewalls) הן סוג של חומות אש אפליקטיביות העוקבות אחר מסדי נתונים כדי לזהות ולהגן מפני התקפות ספציפיות למסדי נתונים אשר בעיקר מבקשים לגשת למידע רגיש המאוחסן במאגרי המידע. DAF מאפשר גם לפקח ולבקר את כל הגישה לבסיס נתונים באמצעות היומנים. DAF יכול ליצור דוחות תאימות ספציפיים לתקנות, כגון PCI, SOX ועוד.

DAF הוא בדרך כלל שרת (אפליינס) או תוכנה מוקשחים שיכולים להיות מותקים גם באינליין מול שרת מסד הנתונים (ממש לפני ששרת מסד הנתונים או בקרבת הנתב/פיירוול רשתי כאשר הוא מגן על מסדי נתונים במספר רב של שרתים). בחלק ממוצרי DAF נותן להתקין אייג׳נט על שרתי מסד נתונים עצמם, כדי לפקח על אירועי מסד נתונים המקומיים. צורת התקנה נוספת היא בעזרת שיכפול תעבורה במתג וביצוע סניפינג ע״י DAF. בתצורה זאת ניתן לחסום עבירות ע״י שליחת פאקטת TCP Reset.


איך DAF עוזר בהגנה על איומים והתקפות ?

בדרך כלל, DAF כולל סט של חוקי audit המוגדרים מראש וניתנים להתאמה אישית, והם יכולים לזהות התקפות מסד נתונים המבוססים על דפוסי תקריות / איומים שנקראים 'חתימה'. לכן, הDAF משווה שאילתות SQL אל מול החתימות אללו, המתעדכנים בתדירות גבוהה על ידי היצרנים כדי לזהות התקפות ידועות במסד הנתונים (משימות רבות בתוך מסד נתונים מבוצעות כסדרה של שאילתות SQL).
אבל היצרנים לא יכולים לצפות כל ההתקפות על מסדי נתונים. לכן, DAF בונה (או מייבא) רשימה לבנה של שאילתות או פקודות SQL אשר ידועים כבטוחים. כל פקודוה או שאילתה נבדקת מול הרשימה הלבנה ורק כשהיא נמצאת ברשימה הלבנה היא נשלחת למסד הנתונים. חומות אש ל מסד הנתונים יכולות גם לשמור רשימה שחורה של פקודות או שאילתות SQL ספציפיות או ומזיקות ואינו מאפשרת להם גישה.
DAFים מסוימים יכולים גם לזהות את סוג מסד נתונים, מערכת ההפעלה ופגיעוית בפרוטוקול במסדי הנתונים ולהתריע למנהל, שיכול לנקוט בצעדים לתיקונם. הDAF יכול גם לנטר את התשובות שמסד נתונים מחזיר כדי לחסום זליגת נתונים פוטנציאלית. DAFים יכולות גם להתריע על פעילויות חשודות, במקום לחסום אותם מייד.
הזרקת SQL וBuffer Overflow הם הסוגים נפוצים של התקפות על מסד נתונים וDAFים יכולים לחסום התקפות כאלה. לפעמים, פרטי גישה גנובים עלולים לגרום לנסיונות פריצה למסד נתונים, אבל מאחר וDAF מנטר את הפעילות החשודה כל הזמן, הוא יזהה ניסיונות כאלה.
ישDAFים אשר בהחלטות שלהם לוקחים בחשבון גם גורמים כמו כתובת ה-IP, זמן, מיקום, סוג של יישומים, וכו, שמהם הDAF גוזר אם זאת בקשת גישה חריגה ולאחר מכן להחליט אם לחסום אותה או לא, בהתבסס על גורמים אלה ולפי המדיניות שנקבעה על ידי מנהל המערכת.

ההמלצות ליישום מוצלח של הגנה על מסד נתונים:

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


סקירה קצרה של מוצרי DAF

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

  • Imperva SecureSphere DAS

בעיניי זה אחד המוצרים הכי טובים והכי ותיקים בשוק. המוצר תומך ברוב מסדי נתונים הקיימים היום בשוק וניתן להתקינו בכל מצב עבודה אפשרי (כולל התקנת אייג׳נט). המוצר מורכב משרת ניהול (MX) ושרת אכיפה אחד או יותר (GW). המוצר מגיע עם סטים של חוקים לצרכים ביצוע auditים, סקרים והכנות לביקורות מסוגים שונים. מבחינת יכולות אכיפה ומדיניות זהו אחד המוצרים הכי גמישים לניהול ותפעול.ניתן לקבל את המוצר באפליינס או כמכונה וירטואלית

  • GreenSQL

שחקן ישראלי צעיר ורענן בתחום. למעשה קיימים שני מוצרים – אחד קוד-פתוח חינמי והשני - מסחרי עם יותר יכולות ותמיכה טכנית (מעולה, יש לומר). ניתן לקבל את המוצר כהתקנת של תוכנה בלבד (שרת וירטאלי). המוצר מגן על מסדי נתונים של חברת מיקרופט,PostgreSQL,MySQL וmariaDB. למוצר יש יכולות מיוחדות כגון ביצוע caching וmasking לשאילתות SQL. היום מדובר במוצר בשל והתקנתו ותפעולו קלים יחסית.

  • (Sentrigo Hedgehog (McAfee

מוצר של חברת סנטריגו (שנמכרה למקאפי ב-2011) מגן על מסדי נתונים כגון Oracle,MSSQL וsybase. הDAF הזה כולל קליינט שמותקן על שרתי מסד נתונים וקונסולת ניהול שמתקשרת עם הקליינטים. הקליינט מתריע לשרת הניהול במקרה של עבירה וזה מציג אותה למנהל.


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

יום שלישי, 8 באפריל 2014

אי שוויון לכולם





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

אני ממליץ בחום לראות את הסרט (שודר ביס דוקו). תנסו בvod או אצל הדוד מאמריקה.



מכללת טרביצקי| פרק ראשון - WAF



במהלך השנים האחרונות, התפתחה מגמה ברורה בתוך נוף של אבטחת המידע - יישומי אינטרנט (web applications) נמצאים תחת איומי סייבר. יישומי אינטרנט ימשיכו להיות וקטור עיקרי של התקפה לתוקפים ,והמגמה אינה מראה כל סימן של היחלשות. ניתן לייחס לתוקפים יותר ויותר התקפות מסוג Cross-site scripting , הזרקת SQL , ועוד טכניקות תקיפה אחרות שמטרתן לפרוץ דרך שכבת היישומים. נקודות תורפה ביישומי אינטרנט לדברי רבים, הוא יישום גרוע או חוסר יישום של אבטחת קוד,חוסר וידוי אימות קלט, ניהול session לא מאובטח , הגדרות מערכת שנקבעו לא כסדרם ופגיעויות במערכות הפעלה של השרת. אין ספק שכתיבת קוד מאובטח היא השיטה היעילה ביותר לצמצום נקודות תורפה ביישומי אינטרנט. עם זאת, ״כתיבת קוד מאובטח״ הרבה יותר קל לומר מאשר לעשות , ובדרך כלל זה כרוך במספר סוגיות מפתח. קודם כל, אין לארגונים רבים את הצוות או התקציב נדרש לעשות ביקורות קוד מלאים כדי לתפוס שגיאות . שנית, הלחץ לספק יישומי אינטרנט במהירות יכול לגרום לשגיאות ולעודד נוהלי פיתוח פחות מאובטחים. שלישית , בעוד שמוצרים המשמשים לניתוח יישומי אינטרנט הולכים ומשתפרים,  יש עדיין חלק גדול מהעבודה שחייבת להיעשות באופן ידני, והיא רגישה לטעויות אנוש. ארגונים חייבים לדגול בגישה של ״הגנה לעומק״ באבטחת תשתיות האינטרנט שלהם והיא חייבת לכלול פידבקים ממחלקות IT שונות כמו פיתוח האינטרנט , תפעול, תשתיות ,וצוותי סייבר.

טכנולוגיה אחת שיכולה לעזור באבטחה על תשתית יישומי אינטרנט היא חומת האש של יישומי אינטרנט.חומת האש של יישומי אינטרנט (WAF – Web Application Firewall) הוא מכשיר או יישום שרת שמנטר תעבורת HTTP/HTTPS בין דפדפן של לקוח ושרת אינטרנט בשכבת אפליקציה (Layer 7). ל-WAF יש יכולת לאכוף מדיניות אבטחה המבוססת על מגוון של קריטריונים, כולל חתימות של התקפות ידועות, אכיפת חריגות בסטנדרטים של הפרוטוקול ותעבורה חריגה.

ארכיטקטורת הWAF

  1. המיקום

התקנת WAF מבוסס אפליינס בדרך כלל תמוקם ישירות מאחורי חומת אש ארגונית ומול שרתי אינטרנט ארגוניים. ההתקנה לעתים קרובות נעשת בתצורה של reverse proxy. עם זאת, יש כמה פתרונות נוספים כמו חיבור לרשת במצב של ניתור בלבד (סניפר) או במצב inline . אם התקנה מבוססת רשת אינה מתאפשרת, לארגונים יש אפשרות אחרת כמו להתקין את יישומי WAF ישירות על גבי שרתי אינטרנט של הארגון ובכך לספק יכולות אכיפה דומות על ידי עיבוד תעבורה לפני שהוא מגיע לשרת האינטרנט או יישום.

  1. מודל אבטחה

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

  1. תצורות עבודה

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

  • Reverse-proxy -מצב פרוקסי ההפוך המלא הוא נפוץ ביותר ומאפשר להנות ממספר הכי גדול של יכולות של הWAF. במצב של reverse-proxy הWAF יושב בin-line וכל תעבורת הרשת עוברת דרך WAF .WAF מפרסם את כתובות ה-IP ואת כל התעבורה הנכנסת מסיתיימת בכתובות האלה. WAF אז מייצר בקשות לשרתי הווב מטעם הדפדפן המקורי. מצב זה הוא לעתים קרובות הכרחי לתכונות רבות נוספות שWAF עשוי לספק בשל היכולת של טרמינציה של השיחה (session). החסרון של מצב reverse-proxy הוא בהגדילת זמן ההשהיה שעלול ליצור בעיות עבור יישומים פחות סלחניים. אני בכוונה לא מציין את היכולת או החוסר יכולת של ניתוק הWAF במקרה של תקלה. לדעתי, לא יעלה על הדעת לאפשר מצב ללא אכיפת WAF, בדיוק כמו שלא יתכן מצב של החלפת הFW בנתב במקרה של תקלה.
  • Transparent proxy - כאשר נעשה שימש בפרוקסי שקוף, הWAF יושב בקו שבין חומת האש ושרת אינטרנט ופועל בדומה לפרוקסי הפוך אבל אין לו כתובת IP. מצב זה אינו דורש כל שינוי בתשתיות הקיימות, אך לא יכול לספק חלק מהשירותים נוספים יכול פרוקסי הפוך.
  • Layer 2 Bridge – במצב הזה הWAF יושב על הקו (על הכבל הפיזי ממש) שבין חומת האש ושרתי אינטרנט ופועל בדיוק כמו מתג שכבת 2. מצב זה מספק ביצועים גבוהים ולא מצריך שינויים משמעותיים ברשת, לעומת זאת אינו מספק את השירותים המתקדמים כמו שמצבי WAF אחרים עשויים לספק.
  • Network Monitor/Out-of-band/SPAN - במצב הזה, הWAF רק ״צופה״ על תעבורת רשת על ידי סניפינג מיציאת ניטור. מצב זה אידיאלי לבדיקת WAF  בסביבת בדיקות מבלי להשפיע על תעבורה. אם רוצים, הWAF עדיין יכול לחסום את התעבורה במצב זה על ידי השליחה פאקטות של TCP reset על מנת לנסות ולהפיל את התעבורה הלא רצויה.
  • Host/Server based – במצב זה הWAF מותקן על שרתי אינטרנט עצמן. Host-based WAF לא מספק תכונות נוספות שעמיתיהם מבוססי רשת עשויים לספק, לעומת זאת, יש להם את היתרון בכך שהם לא מהווים נקודת כשל שWAF מבוסס רשת יוצר, עצם היותו רכיב רשתי. Host-based WAF עשוי להגדיל את העומס על שרתי אינטרנט ולכן ארגונים צריכים להיות זהירים בעת הטמעת יישומי WAF על שרתים עמוסים או שרתים רגישים.


  1. יתרונות נוספים

מכשירי הWAF הם לעתים קרובות יכולים לתפקד גם כרכיבי בקרת עומסים של היישומים קיימים או כוללים תכונות נוספות כדי לשפר את האמינות וביצועים של יישומי אינטרנט. תכונות נוספות אלו יכולים לסייע ברכישת WAF כחלק משדרוג של מערך  הapplication delivery בארגונים שעדיין לא מיישמים את היכולות הללו. לא כל פתרונות WAF כוללות את היכולות הללו ואלו שכןלעיתים תלויים בשינויי במצב עבודה או בתוספת רישוי. בדרך כלל פריסה של reverse-proxy תתמוך בכל התכונות הללו.

  • Caching - הפחתת עומס על שרתי אינטרנט והגדלת ביצועים על ידי שימוש במטמון לעותקים של תוכן המבוקש באופן קבוע. בכך מקטין הWAF בקשות חוזרות ונשנות לשרתי הקצה.
  • Compression - על מנת לספק תעבורת רשת יעילה יותר, נדחוס תוכן אינטרנט מסוים באופן אוטומטי על ידי הWAF, ולאחר מכן התוכן נפרש על ידי הדפדפן.
  • SSL Acceleration – שימוש בהאצת SSL מבוסס חומרה בWAF מאפשר לזרז עיבוד SSL ולהפחית את העומס על שרתי קצה.
  • Load Balancing – פיזור של בקשות נכנסות על פני שרתי קצה מרובים, כדי לשפר את ביצועים ואמינות.
  • Connection Pooling – מעלה את היעילות בעבודה של TCP אל מול שרתי קצה בכך שהוא מאפשר מעבר של מספר רב של בקשות על באותו חיבור (session) מול שרת הקצה.

  1. מוצרים ופתרונות

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

  • ModSecurity 

זהו פתרון WAF חינמי מבוסס קוד-פתוח ומיועד להתקנה על שרתי ווב של Apache,IIS וNGINX.

  • F5 BigIP ASM
F5 מתמחה בפתרונות Application Delivery, וASM הוא מוצר הWAF שלה. הASM יושב על פלטפורמה רובוסטית הנקראת TMOS וכוללת בתוכה מנוע proxy סופר מהיר ויכולות שליטה בתעבורה ברמה מאוד גבוהה בכל שכבות הOSI ע״י שימוש בiRuleים. הASM משלב בתוכו גם את המודל השלילי וגם את החיובי ומכיל יכולות אכיפה עדכניות ביותר כמו למשל טיפול בCSRF, בדיקת העלאת קבצים מול מנוע אנטיוירוס, XML Firewall, מנוע חתימות, חסימות מבוססי מיקום גאוגרפי ועוד. ממשק ניהול של המוצר מאוד אינטואטיבי, מהיר ונוח וכולל מנוע דוחות ולוגים מהמתקדמים בתחום.למוצר הASM יש יכולת שרידות ע״י הפעלת אשכול של מס׳ מכונות. ניתן לקבל את המוצר הן על אפליינסים פיזים לפי רמת ביצועים והן את הגרסה הוירטואלית.

  • Imperva SecureSphere

כל המוצרים של אימפרווה הם מוצרי אבטחת מידע. זאת ההתמחות של החברה והיא פועלת כיום בשלוש תחומים – הגנה על אפליקציות ושרתי ווב, הגנה על מסדי נתונים והגנה על הקבצים. SecureSphere הוא פתרון הWAF של אימפרווה והוא אחד הוותיקים בתחום. ניתן להתקין את המוצר בכל תצורת רשת. המוצר בנוי מרכיב ניהול ורכיב אכיפה אחד או יותר. למוצר יש יכולת לגדול ע״י הוספת עוד ועוד רכיבי אכיפה וגם הוא משלב את שני המודלים ויכולותיו הקשורים לאבטחת המידע ואכיפה מאוד דומים לזה של F5. בנוסף יש לחברה מס׳ שיתופי פעולה מעניינים כמו למשל התקנת רכיבי אכיפה על פלטפורמת קרוסבים של חברת בלוקואט.

  • Foritnet FortiWeb

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




מכללת טרביצקי


היום החלטתי לעשות מעשה.
לאחרונה יצא לי לדבר עם כמה אנשי networking (וגם כמה אנשי אבטחת מידע, אבל אל תגלו...) ושמתי לב שהיום כמעט אין איש שמתעסק בתחום התקשורת ולא יודע מה זה Firewall או איך הFirewall פועל. לאומת זאת לרוב, כשמתחילים לדבר על WAF, application security לאנשים אין מושג על מה אני מדבר.
אתם בוודאי תגידו ״נו, אז מה הבעיה. איש נטוורקינג לא אמור להתעסק עם ציודי אבטחה. אולי זה יתרום להרחבת אופקים אבל אין לזה שום משמעות למה שאנשי נטוורקינג עושים״ - לא נכון!
האנשים הללו (ואני מדבר גם על הטכנאי רשת שמוסיף vlan וגם על הארכיטקט שבונה רשת חדשה) מעורבים בבניית תשתית או קבלת החלטות להכנת תשתית עבור רכיבי applicaiton security. לעתים, מחסור בידע טכנולוגי גורם לקבלת החלטות שמשליכות על אופן הטמעה של מוצר application securty כזה או אחר. בהרבה מקרים התוצאה של החלטה הזאת תשפיע על יעילות המוצר ואמינותו. לא פעם ראיתי לקוחות מחליפים מוצר app securty מעולה רק בגלל שגיאות שנעשו בתכנון הסביבה ובחירת תצורה שלא מתאימה להם.
על מנת לנסות ולשנות את המצב אני מתכוון לפרסם פוסטים שמסבירים ברמה בסיסית על טכנולוגיות של application security.
אני מקווה שאני אצליח לחדש או לסדר את הדברים בראש.
אה, ואם אתם מוזמנים להעיר לי או לתת הצעות לשיפור.

הפוסט הראשון בסדרה - WAF

תהנו,

קובי.

יום שני, 7 באפריל 2014

OpIsrael - סיכום ביניים

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

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

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

קובי.

יום ראשון, 30 במרץ 2014

OpIsrael '14 - מה אנחנו יודעים עד כה. (נכון ל30 למרץ)



בשנה הקודמת (וכן בספטמבר 2013 [OpIsraelReborn]) היו נסיונות רבים לפרוץ ולהפיל אתרים ממשלתיים שלא צלחו, לעומת זאת הייתה הצלחה ניכרת בכל הקשר ל-Mass Defacement והדלפות שונות (עדיין לא הצליחו להאפיל על ההדלפה של 0xomar מ-2012)

אז גם השנה הבטיחו לנו ואחד ״מסיבה״...


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

- התאריך למבצע OpIsreal נקבע ל 7 לאפריל 2014

- במהלך המבצע ה״האקרים״ ינסו לבצע השבתה (DoS/DDoS), השחתה (Defacement),
  השתלטות (Backdooring) והדלפה של מידע (Leaking).

- כפי הנראה, מדובר בשתי מתקפות אשר מתוכננות לאותו תאריך, אחת ממחזרת את השם
  ההתקפה בשנה שעברה #OpIsrael והשניה מופיעה עם שם חדש #OpIsraelBirthday

- מאחורי המתקפה הראשונה (OpIsrael) עומדת קבוצה בשם "Anonymous Arabs"
  ומאחורי השניה (OpIsraelBirthday) עומדת הקבוצה An0nGhost. כבר מהימים
  האחרונים החלו פריצות שונות שתוייגו תחת השם OpIsrael / OpIsraelBirthday.

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

אלה החמודים:

סרטים
Anonymous Arabs - OpIsrael
An0nGhost - OpIsraelBirthday

אתרים
מידע על OpIsrael 2013OpIsraelBirthday - Offcial Page
Digital Intifada - מידע על פריצות שונות שנעשות בעולם הערבי\מוסלמי

Op Israel בטויטר
רשימת מטרות לתקיפה

במקביל לפעולות כנגד מרחב הסייברספייס הישראל ישנם פעולות לצד השני, קבוצות "כובע-שחור" שונות החליטו כי הדרך הטובה ביותר להגנה היא התקפה. קבוצות "כובע-שחור" היו מאז ומתמיד, m0sad היא דוגמה מובהקת לכך ולאחר מכן ZionOps שהיו פעילים עד לא מזמן.
היורשים שלהם היום הם:
iEF - Israelite ויש להם גם פייסבוק ופורום
sTz Hackers


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

0 - לא להיות שאננים. ״זה עבד ככה עד עכשיו...״ - מתכון לבעיות.
1. מומלץ לבצע עדכון חתימות לכלל מערכות מבוססי חתימות
2. מומלץ לעבור על הpolicy של רכיבי אבטחת המידע ולהקשיחה במידת הצורך (גם אם זה 
   לתקופת המבצע). 
3. במידה וקיימת בארגון מערכת cyber forensics או מערכת הקלטת רשת אחרת, מומלץ לבדוק את 
   תקינותה ולבצע התאמות בסנני המערכת לנתוני המבצע (כתובות ip, ספי תעבורה, מדינות וכו׳).
4. לבצע גיבויים למערכות, ובמידה ומדובר במכונות וירטאליות, כדאי לשקול שכפול של רכיבי יצור 
   למקרה של נזק.
5. לבצע סקר אבטחת מידע ובדיקת חדירה (נו נו נו גדול למי שעדיין לא ביצע).
6. להתעדכן מצוותים אחרים בארגון (תקשורת,תפעול,הלפסק,פיתוח,יצור וכו׳) על כמות ומצב 
   התקלות איתם נכנסים לתקופת המבצע, וזאת על מנת לקבל תמונת מצב ברורה יותר ב תקופת 
   המבצע. בנוסף, גם סימולציית תרחישים יכולה לעזור ב״קרב״.
7. להערך עם כוח אדם זמין מכל הצוותים הרלוונטיים לתקופת המבצע.
8. הותקפתם ? מרגישים לא מוכנים ? יש שאלות ? - אני והקולגות שלי בטלדור נשמח לעזור לכם בכל
   הנושא שקשור למבצע  OpIsrael 2014 (בתחום הסייבר בכלל). Really.

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






Cross-Site Request Forgery (CSRF) Prevention

Introduction

Cross-Site Request Forgery (CSRF) is a type of attack that occurs when a malicious Web site, email, blog, instant message, or program causes a user’s Web browser to perform an unwanted action on a trusted site for which the user is currently authenticated. The impact of a successful cross-site request forgery attack is limited to the capabilities exposed by the vulnerable application. For example, this attack could result in a transfer of funds, changing a password, or purchasing an item in the user's context. In effect, CSRF attacks are used by an attacker to make a target system perform a function (funds Transfer, form submission etc.) via the target's browser without knowledge of the target user, at least until the unauthorized function has been committed.
Impacts of successful CSRF exploits vary greatly based on the role of the victim. When targeting a normal user, a successful CSRF attack can compromise end-user data and their associated functions. If the targeted end user is an administrator account, a CSRF attack can compromise the entire Web application. The sites that are more likely to be attacked are community Websites (social networking, email) or sites that have high dollar value accounts associated with them (banks, stock brokerages, bill pay services). This attack can happen even if the user is logged into a Web site using strong encryption (HTTPS). Utilizing social engineering, an attacker will embed malicious HTML or JavaScript code into an email or Website to request a specific 'task url'. The task then executes with or without the user's knowledge, either directly or by utilizing a Cross-site Scripting flaw (ex: Samy MySpace Worm).
For more information on CSRF, please see the OWASP Cross-Site Request Forgery (CSRF) page.

Prevention Measures That Do NOT Work

Using a Secret Cookie

Remember that all cookies, even the secret ones, will be submitted with every request. All authentication tokens will be submitted regardless of whether or not the end-user was tricked into submitting the request. Furthermore, session identifiers are simply used by the application container to associate the request with a specific session object. The session identifier does not verify that the end-user intended to submit the request.

Only Accepting POST Requests

Applications can be developed to only accept POST requests for the execution of business logic. The misconception is that since the attacker cannot construct a malicious link, a CSRF attack cannot be executed. Unfortunately, this logic is incorrect. There are numerous methods in which an attacker can trick a victim into submitting a forged POST request, such as a simple form hosted in an attacker's Website with hidden values. This form can be triggered automatically by JavaScript or can be triggered by the victim who thinks the form will do something else.

Multi-Step Transactions

Multi-Step transactions are not an adequate prevention of CSRF. As long as an attacker can predict or deduce each step of the completed transaction, then CSRF is possible.

URL Rewriting

This might be seen as a useful CSRF prevention technique as the attacker can not guess the victim's session ID. However, the user’s credential is exposed over the URL.

General Recommendation: Synchronizer Token Pattern

In order to facilitate a "transparent but visible" CSRF solution, developers are encouraged to adopt the Synchronizer Token Pattern (http://www.corej2eepatterns.com/Design/PresoDesign.htm). The synchronizer token pattern requires the generating of random "challenge" tokens that are associated with the user's current session. These challenge tokens are then inserted within the HTML forms and links associated with sensitive server-side operations. When the user wishes to invoke these sensitive operations, the HTTP request should include this challenge token. It is then the responsibility of the server application to verify the existence and correctness of this token. By including a challenge token with each request, the developer has a strong control to verify that the user actually intended to submit the desired requests. Inclusion of a required security token in HTTP requests associated with sensitive business functions helps mitigate CSRF attacks as successful exploitation assumes the attacker knows the randomly generated token for the target victim's session. This is analogous to the attacker being able to guess the target victim's session identifier. The following synopsis describes a general approach to incorporate challenge tokens within the request.
When a Web application formulates a request (by generating a link or form that causes a request when submitted or clicked by the user), the application should include a hidden input parameter with a common name such as "CSRFToken". The value of this token must be randomly generated such that it cannot be guessed by an attacker. Consider leveraging the java.security.SecureRandom class for Java applications to generate a sufficiently long random token. Alternative generation algorithms include the use of 256-bit BASE64 encoded hashes. Developers that choose this generation algorithm must make sure that there is randomness and uniqueness utilized in the data that is hashed to generate the random token.
  <form action="/transfer.do" method="post">
  <input type="hidden" name="CSRFToken" 
  value="OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWE...
  wYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZ...
  MGYwMGEwOA==">
  …
  </form>
In general, developers need only generate this token once for the current session. After initial generation of this token, the value is stored in the session and is utilized for each subsequent request until the session expires. When a request is issued by the end-user, the server-side component must verify the existence and validity of the token in the request as compared to the token found in the session. If the token was not found within the request or the value provided does not match the value within the session, then the request should be aborted, token should be reset and the event logged as a potential CSRF attack in progress.
To further enhance the security of this proposed design, consider randomizing the CSRF token parameter name and or value for each request. Implementing this approach results in the generation of per-request tokens as opposed to per-session tokens. Note, however, that this may result in usability concerns. For example, the "Back" button browser capability is often hindered as the previous page may contain a token that is no longer valid. Interaction with this previous page will result in a CSRF false positive security event at the server. Regardless of the approach taken, developers are encouraged to protect the CSRF token the same way they protect authenticated session identifiers, such as the use of SSLv3/TLS.

Disclosure of Token in URL

Many implementations of this control include the challenge token in GET (URL) requests as well as POST requests. This is often implemented as a result of sensitive server-side operations being invoked as a result of embedded links in the page or other general design patterns. These patterns are often implemented without knowledge of CSRF and an understanding of CSRF prevention design strategies. While this control does help mitigate the risk of CSRF attacks, the unique per-session token is being exposed for GET requests. CSRF tokens in GET requests are potentially leaked at several locations: browser history, HTTP log files, network appliances that make a point to log the first line of an HTTP request, and Referer headers if the protected site links to an external site.
In the latter case (leaked CSRF token due to the Referer header being parsed by a linked site), it is trivially easy for the linked site to launch a CSRF attack on the protected site, and they will be able to target this attack very effectively, since the Referer header tells them the site as well as the CSRF token. The attack could be run entirely from javascript, so that a simple addition of a script tag to the HTML of a site can launch an attack (whether on an originally malicious site or on a hacked site). This attack scenario is easy to prevent, the referer will be omitted if the origin of the request is HTTPS. Therefore this attack does not affect web applications that are HTTPS only.
The ideal solution is to only include the CSRF token in POST requests and modify server-side actions that have state changing affect to only respond to POST requests. This is in fact what the RFC 2616 requires for GET requests. If sensitive server-side actions are guaranteed to only ever respond to POST requests, then there is no need to include the token in GET requests.
In most JavaEE web applications, however, HTTP method scoping is rarely ever utilized when retrieving HTTP parameters from a request. Calls to "HttpServletRequest.getParameter" will return a parameter value regardless if it was a GET or POST. This is not to say HTTP method scoping cannot be enforced. It can be achieved if a developer explicitly overrides doPost() in the HttpServlet class or leverages framework specific capabilities such as the AbstractFormController class in Spring.
For these cases, attempting to retrofit this pattern in existing applications requires significant development time and cost, and as a temporary measure it may be better to pass CSRF tokens in the URL. Once the application has been fixed to respond to HTTP GET and POST verbs correctly, CSRF tokens for GET requests should be turned off.

Viewstate (ASP.NET)

ASP.NET has an option to maintain your ViewState. The ViewState indicates the status of a page when submitted to the server. The status is defined through a hidden field placed on each page with a <form runat="server"> control. Viewstate can be used as a CSRF defense, as it is difficult for an attacker to forge a valid Viewstate. It is not impossible to forge a valid Viewstate since it is feasible that parameter values could be obtained or guessed by the attacker. However, if the current session ID is added to the ViewState, it then makes each Viewstate unique, and thus immune to CSRF.
To use the ViewStateUserKey property within the Viewstate to protect against spoofed post backs. Add the following in the OnInit virtual method of the Page-derived class (This property must be set in the Page.Init event)
  protected override OnInit(EventArgs e) {
     base.OnInit(e); 
     if (User.Identity.IsAuthenticated)
        ViewStateUserKey = Session.SessionID; }
The following keys the Viewstate to an individual using a unique value of your choice.
   (Page.ViewStateUserKey)
This must be applied in Page_Init because the key has to be provided to ASP.NET before Viewstate is loaded. This option has been available since ASP.NET 1.1.
However, there are limitations on this mechanism. Such as, ViewState MACs are only checked on POSTback, so any other application requests not using postbacks will happily allow CSRF.

Double Submit Cookies

Double submitting cookies is defined as sending a random value in both a cookie and as a request parameter, with the server verifying if the cookie value and request value are equal.
When a user authenticates to a site, the site should generate a (cryptographically strong) pseudorandom value and set it as a cookie on the user's machine separate from the session id. The site does not have to save this value in any way. The site should then require every sensitive submission to include this random value as a hidden form value (or other request parameter) and also as a cookie value. An attacker cannot read any data sent from the server or modify cookie values, per the same-origin policy. This means that while an attacker can send any value he wants with a malicious CSRF request, the attacker will be unable to modify or read the value stored in the cookie. Since the cookie value and the request parameter or form value must be the same, the attacker will be unable to successfully submit a form unless he is able to guess the random CSRF value.
Direct Web Remoting (DWR) Java library version 2.0 has CSRF protection built in as it implements the double cookie submission transparently.

Encrypted Token Pattern

Overview

The Encrypted Token Pattern leverages an encryption, rather than comparison, method of Token-validation. After successful authentication, the server generates a unique Token comprised of the user's ID, a timestamp value and a nonce, using a unique key available only on the server. This Token is returned to the client and embedded in a hidden field. Subsequent AJAX requests include this Token in the request-header, in a similar manner to the Double-Submit pattern. Non-AJAX form-based requests will implicitly persist the Token in its hidden field, although I recommend persisting this data in a custom HTTP header in such cases. On receipt of this request, the server reads and decrypts the Token value with the same key used to create the Token.

Validation

On successful Token-decryption, the server has access to parsed values, ideally in the form of claims. These claims are processed by comparing the UserId claim to any potentially stored UserId (in a Cookie or Session variable, if the site already contains a means of authentication). The Timestamp is validated against the current time, preventing replay attacks. Alternatively, in the case of a CSRF attack, the server will be unable to decrypt the poisoned Token, and can block and log the attack.
This pattern exists primarily to allow developers and architects protect against CSRF without session-dependency. It also addresses some of the shortfalls in other stateless approaches, such as the need to store data in a Cookie, circumnavigating the Cookie-subdomain and HTTPONLY issues.

CSRF Prevention without a Synchronizer Token

CSRF can be prevented in a number of ways. Using a Synchronizer Token is one way that an application can rely upon the Same-Origin Policy to prevent CSRF by maintaining a secret token to authenticate requests. This section details other ways that an application can prevent CSRF by relying upon similar rules that CSRF exploits can never break.

Checking The Referer Header

Although it is trivial to spoof the referer header on your own browser, it is impossible to do so in a CSRF attack. Checking the referer is a commonly used method of preventing CSRF on embedded network devices because it does not require a per-user state. This makes a referer a useful method of CSRF prevention when memory is scarce. This method of CSRF mitigation is also commonly used with unauthenticated requests, such as requests made prior to establishing a session state which is required to keep track of a synchronization token.
However, checking the referer is considered to be a weaker from of CSRF protection. For example, open redirect vulnerabilities can be used to exploit GET-based requests that are protected with a referer check and some organizations or browser tools remove referrer headers as a form of data protection. There are also common implementation mistakes with referer checks. For example if the CSRF attack originates from an HTTPS domain then the referer will be omitted. In this case the lack of a referer should be considered to be an attack when the request is performing a state change. Also note that the attacker has limited influence over the referer. For example, if the victim's domain is "site.com" then an attacker have the CSRF exploit originate from "site.com.attacker.com" which may fool a broken referer check implementation. XSS can be used to bypass a referer check.
In short, referer checking is a reasonable form of CSRF intrusion detection and prevention even though it is not a complete protection. Referer checking can detect some attacks but not stop all attacks. For example, if you HTTP referrer is from a different domain and you are expecting requests from your domain only, you can safely block that request.

Checking The Origin Header

The Origin HTTP Header standard was introduced as a method of defending against CSRF and other Cross-Domain attacks. Unlike the referer, the origin will be present in HTTP request that originates from an HTTPS url.
If the origin header is present, then it should be checked for consistency.

Challenge-Response

Challenge-Response is another defense option for CSRF. The following are some examples of challenge-response options.
  • CAPTCHA
  • Re-Authentication (password)
  • One-time Token
While challenge-response is a very strong defense to CSRF (assuming proper implementation), it does impact user experience. For applications in need of high security, tokens (transparent) and challenge-response should be used on high risk functions.

Client/User Prevention

Since CSRF vulnerabilities are reportedly widespread, it is recommended to follow best practices to mitigate risk. Some mitigating include:
  • Logoff immediately after using a Web application
  • Do not allow your browser to save username/passwords, and do not allow sites to “remember” your login
  • Do not use the same browser to access sensitive applications and to surf the Internet freely (tabbed browsing).
  • The use of plugins such as No-Script makes POST based CSRF vulnerabilities difficult to exploit. This is because JavaScript is used to automatically submit the form when the exploit is loaded. Without JavaScript the attacker would have to trick the user into submitting the form manually.
Integrated HTML-enabled mail/browser and newsreader/browser environments pose additional risks since simply viewing a mail message or a news message might lead to the execution of an attack.

No Cross-Site Scripting (XSS) Vulnerabilities

Cross-Site Scripting is not necessary for CSRF to work. However, any cross-site scripting vulnerability can be used to defeat token, Double-Submit cookie, referer and origin based CSRF defenses. This is because an XSS payload can simply read any page on the site using a XMLHttpRequest and obtain the generated token from the response, and include that token with a forged request. This technique is exactly how the MySpace (Samy) worm defeated MySpace's anti CSRF defenses in 2005, which enabled the worm to propagate. XSS cannot defeat challenge-response defenses such as Captcha, re-authentication or one-time passwords. It is imperative that no XSS vulnerabilities are present to ensure that CSRF defenses can't be circumvented. Please see the OWASP XSS Prevention Cheat Sheet for detailed guidance on how to prevent XSS flaws.

Authors and Primary Editors

Paul Petefish - paulpetefish[at]solutionary.com
Eric Sheridan - eric[at]infraredsecurity.com
Dave Wichers - dave.wichers[at]aspectsecurity.com
Source: OWASP