Wordpress, Joomla brute force login védelem

Fórumok

Sziasztok

Adott egy szerver, rajta sok féle honlap, többek között Wordpress és Joomla. Ezekre nincs közvetlen ráhatásom. Olyanok amilyenek. A frissítés úgy-ahogy kikényszeríthető.
Magas CPU terhelést generálnak, ha megpróbálják feltörni az admint.
Random IP-ről jönnek és nagyon sokan.

A következő fail2ban filtert raktam össze netes ajánlásokból:


cat /etc/fail2ban/filter.d/framework-ddos.conf 
[INCLUDES]
before = common.conf

[Definition]
_daemon = framework-ddos

failregex = .*:(80|443) <HOST> .*POST .*/xmlrpc.php
            .*:(80|443) <HOST> .*POST .*/wp-login.php
            .*:(80|443) <HOST> .*POST /administrator/index.php HTTP
ignoreregex =


jail.conf:
[framework-ddos]

enabled  = true
filter   = framework-ddos
action   = iptables-ddos[name=framework-ddos, port=http, protocol=tcp]
logpath  = /var/log/apache2/other_vhosts_access.log
maxretry = 5
# findtime: 10 mins
findtime = 600
# bantime: 1 week
bantime  = 604800

Szépen működik, de a probléma az, hogy a weboldal tulajok adminban történő matatására is ugrik. Hogyan lehetne tovább javítani, hogy tényleg csak a login próbálkozásokra szűrjön?

Alternatív megoldásnak még az jutott eszembe, hogy mérem az egyes vhostok CPU terhelését és ha elér egy küszöbértéket, error 503-ra irányítom, de nem tudom, hogy mennyire bevett és etikus gyakorlat?

Hozzászólások

Ha jól értem, akkor 10 perc alatt 5db belépésnél büntetsz. Szerintem ha próbálkoznak, akkor jóval sűrűbben jönnek a kérések.

Tapasztalataim szerint az alap fail2ban stb. megoldások gyári filtereihez igazítva "úsznak a radar alatt". A "vékony jégen" meg lehet azért már csúszkálni, kamu useragent-ek, hamis google bot-ok, stb.

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

A tulajok egyébként főképp magyarok, vagy teljesen változó?
Olykor abból is lehet profitálni, hogy ilyen kicsi ország vagyunk. Tudom, hogy 2016 meg nem olyan szép megoldás, de a fail2ban-hoz tudsz csinálni olyan ignore list-et / action-t ami mellőzi a magyar IP-ket. (tudom proxy, tudom tor, de itt nyilván botnet támadásról van szó)

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

fail2ban-nal akarsz DDoS kivedeni? :D Azert az eleg vicces.

Ha tenyleg elkezdenek DDoSolni mar mint rendesen akkor elobb fog a szervered osszeomlani out of memory-val mint ,hogy a failban megtudna vedeni vagy fognak egy 404-es oldalt elkezdenek random requestekkel tolni ,hogy kihaljon a HTTP szerver.

Ilyen ha DDoSolnak:
https://www.dropbox.com/s/y46tpksq4uj4aua/Screenshot%202016-12-16%2020…

--
"ssh in a for loop is not a solution" – Luke Kanies, Puppet developer

Szerintem sokkal inkább jogosultság szerzésre gondolt, csak ezt olyan agresszívan teszik, hogy megterheli a szerverét - érted, nem statikus szöveget, hanem php fájlokat get-post-olnak. Elég általános ez sajnos.

btw: Hajdanán én is raktam emiatt rickroll jutub linket xmlrpc.php-ba. :D (plain, tagek nélkül)
De van ennél is lejjebb! Láttam olyan hazai "szolgáltatót", aki pl. törölteti KÖTELEZŐEN az xmlrpc.php-t. :D :D

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

Áh.. ne ezen törd a fejed! Elég sok minden tudja / szokta használni, az oldalak ezen keresztül tudnak egymással kommunikálni, mobil app-ok tudják használni, elég széles a felhasználási terület. (csak guglizz rá)

Törölni / Honeypot-ot rakni a helyére értelmetlen, mert túl sok lesz a fals pozitív, valamint egy update-tel úgy is felülíródik/újragenerálódik...

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

"Ha tenyleg elkezdenek DDoSolni mar mint rendesen"

Úgy gondolom DDoS és DDoS is között van különbség. Vagy ha ez nem az, tessék neki jobb nevet adni. Ismereteim szerint ez (is) az.
Ez itt bizonyára nem a "rendesen" kategória van.
A Fail2Ban erre a szintre még jó, mert visszatérő IP-kről van szó, ami megszórja az egyik vhostot, az a másikat már nem tudja a ban miatt.
A pár órás esti megszórások eltüntek, tehát hatékonynak bizonyul ez a része.

"The Difference Between DoS and DDos Attacks
A Denial of Service (DoS) attack is different from a DDoS attack. The DoS attack typically uses one computer and one Internet connection to flood a targeted system or resource. The DDoS attack uses multiple computers and Internet connections to flood the targeted resource. DDoS attacks are often global attacks, distributed via botnets."

Köszi, de ennek fényében a több IP-ről jövő (gyanúsan botnetből érkező) 1 célgép felő irányuló támadás nem DDoS? Mert eddig így tudtam és a fenti sorokat is így értelmezem.

En most bevezettem, hogy apache + geoip vel .hu esetleg .us meg .eu, sokat tud segiteni :>

Fedora 25, Thinkpad x220

Igen, geoipvel nekem is jó tapasztalatom van egy másik szerveren és szolgáltatási területen, de szívás is volt vele. Az .hu IP adatbázisok elég hiányosak voltak, így több user nem tudott tudta elérni. Főleg mobil internetes userek jeleztek, de volt több vidéki szolgáltatós is.

Te nem tapasztaltál ilyet?

Ugyan ezt említettem én is fentebb. Kicsi országnak is vannak előnyei. De azonnal bukott az egész, ha vlaki elkezd használni egy külföldi címes VPN-t, valami plugint, ami külföldről kommunikálna, nem elég friss a geo adatbázisod (ha online-t használsz is elő tud fordulni) stb.
Saját honlaphoz szerintem még mindig szuper, de ha "generál" van rá szükség (mint jelen esetben), akkor nem jó sajnos.
Max ha készítesz az ügyfeleidnek egy egyszerű "kapcsolót" ehhez, hogy tudják ők maguk ki- és bekapcsolni.

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

@ventura: köszi, futottam vele ismét egy kört ez alapján, annyival kiegészítve, hogy nem Directory /, hanem


[FilesMatch "^(wp-login\.php|wp-trackback\.php|administrator)"]
 SetEnvIf GEOIP_COUNTRY_CODE HU AllowCountry
 Deny from all
 Allow from env=AllowCountry
[/FilesMatch]

Így, ha hibás a HU adatbázis, nem sérül a felhasználó élmény. Legrosszabb esetben nem éri el az adminja.

@andras0602: köszi a kapcsolós ötletet, ez megoldhatja az előző problémát. Az ajánlott linket megnézem, köszi! Igen, én vagyok az ;)

Nem akarom ismételni magam, se reklámot csinálni, de fentebb már említettem a BitNinját

.
Egy ideje már használom, igazán jó tapasztalataim vannak vele. Tökéletesen az olyan problémákra (is) van, mint amit te is említettél.
Ha a Kandós Proci85 vagy, akkor szegről-végről már ismerjük is egymást, talán jövök is neked eggyel, (egy matek tárgyam tkp. miattad lett meg :D) írj és segítek beállítás és account ügyben is akár! ;)

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

1: csak érdekességképp megnéztem egy (legfrissebb verziójú) wp oldalam admin logját, és abban egy kérés sem jött a wp-login.php-ra a ki- és bejelentkezéseken kívül, ergo - annak ellenére amit fentebb írsz - az adminok benti matatása nincs erre ráhatással. vagyis én mindenképpen ezt az url-t külön kezelném és a default maxretry-t én a helyedben 3-ra tenném a wp-login.php esetén, és az időkeretet is feljebb venném (ha azt látod, hogy az ip-k változnak, de egy órán belül azért vissza-visszatérnek, akkor mehet a findtime egy órára). pont a napokban javasoltam egy alternatív, loop-szerű megoldást, amivel a tényleg bénákat hosszú távon el lehet különíteni a botoktól (lehet, hogy minimális effort lesz, hogy vkit manuálisan unbanolj, de hát ez belefér szvsz).

2: az xmlrpc.php az api végpont. ergo ezt se nagyon kéne az adminok "benti" tevékenysége érintse.

3: gondolom a felesleges terhelést okozó próbálkozások java pontosan ezekre az url-ekre jönnek. ergo egy $ a regex végére, és ezáltal is lehet még elkülöníteni próbálkozásokat.

4: ha jól emlékszem, Joomla esetében nem a /administrator url-re szűrtem, hanem az "authentication failure." szövegre. ezzel is elkerülhető, hogy az adminjaid "benti" matatásával összekeverd a tényleges próbálkozásokat. de lehet, hogy ehhez már külön plugint használtam? sajnos nem emlékszem, rég volt :-/

5: ha a logjaid külön vannak, keresstess a fail2bannal egyszerre többen!

Mindamellett, hogy a fail2ban-t egy zseniálisan jó eszköznek tartom, több éve használom/használtam, egy botnet támadás kivédésre sajnos alkalmatlan.
Még ha közel végtelenre rakod is a figyelési időt és a naplókat csak nagyon ritkán forgatod (nyilván a figyelés miatt) akkor sem fogsz tudni vele egy ilyen botnet támadást védeni. Több száz, illetve ezer db ip-vel egymás után ütnek rajtad 1-2-t utána az az ip téged már nem, hanem egy másik szervert fog bökdösni. Idióta példa: mint amikor a Mario-ban ugrálsz egyik tégláról a másikra, és főleg csak 1 irányba ugrálsz. (mario az ip, amiből sok van, nekünk meg egy pár téglánk)
Több ezer szerverre volna szükséged és centralizált logolásra, hogy ezt ki tudd védeni. Nekem sajnos sokkal kevesebb szerverem van. Ilyenkor hatalmas előny egy "elosztott rendszer" - vagy "cloud protection system" - nem írom le újra... na jó de :D BitNinja. Egyébként ha tudtok, minden alternatíva érdekel!

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

Egyre több portálmotor már telepítésénél javasolja, hogy ne default címen legyen az admin login.
WP-hez (gondolom máshoz is) van bővítmény, ami kimondottam az admin felületet védi.
Már találkoztam szolgáltatónál, és mi is alkalmazzuk, hogy webszerver segítségével teszünk egy egyszerű jelszavas védelmet az admin felületekre. Ha a user/passwd is a domain név, akkor is 100%-os a védelem az eddigi kb 3 éves tapasztalat alapján.
Vannak publikus feketelisták olyan címekkel, amikről támadják az oldalakat. Ezekre is lehet szűrni.
Szóval egészen egyszerű, ingyenes eszközökkel vissza lehet szorítani az ilyen terheléseket.
Az ügyfélnek is érdeke, hogy gyors legyen az oldala, ezért meg lehet kérni, egy plugin telepítésére, vagy egy plusz jelszó megadására.

Sajnos ez a megoldás halott ötlet, egyrészt mert nem csak az admin-t kell védeni, másrészt a fentebb említett CMS-ek esetén lesz olyan plugin, amiben az admin login elérése hardcode-olva van. És 100%, hogy az ügyfél fog ilyen plugin-t telepíteni. (elég egy retek téma, nem kell több)
Az eredmény? Az ügyfél kizárja magát a saját oldaláról (jobb esetben! működni még fog a site) és téged fog zaklatni vele, mert kézzel nem fogja tudni kikapcsolni plugin-t (átnevezni/törölni a plugin mappát). Kis "szerencsével" csak megijed és nem szól neked, nem mer hozzányúlni/frissíteni, közben lesz egy exploit, és nyugodt lehetsz, a kis indonéz barátaink bejutnak admin login page nélkül is. :D

WP-hez szerintem messze a legjobb védelmi bővítmény a WordFence

Ingyen is használható, értesítéseket és statokat is csinál neked, vírust keres, szól, ha van update valamihez, "süt-főz-mosogat". A nagy ámerikában viccen kívül, utólag és hálából veszik meg a premium-ot userek, mert annyit véd a kis wordpress-ükön.

De mint Proci85 fentebb írta, nem ő kezeli az oldalakat (ez a tipikusabb, lássuk be). És ha belegondolsz, erőforrás szempontjából marhára nem éri meg (különösen sok oldalnál) ilyen védelmi plugin-ok telepítése NEKÜNK, aki a szervert üzemelteti. Ahány oldal annyi AV, "tűzfal" szerűség, detector, stb.

A legoptimálisabb megoldásnak továbbra is a BitNinját tartom, ami minden egyben, log analyzer, tűzfal, captcha, stb.:

Így 1 füst alatt letudsz közel mindent, nincs fölösleges "overhead". Megy ingyen is, de nekem a védelemért amit ad, BŐVEN megér annyit, amennyibe kerül. Különösen, ha az időt és ügyfelek bizalmát nézem, amit meg tudok vele menteni. ( ha a szerver a tiéd, bajban a hibás mindig "úgy is te leszel" ;) ) Szerintem egyszerű a használata is. Meg ugye bármennyire is pro vagy ezen a téren, szinte kizárt, hogy 1 emberként jobb leszel, mint egy csapat, aki direkt és csak ezzel foglalkozik. (a kényelmen és a modularitáson kívül ez a másik ok, ami miatt az emberek CMS-eket használnak, nem?)

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

Melyik megoldás a halott ötlet?
2 fő fejlesztővel szó szerint dupla létszám a BitNinja, mint az egy fős pro üzemeltető. De jobb hosting cégeknél nem egy fő szokta üzemeltetni a szervereket. Én nem azt mondtam, hogy a web-server csapata rosszat csinálna, hanem, hogy van pár egyszerű módszer, ami jelentősen visszaszorítja a felesleges terhelést.
Konkrétan nincsen tapasztalatom barkácsolt WP oldalak üzemeltetésében, így nem tudom, milyen problémák jelentkeznek a rosszul megírt pluginek mellett, ha le van védve plusz jelszóval az admin oldal, vagy ipset segítségével fekete listára van téve egy nagyobb ip lista, amit naponta frissítenek automatizáltan.

Passz, ezekbe a dolgokba nem látok bele, de talán értem mire célzol.
Viszont nagyon szeretem az ilyen "keep it simple" megoldásokat, szóval ha tudsz még bármilyen hasonló "best practice"-t a témát illetően, adhatnál még pár ötletet, mert egész biztos hasznos volna mindenkinek!
Az előző viszont kicsit "vízipisztollyal elefántra" megoldásnak tűnt nekem. Azért adok neki egy próbát! Van egy használaton kívüli cloudatcost-os vps-em, dobok rá valami random pizzéria template-et, max. 1-2 hónap és minden kiderül! :D

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

Egy kisebb webszerveren. Kb 20 holnap van rajta.
https://github.com/trick77/ipset-blacklist/blob/master/ipset-blacklist…
iptables -L -v
pkts bytes target prot opt in out source destination
671K 40M DROP all -- any any anywhere anywhere match-set blacklist src

Hosting szolgáltató küldhet hirlevelet az ügyfeleinek, hogy WP-hez ajánlja ezt és ezt a bővítményt az oldal védelme érdekében...
Ha a 10% beállítja, javult a helyzet, egy óra munka volt vele.

Mindenki maga tudja mire van szüksége.

Ezek nyilván nem profi védelmek, de az amatőr "támadásokat" egyszerűen ki lehet védeni.

Teljesen egyetértek. Wordfence megbízhatóan teszi a dolgát, van több honlapom is, amin több tucat támadást blokkol naponta. Állandóan jönnek a "robotok" és próbálkoznak. Eddig minden hibátlan vele. És igazából az ingyenes verzió is kb mindent tud, ami kell. Amúgy vicces látni, hogy milyen névvel próbálkozgatnak, vannak érdekes nevek..:D

Érdemben nem tudok hozzászólni, de mondjuk kínát és koreát nem árt rögtön kizárni, index.php-ba írva ez bejön:



$latogato=gethostbyaddr(GetIP());

#korea hanyagolasa
if (substr_count($latogato,'.kr')>=1) header("Location: http://www.disney.com");

#kina hanyagolasa
if (substr_count($latogato,'.cn')>=1) header("Location: http://www.disney.com"); 


---
--- A gond akkor van, ha látszólag minden működik. ---
---

Megoldják ezt ők maguknak apránként. :D BAN-olják saját magukat... (hidd el, láttam a túloldalról is a Nagy Falat)
Ráadásul piszok módon erősödnek a gazdasági kapcsolatok is, lényegesen több a valós látogatás Kínából, mint pár évvel ezelőtt.
Én Indonéziát és az arab világot érzem nagyobb "problémának" a töménytelen script kiddie-vel meg a végtelen szabadidejükkel. A ruszkik meg... továbbra is pro szinten űzik az ipart...

"If I had six hours to chop down a tree, I'd spend the first four hours sharpening the axe."

Bár tudom, hogy ez nem megoldás neked de hátha hasznos lehet ötlet szinten. Én csak a saját céges pár oldalunkat védtem le, úgy hogy csak bizonyos ip címekről engedem a hozzáférést+fail2ban. A bejövő http/https kéréseket pedig varnish-al kezelem, bár az itt most nem releváns azt hiszem. A document rootban lévő .htacces tartalma:

Kézi megoldás de nekem bevált az illetéktelen próbálkozásoknál. Természetesen utána bannolva vannak akik nem oda illenek.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteCond %{REMOTE_ADDR} !^yyy\.yyy\.yyy\.yyy$
RewriteRule ^(.*)$ - [R=403,L]

fail2banban van lehetoseg ip whitelistre, felveszed az admin(ok) ip tartomanyait.

vagy akar csinalsz egy sajat cuccot, az admin meg eloszor megnyitja a http://teipd/engedelyezz-a-fail2banban.php oldalt, ami liveban felveszi a whitelistre (vagy irsz egy wrapper az iptables elott, ami nem tiltha ki az ipt aki meglatogatta ezt az oldalt)

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Tegyél be a login oldal elé egy basic auth-ot. A 401 szerintem elijeszti a botokat, mivel nem látnak WP oldalt. Akkor brútolnak ha látják, hogy ott egy valódi WP admin oldal rejtőzik.

Persze lehet, hogy nekiesnek a basic auth-nak is, de kevésbé tartom valószínűnek, és a terhelés is kisebb lesz. Ráadásul arra valszeg egyszerűbb fail2ban -t konfigolni.