რა არის პროტოკოლის შესაბამისობის უზრუნველყოფა?
Web Application Firewall (WAF)-ის კონფიგურაციისას, ხშირად შეხვდებით წესების ფაილს ან ჯგუფს სახელწოდებით REQUEST PROTOCOL ENFORCEMENT, რომელიც ქართულად შეიძლება ითარგმნოს, როგორც პროტოკოლის შესაბამისობის უზრუნველყოფა. ბევრი ადმინისტრატორისთვის ეს შეიძლება მოსაწყენად ჟღერდეს, მაგრამ რეალურად ის არის თქვენი აპლიკაციის “ფეისკონტროლი”, რომელიც ამოწმებს არა მხოლოდ იმას, თუ რა მოაქვს სტუმარს, არამედ როგორ იქცევა ის შესვლისას.
რას აკეთებს ეს წესი?
მარტივად რომ ვთქვათ, ამოწმებს, შეესაბამება თუ არა შემომავალი მოთხოვნა HTTP პროტოკოლის სტანდარტებს (RFC).
ინტერნეტი მუშაობს შეთანხმებული წესებით (RFC-ებით). ლეგიტიმური ბრაუზერები (Chrome, Firefox, Safari) და კეთილსინდისიერი ბოტები (მაგ. Googlebot) ყოველთვის ზედმიწევნით იცავენ ამ სტანდარტებს. თუმცა, ჰაკერული პროგრამები, სკანერები და მავნე ბოტები ხშირად აგზავნიან დამახინჯებულ ან არასტანდარტულ პაკეტებს, რათა WAF-ს აუარონ გვერდი ან სერვერი დააბნიონ.
სწორედ ამ წესის მიზანია დაბლოკოს ყველა ის მოთხოვნა, რომელიც არღვევს HTTP პროტოკოლის „გრამატიკას“.
როგორ მუშაობს ის?
ეს არ არის ერთი კონკრეტული წესი, არამედ წესების კრებული (Rule Group), რომელიც ამოწმებს მოთხოვნის სხვადასხვა ნაწილს. ქვემოთ ჩამვთვალოთ ყველა ის წესი, რომელსაც ეძებს ის ყველაზე ხშირად:
- Missing Host Header: HTTP/1.1 სტანდარტით,
Hostჰედერი სავალდებულოა. თუ ის არ არის, ეს ხშირად მიანიშნებს ძალიან ძველ ან ცუდად დაწერილ მავნე პროგრამაზე. - Invalid Character in Request Line: შეიცავს თუ არა მოთხოვნის პირველი ხაზი აკრძალულ სიმბოლოებს (მაგალითად, ხილულ დაუშვებელ სიმბოლოებს URL-ში).
- Content-Length Validation: თუ მოთხოვნა ამბობს, რომ აგზავნის მონაცემებს (POST request),
Content-Lengthჰედერი უნდა იყოს რიცხვითი. თუ ის შეიცავს ასოებს, ეს ანომალიაა. - GET vs Body: თუ კლიენტი აგზავნის
GETმოთხოვნას, მაგრამ თან აყოლებსBody-ს (რაც წესითPOST-ისთვისაა განკუთვნილი). - Connection Header Issues: ამოწმებს
Keep-AliveდაConnectionჰედერების სინტაქსს.
რატომ არის ეს მნიშვნელოვანი? HTTP პროტოკოლის დარღვევა ხშირად გამოიყენება ისეთი შეტევებისთვის, როგორიცაა HTTP Request Smuggling (როდესაც ჰაკერი ცდილობს „შეაპაროს“ მეორე მოთხოვნა პირველის შიგნით). აღნიშნული წესების კრებული კი ასეთ მოთხოვნას აღმოაჩენს და ბლოკავს.
პრაქტიკული მაგალითი
1 .მავნე მოთხოვნა (Malicious Request)
ჰაკერი აგზავნის შემდეგ მოთხოვნას სერვერზე:
GET /index.php HTTP/1.1
User-Agent: EvilScript/1.0
Accept: */*
რა არის აქ პრობლემა? აკლია Host ჰედერი. HTTP/1.1 პროტოკოლი მოითხოვს, რომ კლიენტმა უთხრას სერვერს, კონკრეტულად რომელ დომენს მიმართავს (რადგან ერთ IP-ზე შეიძლება ბევრი საიტი იყოს).
2. WAF-ის რეაქცია პროტოკოლის შესაბამისობის უზრუნველყოფის წესების გამოყენებით
WAF-ის ძრავა (მაგალითად, ModSecurity) აანალიზებს შემოსულ პაკეტს. ის ხედავს, რომ პროტოკოლი არის HTTP/1.1, მაგრამ Host ჰედერი არ ჩანს.
ეს ააქტიურებს კონკრეტულ წესს ამ ჯგუფიდან (მაგალითად, წესი ID 920280 – Request Missing an Accept Header ან უფრო ხშირად 920280 – Request Missing a Host Header). რის შემდეგაც ბლოკავს მას.
შეჯამება
პროტოკოლის შესაბამისობის უზრუნველყოფა არის თქვენი ვებ-გვერდის იმუნური სისტემის პირველი ხაზი. ის არ ეძებს კონკრეტულ SQL ინექციას ან XSS-ს; ის ამოწმებს, საუბრობს თუ არა “სტუმარი” ადამიანურ ენაზე (სწორი HTTP პროტოკოლით). თუ ვიზიტორი ენას ამახინჯებს, დიდი ალბათობით, ის არ არის სასურველი სტუმარი.