It's been a short news story that
matrix.org's
largest server was hacked into, and they have reached one homeserver of
the decentralised chat network and was able to access information generally
closed from the large public (but accessibe for a server operator).
As a nice touch the person who's been behind the breakin was nice enough to
share his/her thoughts about the case, and I believe (despite the fact that
GitHub have been deleted the comments) there's lot to learn from the useful
advices of out black hat colleague.
Let me share them with you, a bit trimmed and rephrased here and there.
Complete compromise could have been avoided if developers were prohibited
from using ForwardAgent yes or not using -A in their SSH
commands. The flaws with agent forwarding are well documented.
Escalation could have been avoided if developers only had the access they absolutely required and did not have root access to all of the servers. I would like to take a moment to thank whichever developer forwarded their agent to Flywheel. Without you, none of this would have been possible.
Once I was in the network, a copy of your wiki really helped me out and I found that someone was forwarding 22226 to Flywheel. With jenkins access, this allowed me to add my own key to the host and make myself at home. There appeared to be no legitimate reason for this port forward, especially since jenkinstunnel was being used to establish the communication between Themis and Flywheel.
* I was able to login to all servers via an internet address. There should be no good reason to have your management ports exposed to the entire internet. Consider restricting access to production to either a vpn or a bastion host.
* On each host, I tried to avoid writing directly to authorized_keys, because after a thorough peak at matrix-ansible-private I realized that access could have been removed any time an employee added a new key or did something else to redeploy users. But sshd_config allowed me to keep keys in authorized_keys2 and not have to worry about ansible locking me out.
* The internal-config repository contained sensitive data, and the whole repository was often cloned onto hosts and left there for long periods of time, even if most of the configs were not used on that host. Hosts should only have the configs necessary for them to function, and nothing else.
Kudos on using Passbolt. Things could have gotten real messy, otherwise.
* Let's face it, I'm not a very sophisticated attacker. There was no crazy malware or rootkits. It was ssh agent forwarding and authorized_keys2, through and through. Well okay, and that jenkins 0ld-day. This could have been detected by better monitoring of log files and alerting on anomalous behavior. Compromise began well over a month ago, consider deploying an elastic stack and collecting logs centrally for your production environment.
* There I was, just going about my business, looking for ways I could get higher levels of access and explore your network more, when I stumbled across GPG keys that were used for signing your debian packages. It gave me many nefarious ideas. I would recommend that you don't keep any signing keys on production hosts, and instead do all of your signing in a secure environment.
* 2FA is often touted as one of the best steps you can take for securing your servers, and for good reason! If you'd deployed google's free authenticator module (sudo apt install libpam-google-authenticator), I would have never been able to ssh into any of those servers.
Alternatively, for extra security, you could require yubikeys to access production infrastructure. Yubikeys are cool. Just make sure you don't leave it plugged in all the time, your hardware token doesn't do as much for you when it's always plugged in and ready for me to use.
Alternate-Alternatively, if you had used a 2FA solution like Duo, you could have gotten a push notification the first time I tried to ssh to any of your hosts, and you would have caught me on day one. I'm sure you can setup push notifications for watching google-authenticator attempts as well, which could have at least given you a heads up that something fishy was going on.
Anyways, that's all for now. I hope this series of issues has given you some good ideas for how to prevent this level of compromise in the future. Security doesn't work retroactively, but I believe in you and I think you'll come back from this even stronger than before.
In
metric,
one milliliter of water occupies one cubic centimeter,
weighs one gram, and requires one calorie of energy to heat up by one
degree centigrade—which is 1 percent of the difference between its
freezing point and its boiling point. An amount of hydrogen weighing
the same amount has exactly one mole of atoms in it. Whereas in the
American system, the answer to ‘How much energy does it take to boil a
room-temperature gallon of water?’ is ‘Go fuck yourself,’ because you
can’t directly
relate
any of those quantities.
A
metrikus
rendszerben egy milliliternyi víz egy köbcentiméter térfogatú, a súlya
egy gramm, és ahhoz, hogy egy celsius-fokkal emelkedjen a hőmérséklete
pontosan 1 kalória[1] energia szükséges, ami a forráspontja és a fagypontja
közötti különbségnek egy százaléka. Egy pontosan ilyen súlyú
hidrogén-mennyiségben pontosan egy mólnyi atom van. Mindeközben az
amerikai mértékegységrendszerben arra a kérdésre, hogy „Mennyi energia
szükséges egy gallon szobahőmérsékletű víz felforralásához?” a
megfelelő válasz a „Baszódj meg”, mert képtelenség azokat a mennyiségeket
közvetlenül összekapcsolni.
1: igen, a
kalória nem SI mértékegység.
Humort magyarázni…
Legyen kedves postafordultával bemutatni, hogy pontosan mikor, hol,
hogyan egyeztem bele, hogy spameket küldjenek nekem, valamint legyen
kedves szintén mellékelni a hozzájárulásom (arról is szükséges
tudni hogy hol, mikor, milyen formában történt) hogy hozzájárulok
marketing témájú kéretlen levelekhez.
A félreértést elkerülendő:
Kérem, hogy a
2011. évi CXII. törvény (Infotv.)
14. § alapján
haladéktalanul (de legkésőbb 8 napon belül) tájékoztassanak az Önök,
kapcsolt vállalkozásaik, partnereik, illetve bármilyen a személyes
adataim kezelésével kapcsolatos Adatkezelők és Adatfeldolgozók által
kezelt adataimmal (az Infotv. 3. § 2. szerinti személyes adatok és
egyéb, esetleg nem személyes adatok) kapcsolatosan:
mikor és milyen formában történt meg a 14.§ (a) pontja szerinti tájékoztatás;
teljes körű másolatot kérek az Infotv. 16.§ (1) és (2) szerinti tájékoztatásról (az abban szereplő adatokról);
bocsássák rendelkezésemre az Önök által kezelt személyes adataimat
és minden azokkal összefüggő információt (vagyis minden olyan adatot,
mely személyes adataimmal kapcsolatba került vagy azzal bármilyen
korrelációs viszonyba került; ennek túl laza megállapítása ellen jelzem
ezzel kapcsolatos jogi felelősségüket);
azonnal korlátozzák személyes adataim felhasználását oly módon, hogy
az ne kerülhessen semmilyen Önök, vagy Önökkel kapcsolatban álló
Adatkezelő vagy Adatfeldolgozó által végzett marketing tevékenység
során felhasználásra, és ezen intézkedések módjáról és körülményeiről
haladéktalanul tájékoztassanak;
teljes körűen tájékoztassanak az Infotv. 17. § szerinti
Adatkezelők és Adatfeldolgozók pontos nevéről és adatairól.
Tájékoztatom – a tévedések elkerülése végett –, hogy a jogtalan
adatkezelés tényállását a „leiratkozás” lehetősége vagy végrehajtása
nem befolyásolja.
Tájékoztatom továbbá, hogy a fentiek az Infotv. szerinti jogaim
gyakorlását biztosítják és teljesítésük nem jelent garanciát arra, hogy
jogaim megsértése esetén nem kerül sor a jogszerűtlenség
megállapítására vagy a jogsértés kompenzációjára
irányulóeljárás
megindítására. Nem teljesítésük esetén az említett eljárások
megindítása teljesen bizonyos, belefoglalva az Infotv. jelzett
szakaszainak közvetlen megsértését is.
Ezúton jelzem, hogy jelen levelem elkészítésének igénye 30 perc volt
(a későbbi kártérítési igény megállapításához).
Általában a Magyar Postával való
vitás ügyeimet blogbejegyzés nélkül el szoktam tudni intézni: az ember
előkeresi az ÁSzF
megfelelő részeit, beviszi a postára, határozott tekintettel jelzi, hogy
szeretné, ha ez alapján járnának el, és a dolog aránylag békésen meg szokott
oldódni.
Ez nem az az eset.
A dolog ott kezdődik, hogy láttam már postát és postást, konkrétan szerintem
lasasn féltucat helyen laktam, és legalább tucatnyi postással volt dolgom.
Volt olyan posta, ahol nem találkoztam a helyi vezetővel, de nem egy volt
ahol igen, a tisztázandó dolgok végett. Szóval, na, láttam már postát.
Új hely, új posta. Kapok egy bedobott értesítést, hogy levélküldemény.
Ez gond, ugyanis aznap nulla órától huszonhárom óra ötvenkilenc percig otthon
voltam, és postást még hírből se' láttam. Szóval ilyenkor az ember bemegy,
és jelzi, hogy tessék csengőt simítani.
De, ez nem az az eset. Az most mellékszál, hogy milyen stílusban
(alpári bunkó), de a helyi oberführerin jelezte, hogy „a postaládába nem
férő küldeményeket nem is próbálják kivinni”, és ez „benne van a szabályzatban”,
de persze „nem tudja, hol”. Jó, bizonyosan, amúgy is egy másodperccel sem
kívántam tovább egy légtérben lenni egy ilyen puhatestűvel így jöttem
haza nézni. (Ja, mint kiderült a csomag 150×195 mm, viszont 30 mm vastag.)
És majdnem nem hazudott. Ez olvasható a Magyar Császári és Királyi Posta
regulájában:
„6.2. A kézbesítés általános szabályai
2/A) A Posta a méretei miatt levélszekrény útján nem kézbesíthető
(maximális méret 324x229x24 mm), címhelyre címzett
nemzetközi viszonylatú, nem könyvelt postai küldeményt
a címében feltüntetettől eltérő helyen – a címhelyen
történő kézbesítés megkísérlése mellőzésével –,
a 12/A) bekezdésnek megfelelően hátrahagyott értesítő alapján a címhez
rendelt, kijelölt kézbesítési ponton is kézbesítheti.” (Kiemelések
tőlem.)
Ízlelgessük egy picit. Ez azt jelenti, hogy a posta többet nem hajlandó
kézbesíteni semmiféle külföldi, nem ajánlott küldeményt,
lévén ezek az esetek 99.99%-ban valamelyik méretbe nem fognak beleférni.
Ez nem levélküldeményre vonatkozik, hanem minden fajta külföldi küldeményre
(melyek amúgy nem [nagy méretű] csomagok, mert azt a posta intelligencia
alapon leválasztott másik része, az MPL kiszállítja).
Természetesen nem az szerepel az ÁSZF-ben, hogy nem fogja
kézbesíteni, hanem az, hogy ha akarja, akkor nem kézbesíti.
És ha akarhatja nem kézbesíteni, mi a francért kézbesítené? Kurva anyját
annak az ügyfélnek! Emelje már meg a seggét és fáradjék bé a postapalotába,
állja ki a sorát, kis papírkájával, és ne ringassa magát abban a
kurva illúzióban hogy a 21. század digitális korában él!
És azt a Vezető Véglény már csak odavetette, hogy „há' me' annyi
lett a külföldi küldemény hogy má' nem fért a postásba, ezér' változott
fél éve vagy mikor má'.” Értem én, dolgozni kellene bazmeg, mert azt
hiszi valaki hogy ha fizet a postai szolgáltatásért, akkor a posta
szolgáltat! Hahaha! Naggyon vicceskének teccik az ügyfélnek lenni!
Magyar Posta. Itt az új szlogen: „Nem tesszük meg, mert megtehetjük!”
Nagyjából egy fél éve indultak be azok az újabb fajta spambotok, amik
nem egyszerű spameket küldenek, hanem valami sokkal érdekesebbet; bizonyos
szempontból komoly felvilágosító-tevékenységet végeznek akaratlanul is,
csak sajnos ennek a legtöbb ember nincs tudatában.
Beszéljünk azokról a levelekről, amik valahogy így kezdődnek (angolul,
vagy láthatóan fordítógéppel készült magyarsággal):
„Rossz hírem van számodra: egy hónapja meghekkeltem a
gépedet, és kémvírustrójaiprogramokat installáltam rejtve rá, ami
átalakítja a kamerádat egy kémszerkezetté, és így mindent látok.
Tudom, hogy a jelszavad „titok123”! Látod, nem hazudok. És videóra
vettem, amint nősténykutyák üzekedését nézed videón és közben
csemballón balladákat pengetsz a nyelveddel, és ha azonnal nem fizetsz
hatvankilenc bitcoint a faceb00cdeadbeefface123456789abc címre akkor
a videót elküldöm a legközelebbi szélsőjobbos újságnak. A rendőröknek
ne szólj mert őket is meghekkeltem. Fizess.”
…vagy valami hasonló. A lényeg az, hogy a jelszó valódi, és emlékszel
is, hogy használtad. Ha ügyes ember vagy, akkor arra emlékszel, hogy
nagyon régen használtad.
Szögezzük le az elején: a jelszó valódi és a levél minden állítása hamis.
Na oké, de akkor honnan van meg neki a jelszó?
Úgy, hogy simán letöltötte a netről. Ugyanis minden évben 2-3 nagyobb
vagy kisebb szolgáltatásról derül ki, hogy nem csak betörtek hozzájuk (ami
azért előfordul, de nem feltétlenül nagy katasztrófa), hanem ennek során
olyan adatokhoz jutottak amik az ügyfelek emailjét ÉS jelszavát tartalmazták
olyan módon, hogy a jelszó nem volt biztonságosan titkosítva.
Ennek eredményeképp megszerezték az összes ügyfél email címét és jelszavát.
Ezeket a jelszavakat aztán felhasználják betörésekre, adatlopásra, email
zsarolásra és pár érdekesebb dologra, de egy idő után maguk az adatok is
áruvá válnak, és a jelszavakat meg lehet előbb vásárolni, majd ha már nincs
vevő azok gyakran megjelennek az internet eldugottabb bugyraiban is.
Gyakorlatilag egy idő után bárkinek meglehet.
Ilyen jelentősebb betörések egyike volt a 2012-es LinkedIn Breach, ahol
kormányunk orosz barátai 6.5 millió jelszót, illetve további 100 millió
gyengén titkosított jelszót szereztek meg. Ízlelgessük picit ezeket a
számokat.
Mindenestre akinek gyenge LinkedIn jelszava volt 2012 környékén az
szinte biztos lehet, hogy az mára közkincs, és így teljesen egyszerűen
megjelenhet egy emailben, ami azt állít mellette, amit akar. De ha nem
LinkedIn, akkor
bármelyik másik 100 betörés,
ahol jelszavak kerültek ki.
De azért jobb, ha fizetek, ugye?
Rossz vicc lenne. Zsarolásra soha nem érdemes fizetni, főképp,
amikor teljesen zéró garanciád van arra, hogy ha fizetsz, akkor a
zsarolás tárgyát megsemmisíti az illető, vagy eláll tőle; sokkal
valószínűbb, hogy garantáltan fizetőképes keresletként aranytojást
tojó tyúk válik belőled. A rendőrséget pedig nem kell félni
megkeresni, mert dacára a széles körben ismert inkompetenciájuknak
nem biztos, hogy nem tudnak segíteni, és jelentősen fejlődtek az
elmúlt években. De nem biztos, hogy ilyen hülyeségekkel érdemes
őket fárasztani.
A leghasznosabb, amit a levéllel tehetsz az, hogy törlöd és
nem foglakozol vele.
Mit tanultunk ebből?
Ez a beszéd! Ez egy jó kérdés, mintha csak én tettem volna fel!
A legfontosabb a tudás: ezt a jelszót soha többet sehol ne használd.
Ezen nincs mit gondolkodni. Még hasonlót se!
A következő: ne használj több helyen ugyanolyan jelszót, mert
bármikor vihetik az egyiket, és akkor a többire is be tudnak lépni. Nagyon
macera 120 helyen jelszót változtatni.
A következő: a jelszavaid ne legyenek 8 (de inkább 10) karakternél rövidebbek,
mert azt még közepesen titkosított formában is egészen gyorsan vissza
lehet fejteni.
És lássuk be: nem fogsz 250 jelszót fejben megjegyezni, ezért szükséged
lesz egy jó jelszótárolóra. (Ilyenek például:
password safe,
keepass [ezek
helyben tárolják a jelszavakat];
bitwarden,
lastpass,
1password)
A témáról viszont
már írtam régebben,
így azt a részt nem ismétlem meg megint.
Még annyit teszek hozzá: a „kétfaktoros” azonosítás sokkal
biztonságosabb, de sokkal macerásabb is. Tudod, amikor a mobiloddal
lecsippentesz egy QR kódot, és minden belépéshez a jelszó mellett
kell egy számot is megadnod, amit a mobilod mond. Erre én amúgy
az AndOTP-t használom Androidon
(GooglePlay
illetve F-Droid),
ami ingyenes és nyílt forrású. Akkor lehet használni, ha az adott
szolgáltatás azt támogatja.
Majd egyszer mesélek a jelszóbiztonságról is még, de sajnos
most nincs időm megírni. Addig is vigyázzatok magatokra.
[Frissítés 2018.10.22.] Ugyanerről a jelenségről írt
a Kiberblog
még júliusban, amikor még csak kezdődött ez az őrület.
Kicsit más stílusban, de ugyanazokat a következtetéseket
meséli el, amiket én is.