Pogromcy Mitów: Niebezpieczne, otwarte źródła
Ostatnio zaczyna dominować opinia o szkodliwości otwartych źródeł oprogramowania, zwłaszcza ze strony fanów Windowsa. Dla mnie to nielogiczne rozumowanie. Fakt, że otwarte źródła są jakoś związane z Linuksem, czyli bezpośredniej konkurencji Windowsa, nie znaczy, że te programy nie rozwijają także i tego drugiego systemu. Wystarczy wymienić Firefoksa, VLC Player, GIMP, Blender bez których wiele osób nie wyobraża sobie wygodnej pracy z Windows, często nie znajdziemy na Windowsa bardziej wartościowych odpowiedników tych programów w podobnym przedziale cenowym. Krótko mówiąc Open Source łata poważną lukę w Windowsie, dlaczego więc ma być szkodliwe dla tego systemu?
Powyższy przykład pokazuje oczywiście paradoks takiej walki. Linux jest oparty głównie na otwartych źródłach, więc należy walczyć także z otwartymi źródłami. Tyle, że otwarte źródła nie są wyłącznie przypisane do Linuksa. To tak jakby wyznawców jakiejś religii zwalczać na podstawie koloru skóry dominującego w tej społeczności wyznaniowej.
Bezpieczeństwo przede wszystkim
Niemniej jednak jak bardzo niedorzeczna wydawałaby się to walka, to najbardziej niedorzeczne są argumenty przeciwników podważające wartość otwartości (i wolności), a zwłaszcza zarzucanie takiemu oprogramowaniu narażaniu się na niebezpieczeństwo właśnie poprzez otwarcie kodu do wglądu dla każdego. Poniżej nie mam zamiaru oczywiście udowadniać, że jest to oprogramowanie w 100% bezpieczne. Tu może zawieść każdy z czynników umieszczonych na całym etapie dystrybucji, mogę jednak śmiało wysunąć tezę, że taki atak to sztuka dla sztuki w efekcie nie jest on na tyle skuteczny, aby było opłacalne jego wykonanie i to pomijając nawet małą obecnie popularność dystrybucji linuksowych.
Złośliwie mogę nawet założyć, że jedyne co może narazić Linux na niebezpieczeństwo, w przypadku jego zakładanej popularności, to będą luki w zamkniętym oprogramowaniu, które zacznie być dla niego tworzone przez firmy produkujące obecnie dla Windows. Czy to świadczy o wadliwości Open Source? Nie sądzę! Te dwa środowiska programistów nadal są w tym przypadku dla siebie konkurencją, pomimo istnienia ich produktów na tej samej platformie.
Druga sprawa to serwery oparte na Linuksie, które w obecnej chwili powinny być bardzo łakomym kąskiem dla hakerów. Myślę, że zgromadzone na nich dane są obecnie bardziej wartościowe niż desktopy "przeciętnego użytkownika". Zwłaszcza w obliczu umieszczania coraz to większych informacji w chmurze. W tym przypadku linuksowa popularność bije na głowę inne platformy. Pojawia się więc pytanie: Dlaczego to nadal nie jest atrakcja, aby złamać Linuksa?
A jak chronią nas otwarte źródła?
System kontroli wersji.
Jest to "oprogramowanie służące do śledzenia zmian głównie w kodzie źródłowym oraz pomocy programistom w łączeniu zmian dokonanych przez wiele osób w różnych momentach." [wikipedia ] System taki umożliwia prezentację kodu w sieci i ewentualną współpracę nad nim wielu osób na bazie przyjętych zasad. Pozwolę tu się posłużyć przykładem Git, czyli systemu stworzonego przez Linusa Tordvaldsa. Jest to system rozproszony. Każdy więc może pobrać kod źródłowy zmodyfikować go w jednej z gałęzi (powstaje wtedy fork podstawowego projektu) i dopiero po akceptacji ze strony właściciela gałęzi Master taka modyfikacja może trafi do projektu
Takie postawienie sprawy już na wczesnym etapie uniemożliwia wprowadzenie szkodliwego kodu, tym bardziej, że wszystkie gałęzie Gita są otwarte, więc ktoś może zauważyć szkodliwy kod jeszcze zanim zostanie on zaproponowany do linii Master, czyli jeszcze na etapie jego tworzenia. W zasadzie taki kod może wprowadzić tylko osoba zarządzająca linią Master i najlepiej, żeby nikt nie zainteresował się tym projektem, bo może wykryć niecne plany twórcy.
Paranoidalny jest więc fakt, że w środowisku, gdzie tysiące oczu patrzy na twój kod, nie można sobie pozwolić na promocję takiego szkodliwego kodu, bo a nuż ktoś się nim zainteresuje choćby po to, aby zamieścić go w swoim projekcie. Sprawia to także, że taki kod ma wątpliwe szanse na trafienie do komputera jakiegokolwiek użytkownika i potwierdza moją teorię o nieopłacalności podrabiania otwartych źródeł tym bardziej, że po drodze są jeszcze...
Repozytoria
Repozytorium to rodzaj archiwum, gdzie przechowywane są spakowane źródła, a których instalacja odbywa się zazwyczaj za pośrednictwem menedżera pakietów. Tylko czy taki sposób dystrybucji programów w jakikolwiek chroni nas przed dostaniem się nieszkodliwego kodu? Nie zawsze, niekiedy zdarzają się włamania na serwery przechowujące repozytoria i fałszowanie plików. Duży tu udział ma czynnik ludzki, czyli np. słabe hasło do serwera. W praktyce jednak nadal nie jest to ani skuteczne, ani opłacalne, a oszustwa można łatwo wykryć.
Każdy pakiet posiada indywidualny klucz cyfrowy, tworzony na bazie zawartości tego pakietu. Nie jest możliwe podrobienie takiego klucza, bez posiadania superkomputera (nawet wtedy są małe szanse). Każdy podrobiny pakiet, który wstawimy do repozytorium, będzie musiał być już innym kluczem, bo posiada inną zawartość. Prostą sprawą jest po prostu sprawdzenie co jakiś czas kluczy pakietów przez właściciela repozytorium.
Najważniejsza jest jednak sama idea repozytoriów, a zwłaszcza idea wielu dystrybucji. Oczywiście zakładamy, ze udało nam się stworzyć szkodliwy program dla Linuksa i chcemy go rozpowszechnić. Musimy więc poprosić (wypromować program) osobę odpowiedzialną w danej dystrybucji za tworzenie paczek. Ponieważ ta osoba nie wstawia stworzonego przez nas pakietu, tylko robi własny pakiet na bazie kodu źródłowego, czyli ma do niego wgląd i może wykryć nasze oszustwo. No chyba, że trafimy na kompletnego ignoranta, lub znajdziemy sobie wspólnika w przestępstwie. Pamiętajmy także, że w repozytorium znajdują się także źródła, z których dany pakiet jest zrobiony. Często zawierają one poprawki, których nie ma w oficjalnym wydaniu, a które trafią do niego w następnym. Osoby znające się na pisaniu kodu mogą więc go cały czas przeglądać niezależnie od paczkującego, a nawet sprawdzić, czy za pomocą tych źródeł otrzymamy taki sam pakiet.
Oczywiście nawet w takim przypadku pozostają jeszcze paczkujący dla innych dystrybucji, co potwierdza tylko, że taka różnorodność nie jest szkodliwa dla rozwoju Linuksa, a wręcz inne dystrybucje pomagają dbać o swoje bezpieczeństwo nawzajem. Jako fan wolności oprogramowania muszę więc protestować, gdy ktoś sugeruje, że otwieranie źródeł dopiero podczas premiery jest bezpieczne dla użytkowników (nie mówiąc o stabilności takiego oprogramowania), dla mnie to zamach na jeden z ważnych etapów kontroli bezpieczeństwa. Przejdźmy jednak do premiery dystrybucji.
System
Oczywiście okres testowy to ważny etap w produkcji systemu. W tym momencie wiemy już miej więcej co ma trafić do finalnego wydania, więc można ograniczyć testy do konkretnego oprogramowania i nie tylko wykryć więcej błędów, jak i niebezpieczeństw jakie może czyhać z różnych stron. Dla mnie idea "system dla początkujących", oznaczająca tyle co "system nie dla zaawansowanych", skutecznie ogranicza liczbę osób, które mają wiedzę, aby na tym etapie naprawiać źródła. To oczywiście moja osobista wycieczka w stronę wiadomo jakiej dystrybucji, ignorującej bezpieczeństwo na tym etapie produkcji, poprzez nie publikowanie źródeł w odpowiednim czasie.
Ale wracając do systemu. System także zawiera środki przeciwdziałające niebezpieczeństwu. Jednym z takich przykładów (wielu) jest np. AppArmor, który obecnie jest modułem bezpieczeństwa jądra. AppArmor pozwala administratorowi systemu na stworzenie profilu bezpieczeństwa dla danego programu. Oznacza to, że możemy ograniczyć programowi korzystanie z sieci (skoro z niej nie korzysta) i w ten sposób unikniemy wycieku informacji z niego do internetu. Oczywiście jest to bardziej złożone w praktyce i zazwyczaj korzystamy z profili przygotowanych przez dystrybutora, które są zazwyczaj skuteczne. W każdym razie AppArmor nie pozwoli, aby jakiś szkodliwy kod wykorzystał inną aplikację w sposób do którego nie została przeznaczona. Taki szkodliwy kod nie będzie też potrafił obejść zabezpieczeń stosowanych przez ten program (np. pominąć hasło, którego wykonanie jest przypisane tylko uzytkownikowi).
Moim skromnym zdaniem
Jak napisałem powyżej nie miałem zamiaru udowadniać, że system bezpieczeństwa Linuksa jest w 100% sprawny. Na każdym etapie znajdują się możliwości ataku. są one jednak łatwo tłumiony, albo przez mechanizmy własnej kontroli, albo na następnym etapie dystrybucji, który nie jest łatwo pominąć. Dotarcie do finalnego użytkownika może być więc nie tyle nieskuteczne, co nie opłacalne z punktu widzenia popularyzacji szkodliwego kodu.
Niektórzy zapewne uznają ten artykuł za atak na Windows. Osobiście nie miałem takiego zamiaru (patrz: Wstęp). Nie mam tu zamiaru leczyć kogoś z paranoi, że opisywanie zalet jakiegoś programu to atak na inny rodzaj oprogramowania. Po prostu lepiej niech ktoś napisze, że taki program jest chroniony skuteczniej i użytkownik ma większą kontrolę dzięki temu nad własnym bezpieczeństwem.
Na zakończenie refleksja
Zastanawiam się dlaczego Linux nie pokazuje się na zawodach Pwn2Own ? Albo po prostu nikt o nim nie mówi (pomijam tu Androida i Chromebooki). W każdym razie po spektakularnym sukcesie w 2008r. Ubuntu 7.10 jakoś niespecjalnie słychać o jego uczestnictwie na tych spotkaniach.