WAF και προστασία από την έγχυση
1) Γιατί η WAF στην εποχή της API
Ακόμη και με αυστηρή επικύρωση και παραμετροποίηση, οι ενέσεις συμβαίνουν λόγω:- «μακριές ουρές» των ενοποιήσεων (κληρονομικός κώδικας, συνδεόμενοι webhooks),
- ανάλυση των διαφορών (πληρεξούσιο ↔ πλαίσιο),
- νέες τεχνικές παράκαμψης πρωτοκόλλου/παράκαμψης ασβέστου.
- Το WAF δίνει ένα όριο πρόωρης άρνησης και «εικονικής εμπλοκής» πριν από την απελευθέρωση του κώδικα, αλλά δεν αντικαθιστά την ασφαλή ανάπτυξη.
2) Μοντέλο απειλής: Τύποι εγχύσεων API
SQLi/ORMi: classic/boolean/time-based/stacked; τυφλοί λόγω καθυστερήσεων.
NoSQLi (Mongo/Elastic): χειριστές '$ ne/$ gt', JSON injection, regex-DOS.
Ένεση εντολής/RCE: μεταχαρακτηριστές κελύφους, υποκατάσταση επιχειρημάτων, μη ασφαλής απερήμωση → exec κώδικα.
XXE: Εξωτερικοί φορείς/DTD στην XML.
SSRF: πρόσβαση στο '169. 254. 169. 254 "/εσωτερικές υπηρεσίες, Επανασύνδεση του DNS.
Ένεση προτύπου: Jinja/Thymeleaf/Handlebars; '{77}}.
Ένεση LDAP/EL, XPath, ένεση κεφαλής (CRLF), διαδρομή.
Ειδική γραφική παράσταση: «__ σχήμα» ενδοσκόπηση, βάθος/πολυπλοκότητα ερωτημάτων.
Ειδική JSON/JS: Πρωτότυπη ρύπανση ('__ πρωτο __', 'κατασκευαστής').
gRPC/Protobuf: υπερμεγέθη μηνύματα, λαθρεμπόριο πεδίου μέσω αναντιστοιχίας σχημάτων.
3) Αρχιτεκτονικές WAF
Περίμετρο CDN-WAF: γρήγορο φιλτράρισμα geo/ASN, βασικός έλεγχος bot, κρύπτη/αντι-padding.
Περίμετρος L7 (NGINX/Απεσταλμένος/APISIX/Kong): ακριβής ανάλυση, βαθείς κανόνες, ενσωμάτωση με PDP/όρια.
Sidecar/mash (Απεσταλμένος WASM/Φίλτρο): ανά υπηρεσία, πλησίον των δεδομένων, λιγότερο ψευδώς θετικό για εσωτερικές API.
Σύσταση: μοντέλο διπλής στιβάδας (CDN-WAF + L7 WAF).
4) Ανάλυση, ομαλοποίηση και αντι-παράκαμψη
Το WAF θα πρέπει να βλέπει την ίδια κανονική αναπαράσταση με την εφαρμογή:- Ομαλοποίηση διαδρομής ('/a/% 2e% 2e/b '→ αποτυχία),' UTF-8 '/Unicode confusables, NUL bytes.
- Απλή αποκωδικοποίηση: URL-/HTML-/Unicode-/Base64-layers, απαγόρευση διπλής αποκωδικοποίησης.
- Περιορισμοί: 'max _ headers', 'max _ header _ size', 'max _ body _ size', 'max _ args', βάθος JSON, όριο πολλαπλών μερών, 2x gzip/zip βόμβες απαγορευμένες.
- Πολιτικές τύπου περιεχομένου: 'application/json' μόνο στα τελικά σημεία JSON. απορρίπτει το «πολύγλωσσο».
5) Πρότυπα κανόνων
Αρνητικό (υπογραφές): OWASP CRS (SQLi/XSS/SSRF/Java/Node RCE κ.λπ.). Γρήγορη εκκίνηση.
Θετικά (επιτρεπόμενος κατάλογος): αυστηρά συστήματα (JSON Schema/Protobuf), τύποι και κλίμακες. σε δρομολόγια.
Μη φυσιολογική/βαθμολογία: άθροισμα των «ύποπτων» σημείων → όριο αποκλεισμού.
Πλαίσιο: διαφορετικά προφίλ για «POST/πληρωμές» και «GET/status»· Λιγότερο FP.
6) Μονάδες προστασίας (σε δέσμη)
1. Συστήματα και τύποι: JSON Schema/Protobuf επικύρωση στην επιχειρηματική λογική.
2. Παραμετροποίηση: παρασκευασμένες εκφράσεις, δεσμοί ORM, απαγόρευση συμπύκνωσης.
3. Διαφυγή εξόδου: πλαίσιο HTML/JS/SQL.
4. Πολιτικές για το σώμα: Τύπος περιεχομένου, μέγεθος, πολλαπλοί περιορισμοί, απαγόρευση των δυαδικών αριθμών στις λαβές JSON.
5. Κανόνες WAF: ΗΣΚ + προσαρμοσμένο αρνητικό/θετικό.
6. Συντελεστής/ποσόστωση/νόμισμα: καταστολή του DDoS της χελώνας, προστατευτικά captchas/προκλήσεις για δημόσιες μορφές.
7. Απομόνωση δικτύου: πολιτικές εξόδου για SSRF (αρνηθείτε RFC1918/metadata/Unix υποδοχές).
8. Headers-hygiene: 'X-Content-Type-Options: nosniff', 'Content-Security-Policy' for front, 'Referrer-Policy'.
9. Φρουρά GraphQL: όρια βάθους/πολυπλοκότητας, απαγόρευση ενδοσκόπησης στο prod (ή στην πύλη ρόλων).
7) Παραδείγματα διαμόρφωσης
7. 1 NGINX + ModSecurity (OWASP ΗΣΚ)
nginx load_module modules/ngx_http_modsecurity_module.so;
modsecurity on;
modsecurity_rules_file /etc/modsecurity/modsecurity.conf;
modsecurity_rules '
SecRuleEngine On
Подключаем CRS
Include /etc/modsecurity/crs/crs-setup.conf
Include /etc/modsecurity/crs/rules/.conf
Позитивные правила: только JSON и ограничение размера
SecRule REQUEST_HEADERS:Content-Type "!@rx ^application/json($;)" "id:10001,phase:1,deny,status:415,msg:'Only JSON allowed'"
SecRequestBodyLimit 1048576
SecRequestBodyNoFilesLimit 1048576
Блок локальных адресов (SSRF)
SecRule REQUEST_HEADERS:Host "@ipmatch 127.0.0.0/8 10.0.0.0/8 169.254.0.0/16 192.168.0.0/16" \
"id:10002,phase:1,deny,status:403,msg:'Blocked private range'"
';
server {
listen 443 ssl http2;
server_name api.example.com;
client_max_body_size 1m;
proxy_request_buffering on; # защита от slow-POST proxy_read_timeout 300ms;
proxy_connect_timeout 100ms;
location /v1/ {
proxy_pass http://app_backends;
}
}
7. 2 Απεσταλμένος HTTP WAF (WASM + JSON Schema + SSRF)
yaml http_filters:
- name: envoy.filters.http.wasm typed_config:
config:
vm_config: { vm_id: waf, code: { local: { filename: /plugins/waf.wasm } } }
configuration:
"@type": type.googleapis.com/google.protobuf.Struct value:
crs_profile: "strict"
deny_patterns: ["(?i)union.select", "(?i)(sleep benchmark)\\s\\("]
json_schema:
"/v1/payments:create": "/schemas/payments_create.json"
- name: envoy.filters.http.router
Egress SSRF guard (L4): deny private ranges from gateway filter_chains:
- filters:
- name: envoy.filters.network.tcp_proxy typed_config:
stat_prefix: egress cluster: internet access_log: [...]
tunneling_config:
hostname: "%REQ(:authority)%"
transport_socket:
name: envoy.transport_sockets.tls
7. 3 APISIX: περιορισμός τύπου και αντιεμπλοκή
yaml routes:
- uri: /v1/
plugins:
cors: { allow_origins: "https://app.example.com" }
request-validation:
body_schema:
{"type":"object","properties":{"amount":{"type":"number","minimum":1}},"required":["amount"]}
uri-blocker:
block_rules: ["..","%2e%2e","%2f..","\\x00"] # traversal/NULL proxy-rewrite:
headers:
set:
X-Content-Type-Options: "nosniff"
8) Συντονισμός και μείωση των ψευδώς θετικών (ΠΠ)
Προφίλ ανά διαδρομή: αυστηροί κανόνες μόνο όπου ενδείκνυται (π.χ. '/αναζήτηση 'επιτρέπει '/'%').
Σκιά/Αναφορά-Μόνο: καταγραφή των απαντήσεων πριν από τη δέσμη· Σύγκριση A/B των μετρήσεων.
Το προσαρμοσμένο επιτρέπει λίστες για «θορυβώδεις» νόμιμες παραμέτρους.
Βαθμολογία: Σύνολο μόνο όταν το άθροισμα δεικτών> κατώφλι.
Πειράματα: ένα μικρό ποσοστό της κίνησης προς νέους κανόνες → αυτόματη ανατροπή.
9) Παρατηρησιμότητα και συχνότητα εμφάνισης
: 'waf _ block _ total {rule}', 'waf _ anomaly _ score', 'request _ body _ recorded _ total', 'schema _ violation _ total', 'ssrf _ block _ total'.
Αρχεία καταγραφής (δειγματοληψία): κανόνας, μέρος της αίτησης (επεξεργασία), «trace _ id», «ενοικιαστής», «route», λόγος. Μεταμφίεση PII/μυστικών.
Dashboards: κορυφαίοι κανόνες/μονοπάτια, συστάδες FP, δυναμική μετά την απελευθέρωση.
Περιστατικά: αποθήκευση αντικειμένων (ωφέλιμο φορτίο, pcap εάν είναι απαραίτητο), προϊόντων RCA και «εικονικών εμπλάστρων».
10) Σενάρια δοκιμών και χάους
Παράκαμψη περιβλημάτων WAF (SQLi/XSS/SSRF), διπλές/τριπλές μεικτές κωδικοποιήσεις Unicode.
Διαφορές ανάλυσης: αποστολή ωφέλιμου φορτίου, όπου ο διαμεσολαβητής και το πλαίσιο μπορούν να αποκλίνουν (επαναλήψεις παραμέτρων, συστοιχίες, ';' vs '&').
Αργή-POST/υπερμεγέθεις, φερμουάρ, πολυκομματικές μορφές, εσφαλμένα όρια.
GraphQL: γεννήτρια βάθους/πολυπλοκότητας, όρια ελέγχου και χρονοδιαγράμματα.
11) Αντιπατερίδια
«Ενεργοποιημένο ΗΣΚ και ξεχασμένο»: χωρίς σχέδια, χωρίς συντονισμό κατά μήκος των διαδρομών.
Αρχεία καταγραφής με ακατέργαστο σώμα αίτησης και PII.
Καμία κανονικοποίηση/όρια μεγέθους → παρακάμψεις, DOS για ανάλυση.
Παράλειψη ελέγχου 'τύπου περιεχομένου '/charset → προσβολές πολυγλωττών.
Δεν υπάρχουν φίλτρα εξόδου → SSRF σε μεταδεδομένα νέφους.
Ένα κοινό προφίλ για εξωτερικές και εσωτερικές API.
Ανεξέλεγκτες εξαιρέσεις «για τον σύντροφο» → οπές στην περίμετρο.
12) Ιδιαιτερότητες του iGaming/Finance
Ενισχυμένα προφίλ για τις υπηρεσίες πληρωμών/εξόδου: όρια μικρών φορέων, αυστηρά συστήματα, άρνηση καταλόγων για λογαριασμούς/πεδία IBAN/PAN (συγκάλυψη, έλεγχοι μορφής).
Webhooks από PSP/KYC: υπογραφή HMAC/αμοιβαία TLS, μεμονωμένα προφίλ WAF, αντι-αναπαραγωγή.
Φίλτρα Geo/ASN και όρια συμπεριφοράς για την πρόληψη καταχωρήσεων bot και κατάχρησης bonus.
Τα αρχεία καταγραφής συμβάντων είναι αμετάβλητα (έλεγχος), αποθηκεύονται ανά δικαιοδοσία.
13) Κατάλογος ελέγχου ετοιμότητας Prod
- Διπλή στρώση WAF (CDN + L7), ενιαία κανονικοποίηση και όρια μεγέθους.
- OWASP CRS ενεργοποιημένο, προσαρμοσμένους κανόνες ανά διαδρομή· JSON Schema/Protobuf σε στυλό γραφής.
- Πολιτικές τύπου περιεχομένου/charset· να μην επιτρέπει διπλή αποκωδικοποίηση/NULL/traversal.
- μπλοκ εξόδου SSRF για ιδιωτικές ζώνες/μεταδεδομένα· Προστασία επαναφοράς DNS.
- Ποσοστό/ποσόστωση/νόμισμα και αντι-bot (προκλήσεις) σε δημόσιες μορφές.
- Shadow/Report-only → canary → environment? auto-rollback από SLO και FP.
- Μετρικά/κούτσουρα/μονοπάτια με συγκάλυψη. ταμπλό «κορυφαίοι κανόνες «/ΠΠ.
- Εικονικό έμπλαστρο και βιβλία αναπαραγωγής RCA. τακτικές δοκιμές παράκαμψης.
- Ξεχωριστά προφίλ για PSP/KYC webhooks, στυλό πληρωμής και εσωτερικά API.
14) TL, DR
Προστασία κατασκευής με στρώματα: ομαλοποίηση και όρια → συστημάτων/τύπων → παραμετροποίηση → WAF (CRS + κάστα) → φίλτρα ταχύτητας/bot → μπλοκ εξόδου SSRF. Συντονίστε ανά διαδρομή, εκτελέστε νέους κανόνες στο σκιώδες καναρίνι, παρακολουθήστε μετρήσεις/FP και φτιάξτε «εικονικά μπαλώματα» πριν από τη διόρθωση κώδικα. Για διαδρομές πληρωμής/webhook - ξεχωριστά αυστηρά προφίλ, HMAC/mTLS και ελάχιστα παράθυρα εμπιστοσύνης.