Milijuni binarnih datoteka kasnije. Kako je Linux postao jači

Milijuni binarnih datoteka kasnije. Kako je Linux postao jačiTL; DR. U ovom članku istražujemo sheme očvršćavanja koje funkcioniraju izvan okvira na pet popularnih distribucija Linuxa. Za svaki smo uzeli zadanu konfiguraciju kernela, učitali sve pakete i analizirali sigurnosne sheme u priloženim binarnim datotekama. Distribucije koje se razmatraju su OpenSUSE 12.4, Debian 9, CentOS, RHEL 6.10 i 7, kao i Ubuntu 14.04, 12.04 i 18.04 LTS.

Rezultati potvrđuju da čak ni osnovne sheme poput slaganja kanarinaca i koda neovisnog o položaju još nisu svi usvojili. Situacija je još gora za kompajlere kada je u pitanju zaštita od ranjivosti kao što je stack clash, koja je došla u središte pozornosti u siječnju nakon objavljivanja informacije o ranjivostima systemd-a. Ali nije sve tako beznadno. Značajan broj binarnih datoteka implementira osnovne metode zaštite, a njihov broj raste od verzije do verzije.

Pregled je pokazao da je najveći broj metoda zaštite implementiran u Ubuntu 18.04 na razini OS-a i aplikacija, a slijedi ga Debian 9. S druge strane, OpenSUSE 12.4, CentOS 7 i RHEL 7 također implementiraju osnovne sheme zaštite, te zaštitu od kolizije stogova koristi se još šire s puno gušćim skupom zadanih paketa.

Uvod

Teško je osigurati visoku kvalitetu softvera. Unatoč ogromnom broju naprednih alata za statičku analizu koda i dinamičku analizu vremena izvođenja, kao i značajnom napretku u razvoju kompilatora i programskih jezika, moderni softver još uvijek pati od ranjivosti koje napadači neprestano iskorištavaju. Situacija je još gora u ekosustavima koji uključuju naslijeđeni kod. U takvim slučajevima ne samo da smo suočeni s vječnim problemom pronalaženja mogućih grešaka koje se mogu iskoristiti, već smo također ograničeni strogim okvirima kompatibilnosti unatrag, koji često zahtijevaju da sačuvamo ograničeni, ili još gore, ranjivi ili buggy kod.

Ovdje na scenu stupaju metode zaštite ili očvršćavanja programa. Neke vrste grešaka ne možemo spriječiti, ali napadaču možemo otežati život i djelomično riješiti problem sprječavanjem ili sprječavanjem eksploatacije ove pogreške. Takva se zaštita koristi u svim modernim operacijskim sustavima, no metode se uvelike razlikuju po složenosti, učinkovitosti i performansama: od stack canarya do ASLR do pune zaštite CFI и ROP. U ovom ćemo članku pogledati koje se metode zaštite koriste u najpopularnijim distribucijama Linuxa u zadanoj konfiguraciji, a također ćemo ispitati svojstva binarnih datoteka koje se distribuiraju putem sustava za upravljanje paketima svake distribucije.

CVE i sigurnost

Svi smo vidjeli članke s naslovima poput "Najugroženije aplikacije godine" ili "Najugroženiji operativni sustavi". Obično daju statistiku o ukupnom broju zapisa o ranjivostima poput CVE (uobičajena ranjivost i izloženost), dobiveno od Nacionalna baza podataka o ranjivosti (NVD) iz NIST i drugi izvori. Naknadno se te aplikacije ili OS rangiraju prema broju CVE-ova. Nažalost, dok su CVE-ovi vrlo korisni za praćenje problema i informiranje prodavača i korisnika, oni malo govore o stvarnoj sigurnosti softvera.

Kao primjer, uzmite u obzir ukupan broj CVE-ova u posljednje četiri godine za Linux kernel i pet najpopularnijih distribucija poslužitelja, naime Ubuntu, Debian, Red Hat Enterprise Linux i OpenSUSE.

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Slika. 1

Što nam govori ovaj grafikon? Znači li veći broj CVE-ova da je jedna distribucija ranjivija od druge? Nema odgovora. Na primjer, u ovom ćete članku vidjeti da Debian ima jače sigurnosne mehanizme u usporedbi s, recimo, OpenSUSE ili RedHat Linuxom, a ipak Debian ima više CVE-ova. Međutim, oni ne znače nužno oslabljenu sigurnost: čak ni prisutnost CVE-a ne pokazuje je li ranjivost iskorištavali. Ocjene ozbiljnosti pokazuju kako vjerojatno iskorištavanje ranjivosti, ali u konačnici mogućnost iskorištavanja uvelike ovisi o zaštitama prisutnim u pogođenim sustavima te resursima i sposobnostima napadača. Štoviše, nepostojanje CVE izvješća ne govori ništa o drugima neregistrirano ili nepoznato ranjivosti. Razlika u CVE-u može biti posljedica čimbenika koji nisu kvaliteta softvera, uključujući resurse dodijeljene testiranju ili veličinu korisničke baze. U našem primjeru, Debianov veći broj CVE-ova može jednostavno značiti da Debian isporučuje više softverskih paketa.

Naravno, CVE sustav pruža korisne informacije koje vam omogućuju stvaranje odgovarajuće zaštite. Što bolje razumijemo razloge neuspjeha programa, to je lakše identificirati moguće metode iskorištavanja i razviti odgovarajuće mehanizme otkrivanje i odgovor. Na sl. 2 prikazuje kategorije ranjivosti za sve distribucije u posljednje četiri godine (izvor). Odmah je jasno da većina CVE-ova spada u sljedeće kategorije: uskraćivanje usluge (DoS), izvršavanje koda, prekoračenje, oštećenje memorije, curenje informacija (eksfiltracija) i eskalacija privilegija. Iako se mnogi CVE-ovi broje više puta u različitim kategorijama, općenito se isti problemi ponavljaju iz godine u godinu. U sljedećem dijelu članka procijenit ćemo korištenje različitih shema zaštite kako bismo spriječili iskorištavanje ovih ranjivosti.

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Slika. 2

zadaci

U ovom članku namjeravamo odgovoriti na sljedeća pitanja:

  • Koja je sigurnost različitih distribucija Linuxa? Koji mehanizmi zaštite postoje u aplikacijama kernela i korisničkog prostora?
  • Kako se usvajanje sigurnosnih mehanizama promijenilo tijekom vremena u različitim distribucijama?
  • Koje su prosječne ovisnosti paketa i biblioteka za svaku distribuciju?
  • Koje su zaštite implementirane za svaku binarnu datoteku?

Izbor distribucija

Ispada da je teško pronaći točnu statistiku o distribucijskim instalacijama, budući da u većini slučajeva broj preuzimanja ne označava broj stvarnih instalacija. Međutim, Unix varijante čine većinu poslužiteljskih sustava (na web poslužiteljima 69,2%, po statistika W3techs i drugi izvori), a njihov udio stalno raste. Stoga smo se za naše istraživanje usredotočili na distribucije koje su odmah dostupne na platformi Google Cloud. Konkretno, odabrali smo sljedeći OS:

Distribucija/verzija
Jezgra
Bild

OpenSUSE 12.4
4.12.14-95.3-zadano
#1 SMP srijeda, 5. prosinca 06:00:48 UTC 2018. (63a8d29)

Debian 9 (istegnuto)
4.9.0-8-amd64
#1 SMP Debian 4.9.130-2 (2018-10-27)

6.10 CentOS
2.6.32-754.10.1.el6.x86_64
#1 SMP utorak, 15. siječnja 17:07:28 UTC 2019

7 CentOS
3.10.0-957.5.1.el7.x86_64
#1 SMP pet, 1. veljače 14:54:57 UTC 2019

Red Hat Enterprise Linux poslužitelj 6.10 (Santiago)
2.6.32-754.9.1.el6.x86_64
#1 SMP Srijeda, 21. studenog 15:08:21 EST 2018

Red Hat Enterprise Linux poslužitelj 7.6 (Maipo)
3.10.0-957.1.3.el7.x86_64
#1 SMP čet, 15. studenog 17:36:42 UTC 2018

Ubuntu 14.04 (Trusty Tahr)
4.4.0–140-generički

#166~14.04.1-Ubuntu SMP sub 17. studenog 01:52:43 UTC 20…

Ubuntu 16.04 (Xenial Xerus)
4.15.0–1026-gcp
#27~16.04.1-Ubuntu SMP pet, 7. prosinca 09:59:47 UTC 2018.

Ubuntu 18.04 (Bionic Beaver)
4.15.0–1026-gcp
#27-Ubuntu SMP čet, 6. prosinca 18:27:01 UTC 2018.

Tablica 1

Analiza

Proučimo zadanu konfiguraciju jezgre, kao i svojstva paketa dostupnih putem upravitelja paketa svake distribucije izvan kutije. Stoga uzimamo u obzir samo pakete iz zadanih zrcala svake distribucije, zanemarujući pakete iz nestabilnih repozitorija (kao što su Debianova 'testna' zrcala) i pakete trećih strana (kao što su Nvidia paketi sa standardnih zrcala). Osim toga, ne uzimamo u obzir prilagođene kompilacije kernela ili sigurnosno ojačane konfiguracije.

Analiza konfiguracije jezgre

Primijenili smo skriptu za analizu temeljenu na besplatni kconfig alat za provjeru. Pogledajmo gotove parametre zaštite navedenih distribucija i usporedimo ih s popisom iz Temeljni projekt samoobrane (KSPP). Za svaku opciju konfiguracije, tablica 2 opisuje željenu postavku: potvrdni okvir je za distribucije koje su u skladu s preporukama KSSP (pogledajte sljedeće za objašnjenje pojmova). здесь; U narednim člancima objasnit ćemo koliko je od ovih sigurnosnih metoda nastalo i kako hakirati sustav bez njih).

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači

Općenito, nove jezgre imaju strože postavke izvan kutije. Na primjer, CentOS 6.10 i RHEL 6.10 na jezgri 2.6.32 nemaju većinu kritičnih značajki implementiranih u novijim jezgrama kao što su SMAP, stroga RWX dopuštenja, randomizacija adresa ili copy2usr zaštita. Treba napomenuti da mnoge opcije konfiguracije u tablici nisu dostupne u starijim verzijama kernela i nisu primjenjive u stvarnosti - to je još uvijek naznačeno u tablici kao nedostatak odgovarajuće zaštite. Isto tako, ako opcija konfiguracije nije prisutna u određenoj verziji, a sigurnost zahtijeva da ta opcija bude onemogućena, to se smatra razumnom konfiguracijom.

Još jedna točka koju treba uzeti u obzir pri tumačenju rezultata: neke konfiguracije kernela koje povećavaju površinu napada također se mogu koristiti za sigurnost. Takvi primjeri uključuju uprobes i kprobes, kernel module i BPF/eBPF. Naša preporuka je korištenje gore navedenih mehanizama za pružanje stvarne zaštite, budući da nisu trivijalni za korištenje i njihovo iskorištavanje pretpostavlja da su zlonamjerni akteri već uspostavili uporište u sustavu. Ali ako su ove opcije omogućene, administrator sustava mora aktivno pratiti zlouporabu.

Gledajući dalje unose u tablici 2, vidimo da moderni kerneli pružaju nekoliko opcija za zaštitu od iskorištavanja ranjivosti kao što su curenje informacija i preljevi stog/hrpe. Međutim, primjećujemo da čak ni najnovije popularne distribucije još nisu implementirale složeniju zaštitu (na primjer, zakrpama) grsigurnost) ili moderna zaštita od napada ponovnim korištenjem koda (npr. kombinacija randomizacije sa shemama kao što je R^X za kod). Da stvar bude još gora, čak ni te naprednije obrane ne štite od cijelog niza napada. Stoga je ključno da administratori sustava nadopune pametne konfiguracije rješenjima koja nude otkrivanje i prevenciju iskorištavanja tijekom izvođenja.

Analiza primjene

Nije iznenađujuće da različite distribucije imaju različite karakteristike paketa, opcije kompilacije, ovisnosti o bibliotekama itd. Razlike postoje čak i za srodni distribucije i paketi s malim brojem ovisnosti (na primjer, coreutils na Ubuntu ili Debianu). Kako bismo procijenili razlike, preuzeli smo sve dostupne pakete, ekstrahirali njihov sadržaj i analizirali binarne datoteke i ovisnosti. Za svaki paket pratili smo druge pakete o kojima ovisi, a za svaki binarni zapis pratili smo njegove ovisnosti. U ovom dijelu ukratko sažimamo zaključke.

distribucije

Ukupno smo preuzeli 361 paketa za sve distribucije, izvlačeći samo pakete iz zadanih zrcala. Ignorirali smo pakete bez ELF izvršnih datoteka, kao što su izvori, fontovi itd. Nakon filtriranja ostalo je 556 paketa koji su sadržavali ukupno 129 binarnih datoteka. Distribucija paketa i datoteka kroz distribucije prikazana je na sl. 569.

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Slika. 3

Možda ćete primijetiti da što je distribucija modernija, to sadrži više paketa i binarnih datoteka, što je i logično. Međutim, Ubuntu i Debian paketi uključuju puno više binarnih datoteka (izvršnih datoteka i dinamičkih modula i biblioteka) od CentOS-a, SUSE i RHEL-a, što potencijalno utječe na površinu napada Ubuntua i Debiana (treba napomenuti da brojevi odražavaju sve binarne datoteke svih verzija paket, odnosno neke se datoteke analiziraju više puta). Ovo je posebno važno kada uzmete u obzir ovisnosti između paketa. Stoga ranjivost u jednom binarnom paketu može utjecati na mnoge dijelove ekosustava, baš kao što ranjiva biblioteka može utjecati na sve binarne datoteke koje ga uvoze. Kao početnu točku, pogledajmo distribuciju broja ovisnosti među paketima u različitim operativnim sustavima:

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Slika. 4

U gotovo svim distribucijama, 60% paketa ima najmanje 10 ovisnosti. Osim toga, neki paketi imaju znatno veći broj ovisnosti (više od 100). Isto se odnosi i na obrnute ovisnosti o paketima: kao što se i očekivalo, nekoliko paketa koriste mnogi drugi paketi u distribuciji, tako da su ranjivosti u nekoliko odabranih visokorizične. Kao primjer, sljedeća tablica navodi 20 paketa s maksimalnim brojem obrnutih ovisnosti u SLES-u, Centos 7, Debian 9 i Ubuntu 18.04 (svaka ćelija označava paket i broj obrnutih ovisnosti).

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Tablica 3

Zanimljiva činjenica. Iako su svi analizirani operativni sustavi izgrađeni za arhitekturu x86_64, a većina paketa ima arhitekturu definiranu kao x86_64 i x86, paketi često sadrže binarne datoteke za druge arhitekture, kao što je prikazano na slici 5. XNUMX.

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Slika. 5

U sljedećem odjeljku istražit ćemo karakteristike analiziranih binarnih datoteka.

Statistika zaštite binarnih datoteka

Kao apsolutni minimum morate istražiti osnovni skup sigurnosnih opcija za svoje postojeće binarne datoteke. Nekoliko distribucija Linuxa dolazi sa skriptama koje izvode takve provjere. Na primjer, Debian/Ubuntu ima takvu skriptu. Evo primjera njegovog rada:

$ hardening-check $(which docker)
/usr/bin/docker:
 Position Independent Executable: yes
 Stack protected: yes
 Fortify Source functions: no, only unprotected functions found!
 Read-only relocations: yes
 Immediate binding: yes

Skripta provjerava pet zaštitne funkcije:

  • Position Independent Executable (PIE): Pokazuje može li se tekstualni odjeljak programa premještati u memoriji da bi se postigla randomizacija ako je ASLR omogućen u kernelu.
  • Stack Protected: Jesu li stack canary omogućeni za zaštitu od napada sudara stogova.
  • Ojačajte izvor: zamjenjuju li nesigurne funkcije (na primjer, strcpy) svojim sigurnijim pandanima, a pozivi koji se provjeravaju tijekom izvođenja zamjenjuju se svojim neprovjerenim pandanima (na primjer, memcpy umjesto __memcpy_chk).
  • Premještanja samo za čitanje (RELRO): Jesu li unosi u tablici premještanja označeni kao samo za čitanje ako su pokrenuti prije početka izvršenja.
  • Trenutačno vezanje: Dopušta li povezivač vremena izvođenja sve poteze prije početka izvođenja programa (ovo je ekvivalentno punom RELRO-u).

Jesu li gore navedeni mehanizmi dovoljni? Nažalost ne. Postoje poznati načini zaobići sve gore navedene obrane, ali što je obrana jača, to je letvica za napadača viša. Na primjer, RELRO premosne metode teže ih je primijeniti ako su na snazi ​​PIE i neposredno vezanje. Isto tako, puni ASLR zahtijeva dodatni rad da bi se stvorio radni exploit. Međutim, sofisticirani napadači već su spremni susresti se s takvim zaštitama: njihova će odsutnost u biti ubrzati hakiranje. Stoga je bitno da se te mjere smatraju potrebnima minimum.

Htjeli smo proučiti koliko je binarnih datoteka u dotičnim distribucijama zaštićeno ovim i tri druge metode:

  • Neizvršivi bit (NX) sprječava izvršenje u bilo kojoj regiji koja ne bi trebala biti izvršna, kao što je gomila hrpe itd.
  • RPUTA/STAZA TRČANJA označava put izvršenja koji koristi dinamički učitavač za pronalaženje odgovarajućih biblioteka. Prvi je obavezan za bilo koji moderni sustav: njegova odsutnost omogućuje napadačima da proizvoljno zapišu korisni teret u memoriju i izvrše ga onakvog kakav jest. Kao drugo, neispravne konfiguracije staze izvršenja pomažu u uvođenju nepouzdanog koda koji može dovesti do brojnih problema (npr. eskalacija privilegijaI drugi problemi).
  • Zaštita od sudara stogova pruža zaštitu od napada koji uzrokuju preklapanje stogova s ​​drugim područjima memorije (kao što je hrpa). S obzirom na nedavnu zloupotrebu iskorištavanja ranjivosti sudara hrpe sustava, smatrali smo da je prikladno uključiti ovaj mehanizam u naš skup podataka.

Dakle, bez daljnjeg odlaganja, prijeđimo na brojke. Tablice 4 i 5 sadrže sažetak analize izvršnih datoteka i biblioteka različitih distribucija.

  • Kao što vidite, NX zaštita je implementirana posvuda, uz rijetke iznimke. Konkretno, može se primijetiti njegova nešto manja upotreba u Ubuntu i Debian distribucijama u usporedbi s CentOS, RHEL i OpenSUSE.
  • Stack canary nedostaju na mnogim mjestima, posebice u distribucijama sa starijim kernelima. Određeni napredak vidljiv je u najnovijim distribucijama Centosa, RHEL-a, Debiana i Ubuntua.
  • S izuzetkom Debiana i Ubuntua 18.04, većina distribucija ima lošu PIE podršku.
  • Zaštita od sudara stogova slaba je u OpenSUSE, Centos 7 i RHEL 7, au ostalima gotovo da i ne postoji.
  • Sve distribucije s modernim jezgrama imaju određenu podršku za RELRO, s Ubuntuom 18.04 na čelu, a Debianom na drugom mjestu.

Kao što je već spomenuto, metrika u ovoj tablici je prosjek za sve verzije binarne datoteke. Ako pogledate samo najnovije verzije datoteka, brojevi će biti drugačiji (na primjer, pogledajte Debian napreduje s PIE implementacijom). Štoviše, većina distribucija obično testira samo sigurnost nekoliko funkcija u binarnom obliku kada izračunava statistiku, ali naša analiza pokazuje pravi postotak funkcija koje su ojačane. Stoga, ako je 5 od 50 funkcija zaštićeno u binarnom obliku, dat ćemo mu ocjenu 0,1, što odgovara 10% funkcija koje se pojačavaju.

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Tablica 4. Sigurnosne karakteristike za izvršne datoteke prikazane na sl. 3 (implementacija relevantnih funkcija kao postotak ukupnog broja izvršnih datoteka)

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Tablica 5. Sigurnosne karakteristike za knjižnice prikazane na sl. 3 (provedba relevantnih funkcija kao postotak od ukupnog broja knjižnica)

Pa ima li napretka? Definitivno postoji: to se vidi iz statistike za pojedine distribucije (npr. Debian), kao i iz gornjih tablica. Kao primjer na Sl. Slika 6 prikazuje implementaciju zaštitnih mehanizama u tri uzastopne distribucije Ubuntu LTS 5 (izostavili smo statistiku zaštite od sudara stogova). Primjećujemo da od verzije do verzije sve više datoteka podržava stack canary, a također se sve više binarnih datoteka isporučuje s potpunom RELRO zaštitom.

Milijuni binarnih datoteka kasnije. Kako je Linux postao jači
Slika. 6

Nažalost, brojne izvršne datoteke u različitim distribucijama još uvijek nemaju nijednu od gore navedenih zaštita. Na primjer, gledajući Ubuntu 18.04, primijetit ćete binarnu datoteku ngetty (zamjena za getty), kao i ljuske mksh i lksh, tumač picolisp, pakete nvidia-cuda-toolkit (popularan paket za GPU-ubrzane aplikacije kao što su okviri strojnog učenja) i klibc -utils. Isto tako, mandos-client binary (administrativni alat koji vam omogućuje automatsko ponovno pokretanje strojeva s šifriranim datotečnim sustavom) kao i rsh-redone-client (ponovna implementacija rsh i rlogin) isporučuju se bez NX zaštite, iako imaju SUID prava: (. Također, nekoliko suid binarnih datoteka nema osnovnu zaštitu kao što su stack canary (na primjer, Xorg.wrap binary iz Xorg paketa).

Sažetak i zaključna razmatranja

U ovom smo članku istaknuli nekoliko sigurnosnih značajki modernih distribucija Linuxa. Analiza je pokazala da najnovija Ubuntu LTS distribucija (18.04) implementira u prosjeku najjaču zaštitu OS-a i aplikacijske razine među distribucijama s relativno novim kernelima, kao što su Ubuntu 14.04, 12.04 i Debian 9. Međutim, ispitane distribucije CentOS, RHEL i OpenSUSE u našem skupu prema zadanim postavkama proizvodi gušći skup paketa, au najnovijim verzijama (CentOS i RHEL) imaju veći postotak zaštite od sudara stogova u usporedbi s konkurentima koji se temelje na Debianu (Debian i Ubuntu). Uspoređujući verzije CentOS-a i RedHat-a, primjećujemo velika poboljšanja u implementaciji stack canaries-a i RELRO-a od verzija 6 do 7, ali u prosjeku CentOS ima više implementiranih značajki od RHEL-a. Općenito, sve bi distribucije trebale obratiti posebnu pozornost na PIE zaštitu, koja je, s izuzetkom Debiana 9 i Ubuntua 18.04, implementirana u manje od 10% binarnih datoteka u našem skupu podataka.

Na kraju, treba napomenuti da iako smo istraživanje proveli ručno, postoje mnogi dostupni sigurnosni alati (npr. Lynis, Tigar, Hubble), koji provode analizu i pomažu u izbjegavanju nesigurnih konfiguracija. Nažalost, čak ni jaka zaštita u razumnim konfiguracijama ne jamči odsutnost exploita. Zato čvrsto vjerujemo da je neophodno osigurati pouzdan nadzor i prevencija napada u stvarnom vremenu, usredotočujući se na obrasce iskorištavanja i njihovo sprječavanje.

Izvor: www.habr.com

Dodajte komentar