איך להפיל כל אתר שלישי מהמחשב הנייד שלכם

בתאריך 24 יוני, 2013

אני אספר על התקפה בשם Sockstress/Slowloris/Slow Read שמאפשרת כרגע להפיל בערך כל אתר שלישי באינטרנט, כי אף אחד לא טורח להתעדכן. ועל דרכים למניעתה.

איך להפיל כל אתר שלישי מהמחשב הנייד שלכם

איך זה עובד?

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

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

 

קצת היסטוריה

הראשונים שהציגו את ההתקפה Sockstress היו Outpost24 בספטמבר 2008. ההתקפה נהייתה פופולרית יותר תחת השם Slowloris, בזכות מנהל הבלוג ha.ckers, שבשנת 2009 הוציא תוכנה תחת אותו שם שמיישמת התקפה באותו עיקרון. התוכנה שימשה בין היתר להתקפת אתרים של שלטון איראן, כחלק ממחאה שהייתה באותו זמן בגלל הבחירות.

 

היום

היום אנחנו ב-2013 ועדיין רוב השרתים פגיעים להתקפה הזאת. ב-2011 יצאה תוכנה חדשה, שבה אני משתמש (למטרות שלום בלבד :)), העונה לשם SlowHTTPTest. היא מיישמת התקפה בשם Slow Read, שזה קצת שונה ממה ש-Slowloris עושה. בשונה ממנו, SlowHTTPTest עושה שאילתה רגילה לגמרי, אבל ברגע שהשרת מתחיל להחזיר תשובה, התוכנה אומרת שאין לה מקום בזיכרון, ואז השרת מתחיל לחכות ללקוח. פעם בכמה זמן התוכנה מורידה עוד קצת ביטים, כדי להחזיק את החיבור חי.

 

התקנת SlowHTTPTest

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

 tar -xzvf slowhttptest-x.x.tar.gz
 cd slowhttptest-x.x
 ./configure --prefix=PREFIX
 make
sudo make install

 

במקום PREFIX תרשמו את המקום המדויק על המחשב בו אתם רוצים להתקין את SlowHTTPTest.
אצלי באובונטו התוכנה ביקשה את g++ ואת libssl-dev. יכול להיות שכבר יש לכם, אם לא, אז באובונטו אתם יכולים להתקין את זה בצורה הזאת.

sudo apt-get install g++ libssl-dev
 
שימוש לדוגמה בתוכנה הזאת:
slowhttptest -c 1000 -u http://example.com
 
קצת יותר אגרסיבי:
slowhttptest -c 1000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u http://www.example.com -p 3
 
בכותרת הייתי אפילו קצת צנוע. לפי מה שבדקתי עד עכשיו, יותר מחצי מהאתרים הבינוניים בישראל נופלים אחרי הפקודה הזאת.
 

העיקר – איך מגנים על השרת מהתקפה הזאת

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

 

הגבלת כמות החיבורים של כל IP

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

sudo apt-get install libapache-mod-security
 
אחרי זה כנסו ל-etc/apache2/mods-enabled/mod-security.conf ותוסיפו את השורה הבאה איפשהו בין <IfModule security2_module> לבין </IfModule>:
SecWriteStateLimit 100
 
עכשיו בניסיון לתקוף את השרת שלכם, התוקף יראה שהשרת נפל, אבל רק כי בחיבור 101 שהוא יעשה עם השרת, הוא יחטוף באן IP (זמני).
ב-Log של השרת שלכם (var/log/apache2/error.log) יהיה רשום משהו כזה:
ModSecurity: Access denied with code 400. Too many threads [101] of 100 allowed in WRITE state from *.*.*.* - Possible DoS Consumption Attack [Rejected
 
צמצום זמן החיבור המקסימלי
אפשר לצמצם את זמן החיבור המקסימלי בעזרת המודול reqtimeout. הוא מותקן אוטומטית החל מגרסת Apache 2.2.15 במיוחד להגנה מההתקפה הזאת (אבל הוא לבד לא מספיק).
כנסו ל-etc/apache2/mods-enabled/reqtimeout.conf.
אם אתם לא משתמשים ב-SSL אתם יכולים להקטין משמעותית את המספרים, אני הגדרתי בצורה הזאת:
RequestReadTimeout header=1-2,minrate=500
RequestReadTimeout body=1,minrate=500
 
למידע נוסף
החור שעליו מבוססת התוכנה SlowHTTPTest הוא בקצרה – הלקוח יכול להגיד לשרת שיש לו 0 מקום בזיכרון, כך שהשרת יפסיק לשלוח לו מידע, אבל לא יסגור את החיבור. לא בקצרה:
 
הסבר מפורט על התוכנה SlowHTTPTest:
 
מפתח התוכנה SlowHTTPTest מציע גם הוא אפשרויות להגנה:
 
וכאן המפתח מסביר בפרוט איך התוכנה עובדת:
 
תודה שקראתם את הכתבה, אני מקווה שהאתרים שלכם מוגנים :)
מאמרים נוספים...