Sajber Bezbednost

Zaštita WordPress administratorskog panela

Danas svako može napraviti Internet prezentaciju uz pomoć alata kao što su WordPress, Joomla ili Drupal.
Ipak, dosta ljudi trpi posledice kada ne preduzmu korake da obezbede ove instalacije.

Ako pogledate poslove na „freelance“ sajtovima, videćete da su ponuđači poslova upravo oni ljudi kojima je WordPress hakovan, a koji traže pomoć da reše ovaj problem.

U nastavku ćemo istražiti na koje sve načine može da se radi zaštita WordPress administratorskog panela, odnosno nekoliko načina kako da ga obezbedite od neovlašćempog pristupa.

Počećemo od pitanja korisničkih imena i lozinki, preko opcije da se zaključaju sporne IP adrese, da se strana za logovanje servira preko SSL, da se doda CAPTCHA na tu veb stranicu, do stavljanja IP adresa na tzv. belu listu kako bi bilo moguće da koriste login stranicu.

Zatim, na kraju, pričaćemo o sakrivanju login strane i dodavanja dodatnih nivoa zaštite kao što je unos dva različita korisnička imena i lozinke da bismo se uspešno ulogovali na WordPress (WP) sajt.

Odaberite mudro korisnička imena i lozinke, naročito za administratorski nalog.

Ukoliko upravo treba da počnete sa instalacijom WordPress-a, nemojte dozvoliti da administratorski nalog nazovete „admin„.
Ovo je prvo korisničko ime koje će svi probati prvo da eksploatišu brute-force napadom, pomoću rečnika, ili na neki drugi način.


Slika 1: podešavanje administrativnog naloga na WordPress

Čak i ako se odlučite za nešto malo drugačije poput „jasamadmin„, to vas može spasiti dosta nevolja.

Kada birate lozinku, prethodno se uverite da je WordPress smatra jakom. Posmatrajte ekran ispod lozinke i potrudite se da WordPress-ov test jačine pokaže zelenu boju.
Trebalo bi da budete svesni da čak i ako napadač ne može steći finansijsku prednost kroz dobijanje admin privilegija na vašem sajtu, to ne znači da neće pokušati da preuzme sajt.

Pogledajte cifre u nastavku:

Slika 2: Brute -force ili tzv. dictionary napad protiv WordPress sajta

Na slici iznad možete videti napad na WordPress admin panel.
Sva zaključavanja desila su se u istom danu i svaki put je meta bila potencijalno slabo korisničko ime za administratorski nalog.
Rečnici ne sadrže toliko mnogo reči da bi metod pokušaja i greške trajao toliko dugo. Dakle, ako koristite „default“ admin nalog i imate lozinku koju je lako pogoditi, verovatnoća da će vam sajt biti hakovan je poprilična.

Ovo je zato što WordPress platforma ne brani napadačima da neuspešno pokušaju da se uloguju previše puta, što im daje beskonačno vreme za pokušaje da se loguju kao administratori.
Ovo nas dovodi do sledeće stvari.

Ograničite broj pokušaja logovanja koje dolazi sa određene IP adrese u određenom vremenskom periodu

Ukoliko ovo ne uradite i ne zaključate IP na određen period, skripte koje koristi haker mogu da beskrajno funkcionišu dok ne pogode konačno i korisničko ime i lozinku, što im je cilj.

Plugin koji nije loše koristiti zove se Limit Login Attempts.
Nije bio ažuriran 4 godine ali radi sa najnovijom verzijom WP,  i dalje obavlja posao.


.Slika 3: Kastomizacija Limit Login Attempts plugina.

Možete odabrati da pravite logove IP adresa sa kojih je pokušan neuspešan pristup previše puta da biste kasnije mogli time da se poslužite u istraživanju i eventualno stavite permanentnu zabranu na tu IP adresu.

Plugin može da se podesi da šalje mejlom obaveštenja nakon neuspešnih pokušaja čiji broj određujete sami, i nakon čega se IP zaključava automatski; i možete kastomizovati“ ručno mnogo drugih detalja u vezi sa procesom zaključavanja IP-ja.

Zaštita WordPress administratorskog panela

Moj izbor je da onemogućim JavaScript i kolačiće da bih plugin testirao protiv automatuzovanih krakerskih alata koji pristupaju veb sadržaju, i plugin se odlično pokazao.


Slika 4: ostao je jedan login pokušaj do zaključavanja.

Šta se dešava nakon zaključavanja („lockout“)?

Čak i da sam nakon toga uneo ispravne pristupne podatke neću moći da se ulogujem, a ovo ostavlja hakere u mraku jer neće moći da saznaju da li je kombinacija korisničkog imena i lozinke koju su testirali ispravna ili ne.


Slika 5: Zaključavanje sprečava pristup čak sa ispravnim pristupnim podacima.
.

SSL pristup sprečava Man-in-the-Middle napad

Bez obzira na to da li vaš sajt ima više korisnika koji pišu ili uređuju, uvek će postojati šansa da morate sajtu da pristupite sa javnog računara ili javne WiFi mreže. Ovo samo po sebi povećava šansu za MitM.
Haker može da sluša saobraćaj u toj mreži i da uhvati vaš HTTP zahtev na WordPress admin panelu gde pokušavate da se logujete, i da na taj način dobije informacije koje mu trebaju. Da biste ovo sprečili možete upotrebljavati SSL za autentikaciju sebe ili drugih korisnika sajta, i to tako što ćete omogućiti da stranica bude dostupna preko HTTPS.

Ako niste sigurni šta da radite kucajte adresu sajta sa početnim https://, https://primer.com. Ukoliko dobijete grešku, znači da treba da kupite SSL sertifikat i da svoj web server pravilno podesite. Besplatan i pouzdan SSL sertifikat možete uzeti i odavde https://letsencrypt.org/ .

Ukoliko se vašem sajtu već pristupa preko kriptovane konekcije sa https, možete otvoriti wp-config.php datoteku (nalazi se u root direktorijumu na vašem WordPress sajtu), editovati svojim omiljenim editorom, i dodati sledeće linije datoteci;

// use ssl (https) for the login page
define(‘FORCE_SSL_LOGIN’, true);
//use ssl (https) for the whole admin area
define(‘FORCE_SSL_ADMIN’, true);
FORCE_SSL_LOGIN će izvršiti redirekciju i dozvoliti jedino https pri pokušaju logovanja na sajt, dok će FORCE_SSL_ADMIN aktivirati sigurnu konekciju na celom admin panelu.

Ukoliko omogućite jedno od ova dva, uvek ćete biti redirektovani kroz https pri pristupanju sajtu, što smanjuje šanse bilo kome da sluša vaš kritični saobraćaj.


Slika 6: ukoliko nemate SSL sertifikat ili web server nije pravilno konfigurisan, dobićete poruku slične sadržine

Dodajte CAPTCHA na stranu za logovanje

Implementacija CAPTCHA na login stranicu može da minimizuje pokušaje hakovanja tako što će zabraniti automatizovanim skriptama da je brute-forsuju ili da izvrše neki drugi napad ukoliko prethodno ne reše problem koji im postavlja CAPTCHA.

Ukoliko otvorite WP admin panel i kliknete na Plugins -> Add New, potom unesete captcha, dobićete dosta opcija između kojih možete izabrati ono što vam se dopada.
Hajde da pogledamo jedan od mogućih: Captcha by BestWebSoft https://wordpress.org/plugins/captcha/ je instaliran više od 300 hiljada puta i ima dobar rejting (4.5/5).

Kada se instalira, kreira novu stavku u vašem admin meniju gde ga možete prilagoditi svojim potrebama.
Moguće je koristiti ga na login strani, strani za resetovanje lozinke, i naravno, može biti koristan za komentare i registraciju korisnika, ako je omogućena.
IP adrese koje ne moraju da rešavaju CAPTCHA možete staviti na posebnu belu listu, a poruku koju vidi onaj ko je pogrešno odgovorio na CAPTCHA zadatak možete napisati sami.

Ovaj plugin dopušta da izaberete da li će CAPTCHA koristiti slova, brojeve, ili kombinacije.
Aktivacijom nakon instalaacije dobićete login formular sa CAPTCHA.
Ukoliko CAPCTHA ne bude pravilno rešen, nemoguće je pogoditi da li je kombinacija korisničkog imena i lozinke bila prava.


Slika 7: CAPTCHA na WP Login strani

Dozvolite logovanje samo sa određenih IP adresa

Ako imate statičku IP adresu i znate da se vaš IP ne menja često, login stranicu možete prikazati samo ako korisnikova IP adresa ima vrednost koja je već na beloj listi, i to koristeći .htaccess datoteku u vašem wp-admin folderu.

Čak i ako se IP adresa promeni, i dalje ćete moći da se logujete tako što ćete modifikovati .htaccess novom IP adresom. IP adresa sa kojih će biti moguće logovanje može da bude mnogo, u zavisnosti od toga koliko se ljudi loguje na WordPress sajt.

Da biste ovo uradili, pristupite serveru preko FTP (ili pristupite fajlovima na bilo koji drugi način koji vam odgovara) i otvorite wp-admin folder, i kreirajte ili editujte datoteku u njemu koja se zove .htaccess (bez imena fajla, samo ekstenzija).

Upišite sledeće:

order deny, allow
# Replace 99.99.99.99 with the desired IP address
allow from 99.99.99.99
#allow more IP addresses to access the wp-admin area by uncommenting the line below and editing the IP address
#allow from 98.98.98.98
deny from all

Kako dodati dozvoljene IP adrese?

Jednostavno nakon „allow from“ upišite koje su.
Ako ih ima više, kopirajte sve od linije 99.99.99.99 i editujte vrednosti IP adresa. Nakon što ste podesili .htaccess datoteku, korisnici sa različitim IP adresama koje niste uneli neće imati šansu da otvore login stranu, niti da koriste admin panel.


Slika 8: Ovako izgleda kada posetilac admin panela nema izlistanu IP adresu u .htaccess i ne može da vidi admin panel

Sakrijte WP admin panel

Ako niste sigurni da su koraci koje smo dosad nabrojali dovoljni, još jedna stvar na raspolaganju je „skremblovanje“ cele admin zone.

Na primer, URL login strane može da bude sasvim drugačiji od onog koji vam dodeli WordPress, što je uvek nekisajt/admin, nekisajt/wp-admin ili nekisajt/wp-login.php.

Ovo je moguće uz nekoliko dodataka WordPress-u.

Mi smo odabrali da vam predstavimo jedan od plugin-a koji se zove WPS Hide Login https://wordpress.org/plugins/wps-hide-login/ koji omogućava da se URL strane za logovanje promeni u šta god želite.

Jednom aktiviran, on kreira dodatna podešavanja u Settings -> General admin meniju, i dalje tu možete odabrati URL koji će biti korišćen za logovanje.

Svako ko ne poseduje ovaj URL i pokušava da uđe na sajt preko standarnog URL biće redirektovan na početnu stranu sajta, tj. homepage.


Slika 9: Postavljanje nove login strane sa WPS Hide Login plugin.

Iako hakeri i dalje mogu da brute-forcuju sajt, pogađaju lozinke ili da na drugi način, uključujući i socijalni inženjering, probaju da dobiju podatke koji im trebaju, u najmanju ruku će se obeshrabriti ako login stranu ne mogu uopšte ni da nađu, i ako moraju da ulože dodatni napor da je lociraju.

Dodavanje ekstra nivoa zaštite login strani i dvo-faktorska autentikacija (2FA)

Dodatni nivo zaštite sastoji se u tome da korisnici WordPress platforme prvo moraju da unesu pristupne podatke kroz HTTP Basic Auth da bi u sledećem koraku videli login stranu. Dosta plugina nudi ovu opciju.


Figure 10: Some of the plugins allowing 2FA in WP

Ako vam se ovo ne dopada ili mislite da 2FA nije neophodna, možete dodati neki drugi sloj zaštite svom sajtu. Najjednostavnije je da editujete wp-login.php datoteku unutar WP root, dodajući ovo na vrh fajla.


/** HTTP Basic Auth **/
if (!isset($_SERVER[‘PHP_AUTH_USER’])) {
header(‘WWW-Authenticate: Basic realm=”WordPress”‘);
header(‘HTTP/1.0 401 Unauthorized’);
echo ‘You need proper credentials to view this page’;
exit;
} else {
$users = array(‘iamadmin’ => ‘iamtheadmin’, ‘johny’ => ‘bravo’);
if (!array_key_exists($_SERVER[“PHP_AUTH_USER”], $users)
|| $users[$_SERVER[“PHP_AUTH_USER”]] !== $_SERVER[‘PHP_AUTH_PW’]) {
echo “Wrong credentials!”;
exit;
}

}
 

 

Ovaj fragment koda koji vidite iznad hardkoduje korisnička imena i lozinke kojima se otkriva login strana, nju je moguće videti samo ukoliko je korisnik uneo jednu od dve (ovo možete editovati) ime / lozinka kombinacije unutar $users array.

Fragment pokazuje HTTP Basic Auth credentials box samo jednom u tokom sesije (ako korisnik unese pogrešnu kombinaciju ime / lozinka, moraće da zatvori brauzer i pokuša ponovo kada gaa restartuje), ali ovo može lako da se izmeni dodavanjem dve linije pomenute ranije, u else.

header(‘WWW-Authenticate: Basic realm=”WordPress”‘);
header(‘HTTP/1.0 401 Unauthorized’);

Problem sa insertovanjem fragmenta u wp-login.php je u tome što sve ove promene mogu da se izgube tokom ažuriranja WordPressa.

Zato je preporučljivo da kreirate svoju login stranu i koristite WordPress globalnu wp_login_form () funkciju da vam prikaže formular za logovanje.

Tu možete dodati HTTP Basic Auth (bez hardkodovanih pristupnih podataka) editovanjem .htaccess fajla i dodavanjem .pwd fajla na web server.


Slika 11: I dalje će nam se prikazivati WP login strana ali tek nakon što smo joj uspešno pristupili preko HTTP Basic Auth

Zaključak

Pošto je lako koristiti WordPress, ljudi često smetnu s uma dodatne nivoe zaštite koji su neophodni da bi njihova WP instalacija potrajala dugo bez problema. Hakovanje admin sekcije na WordPressu je veoma čest način da se preuzme sajt, i ukoliko ne preduzmete nikakve korake i vi možete biti žrtva hakera. Ima dosta načina da se login strana zaštiti, i trebalo bi koristiti barem nekoliko od njih istovremeno, jer ovim povećavate otpornost svoje WP instalacije na neželjene rezultate.

Dodaj komentar