Επιθέσεις ωμής βίας (Brute Force Attacks)

Επιθέσεις ωμής βίας (Brute Force Attacks)

Σε αντίθεση με τις επιθέσεις που εστιάζουν σε αδυναμίες και κενά σφφαλείας του λογισμικού, αυτός που κάνει επίθεση ωμής βίας (Brute Force Attack) προσπαθεί να αποκτήσει πρόσβαση στην ιστοσελίδα με πιο απλό τρόπο: κάνει διαδοχικές προσπάθειες να μαντέψει ονόματα χρηστών και κωδικούς πρόσβασης, ξανά και ξανά, μέχρι να βρει το όνομα χρήστη και τον κωδικό πρόσβασης. Αυτού του είδους οι επιθέσεις συνήθως είναι πολύ επιτυχής στις περιπτώσεις οι διαχειριστές χρησιμοποιούν τους κωδικούς πρόσβασης , όπως « 123456 » και ονόματα χρήστη όπως « admin ».

Με απλά λόγια, είναι μια επίθεση ενάντια στον πιο αδύναμο κρίκος της ασφάλεια; οποιουδήποτε δικτυακού τόπου : είναι μια επίθεση ενάντα στον άνθρωπο.

Λόγω της φύσης αυτών των επιθέσεων, η μνήμη του διακομιστή αγγίζει την οροφή και συνεπώς προκαλούνται προβλήματα απόδοσης. Αυτό οφείλεται στο γεγονός ότι ο αριθμός των αιτήσεων HTTP ( δηλαδή ο αριθμός των φορών που κάποιος επισκέπτεται το site σας ) είναι τόσο υψηλό που πολλοί servers εξαντλούν τη μνήμη τους.

Αυτό το είδος της επίθεσης δεν αφορά μόνο το WordPress, μπορεί αν συμβει σε οποιαδήποτε ιστοσελίδα κατασκευασμένη με οποιοδήποτε λογισμικό. Όμως το WordPress είναι πολύ δημοφιλές και συνεπώς πολύ συχνά αποτελεί στόχο.

Προστατεύστε τον εαυτό σας
Το σημείο στο οποίο συθνήθως γίνονται οι επιθέσεις στο WordPress είναι το αρχείο wp-login.php. Η επίθεση επαναλαμβάνεται ξανά και ξανά μέχρι να βρεθεί ο κωδικός εισόδου ή να πέσει ο server. Μπορείτε να κάνετε μερικά πράγματα για να προστατεύσετε τον εαυτό σας.

Μην χρησιμοποιήσετε το “admin” όνομα χρήστη
Στην πλειοψηφία των επιθέσεων ο επιτιθέμενος υποθέτει οτι ο διαχειριστής χρησιμοποιεί το όνομα χρήστη “admin”. Αυτό οφείλεται στο γεγονός ότι οι πρώτες εκδόσεις του WordPress είχαν αυτό ως προεπιλογή. Όσοι εξακολουθείτε να χρησιμοποιείτε αυτό το όνομα χρήστη, καλό θα είναι να φτιάξετε ένα νέο λογαριασμό, να μεταφέρετε το σύνολο των άρθρων σε αυτόν το λογαριασμό, και να αλλάξετε το «admin» σε συνδρομητή (ή να το διαγράψετε εντελώς).

Μπορείτε επίσης να χρησιμοποιήσετε το plugin “Admin Renamed Extended” Επέκταση αλλάξετε το όνομα χρήστη σας.

Καλοί κωδικοί πρόσβασης
Ο στόχος που πρέπει να έχουμε όταν δημιουργούμε ένα κωδικό πρόσβασής σας είναι να καταστήσουμε δύσκολο για τους άλλους να το μαντέψουν και δύσκολο για τις επιθέσεις ωμής βίας να το πετύχει. Για το σκοπό αυτό είναι διαθέσιμες πολλές αυτόματες γεννήτριες κωδικών πρόσβασης τις οποίες μπορείτε να χρησιμοποιήσετε για τη δημιουργία ασφαλών κωδικών πρόσβασης.

Το WordPress διαθέτει επίσης ένα μετρητής ισχύος κωδικού πρόσβασης που εμφανίζεται όταν αλλάζετε τον κωδικό πρόσβασής σας στο WordPress. Καλό είναι να χρησιμοποιείτε αυτό το μετρητή όταν αλλάζετε τον κωδικό πρόσβασής σας ώστε να εξασφαλίσετε οτι ο νέος κωδικός είναι ισχυρός.

Μπορείτε να χρησιμοποιήσετε το plugin “Force Strong Password” για να υποχρεώσετε τους χρήστες να ορίζουν ισχυρούς κωδικούς πρόσβασης.

Πράγματα που πρέπει να αποφύγετε κατά την επιλογή ενός κωδικού πρόσβασης :

Οποιαδήποτε χρήση του πραγματικού σας ονόματος, του ονόματος χρήστη , του ονόματος της εταιρείας ή του ονόματος της ιστοσελίδας σας.
Μια λέξη από λεξικό, σε οποιαδήποτε γλώσσα .
Ένα σύντομο κωδικό.
Δημιουργία αριθμητικών μόνο ή αλφαβητικών μόνο κωδικών πρόσβασης ( ένα μίγμα και των δύο είναι το καλύτερο) .

Ένας ισχυρός κωδικός πρόσβασης είναι απαραίτητος όχι μόνο για την προστασία του περιεχομένου στο blog σας . Ένας hacker που αποκτά πρόσβαση στο λογαριασμό διαχείρισης της ιστοσελίδας σας είναι σε θέση να εγκαταστήσει κακόβουλα σενάρια που μπορούν δυνητικά να θέσουν σε κίνδυνο ολόκληρο το server σας.

Για την περαιτέρω αύξηση της αντοχής του κωδικού πρόσβασής σας, μπορείτε να ενεργοποιήσετε τη διαδικασία “Two Step Authentication” για την περαιτέρω προστασία του blog σας .

Plugins
Υπάρχουν πολλά plugins που μπορούν να περιορίσουν τον αριθμό των διαδοχικών ανεπιτυχών προσπαθειών σύνδεσης που πραγματοποιούνται στο δικτυακό σας τόπο. Εναλλακτικά , υπάρχουν επίσης πολλά plugins που μπορείτε να χρησιμοποιήσετε για να εμποδίσετε εντελώς κάποιους από την πρόσβαση στο wp-admin.

Προστατέψτε το Server σας
Αν αποφασίσετε να κλειδώσετε τα wp-login.php ή wp-admin, τότε ίσως να πάρετε ένα σφάλμα 404 ή 401 κατά την πρόσβαση σε αυτές τις σελίδες. Για να αποφευχθεί αυτό, θα πρέπει να προσθέσετε την παρακάτω γραμμή στο αρχείο .htaccess:
——————–
ErrorDocument 401 default
——————–

Μπορείτε να ορίσετε το σημείο 401 ναοδηγεί στο 401.html, αλλά το θέμα είναι να μην στοχεύει στο WordPress .

Για το Nginx μπορείτε να χρησιμοποιήσετε την οδηγία error_page, αλλά πρέπει να παράσχει μια απόλυτη διεύθυνση URL ειδικά για αυτό το σκοπό:
——————–
error_page 401 http://example.com/forbidden.html;
——————–

Προστασία του wp-login.php με κωδικό πρόσβασης
Η προστασία με κωδικό του αρχείου αρχείο wp-login.php (και του φακέλου wp-admin) μπορεί να προσθέσει ένα επιπλέον στρώμα στο server σας. Επειδή o κωδικός προστασίας του wp-admin μπορεί να δημιουργήσει πρόβλημα σε κάθε plugin που χρησιμοποιεί Ajax στο front end, συνήθως είναι αρκετό να προστατέψουμε μόνο το wp-login.

Για να το κάνετε αυτό, θα πρέπει να δημιουργήσετε ένα αρχείο .htpasswds. Πολλοί host έχουν τα εργαλεία για να το κάνουμε αυτό εύκολα, αλλά αν χρειαστεί να το κάνετε μόνοι σας, μπορείτε να χρησιμοποιήσετε αυτήν μια γεννήτρια htpasswd. Όπως το αρχείο .htaccess (το οποίο είναι ένα αρχείο που είναι μόνο μια επέκταση), έτσι και το .htpasswd δεν θα έχει κανένα πρόθεμα.

Μπορείτε είτε να βάλετε αυτό το αρχείο έξω από το public web web (δηλαδή όχι στο / public_html / ή /domain.com/, ανάλογα με τον host σας), ή μπορείτε να το βάλετε στον ίδιο φάκελο, αλλά αν επιλέξετε αυτό το δρόμο τότε θα πρέπει να κάνετε κάποια επιπλέον εργασία ασφάλειας στο αρχείο .htaccess..

Συγκεκριμένα, αφού έχετε φορτώσει το αρχείο .htpasswd, θα πρέπει να πειτε στο .htaccess που βρίσκεται το αρχείο .htpasswd. Υποθέτοντας ότι έχετε τοποθετήσει το .htpasswd στο home directory του χρήστη σας υποθέτοντας οτι το username του htpasswd είναι mysecretuser, τότε πρέπει να βάλετε τον παρακάτω κώδικα στο αρχείο .htaccess:

——————–
# Stop Apache from serving .ht* files

Order allow,deny
Deny from all

# Protect wp-login

AuthUserFile ~/.htpasswd
AuthName “Private access”
AuthType Basic
require user mysecretuser

——————–

Η πραγματική θέση του AuthUserFile εξαρτάται από το server, και το ‘require user’ αλλάζει ανάλογα με το username που έχετε επιλέξει.

Εάν χρησιμοποιείτε το Nginx τότε μπορείτε να προστατεύσετε το αρχείο wp-login.php με κωδικό πρόσβασης χρησιμοποιώντας το plugin HttpAuthBasicModule . Το παρακάτω block πρέπει να βρίσκεται μέσα στο block του server.
——————–
location /wp-login.php {
auth_basic “Administrator Login”;
auth_basic_user_file .htpasswd;
}
——————–

Η διαδρομή αρχείου είναι σχετική με το directory που βρίσκεται το nginx configuration file nginx.conf. Το αρχείο θα πρέπει να έχει την ακόλουθη μορφή:

——————–
user:pass
user2:pass2
user3:pass3
——————–

Οι κωδικοί πρόσβασης (passwords) πρέπει να κωδικοποιούνται με το function crypt(3). Μπορείτε να χρησιμοποιήσετε μια online γεννήτρια htpasswd για να κρυπτογραφήσετε τον κωδικό πρόσβασής σας.

Περιορισμός της πρόσβαση στο wp-admin μέσω της IP
Εάν είστε το μόνο άτομο που χρειάζεται να συνδέεται στη διαχείρηση της ιστοσελίδας και εάν έχετε μια σταθερή διεύθυνση IP, τότε μπορείτε να αρνηθείτε την πρόσβαση στο αρχείο wp-admin σε όλους εκτός από τον εαυτό σας μέσω του αρχείου .htaccess.

Σημείωση : Να προσέξετε ιδιαίτερα διότι ο ISP σας ή ο υπολογιστής σας μπορεί να αλλάζει την διεύθυνση IP σας συχνά. Αυτό ονομάζεται δυναμική διευθυνσιοδότηση IP (dynamic IP addressing), και όχι στατική διευθυνσιοδότηση IP (fixed IP addressing) . Αυτό γίνεται για λόγους, κυρίως για εξοικονόμηση χρημάτων. Αν υποψιάζεστε ότι ανήκετε σε αυτή την περίπτωση, τότε θα πρέπει να μάθετε πώς να αλλάξετε τις ρυθμίσεις του υπολογιστή σας ή θ απρέπει να επικοινωνήσετε με τον ISP σας για να αποκτήσετε μια σταθερή διεύθυνση ώστε να τη χρησιμοποιήσετε αυτήν τη διαδικασία.

Δημιουργήστε ένα αρχείο κειμένου με όνομα .htaccess σε ένα απλό Editior και προσθέστε :

——————–
# Block access to wp-admin.
order deny,allow
allow from x.x.x.x
deny from all
——————–

Αντικαταστήστε το x.x.x.x με τη δική σας IP διεύθυνση. Ο ISP σας μπορεί να σας βοηθήσει να βρειτε τη διεύθυνση IP σας . Ή μπορείτε να χρησιμοποιήσετε μια online υπηρεσία , όπως είναι το “What Is My IP”.

Για το Nginx μπορείτε να προσθέσετε ένα location block μέσα στο block του server σας που λειτουργεί παρόμοια με το παράδειγμα Apache παραπάνω:

——————–
error_page 403 http://example.com/forbidden.html;
location /wp-admin {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny all;
}
——————–

Σημειώστε ότι η σειρά των ενεργειών deny/allow είναι υψίστης σημασίας . Ίσως να μπείτε στον πειρασμό να σκεφτείτε ότι μπορείτε να αλλάξετε τη σειρά των οδηγιών πρόσβασης και όλα θα συνεχίσουν να δουλεύουν. Στην πραγματικότητα αυτό δεν γίνεται. Η αλλαγή της σειράς στο παραπάνω παράδειγμα έχει ως αποτέλεσμα την άρνηση της πρόσβασης σε όλες τις διευθύνσεις .

Εάν το θέμα ή τα plugins σας χρησιμοποιούν AJAX , τότε πιθανότατα θα χρειαστεί να προσθέσετε μια επιπλέον ομάδα από ρυθμίσεις στο αρχείο .htaccess:

——————–
# Allow access to wp-admin/admin-ajax.php

Order allow,deny
Allow from all
Satisfy any

——————–

Αποθηκεύστε το αρχείο και ανεβάστε το στο φάκελο wp-admin.

Πάλι σχετικά με το Nginx εάν περιορίσετε την πρόσβαση του wp-admin και χρησιμοποιείτε ajax θα χρειαστεί να προσθέσετε ένα άλλο μπλοκ στο server:
——————–
location /wp-admin/admin-ajax.php {
allow all;
}
——————–

Μπορείτε να προσθέσετε περισσότερες IP διευθύνσεις ως εξής:
——————–
# Block access to wp-admin.
order deny,allow
allow from x.x.x.x
allow from y.y.y.y
allow from z.z.z.z
deny from all
——————–

Αυτό μπορεί να είναι πολύ χρήσιμο εαν χρησιμοποιείτε περισσότερους από έναν πάροχους internet για να διαχειριστείτε το site σας ( για παράδειγμα κάποιοι ενδεχομένως να χρειάζονται πρόσβαση στη περιοχή διαχείρησης του δικτυακού τουτς τόπου μέσω του παρόχου κινητής τηλεφωνίας) ή εάν έχετε μια πολύ μικρή ομάδα διαχειριστών που χρειάζονται πρόσβαση στην περιοχή διαχείρησης του δικτυακού σας τόπου .

Εάν χρειάζεται να επιτρέψετε την πρόσβαση σε ένα μεγάλο αριθμό διευθύνσεων IP , μπορείτε να χρησιμοποιήσετε κάτι σαν :

——————–
# Block access to wp-admin.
order deny,allow
allow from x.x.x.*
deny from all
——————–

Για παράδειγμα, χρησιμοποιώντας το 192.168.1.* θα επιτρέψετε την πρόσβαση σε όλες τις διευθύνσεις IP στην περιοχή 192.168.1.

Άρνηση πρόσβασης σε No Referrer Requests
Χρησιμοποιώντας σαν αφετηρία το “Combatting Comment Spam”, μπορείτε να το χρησιμοποιήσετε για να εμποδίσετε όποιον δεν έκανεε υποβολή της αίτησης σύνδεσης:
——————–
# Stop spam attack logins and comments

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) http://%{REMOTE_ADDR}/$1 [R=301,L]

——————–

Nginx – Άρνηση πρόσβασης σε No Referrer Requests:

——————–
location ~* (wp-comments-posts|wp-login)\.php$ {
if ($http_referer !~ ^(http://example.com) ) {
return 405;
}
}
——————–

Αντικαταστήστε το example.com με το domain σας . Εάν χρησιμοποιείτε Multisite με mapped domains, τότε θα πρέπει να αλλάξετε το example.com ( example.com | example.net | example4.com ) και ούτω καθεξής .

ModSecurity
Εάν χρησιμοποιείτε ModSecurity τότε μπορείτε να ακολουθήσετε τις συμβουλές που δίνονται εδώ:
http://www.frameloss.org/2011/07/29/stopping-brute-force-logins-against-wordpress/
Απαιτείται root πρόσβαση στο server σας, και μπορεί να χρειαστεί τη βοήθεια του webhost σας.

Εάν χρησιμοποιείτε ModSecurity 2.7.3, τότε μπορείτε αντί για αυτό να προσθέσετε τους κανόνες στο αρχείο .htaccess σας.

Fail2ban
Το Fail2ban είναι ένα Python daemon που τρέχει στο παρασκήνιο. Ελέγχει τα αρχεία καταγραφής (logfiles) που δημιουργούνται από Apache (ή SSH για παράδειγμα), και σε ορισμένα γεγονότα μπορεί να προσθέσει έναν κανόνα τείχους προστασίας (firewall rule). Χρησιμοποιεί το λεγόμενο φίλτρο κανονικών εκφράσεων. Αν μια κανονική έκφραση συμβαίνει για παράδειγμα 5 φορές σε 5 λεπτά, τότε μπορεί να μπλοκάρει αυτή την διεύθυνση IP για 60 λεπτά (ή οποιοδήποτε άλλο αριθμό). Η εγκατάσταση και η ρύθμιση του Fail2ban απαιτεί πρόσβαση root.

Blocklists
Φαίνεται ότι οι περισσότερες επιθέσεις ωμής βίας (Brute Force Attacks) γίνονται από hosts σε Ρωσία, Καζακστάν και Ουκρανία. Μπορείτε να επιλέξετε να μπλοκάρετε διευθύνσεις IP που προέρχονται από τις χώρες αυτές. Υπάρχουν blocklists διαθέσιμες στο διαδίκτυο που μπορείτε να κατεβάσετε. Με λίγο shell-scripting, μπορείτε στη συνέχεια να φορτώσετε τους κανόνες σε πίνακες διευθύνσεων ip (iptables). Θα πρέπει να γνωρίζετε ότι εμποδίζετε τόσο τους νόμιμους χρήστες όσο και τους επιτιθέμενους από αυτές τις ip. Βεβαιωθείτε ότι μπορείτε να υποστηρίξετε και να εξηγήσετε την απόφαση αυτή στους πελάτες σας.

Εκτός από τα blocklists ανά χώρα, υπάρχουν και κατάλογοι με διευθύνσεις IP των γνωστών spammers. Μπορείτε να τις χρησιμοποιήσετε για να τους σταματήσετε χρησιμοποιώντας iptables. Είναι καλό να ενημερώνετε τους καταλόγους αυτούς τακτικά.

Η δημιουργία blocklists και iptables απαιτεί πρόσβαση root.

Cloud / Υπηρεσίες Proxy
Υπηρεσίες όπως Cloudflare και Sucuri CloudProxy μπορεί επίσης να σας βοηθήσουν να αποφύγετε τις επιθέσεις ωμής βίας (Brute Force Attacks), μπλοκάροντας τις IPs πριν φθάσουν server σας.

Σε όλα τα sites που κατασκευάζουμε σαν dreamweaver.gr έχουμε προβλέψει την ύπαρξη firewall σε επίπεδο server ( rsf ) αλλά και σε επίπεδο ιστοσελίδας ( wordfence) για να επιτύχουμε τον μέγιστο βαθμό ασφαλείας από επιθέσεις ωμής βίας ( brute force attacks )