שאלה התמודדות עם התקפות HTTP w00tw00t


יש לי שרת עם Apache ואני לאחרונה מותקן mod_security2 כי אני מקבל הותקף הרבה על ידי זה:

גירסת אפאצ 'י שלי הוא Apache v2.2.3 ואני משתמש mod_security2.c

אלה היו הרשומות ביומן השגיאות:

[Wed Mar 24 02:35:41 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:31 2010] [error] 
[client 202.75.211.90] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:48:03 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

הנה השגיאות של access_log:

202.75.211.90 - - 
[29/Mar/2010:10:43:15 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:11:40:41 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:12:37:19 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-" 

ניסיתי להגדיר את mod_security2 כך:

SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"

הדבר ב mod_security2 כי SecFilterSelective לא ניתן להשתמש, זה נותן לי שגיאות. במקום זאת אני משתמש כלל כזה:

SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"

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

עדכון 1

אני רואה שאף אחד לא יכול לפתור את הבעיה באמצעות mod_security. עד כה באמצעות טבלאות ה- IP נראה כמו האפשרות הטובה ביותר לעשות את זה אבל אני חושב הקובץ יהפוך גדול מאוד, כי השינויים ב- ip פעמים Serveral ביום.

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

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

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

עדכון 2

אחרי שהלכתי לתשובות הגעתי למסקנות הבאות.

  1. כדי לקבל רישום מותאם אישית עבור apache יצרוך כמה recourses מיותרים, ואם באמת יש בעיה אתה כנראה רוצה להסתכל על יומן מלא ללא שום דבר חסר.

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

מחשבות סופיות על הנושא

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

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

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

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

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


80
2018-03-24 05:33






תשובות:


ביומן השגיאה הם שולחים בקשת HTTP / 1.1 ללא החלק Host: של הבקשה. לפי מה שאני קורא, Apache משיב עם שגיאה 400 (בקשה גרועה) לבקשה זו, לפני מסירה ל mod_security. לכן, זה לא נראה כמו הכללים שלך יעובדו. (אפאצ 'י להתמודד עם זה לפני שתצטרך למסור mod_security)

נסה בעצמך:

שם המארח
GET /blahblahblah.html HTTP / 1.1 (Enter)
(להיכנס)

אתה צריך לקבל את שגיאת 400 ולראות את אותה שגיאה ביומני שלך. זוהי בקשה גרועה ואפאצ'י נותן את התשובה הנכונה.

בקשה נכונה צריכה להיראות כך:

GET /blahblahblah.html HTTP / 1.1
מארח: blah.com

עבודה סביב בעיה זו יכולה להיות תיקון mod_uniqueid, כדי ליצור מזהה ייחודי אפילו עבור בקשה כושלת, על מנת אפאצ 'י מעביר את הבקשה על המטפלים הבקשה שלה. כתובת האתר הבאה היא דיון על עבודה זו, וכוללת תיקון עבור mod_uniqueid שניתן להשתמש בו:   http://marc.info/?l=mod-security-users&m=123300133603876&w=2

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


34
2018-03-29 13:17



אני רואה את הבעיה עכשיו. האם אתה ממליץ על הפתרון שסופק במאמר, או שאתה חושב שלה עדיף פשוט להשאיר אותו כפי שהוא. זהו סורק עבור כל הדלתות האחוריות במערכת. אם אני משאיר את זה רק סריקה, אני יכול יום אחד לקבל הותקף. - Saif Bechan
שלום סייף, אני חושב כל עוד אתה שומר את ההתקנה של אפאצ 'י שלך מעודכן עם הפצות שלך (או ידנית) תיקוני אבטחה אתה צריך להיות בסדר. בקשת HTTP / 1.1 בעלת מבנה לא תקין (כפי שהיית רואה) לא אמורה להחזיר שום דבר מלבד שגיאה 400 מאפאצ'י. זה נראה כמו זה מאי היה איזה פגיעות סריקה ממוקדת נתבים DLink. (על פי מקורות אחרים) - Imo
האם יש לפחות דרך להגיע אלה שדות מתוך error_log Apache שלי - Saif Bechan
אתה אולי מסוגל לעשות זאת באמצעות mod_log :: httpd.apache.org/docs/2.2/mod/mod_log_config.html#customlog - Imo
הרמז הנוסף שלי יהיה: להגדיר את ברירת המחדל וירטואלי ליד אלה בפועל בשימוש. הניסיונות שהוזכרו לעיל יסתיים ביומני עבור ברירת המחדל . - Koos van den Hout


סינון כתובות IP הוא לא רעיון טוב, imho. למה לא לנסות לסנן את המחרוזת שאתה מכיר?

אני מתכוון:

iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'GET /w00tw00t' -j DROP

15
2018-05-09 16:21



spamcleaner.org/en/misc/w00tw00t.html פתרון דומה, אבל קצת יותר מפורט. - Isaac
בעיה אחת עם סינון מחרוזת בחומת האש היא כי היא "איטית למדי". - Alexis Wilke
@AlexisWilke יש לך ראיות כדי להציע כי iptables מחרוזת סינון הוא איטי יותר מאשר סינון ברמה אפאצ 'י? - jrwren


Iv התחיל לראות גם סוגים אלה של הודעות בקבצי היומן שלי. אחת הדרכים למנוע סוגים אלה של התקפות היא setup failban ( http://www.fail2ban.org/ ) ולהגדיר מסננים ספציפיים לרשימה השחורה של כתובת ה- IP בכללי iptables שלך.

Heres דוגמה של מסנן זה היה לחסום את כתובת ה- IP הקשורים עם ביצוע הודעות אלה

[Tue Aug 16 02:35:23 2011] [error] [client] הקובץ אינו קיים: /var/www/skraps/w00tw00t.at.blackhats.romanian.anti-sec :) === apache w00t w00t הודעות בכלא - regex ו מסנן === כלא

 [apache-wootwoot]
 enabled  = true
 filter   = apache-wootwoot
 action   = iptables[name=HTTP, port="80,443", protocol=tcp]
 logpath  = /var/log/apache2/error.log
 maxretry = 1
 bantime  = 864000
 findtime = 3600

מסנן

 # Fail2Ban configuration file
 #
 # Author: Jackie Craig Sparks
 #
 # $Revision: 728 $
 #
 [Definition]
 #Woot woot messages
 failregex = ^\[\w{1,3} \w{1,3} \d{1,2} \d{1,2}:\d{1,2}:\d{1,2} \d{1,4}] \[error] \[client 195.140.144.30] File does not exist: \/.{1,20}\/(w00tw00t|wootwoot|WootWoot|WooTWooT).{1,250}
 ignoreregex =

11
2017-08-19 17:46



זה נכון שאתה יכול לחסום אותם, אבל אין צורך כי הם רק בקשות רע. עדיף פשוט להתעלם מהם, הציל את העבודה ואתה תשחרר כמה recources. - Saif Bechan
מימין @ סיף Bechan, אם מישהו דואג כי "בדיקות התקפות" כדי להצליח, הוא / היא צריכה לתקן את היישום במקום במקום לבזבז זמן כדי למצוא דרך לחסום את זה. - Thomas Berger
נתן לך +1, תודה על התשובה. - Saif Bechan
@SififBechan, אני לא מסכים. w00tw00t הוא פגיעות סורק, ומכונה כי הוא הנפקת בקשות כאלה לא ניתן לסמוך על ניסיון סוגים אחרים של בקשות, אז אם אני מנהל מערכת וזה לוקח לי 2 דקות כדי לאסור לקוחות כאלה במשך ימים, אני "אני אעשה זאת. לא הייתי מבסס את כל הביצוע הביטחוני שלי על גישה כזו, אם כי. - Isaac


w00tw00t.at.blackhats.romanian.anti-sec הוא ניסיון פריצה ומשתמש הזייף IP של כך חיפושי כגון VisualRoute ידווח סין, פולין, דנמרק וכו 'על פי ה- IP להיות seconded באותו זמן. אז הגדרת IP להכחיש או פתרון hostvable מארח הוא גם לא אפשרי כמו שזה ישתנה בתוך שעה.


3
2018-06-01 11:20



סריקות פגיעות אלה אינן משתמשות בכתובות IP מזויפות. אם הם עשו זאת, לחיצת היד של 3 TCP לא תושלם, ואפאצ'י לא ירשום את הבקשה. עבור אזהרות (ISP נוכלים, מפעילי נתב, וכו '), ראה security.stackexchange.com/q/37481/53422 - Anthony Geoghegan


אני אישית כתב סקריפט פייתון אוטומטי להוסיף כללי IPtables.

הנה גרסה מקוצרת במקצת ללא רישום וגרוטאות אחרות:

#!/usr/bin/python
from subprocess import *
import re
import shlex
import sys

def find_dscan():
        p1 = Popen(['tail', '-n', '5000', '/usr/local/apache/logs/error_log'], stdout=PIPE)
        p2 = Popen(['grep', 'w00t'], stdin=p1.stdout, stdout=PIPE)

        output = p2.communicate()[0].split('\n')

        ip_list = []

        for i in output:
                result = re.findall(r"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b", i)
                if len(result):
                        ip_list.append(result[0])

        return set(ip_list)

for ip in find_dscan():
        input = "iptables -A INPUT -s " + ip + " -j DROP"
        output = "iptables -A OUTPUT -d " + ip + " -j DROP"
        Popen(shlex.split(input))
        Popen(shlex.split(output))

sys.exit(0)

2
2018-03-24 07:06



האם זה כדי למנוע את ההתקפה w00tw00t - Saif Bechan
כן, יש לי את זה לסרוק את השגיאה Apache שגיאה עבור כל "w00tw00t" IPs ולהוסיף אותם אם הם לא קיימים, אבל לפשטות אני לא להוסיף את המחאה עבור כפילויות. - Xorlev
סקריפט זה כנראה צריך להשתמש בטבלה, הוספת טונות של כללים נוספים על שרשראות iptables הולך להאט עיבוד לא מעט. - Eric
זה עושה שימוש בטבלה. עם זאת פישטתי את זה הרבה כמו שזה היה מותאם למערכת שלי. - Xorlev
אתה חושב שזה פתרון טוב יותר להשתמש mod_security - Saif Bechan


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

פתרון אחד הוא setupLogging ההתקנה באמצעות syslog, ולאחר מכן באמצעות rsyslog או syslog-ng אתה יכול לסנן באופן ספציפי ולבטל את הפרות RFC לגבי w00tw00t. או לחילופין אתה יכול לסנן אותם לתוך קובץ יומן נפרד פשוט אז ErrorLog העיקרית שלך היא קלה לקריאה. Rsyslog הוא חזק מאוד וגמישה בתחום זה.

אז ב httpd.conf אתה יכול לעשות:

ErrorLog syslog:user 

ולאחר מכן ב- rsyslog.conf ייתכן שיהיה:

:msg, contains, "w00tw00t.at.ISC.SANS.DFind" /var/log/httpd/w00tw00t_attacks.log

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

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

חסימת IPTables הוא רעיון, אבל אתה עלול בסופו של דבר עם רשימה גדולה מאוד iptables לחסום אשר יכולות להיות השלכות ביצועים בפני עצמה. האם יש דפוס בכתובות ה- IP, או שהוא בא מתוך botnet מבוזרת גדולה? יהיה צורך להיות X% של כפילויות לפני שתקבל תועלת iptables.


2
2018-03-30 11:09



תשובה נחמדה, אני אוהב את הגישות השונות. לחשוב על זה, לאחר רישום מותאם אישית תיצור שימוש חוזר יותר, כי הכל צריך להיבדק הראשון, אני מניח אפשרות זו נופלת גם. עכשיו יש לי logwatch מופעלת. זה שולח לי דו"ח 2 פעמים ביום עם סיכומים של כל המערכות. יומני אפאצ 'י נבדק גם וזה פשוט אומר w00tw00t ניסיונות 300 פעמים. אני חושב שאני אעזוב את ההתקנה כפי שהיא לעת עתה. - Saif Bechan


אתה אומר ב עדכון 2:

בעיה שעדיין נותרה   הבעיה שעוד נותרה היא כדלקמן. התקפות אלה הן מבוטים המחפשים קבצים מסוימים בשרת שלך. זה סורק מסוים מחפש את הקובץ /w00tw00t.at.ISC.SANS.DFind :).

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

מהתשובה הקודמת שלי אספנו ש- Apache מחזיר הודעות שגיאה עקב שאילתה שגוייה בפורמט HTML 1.1. כל שרתי האינטרנט התומכים ב- HTTP / 1.1 צריכים כנראה להחזיר שגיאה כאשר הם מקבלים את ההודעה (אני לא בדקתי את ה- RFC - אולי RFC2616 אומר לנו).

לאחר w00tw00t.at.ISC.SANS.DFind: על השרת שלך איפה לא מתכוון באופן מיסטי "אתה בצרות מסוימות" ... אם אתה יוצר את w00tw00t.at.ISC.SANS.DFind: קובץ DocumentRoot שלך או אפילו DefaultDocumentRoot זה לא משנה ... הסורק שולח שבור HTTP / 1.1 בקשה אפאצ 'י אומר "לא, זה בקשה גרועה ... ביי ביי". הנתונים בקובץ w00tw00t.at.ISC.SANS.DFind: לא יוצגו.

שימוש ב mod_security במקרה זה אינו נדרש, אלא אם אתה באמת רוצה (ללא נקודה?) ... ובמקרה זה, אתה יכול להסתכל על תיקון זה ידנית (קישור בתשובה אחרת).

דבר נוסף שאתה יכול אולי להסתכל באמצעות היא תכונה RBL ב mod_security. אולי יש באינטרנט RBL כמה שם מספק w00tw00t IPs (או אחר הידוע IPs זדוניות). עם זאת, משמעות הדבר היא כי mod_security עושה בדיקת DNS עבור כל בקשה.


1
2018-03-31 08:52



אני לא חושב אפאצ 'י דוחה אותם, זה פשוט זורק את השגיאה אבל בדיקה עדיין עובר. יש לי את אותו w00tw00t.at.ISC.SANS.DFind ביומן הגישה. זה עושה GET. אז הבדיקה נעשית ואם יש לך את הקובץ במחשב שלך זה יבוצע. אני יכול לפרסם את רשומות יומן הגישה אבל הם נראים בדיוק כמו יומן השגיאה רק עם GET לפניהם. Apache זורק את השגיאה אבל הבקשה עוברת. לכן שאלתי אם זה יהיה רעיון טוב כדי לחסום את הבקשה ללא hostnames. אבל אני לא רוצה לחסום משתמשים רגילים. - Saif Bechan
בטח, אתה מקבל את אותו ערך ביומן הגישה אבל להסתכל על קוד השגיאה ... 400. זה לא מעובד. HTTP / 1.1 (hostname) משמש כדי לספר Apache איזה מארח וירטואלי לשלוח את הבקשה ... ללא שם המארח של HTTP / 1.1 בקשה apache לא יודע לאן לשלוח את הבקשה ומחזירה שגיאה "400 בקשה גרועה" בחזרה אל הלקוח. - Imo
נסה זאת בעצמך ... צור לעצמך דף HTML בשרת האינטרנט שלך ונסה להגיע אליו באופן ידני באמצעות "שם המארח 80 Telnet" ... השלבים האחרים הם התשובה הראשונה שלי. הייתי שם על זה גדול כי אתה לא יכול לקבל את הקובץ HTML להציג באמצעות HTTP / 1.1 ללא שם המארח. - Imo
אה כן כן, כי זה הצביע על כך לי. אני תמיד חשבתי access_log היו ערכים שהועברו שוקת את יומן השגיאה ממש נכנס המכשיר שלך. תודה לך על הצבעה על זה לי ואני יערוך את ההודעה שלי. אני באמת מעריך את עזרתך. - Saif Bechan
היי סייף, אין בעיות, שמח לעזור. בברכה, אימו - Imo


מה דעתך על הוספת כלל modsecurity? משהו כזה:

   SecRule REQUEST_URI "@rx (?i)\/(php-?My-?Admin[^\/]*|mysqlmanager
   |myadmin|pma2005|pma\/scripts|w00tw00t[^\/]+)\/"
   "severity:alert,id:'0000013',deny,log,status:400,
   msg:'Unacceptable folder.',severity:'2'"

1
2017-08-09 08:23





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

client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi

כדי לכוון את הנתבים Linksys וכו 'אז לפעמים זה עוזר להרחיב את הפוקוס שלך לחלק את מאמצי ההגנה בין כל המערכות עם נתח שווה כלומר: יישום כללי הנתב, ליישם כללי חומת אש (אני מקווה הרשת שלך יש אחד), ליישם את חומת האש של השרת / שולחן IP כללים ושירותים קשורים ie mod_security, fail2ban וכן הלאה.


1
2017-10-08 18:10





מה דעתך על זה?

iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j DROP
iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j LOG --log-level 4 --log-prefix Hacktool.DFind:DROP:

עובד מצוין בשבילי.


1
2018-03-01 20:42



המלצתי על חוק OWASP_CRS / 2.2.5 או פומפיה שהוגדרו עבור mod_security - Urbach-Webhosting
זה באמת לא רעיון טוב. אתה תהיה בסופו של דבר עם הרבה קשרים תלויים. בנוסף, אם האתר שלך יש דיון על בקשות אלה, אתה יכול בסופו של דבר עם תוצאות חיוביות שגויות. - kasperd