20 metų patirtį turintis programuotojas bendrai apie sistemų saugumo lygmenis ir kodėl Log4Shell spraga gali privesti iki katastrofinių padarinių  (2)

Kaip ir žmogaus kūnas, taip ir bet kokios logiškai teisingai tarpusavyje veikiančios sistemos turi silpnąsias, lengvai pažeidžiamas sritis ir atitinkamai lengvai atakas atlaikančius komponentus. Pavyzdžiui, žmogaus oda per gyvenimą nukenčia daugybę kartų, bet lengvai atsistato. Pilnai pažeidus odą be galimybės regeneruotis – individas miršta, nes organizmo palaikymo mechanizmo terpė tampa pažeidžiama visais metodais (fizikine, chemine ir biochemine prasme).


Visi šio ciklo įrašai

  • 2021-12-29 20 metų patirtį turintis programuotojas bendrai apie sistemų saugumo lygmenis ir kodėl Log4Shell spraga gali privesti iki katastrofinių padarinių  (2)

Prisijunk prie technologijos.lt komandos!

Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.

Sudomino? Užpildyk šią anketą!

Elektroninių sistemų pažeidžiamumo (angl. vulnerability) lygmenų sąrašas pagal galimybę apsaugoti nuo išorinių atakų (pirma pozicija – blogiausia):

  • elektriniai trikdžiai
  • CPU (centrinis procesorius)
  • scripting
  • micro controllers (BIOS, HDD valdikliai, NoC – network on chip, IoT, ...)
  • užklausų platformos (duomenų bazės)
  • sesijos (vartotojų autorizacija)
  • programavimo architektūra

Elektriniai trikdžiai yra neišvengiama kasdienybė. Sąlyginai nestiprūs trikdžiai sugeriami buferinių elektroninių grandynų, o nuo stipresnių, dažniau karinės arba kosminės kilmės, apsauga tampa labai ribota.

Likusi sistemos dalis neišvengiamai dalijasi saugumo laipsniais ir jas kaltinti techniškai ne visada įmanoma. Pavyzdžiui, 2017 metais buvo paskelbtas CPU Meltdown and Spectre pažeidžiamumas. Didelė jo dalis buvo ištaisyta, bet dėl architektūrinių principų, problema nėra iki galo pašalinta, tiesiog priėjimas iš išorės maksimaliai sumažintas.

Programavimo platformų pažeidžiamumas ilgą laiką kankino sistemų architektus, nes tokios saugumo spragos kaip null byte attack buvo paveldėtos iš C kalbos, ant kurios buvo pastatytos likusios programavimo kalbos (PHP, Python, C++, ...). Vėlgi, kaltinti būtų sunku C kalbą, nes kai ji buvo sukurta, dar nebuvo kompiuterinio viruso koncepto.

Įvairi su tinklu susieta aparatūra šiandien tampa ypač lengvai pažeidžiama. Pavyzdžiui, anksčiau gaminti laikrodžiai naudodavo dešimtainę loginę mikroschemą, neturinčią jokių sąsajų su programavimu. Šiandien laikrodžiai yra mikrokompiuteriai, nes iš esmės turi operacinę įrangą, loginę atmintį, priėjimą prie informacinio tinklo (automatinis laiko nustatymas) ir laikrodžio funkcija yra suprogramuota, o duomenys išvedami per standartinius GPIO kanalus, valdomus standartiniais protokolais (SCL, SDA, MOSI).

Kitas pavyzdys būtų tinklo įranga. Anksčiau duomenų maršrutų tvarkymas buvo suprogramuojamas Asambler arba C lygmenyje ir įdiegiamas kaip instrukcija į mikroschemą. Tai leido pasiekti didelį našumą sąlyginai mažo skaičiavimo galingumo sistemose mažiausiomis energijos sąlygomis. Vietos pažeidžiamumams būdavo nedaug, nes sistema nieko per daug neinterpretuodavo. Šiandien tinklų įranga keičiama į standartinius kompiuterius, kuriuose įdiegiama programa tinklų valdymui, atverianti stulbinančias serviso galimybes, o taip pat ir įsilaužimo.

 

Duomenų bazės istoriškai buvo ir yra lengvai pažeidžiamos ir šiandien, nes jų darbas yra interpretuoti užklausas, ir jeigu jas supranta, vykdyti. Kaip apsisaugoti nuo SQL injection – klasikinis egzamino klausimas, į kurį šių dienų programuotojas turėtų atsakyti bent jau ištardamas ORM (angl. Object Relation Map) raktažodį.

Vartotojų identifikacija iš pradžių buvo labai skylėta ir vedė istoriškai prie daugybės įsilaužimų. Šiandien stipriai susiimta šioje srityje, ypač, kai išaugo patikimų cloud computation sertifikuotų platformų.

O, bet, tačiau... Ši sistemos dalis nesunkiai pažeidžiama tinklų šnipinėjimo lygmenyje ir tai yra daroma valstybiniame sektoriuje ieškant nelegalaus turinio paprasčiausiai perimant SSL raktus iš išdavusių įmonių arba statant Darktrace lygmens šnipinėjimo įrangą.

Programavimo architektūra šiandien tampa primiršta tema, nes šiuo metu rinkoje sukurta daugybė framework, kurie slepia viduje boiler plate ir palieka programuotojui atsakomybę tik už verslo reikalavimų įgyvendinimą (suprogramavimą).

 

Pliusas yra tas, kad galima greitai įgyvendinti projektų reikalavimus elementariame lygmenyje ir plėsti apdorojimo greitį, naudojantis pažįstama Cloud sistemų architektūra horizontal scaling, kitaip tariant – jeigu reikia daugiau greičio – pastatysime daugiau serverių, nes sistemos optimizavimui neturime laiko.

Minusas – retas programuotojas žino, kaip reikia projektuoti sistemas ir užtikrinti produkto saugumą.

Būtent čia man ir kilo klausimas. Po daugiau nei 20 metų programavimo, man sunku patikėti, kad adapter principas, naudojamas kaip vienas iš galingiausių architektūrinių komponentų, buvo panaudotas Log4Shell užklausų analizėje. Kaip veikia ataka, galite pasiskaityti ČIA.

Svarbiausia šios spragos dalis yra faktas, kad leidžiama įskiepyti programavimo kodą užklausos interpretavimui. Šis metodas naudojamas programos viduje, bet niekada tiesiogiai nenaudojamas programos išorėje. Čia yra kažkas panašaus, kaip įstatyti lauko duris su 5 lygių užraktu, bet spyną ir raktą nešiotis kišenėje. Toks programavimo metodas yra labiau panašus į back door, nes save gerbiantis programavimo architektas vargiai būtų leidęs šį užklausų analizės metodą.

Pavojingumo laipsnis?

 

Log4Shell, panašiai kaip ir null byte atack, leidžia paleisti programą administraciniame lygmenyje. Mano serveriai anksčiau yra nukentėję nuo tokių atakų, todėl šį kartą iš karto 3 val. nakties ėmiausi savo serverių tikrinimo. Pažeidžiamą programą radau, tik, visa laimė, ji yra naudojama vidiniame tinkle, kuris neturi priėjimo prie išorinio pasaulio, todėl iš esmės man ji nėra pavojinga, bet kiek įmanoma prislopinau jos naudojimą.

Išoriniame lygmenyje, „geriausiu“ atveju klientų serveryje, būtų įdiegiama Bitcoin kasimo programa. Blogiausiu atveju – visiškas serverio užvaldymas, duomenų perėmimas, absoliučiai nelegali veikla serveryje, galinti privesti iki katastrofinių padarinių (elektrinės, vandentiekiai, chemijos gamyklos).

Autorius Vytautas Buika

Pasidalinkite su draugais
Aut. teisės: www.technologijos.lt
Autoriai: Vytautas Buika
(8)
(2)
(6)

Komentarai (2)