Zaznani napadi preko ranljivosti v memcached strežnikih / UDP protokolu

V zadnjih tednih opažamo precej pogoste DDOS napade v povezavi s potencialno ranljivostjo v Memcached strežnikih oziroma UDP protokolu. Zato v spodnjem prispevku navajamo nekaj podatkov o teh vrstah napadov ter napotke za odpravo ranljivosti.

Kaj je sploh memcached?

Memcached je aplikacija za predpomnenje (cache) podatkov oziroma podatkovnih baz v pomnilniku.  Ta aplikacija se ponavadi nahaja na strežnikih oziroma podatkovnih centrih, uporablja pa se za pohitritev dostopov do podatkovnih baz – ponavadi spletnih (e-commerce) trgovin in drugih obsežnejših spletnih strani.

Kako pride do napada s pomočjo memcached?

Zaradi narave podatkov, ki se procesirajo in so lahko občutljivi, memcached aplikacija ne bi smela biti javno dostopna na omrežju brez ustreznih varoval. V večini privzetih konfiguracij strežnik posluša tako na TCP kot UDP vratih, vendar pa zgolj na “loopback” vmesniku (127.0.0.1).

V napadu z odbojem (imenovanem tudi napad z ojačanjem ali “amplification attack”) storilec pošlje “vprašanje” s potvorjenim (spoofed) izvornim IP naslovom, ki ustreza naslovu žrtve, večjemu številu strežnikov, ki sprejemajo zahtevke na UDP vratih. Ti nevede odgovorijo na podtaknjeni naslov in tako žrtev zasujejo z odgovori. Napad je učinkovit, če so odgovori zadosti večji od vprašanja (pride do zadostnega “ojačanja”) in če v napadu sodeluje zadostno število strežnikov. Potvarjanje TCP prometa ni zanesljivo, zato se v takih napadih izrabljajo zgolj storitve, ki uporabljajo UDP protokol. Najbolj pogosto se izrablja storitev DNS in NTP.

Memcached privzeto uporablja komunikacijska vrata 11211, pri čemer je lahko odgovor strežnika tudi do 50.000 krat večji od prejetega zahtevka, in je zaradi tega zelo primeren za namen ojačitvenih oziroma amplification napadov. Za primerjavo: ojačitev rekurzivnega DNS strežnika je med 28 in 54, NTP strežnika pa okoli 550 [4].

Poleg možnosti zlorabe v omenjenih napadih izrecno opozarjamo tudi na to, da lahko memcached strežniki obdelujejo občutljive podatke. V primeru, da je strežnik javno dostopen na omrežju, lahko pride tudi to odtekanja podatkov

Kaj lahko storim, da do napada preko mojega memcached strežnika ne more priti?

Skrbniki memcached strežnika ali sistema:

Skrbnikom memcached strežnika svetujemo omejitev splošne dostopnosti iz interneta.

Če uporabljate memcached lahko onemogočite UDP podporo, v kolikor je ne uporabljate. Med zagonom memcached lahko specificirate opcijo  --listen 127.0.0.1 , ki bo memcached pognala le na loopback IP naslovu ter -U 0 za onemogočanje UDP protokola. Privzeto memcached posluša na INADDR_ANY  naslovu ter z UDP podporo omogočeno. Dokumentacija:

V kolikor želite preizkusiti ranljivost lahko poženete:

$ echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -q1 -u 127.0.0.1 11211
STAT pid 21357
STAT uptime 41557034
STAT time 1519734962
...

V kolikor opazite kakršnekoli odgovore (kot zgoraj) je vaš strežnik ranljiv.

Skrbniki omrežij lahko za zaščito pred napadi implementirajo omejitev dohodnega in izhodnega prometa na vratih UDP/11211.

Ali so vrata odprta preko UDP lahko preizkusite z nc zgoraj, za preverbo TCPja pa uporabite nmap:

$ nmap TARGET -p 11211 -sU -sS --script memcached-info
Starting Nmap 7.30 ( https://nmap.org ) at 2018-02-27 12:44 UTC
Nmap scan report for xxxx
Host is up (0.011s latency).
PORT      STATE         SERVICE
11211/tcp open          memcache
| memcached-info:
|   Process ID           21357
|   Uptime               41557524 seconds
|   Server time          2018-02-27T12:44:12
|   Architecture         64 bit
|   Used CPU (user)      36235.480390
|   Used CPU (system)    285883.194512
|   Current connections  11
|   Total connections    107986559
|   Maximum connections  1024
|   TCP Port             11211
|   UDP Port             11211
|_  Authentication       no
11211/udp open|filtered memcache

Za preprečevanje podobnih napadov v prihodnosti moramo vsi skupaj popraviti ranljive protokole in IP potvarjanje. Dokler je IP potvarjanje na spletu sprejemljivo in mogoče bodo žal vedno nastajale težave in ranljivosti.

Razvijalci

Prenehajte z uporabo UDP. V kolikor morate, je ne omogočajte privzeto. V kolikor ne veste, kaj je napad z ojačanjem vam prepovedujemo uporabo SOCK_DGRAM v vašem urejevalcu 😉

V zadnjih letih je vedno več napadov s podobnim izhodiščem. DNS, NTP, Chargen, SSDP in sedaj memcached. V kolikor uporabljate UDP morate vedno poskrbeti, da odgovarjate z manjšim packet size-om – v nasprotnem primeru bo protokol vedno žrtev in zlorabljen. Prav tako uporabljajte požarni zid. Bodite zgleden državljan. Ne razvijajte protokolov na osnovi UDP, ki nima primerne zaščite.

Za vse dodatne informacije se lahko vedno obrnete tudi na našo podporo preko https://www.si-shell.net ali e-pošte info@si-shell.net oziroma pomoč poiščete neposredno pri SI-CERT-u na info@cert.si.

Viri:

https://www.cert.si/si-cert-2018-02/
https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/