Atslēgas bija drošībā. Nauda tik un tā aizgāja
Spriežot pēc tā, kas zināms par Binance uzlaušanu, uzbrucējam nevajadzēja zagt privātās atslēgas. Viņš iekļuva caur DevOps inženiera klēpjdatoru un vienkārši nosūtīja sistēmai izmaksas komandu. Sistēma to izpildīja — tieši tā, kā bija projektēta.
Man daudzkārt ir devuši padomus, kā aizsargāt atslēgas. Parasti saruna noritēja tā:
— Atslēgas uz servera vajag šifrēt.
— Pieņemsim. Bet kur glabājas atšifrēšanas atslēga?
— Paslēpsim to.
— Obfuskācija neglābj. Tas ir laika jautājums, un tagad neironu tīkls svešu kodu izjauc minūtēs.
— Tad AWS KMS.
— KMS izsniegs atslēgu pēc kompromitēta servera pieprasījuma.
— Tad atsevišķs izolēts serveris, kas glabā atslēgas un paraksta.
— Atslēgu tagad nozagt nevar. Bet šis serveris saņem no rindas ziņu „aizsūti tik un tik turp un turp” — un aizsūta. Atslēga drošībā, nauda — nē.
— Uzliksim pārbaudes servisu: pirms parakstīšanas tas pārbauda, vai izmaksa ir leģitīma.
— Bet kur tas pārbauda? Iekšējā datubāzē — arī to var viltot. Ja turpretī tas salīdzina ar neatkarīgu, nemainīgu avotu un pats izlemj, vai parakstīt, — mēs tikko izgudrojām viedo līgumu. Ja līgumam ir visa informācija un tajā nav sākotnējas ievainojamības, to nevar ne pierunāt, ne uzlauzt caur blakus serveri.
Visu, kas balstās uz serveri, kādreiz salauzīs: atradīsies caurums SSH, nginx, PHP — jebkur. Manus servisus no ārpuses ne reizi nav uzlauzuši. Bet reiz izstrādātājs, kuram jau tā bija piekļuve serverim, vienkārši paņēma atslēgas un izņēma naudu. Problēma gandrīz vienmēr ir cilvēkos.
Var uzbūvēt superaizsargātu sistēmu. Bet tajā izvieto kodu cilvēki. Kāds atstās sētas durvis, kas pēc vajadzīgās komandas izņems līdzekļus un vēl iztīrīs žurnālus.
Tāpēc variantu ir divi. Vai nu uzticēties matemātikai, kā viedajos līgumos. Vai būvēt to pašu uz cilvēkiem, kā mūsu atslēgu ģenerēšanas protokolā: vairāki neatkarīgi parakstītāji, kvorums, katrs pārbauda. Bet cilvēkiem acs pierod, un piektajā gadā tu spied „apstiprināt”, neskatoties.
Te, man šķiet, pirmo reizi pa īstam palīdz modeļi. Nevis cilvēku vietā, bet pirms viņiem:
- uz ieeju tikai stingri noformēts JSON ar transakcijas datiem, nekādas „parunāšanās”;
- uz izeju tikai „jā” vai „nē”;
- turklāt modelim ir plaša lasīšanas piekļuve: blokķēde, datubāzes, vecas rezerves kopijas — lai meklētu nesakritības un viltojuma pēdas;
- tādu modeļu nav viens, bet, teiksim, 13 dažādi, un vajag vienprātību. Ja kaut viens šaubās, viss apstājas un pieslēdzas cilvēki.
Modelis nenogurst un neaizmieg piektajā darba gadā. Un, ja viltus trauksmju ir maz, cilvēki katru uztvers nopietni.
Atslēgas sargāt esam iemācījušies. Tagad jāsargā lēmums „parakstīt vai nē”.