петак, 19 априла, 2024
Представљамо

Алпајн Линукс (1. део)

Аутор: Марјан Ђуран

Увод

Развој Алпајн Линукса (енг. Alpine Linux) почео је пре више од деценије. Творци су иницијално замислили да се покреће само из РАМ меморије. Такође, једна од идеја је била да служи као оперативни систем за рутере и сличне пројекте где је потребно портовати линукс оперативни систем (енг. embeded systems), za primer možemo uzeti Open VRT (eng. Open WRT) систем намењен рутерима. Углавном су у питању пројекти који немају снажне хардверске ресурсе, а којима је битна безбедност. Тим који ради на развоју система, као водиљу за свој рад користи три смернице које карактеришу ову дистрибуцију: мали, једноставан, безбедан (енг. Small. Simple. Secure.). Систем никада не покреће ниједан сервис који није експлицитно наведен, дакле од тренутка инсталације покрећу се само најнеопходнији процеси, након подешавања, само они које администратор, то јест корисник система жели.

Архитектура

Како сам идејни творац воли да нагласи, Алпајн Линукс је „саграђен око” musl libc библиотеке и БизиБокс (енг. BusyBox) пакета корисничких апликација. При томе се мисли на апликације више на системском нивоу, а не на апликације као што су прегледач веб страница или апликације за размену порука. Оно што је посебно код мусл либц библиотеке јесте што је значајно мања у односу на широко распрострањену глибц библиотеку (GNU C Library), али и даље обезбеђује основне Ц/ПОСИКС (енг. C/POSIX) библиотеке и додатке за функционисање система (енг. Core system libraries) – Ц библиотеке налазе се на слоју изнад кернела и обезбеђују функционисање такозваног корисничког дела (енг. userspace) и како на званичном вебсајту пише – намењена је новим генерацијама на линуксу базираних уређаја. Посебно се издваја по читљивости и уредност кôда (стога је лакше преконтролисати и испратити сам кôд). Уз комбинацију са изузетно мањим обимом, смањује се могућност грешке и прављења пропуста, што се у пракси и доказало. Због тога се мусл либц сматра и безбеднијим што доказује статистика да је од 2010. до 2017. године у глибц библиотеци пронађено преко 80 пропуста (заведених под званичним ЦВЕ бројевима – Common Vulnerabilities and Exposures) док је у musl libc готово десет пута мање. Најзначајнија ставка која недостаје мусл либц библиотеци у односу на глибц су Name Service Switch (NSS) – који омогућава додавање одређених мрежних сервиса ван glibc библиотеке и Network Service Library (libnsl) – основна библиотека за мрежну комуникацију на транспортном слоју у оквиру глибц библиотеке. Осим тога недостају подаци за локализацију који се могу накнадно инсталирати а у глибц-у заузимају много простора.

Основне компоненте система

БизиБокс се сматра „швајцарским ножем”, намењен је уграђеним (енг. embedded) Линукс дистрибуцијама, односно дистрибуцијама као што је Алпајн Линукс замишљен да буде од самог почетка. Може да се инсталира на готово било који уређај, без обзира да ли је модеран рачунар или рутер стар неколико година. БизиБокс је пакет (multi-call binary) најкориснијих јуникс (енг. UNIX) алата као што су adduser, awk, cat, chmod, dd, diff, less, ip, mkfs, ping, route, tail, wget. За проверу доступних апликација тренутне верзије на званичном вебсајту, осим документације постоји веома занимљива јаваскрипт ПЦ емулатор апликација у којој се учитава линукс конзола са БизиБокс пакетом. Ту се командом busybox може добити списак апликација и тестирати директно на вебу без инсталације иједног програма. Цео пакет тежи око 800КБ укључујући и шел (енг. shell) и све алате. Поређења ради, само беш љуска (eng. bash) има 668КБ, те Алпајн Линукс долази са “скраћеном” али функционалном верзијом – ash.

Кернел – Такозвани Hardened Kernel који користи Алпајн Линукс је још један разлог зашто се каже да има малу површину за напад (енг. attack surface). Наиме, ради се о Vanilla кернелу, тј. основној верзији која је дословно „очврснута” разним закрпама, али из које су избачени „сувишни” модули чиме се додатно смањује нападна површина. Творци Алпајн линукса су били инспирисани Џенту дистрибуцијом, те су преузели незваничну верзију насталу из познатијег grsecurity (grsecyrity fork). Веома сличан кернел користи и OpenWall дистрибуција, намењена рутирању и мрежним операцијама.

ОпенРЦ – још једном, по узору на Џенту дистрибуцију, Алпајн Линукс користи ОпенРЦ инит систем (развијан за Џенту дистрибуцију) који се заснива на зависности (енг. dependency-based). При томе се мисли на процесе и утичнице (енг. socket). Дакле, не ради се о модерном Систем-Д (енг. SystemD) инит систему који је данас најшире распрострањен и заступљен. Од како је ушао у широку употребу, честе су расправе у линукс заједници да ли је добијена брзина на уштрб безбедности увођењем Систем-Д инит система, те иако постоје основане сумње, овде их нема јер је Систем-Д изостављен. Шта то говори из угла администрације једног ситема? Команде за управљање новим сервисима изгледају овако:

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

Нивои покретања могу бити: default – подразумевани ниво од стране система, hotpluged – привремени, док је систем упаљен, manual – како корисник наведе

АПК менаџер пакета

Приметно је како се свака инсталација пакета или ажурирање система одвија веома брзо, поготово у поређењу са инсталацијама или ажурирањима на другим Линукс системима као што су Дебиан и његови деривати као што су, Убунту, Минт, па и остали – Федора, Арч… У почетку, Алпајн Линукс није имао никакав менаџер пакета, већ је све морало да се компајлира. Како је сам систем добијао све ширу примену, творци су схватили да се то мора променити ако желе да систем уђе у општију употребу, али им се није свидео ниједан од већ постојећих које користе остали системи (yum, dnf, apt, pacman, emerge). На првом месту јер су сви сувише спори, те су одлучили да напишу нови. У почетку је пакет менаџер био (b)ash скрипта, али је 2008. године преписан у програмском језику Ц. То је отворило доста могућности да се десе пропусти и грешке (енг. bug), односно отворе могући вектори напада, што се касније показало као тачно. АПК је доста бржи из разлога што је пројектован да ради другачије од осталих, наиме традиционални пакет менаџери углавном имају три читања и два уписа/писања приликом инсталације новог пакета, док АПК има једно читање и једно писање. Традиционални пакет менаџери прво преузимају пакет, односно читају са мреже, затим их уписују у локални кеш, затим врше проверу пакета, односно потписа (checksum signature verification), и уколико провера покаже да је пакет у реду – врши се екстрактовање односно инсталација. АПК чита са мреже и уједно врши проверу док чека на И/О одзив, затим нови пакет уписује директно на фајл систем али под називом imepaketa.apk-new а затим врши верификацију потписа. Уколико је све у реду, промениће име пакета, уколико није, пакет ће бити обрисан. Како је Алпајн Линукс испрва прављен да се покреће из РАМ меморије, менаџер пакета се састоји из две целине односно из две засебне апликације, једна је апк менаџер који служи за инсталације, ажурирања, деинсталације односно брисања са система, док је друга целина програм лбу који служи да сачува све податке и конфигурације неопходне за брзо враћање и сетовање инсталираних програма након рестарта система. Програмски пакети за Алпајн Линукс су дигитално потписане .тар.гз архиве које садрже програме, конфигурационе датотеке, као и мета податке зависних пакета (енг. dependencies). Њима је дата екстензија .апк и често се називају „а-пакети”. АПК може да инсталира пакете са више различитих репозиторијума са интернета или локалних, нпр. са локалног медија као што је локални директоријум, диск или УСБ меморија који садрже .апк датотеке. Такође, да би се било који медиј или директоријум сматрао исправним репозиторијумом, мора да садржи репозиторијумски индекс, односно датотеку која се зове APKINDEX.tar.gz. Сви репозиторијуми се достижу wget командом, односно програмом који долази у саставу busybox пакета, а користи хттп, хттпс или фтп протокол. Списак репозиторијума налази се у датотеци /etc/apk/repositories, где се уједно може и додати путања до неког репозиторијума или изменити протокол. По основним подешавањима апк ће користити системски дефинисане репозиторијуме за све операције (претраге, инсталације, ажурирање), али се по потреби то може променити без измене конфигурационе датотеке већ „у лету” односно у току операције неком од наведених команди. Следи опис само неких апк команди.

претрага пакета:

апк сеарцх имепакета

инсталирање новог пакета:

apk add imepaketa

брисање инсталираног пакета

apk del imepaketa

инсталација пакета који није „од поверења”:

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

провера сигурносног потписа пакета (signature):

apk verify imepaketa

Велики пропуст који су творци направили јесте у протоколу који апк користи за преузимање пакета са неког од званичних репозиторијума. Наиме, подразумевано, када се инсталира Алпајн Линукс, преузимање пакета иде преко незаштићеног ХТТП протокола без ССЛ енкрипције (ХТТПС). Иако не значи да је рањив такав начин преноса података (јер постоји могућност потписивања, што и ради) то је даље оставило отворена врата потенцијалним нападачима за МИТМ (енг. Man In The Midle Attack) напад који је Ариел Зеливански (енг. Ariel Zelivansky) током свог истраживања искористио. Успео је у покушају да Алпајн Линуксу подметне другачији пакет од оног који је корисник желео да инсталира, односно да пакет „допуни” нежељеним кодом којим је омогућио извршавање кода са удаљене локације (енг. remote code execution attack) и то све је представио на конференцији Б-Сајдс ДЦ 2017. године. Ово је до сада и једини (познати) пропуст у Алпајн Линукс дистрибуцији, а да није завистан од библиотека које су коришћене у прављењу дистрибуције.