petak, 19 aprila, 2024
Predstavljamo

Alpajn Linuks (1. deo)

Autor: Marjan Đuran

Uvod

Razvoj Alpajn Linuksa (eng. Alpine Linux) počeo je pre više od decenije. Tvorci su inicijalno zamislili da se pokreće samo iz RAM memorije. Takođe, jedna od ideja je bila da služi kao operativni sistem za rutere i slične projekte gde je potrebno portovati linuks operativni sistem (eng. embeded systems), za primer možemo uzeti Open VRT (eng. Open WRT) sistem namenjen ruterima. Uglavnom su u pitanju projekti koji nemaju snažne hardverske resurse, a kojima je bitna bezbednost. Tim koji radi na razvoju sistema, kao vodilju za svoj rad koristi tri smernice koje karakterišu ovu distribuciju: mali, jednostavan, bezbedan (eng. Small. Simple. Secure.). Sistem nikada ne pokreće nijedan servis koji nije eksplicitno naveden, dakle od trenutka instalacije pokreću se samo najneophodniji procesi, nakon podešavanja, samo oni koje administrator, to jest korisnik sistema želi.

Arhitektura

Kako sam idejni tvorac voli da naglasi, Alpajn Linuks je „sagrađen oko” musl libc biblioteke i BiziBoks (eng. BusyBox) paketa korisničkih aplikacija. Pri tome se misli na aplikacije više na sistemskom nivou, a ne na aplikacije kao što su pregledač veb stranica ili aplikacije za razmenu poruka. Ono što je posebno kod musl libc biblioteke jeste što je značajno manja u odnosu na široko rasprostranjenu glibc biblioteku (GNU C Library), ali i dalje obezbeđuje osnovne C/POSIKS (eng. C/POSIX) biblioteke i dodatke za funkcionisanje sistema (eng. Core system libraries) – C biblioteke nalaze se na sloju iznad kernela i obezbeđuju funkcionisanje takozvanog korisničkog dela (eng. userspace) i kako na zvaničnom vebsajtu piše – namenjena je novim generacijama na linuksu baziranih uređaja. Posebno se izdvaja po čitljivosti i urednost kôda (stoga je lakše prekontrolisati i ispratiti sam kôd). Uz kombinaciju sa izuzetno manjim obimom, smanjuje se mogućnost greške i pravljenja propusta, što se u praksi i dokazalo. Zbog toga se musl libc smatra i bezbednijim što dokazuje statistika da je od 2010. do 2017. godine u glibc biblioteci pronađeno preko 80 propusta (zavedenih pod zvaničnim CVE brojevima – Common Vulnerabilities and Exposures) dok je u musl libc gotovo deset puta manje. Najznačajnija stavka koja nedostaje musl libc biblioteci u odnosu na glibc su Name Service Switch (NSS) – koji omogućava dodavanje određenih mrežnih servisa van glibc biblioteke i Network Service Library (libnsl) – osnovna biblioteka za mrežnu komunikaciju na transportnom sloju u okviru glibc biblioteke. Osim toga nedostaju podaci za lokalizaciju koji se mogu naknadno instalirati a u glibc-u zauzimaju mnogo prostora.

Osnovne komponente sistema

BiziBoks se smatra „švajcarskim nožem”, namenjen je ugrađenim (eng. embedded) Linuks distribucijama, odnosno distribucijama kao što je Alpajn Linuks zamišljen da bude od samog početka. Može da se instalira na gotovo bilo koji uređaj, bez obzira da li je moderan računar ili ruter star nekoliko godina. BiziBoks je paket (multi-call binary) najkorisnijih juniks (eng. UNIX) alata kao što su adduser, awk, cat, chmod, dd, diff, less, ip, mkfs, ping, route, tail, wget. Za proveru dostupnih aplikacija trenutne verzije na zvaničnom vebsajtu, osim dokumentacije postoji veoma zanimljiva javaskript PC emulator aplikacija u kojoj se učitava linuks konzola sa BiziBoks paketom. Tu se komandom busybox može dobiti spisak aplikacija i testirati direktno na vebu bez instalacije ijednog programa. Ceo paket teži oko 800KB uključujući i šel (eng. shell) i sve alate. Poređenja radi, samo beš ljuska (eng. bash) ima 668KB, te Alpajn Linuks dolazi sa “skraćenom” ali funkcionalnom verzijom – ash.

Kernel – Takozvani Hardened Kernel koji koristi Alpajn Linuks je još jedan razlog zašto se kaže da ima malu površinu za napad (eng. attack surface). Naime, radi se o Vanilla kernelu, tj. osnovnoj verziji koja je doslovno „očvrsnuta” raznim zakrpama, ali iz koje su izbačeni „suvišni” moduli čime se dodatno smanjuje napadna površina. Tvorci Alpajn linuksa su bili inspirisani Džentu distribucijom, te su preuzeli nezvaničnu verziju nastalu iz poznatijeg grsecurity (grsecyrity fork). Veoma sličan kernel koristi i OpenWall distribucija, namenjena rutiranju i mrežnim operacijama.

OpenRC – još jednom, po uzoru na Džentu distribuciju, Alpajn Linuks koristi OpenRC init sistem (razvijan za Džentu distribuciju) koji se zasniva na zavisnosti (eng. dependency-based). Pri tome se misli na procese i utičnice (eng. socket). Dakle, ne radi se o modernom Sistem-D (eng. SystemD) init sistemu koji je danas najšire rasprostranjen i zastupljen. Od kako je ušao u široku upotrebu, česte su rasprave u linuks zajednici da li je dobijena brzina na uštrb bezbednosti uvođenjem Sistem-D init sistema, te iako postoje osnovane sumnje, ovde ih nema jer je Sistem-D izostavljen. Šta to govori iz ugla administracije jednog sitema? Komande za upravljanje novim servisima izgledaju ovako:

rc-update add imeservisa nivopokretanja rc-update del  imeservisa nivopokretanja rc-update imeservisa start/stop/restart

Nivoi pokretanja mogu biti: default – podrazumevani nivo od strane sistema, hotpluged – privremeni, dok je sistem upaljen, manual – kako korisnik navede

APK menadžer paketa

Primetno je kako se svaka instalacija paketa ili ažuriranje sistema odvija veoma brzo, pogotovo u poređenju sa instalacijama ili ažuriranjima na drugim Linuks sistemima kao što su Debian i njegovi derivati kao što su, Ubuntu, Mint, pa i ostali – Fedora, Arč… U početku, Alpajn Linuks nije imao nikakav menadžer paketa, već je sve moralo da se kompajlira. Kako je sam sistem dobijao sve širu primenu, tvorci su shvatili da se to mora promeniti ako žele da sistem uđe u opštiju upotrebu, ali im se nije svideo nijedan od već postojećih koje koriste ostali sistemi (yum, dnf, apt, pacman, emerge). Na prvom mestu jer su svi suviše spori, te su odlučili da napišu novi. U početku je paket menadžer bio (b)ash skripta, ali je 2008. godine prepisan u programskom jeziku C. To je otvorilo dosta mogućnosti da se dese propusti i greške (eng. bug), odnosno otvore mogući vektori napada, što se kasnije pokazalo kao tačno. APK je dosta brži iz razloga što je projektovan da radi drugačije od ostalih, naime tradicionalni paket menadžeri uglavnom imaju tri čitanja i dva upisa/pisanja prilikom instalacije novog paketa, dok APK ima jedno čitanje i jedno pisanje. Tradicionalni paket menadžeri prvo preuzimaju paket, odnosno čitaju sa mreže, zatim ih upisuju u lokalni keš, zatim vrše proveru paketa, odnosno potpisa (checksum signature verification), i ukoliko provera pokaže da je paket u redu – vrši se ekstraktovanje odnosno instalacija. APK čita sa mreže i ujedno vrši proveru dok čeka na I/O odziv, zatim novi paket upisuje direktno na fajl sistem ali pod nazivom imepaketa.apk-new a zatim vrši verifikaciju potpisa. Ukoliko je sve u redu, promeniće ime paketa, ukoliko nije, paket će biti obrisan. Kako je Alpajn Linuks isprva pravljen da se pokreće iz RAM memorije, menadžer paketa se sastoji iz dve celine odnosno iz dve zasebne aplikacije, jedna je apk menadžer koji služi za instalacije, ažuriranja, deinstalacije odnosno brisanja sa sistema, dok je druga celina program lbu koji služi da sačuva sve podatke i konfiguracije neophodne za brzo vraćanje i setovanje instaliranih programa nakon restarta sistema. Programski paketi za Alpajn Linuks su digitalno potpisane .tar.gz arhive koje sadrže programe, konfiguracione datoteke, kao i meta podatke zavisnih paketa (eng. dependencies). Njima je data ekstenzija .apk i često se nazivaju „a-paketi”. APK može da instalira pakete sa više različitih repozitorijuma sa interneta ili lokalnih, npr. sa lokalnog medija kao što je lokalni direktorijum, disk ili USB memorija koji sadrže .apk datoteke. Takođe, da bi se bilo koji medij ili direktorijum smatrao ispravnim repozitorijumom, mora da sadrži repozitorijumski indeks, odnosno datoteku koja se zove APKINDEX.tar.gz. Svi repozitorijumi se dostižu wget komandom, odnosno programom koji dolazi u sastavu busybox paketa, a koristi http, https ili ftp protokol. Spisak repozitorijuma nalazi se u datoteci /etc/apk/repositories, gde se ujedno može i dodati putanja do nekog repozitorijuma ili izmeniti protokol. Po osnovnim podešavanjima apk će koristiti sistemski definisane repozitorijume za sve operacije (pretrage, instalacije, ažuriranje), ali se po potrebi to može promeniti bez izmene konfiguracione datoteke već „u letu” odnosno u toku operacije nekom od navedenih komandi. Sledi opis samo nekih apk komandi.

pretraga paketa:

apk search imepaketa

instaliranje novog paketa:

apk add imepaketa

brisanje instaliranog paketa

apk del imepaketa

instalacija paketa koji nije „od poverenja”:

apk add --allow-untrusted /putanja/do/datoteke.apk

provera sigurnosnog potpisa paketa (signature):

apk verify imepaketa

Veliki propust koji su tvorci napravili jeste u protokolu koji apk koristi za preuzimanje paketa sa nekog od zvaničnih repozitorijuma. Naime, podrazumevano, kada se instalira Alpajn Linuks, preuzimanje paketa ide preko nezaštićenog HTTP protokola bez SSL enkripcije (HTTPS). Iako ne znači da je ranjiv takav način prenosa podataka (jer postoji mogućnost potpisivanja, što i radi) to je dalje ostavilo otvorena vrata potencijalnim napadačima za MITM (eng. Man In The Midle Attack) napad koji je Ariel Zelivanski (eng. Ariel Zelivansky) tokom svog istraživanja iskoristio. Uspeo je u pokušaju da Alpajn Linuksu podmetne drugačiji paket od onog koji je korisnik želeo da instalira, odnosno da paket „dopuni” neželjenim kodom kojim je omogućio izvršavanje koda sa udaljene lokacije (eng. remote code execution attack) i to sve je predstavio na konferenciji B-Sajds DC 2017. godine. Ovo je do sada i jedini (poznati) propust u Alpajn Linuks distribuciji, a da nije zavistan od biblioteka koje su korišćene u pravljenju distribucije.