Site-ul tau WP este sigur? – Brute Force & DDos Attack

Site-ul tau WP este sigurIntr-un final am ajuns si la un astfel de subiect. Siguranta si protectia platformelor WordPress impotriva Brute Force Attack si/sau DDos Attack.

Exact, vom discuta despre ce-i de facut pentru a preveni/curata platforme WP (WordPress) in fata atacurilor directionate care paginile de web, in special despre Brute Force Attack.

Bineinteles ca metode si forme de hacking mai gasim, are balta peste 🙂 :
– SQL injection,
– JavaScript insertion
– .htaccess hacks
– Plugin Exploits

Motivul pentru care am ales sa vorbesc acum despre acest lucru este simplu. Tocmai ce m-am “pricopsit” zilele trecute cu un astfel de atac. Cu toti stim ca nu exista sistemul perfect si ca tot timpul exista loc de mai bine, dar un minim de masuri de securitate sunt necesare pentru a ne proteja in fata unor astfel de atacuri.
Sa nu cumva sa faci greseala si sa te gandesti ca sunt destule alte siteuri/bloguri mai interesante de hackuit, iar pe tine te vor sarii. Nu de alta dar “baietii” stau la panda si cand ti-e lumea mai draga ti-o trag fara mila.

Ca sa clarificam de la inceput, parerea mea (si nu doar a mea) este ca majoritatea atacurilor asupra site-urilor nu sunt personale sau personalizate. Pur si simplu sunt incercari aleatorii pe anumite domenii/ip-uri unde sunt scanate erori si/sau vulnerabilitati de securitate pe acele sisteme.

Ce este de fapt brute force attack? Intr-o forma mai simplista este un “robotel”, sau mai multe  (botnet), care  incearca sistematic sa “ghiceasca” userul si parola de autentificare ale unui sistem. Nu am sa detaliez acum pentru ca informatia o puteti gasi pe internet fara probleme (vezi pe wikipedia).

Dar gata cu vorba si hai sa vedem concret despre ce este vorba.

Recomandari:
Unul din cele mai importante lucruri pe care trebuie sa-l iei in calcul este backup-ul periodic la fisiere (prin ftp daca nu ai CP File Manager) si la baza de date (prin phpMyAdmin), macar o data pe saptamana.
Cand alegeti numele de utilizator pentru a accesa deshboard-ul de administrare sau baza de date, sub nici o forma NU folosi admin. Una din cele mai raspandite metode de atac este sa se foloseasca de userul admin.
Foloseste parole complexe, de minim 8 caractere, care sa contina atat litere mari si mici, cifre, si caractere speciale. Folositi dubla autentificare.
Evita folosirea plugin-urilor pe cat se poate, iar daca nu ai de ales trebuie sa verifici inainte ca este un plugin fara probleme de securitate (cauta pe forumuri). Verifica history-ul acestuia si data ultimului update, te ajuta sa-ti dai seama daca ai parte de un plugin care este verificat si actualizat periodic.
Nu lasa pe server teme sau plugin-uri inactive. Stergele daca nu le folosesti. Anumite fisiere, chiar daca sunt in teme sau plugin-uri inactive, pot fi accesate si folosite in astfel de atacuri de catre “robotei”.
Mare atentie cand te conectezi la interfata deshboard a site-ului. Nu folosi alte PC-uri sau retele (mai ale wifi) de care nu esti sigur.

Site-ul tau WP este sigur? – brute force & ddos attack

Simptome si rezolvari:
1).
Site-ul/blogul tau nu arata asa cum stiai, sau cum l-ai lasat ultima oara, iar in footer sau in title apare textul: “+ADw-/title+AD4-HACKED BY CELLATREISHACKED BY CELLATREISHACKED

Primul lucru si cel mai importat este sa faci un backup la fisiere si la baza de date chiar daca site-ul/blogul a fost expus.
Fa un cont nou de administrare cu un nume de utilizator nu asa comun la care pune o parola complexa de minim 8 caractere. Doar dupa ce te asiguri ca noul cont este functional sterge contul de admin. Ai grija sa-i delegi si sa-i atribui continutul noului cont de utilizartor. De prefereat sa schimbi si parola de accesare a bazei de date.
Cauta in baza de date in tabela wp_options urmatorul tip de cod:

< script>document.documentElement.innerHTML=unescape(''%48%41%43%4b%...

Aceasta linie trebuie stearsa din baza de date fara sa stai pe ganduri.
Urmatorul pas este sa verifici/schimbi tipul de codare pentru afisarea in pagina din UTF-7 in UTF-8. Poti face asta din interfata de administrare Settings->Reading, iar daca nu gasesti setarea respectiva o poti face modificand in baza de date (prin interfata phpMyAdmin), tot in tabela wp_option, cauta blog_charset. De preferat dupa ce ai curatat baza sa modifici userul si parola cu care accesezi baza de date (asta chiar daca initial ai mai schimbat o data parola). Nu uita sa le modifici si in fisierul de configurare wp-config.php.Site-ul tau WP este sigur

2). Accesarea si incarcarea paginilor de pe site/blog este foarte greoaie iar in logurile de web (apache) regasesti :% tools.ua.random() % sau Icarus6j – (contact: phil@icarus6.com) sau accesari multiple ale fisierului xmlrpc.php

210.210.178.20 - - [28/Sep/2014:21:04:43 +0300] "POST /wp-login.php HTTP/1.1" 403 26 "http://yorsite.ro/wp-login.php" "[% tools.ua.random() %]"
............................
54.236.168.230 - - [28/Sep/2014:21:05:10 +0300] "GET /tag/cocos/ HTTP/1.1" 200 46409 "-" "Icarus6j - (contact: phil@icarus6.com)"
............................
125.60.243.125 - - [27/Jul/2014:13:36:34+0100]"POST /xmlrpc.php HTTP/1.1"200438"-""-""-"

Asta inseamna ca te-ai pricopsit cu un ddos attack.

Ce este de facut dupa un attack sau pentru a preveni atacul:
Limiteaza accesul la directorul wp-admin, la fisierele wp-login.php si xmlrpc.php folosind .htaccess.
Primul lucru generezi un user si o parola si le salvezi intr-un fisier .htpasswd. De preferat ca fisierul sa fie in afara zonei web (deci NU in /public_html). De exemplu in directorul radacina. Daca folosesti cpanel calea reala este de genul /home/exemplu/ unde exemplu este denumirea contului din cpanel. unt Daca nu ai cpanel sau daca nu sti sa-l folosesti, gasesti destule site-uri pentru generarea parolei de .htaccess (htaccesstools.com este unul dintre ele).
Deci fisierul .htpasswd ar trebuii sa contina ceva de genul:

user_1:$acdr1$ER%BzmgA&%fff.yP.pfeuw34!Weh891

De preferat ca pe langa limitarea accesului pe baza de user si parola sa existe si limitarea de adrese IP, asa ca poti limita accesul la anumite adrese IP mai putin la adresa IP a serverului.  De preferat sa limitezi accesul la toate adresele IP pentru accesul la interfata de administrare (in afara adreselor IP de la care accesezi tu interfata 🙂 ).

Hai sa vedem cum implementam cele de mai sus:    
Te conectezi pe ftp sau prin interfata cpanel (File Manager), pentru accesare fisierelor.
Intri in directorul public_html/wp-admin, si deschizi cu un editor text fisierul .htaccess. Daca nu exista faci unul.

Mare atentie sa nu modifici /adaugi noile setari in sectiunea # BEGIN WordPress sau orice alta sectiune gen # BEGIN W3TC Browser Cache, asta pentru ca acesta sunt modificate automat de wordpress iar daca acest lucru se intampla setarile introduse de tine vor fi sterse. Deci toate setarile noi pe care le adaugam in fisierul .htaccess trebuie sa fie in afara acestor sectiuni.

Codul de mai jos il adaugam pentru evitarea redirect loop:

#start setup pentru redirect loop
ErrorDocument 401 "Denied"
ErrorDocument 403 "Denied"
#start setup pentru redirect loop

Urmeaza sa adaugam un nou grup de setari pentru a implementa accesarea directorului wp-admin cu user si parola:

# start setari user access
AuthUserFile /home/exemplu/.htpasswd 
AuthGroupFile /dev/null 
AuthName EnterPassword 
AuthType Basic 
Options -Indexes 
require valid-user
# stop setari user access

Adaugam si setarile pentru blocarea accesului la directorul wp-admin pentru adresele IP, cu exceptia celor sigure. Nu uita sa adaugi si IP-ul serverului.

# start setari IP access 
order deny,allow 
deny from all 
allow from ip_server 
allow from ip_sigur_1 
allow from ip_sigur_2
# stop setari IP access

Pentru limitarea accesului la fisierele wp-login.php si xmlrpc.php folosim alt fisier .htaccess care se afla in radacina site-ului, adica in directorul \public_html. Daca ai un subdomeniu sau inca un domeniu pe acelasi cont de cpanel calea ar fi ceva de genu: \public_html\subdomeniu sau \public_html\domeniu2.

Ca si in cazul setarilor pentru directorul wp-admin  adaugam codul pentru evitarea redirect loop:

#start setup pentru redirect loop
ErrorDocument 401 "Denied"
ErrorDocument 403 "Denied"
#start setup pentru redirect loop

In cazul în care ai o tema sau plugin-uri care utilizeaza AJAX, este necesar sa adaugam un grup suplimentar de setari in fisierul .htaccess, astfel incat  proprietatile AJAX sa poate sa-si faca treaba fara probleme:


# Allow plugin access to admin-ajax.php around password protection

 Order allow,deny
 Allow from all
 Satisfy any
 
#

Pentru limitarea accesului la fisierul wp-login.php vom folosi functia FilesMatch, unde implementam ambele tipuri de restrictii, pentru adresele IP si cea cu user si parola:

# start setari IP & user access 
<filesmatch "wp-login.php">
order deny,allow
deny from all 
allow from 127.0.0.1 
allow from ip_server 
allow from ip_sigur_1 
allow from ip_sigur_2
AuthType Basic
AuthName "Secure Area"
AuthUserFile /home/bunute/.htpasswd
require valid-user
 
# stop setari IP & user access 

Aceasi functie FilesMatch o vom folosi si in cazul fisierului xmlrpc.php. O data cu ele recomand limitarea accesului la wp-config.php si a fisierelor .ht (.htaccess, .htpasswd).

# Block some config file

order allow,deny
deny from all


# Stop Apache from serving .ht* files
 
Order allow,deny 
Deny from all 



order allow,deny
deny from all

Dupa ce ai terminat cu acceste setari vei avea nevoie de a introduce de 3 ori userul si parola pentru a putea ajunge la interfata deshboard de administrare. Un pic agasant dar merita.

Un alt nivel de protecție poate fi adăugat pentru anumite script-uri (din directorul wp-includes), care în general, nu sunt destinate pentru a fi accesate de orice utilizator. O modalitate de a face acest lucru este de a bloca aceste la acestea folosind mod_rewrite în fisierul htaccess:

# Block the include-only files.

RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]

Un alt lucru pe care este bine sa-l luati in calcul este de a schimba permisiunile pe fisierul wp-config.php din 644 in 600 pentru a restrictiona acesul la acest fisier.
Dupa ce ai implementat toate setarile de mai sus si totul functioneaza OK, poti  schimba inca o data toate parolele pentru a fi sigur.

Alte lucruri care le putem face pentru a verifica daca avem Injected Malware in WordPress:

Verifica in fiserele .htaccess dupa urmatoarele coduri:

RewriteCond%{HTTP_REFERER}.*google.*[OR]
RewriteRule^(.*)$ http://hackedsite.com/index.php [R=301,L]

In acest caz cel care a introdus codul incearca sa se foloseasca de el în cazul în care Googlebot accesează cu crawlere site-ul, iar acestea sunt redirecționate către site-ul hackerilor. Trebuie sa stergeti acest cod.

Verifica in fiserele .php dupa coduri de genul: 

eval(base64_decode($_SERVER57F))%32%5E|.+)

Doua functii care sunt folosite de cel care intenteaza un atac pentru a ascunde un cod malware. Cu un simplu text search dupa “eval(base64_decode(“. Codul de dupa “_SERVER” este criptat asa ca trebuie sa stergi toata linia pentru a ptea scapa de hack.

In sitatii exceptionale, este de preferat sa facem un clean printr-o metoda mai “brutala”,  in special pentru un site care a fost expus destul de rau. Cleaning-ul se face prin stergerea temei si a plugin-urilor (first nu uita de backup), dupa care le reinstalezi unul cate unul, dar nu din backup ci descarci si instalezi unele noi. In 90% din cazuri acolo este “buba”. Chiar daca este un proces mai anevoios de recuperare ai siguranta ca elimini cea mai mare parte a problemei. 

In orice situatie nu sterge backup-ul, pastreazal. Chiar daca o parte din date au fost “expuse” sunt unele informatii destul de valoroase pe-a colo.

PS. Fi smart, mai bine iti pierzi timpul sa previi o problema decat sa “repari” la ea.

Link-uri si referinte de unde m-am inspirat:
http://codex.wordpress.org/Brute_Force_Attacks
http://codex.wordpress.org/Hardening_WordPress
https://wordpress.org/support/topic/calling-all-site-owners-hacked-by-walangkaji-badi-etc-need-some-help?replies=15#post-3720889
https://wordpress.org/support/topic/website-repeatedly-hacked
http://www.inmotionhosting.com/support/website/wordpress/prevent-unauthorized-wp-admin-wp-login-php-attempts
http://www.jtpratt.com/how-to-fix-a-hacked-wordpress-blog/
http://blog.sitelock.com/2012/08/09/how-to-find-injected-malware-in-a-wordpress-website

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.