Jak zapewnić bezpieczeństwo komponentów open source

75% komercyjnych aplikacji zawiera kod open source z co najmniej jedną luką (raport Synopsys). Fakt, że aż w 99% popularnych programów znajdziemy chociaż część kodu na licencji open source, pokazuje, jak duża jest skala tego problemu. Niestety, kwestia bezpieczeństwa nadal jest zaniedbywana, a programiści bardzo często nie zdają sobie sprawy z tego, że w ich oprogramowaniu wykorzystywane są potencjalnie niebezpieczne komponenty. Jakie są wyzwania w zapewnieniu bezpieczeństwa open source i jak im sprostać?

Open source – co to?

Na samym początku warto przypomnieć sobie, co to jest licencja open source i oprogramowanie open souce oraz dlaczego korzystanie z “otwartego kodu” jest tak popularne. Oprogramowanie open source, nazywane też “wolnym oprogramowaniem” wywodzi się z postulatu o udostępnianiu pełnego kodu źródłowego oprogramowania. Użytkownicy open source mogą swobodnie uruchamiać, edytować i rozpowszechniać oprogramowanie, a także rozbudowywać istniejące produkty.

Otwarte oprogramowania podlegają różnym warunkom licencyjnym, a ich wspólnymi cechami są: brak opłat za korzystanie z oprogramowania i możliwość modyfikowania czy ulepszania kodu przez każdego. Z założenia licencja open source powinna być jednolita dla całej dystrybucji – nie możemy więc tworzyć różnych licencji dla poszczególnych grup czy osób. Co ważne, open source ma pełne zastosowanie do wykorzystywania komercyjnego. Ważne jest też rozróżnienie oprogramowania open source od free software, cechującego się jeszcze większą liberalizacją użytkowania oprogramowania.

Bezpieczeństwo open source

Jako że kod źródłowy w oprogramowaniu open source jest dostępny publicznie, zdecydowanie szybciej i łatwiej znaleźć w nim lukę niż w kodzie zamkniętym (proprietarnym). Ma to też negatywną stronę – z tego samego powodu prostsze jest stworzenie luki w oprogramowaniu.

Dzięki temu, że każdy może mieć wpływ na rozwój oprogramowania, tempo rozwoju produktów może być dużo szybsze. Również możliwości modyfikacji kodu są ogromne i ograniczone wyłącznie wiedzą i umiejętnościami programistów. Systemy open source z reguły są bardzo bezpieczne – wszystkim zależy w końcu na bezpieczeństwie rozwijanego oprogramowania, jednak nie jest to regułą. Oficjalnie publikowany kod bywa łamany przez hakerów, często w sposób zautomatyzowany. Oprócz tego wiele luk w kodzie bywa wykrytych niewystarczająco wcześnie, co daje możliwości na ich wykorzystanie przez hakerów. Ryzyko korzystania z komponentów open source o znanych podatnościach znacząco wzrasta, ponieważ hakerzy świetnie zdają sobie sprawę z tego, jak mogą wykorzystać destrukcyjny potencjał leżący w niezabezpieczonych fragmentach kodu. Niektóre komponenty mogą być prawdziwą tykającą bombą w aplikacji.

Wyzwania bezpieczeństwa komponentów open-source

Technologie testowania bezpieczeństwa aplikacji, takie jak SAST (Static Application Security Testing), nie wykrywają luk w bezpieczeństwie otwartych komponentów. Do zapewnienia bezpieczeństwa komponentów open source potrzebne jest inne narzędzie, które zbiera publicznie dostępne informacje o źródłach open source jako zasobów do wykrywania i naprawiania potencjalnie niebezpiecznych fragmentów kodu. Dobra wiadomość jest taka, że społeczność open source naprawdę dba o bezpieczeństwo swoich projektów. Jednakże zdecentralizowany charakter źródeł open source sprawia, że informacje o zagrożeniach rozprzestrzeniają się wśród wielu zasobów. Niektóre z nich są niemal niewykrywalne – przez to nie ma możliwości, aby zlokalizować je manualnie, porównując je z listą znanych zagrożeń w danej aplikacji.

Dodatkowym wyzwaniem jest problem zależności komponentów open source. Ponieważ manualne śledzenie zwykle nie obejmuje zależności przechodnich, organizacje nie mają dokładnych informacji o tym, z jakich komponentów open source korzystają w swoich produktach. Bez pełnej przejrzystości firmy nie są w stanie wykryć wszystkich potencjalnie zagrożonych miejsc w kodzie, pozostawiając je bez niezbędnych zabezpieczeń. W efekcie tylko zautomatyzowane narzędzia są w stanie ciągle monitorować źródła open source w aplikacji i alarmować o potencjalnych zagrożeniach w czasie rzeczywistym.

4 kroki do poprawy bezpieczeństwa komponentów open source

Aby zminimalizować ryzyko powstawania luk w kodzie open source, dobrze jest opanować te dwa filary bezpieczeństwa.

Wykrywanie podatności

Nie da się wyeliminować zagrożenia, którego nie jest się świadomym. Precyzyjne wykrywanie miejsc podatnych na zagrożenia jest niezbędne do zapewnienia bezpieczeństwa kodu, zwłaszcza w przypadku komponentów open source. Warto zdać sobie też sprawę, że sam fakt, iż każdy może czytać kod open source, tak naprawdę działa na korzyść bezpieczeństwa – dzięki temu luki w oprogramowaniu mogą być sprawnie wykrywane.

Priorytetyzacja faktycznych zagrożeń

Szukając dobrego narzędzia dbającego o bezpieczeństwo komponentów open source, warto zwrócić uwagę na to, czy jest ono w stanie priorytetyzować luki w zabezpieczeniach i wskazywać, które z nich wymagają podjęcia natychmiastowych działań, a którymi można zająć się w dalszej konieczności i nie stanowią one większego zagrożenia.

Eliminacja podatności

Wyzwania stojące przed systemami eliminacji luk w bezpieczeństwie są złożone. Najważniejszy jest czas – hakerzy docierają do podatnych fragmentów kodu szybciej niż kiedykolwiek, zwłaszcza w przypadku popularnych projektów open source. Istotna jest też próba łatania luk w zabezpieczeniach kodu nawet wtedy, gdy programiści nie pisali go od podstaw lub tak dobrze go nie znają.

Sugerowanie ulepszeń

Poza wyszukiwaniem luk w zabezpieczeniach zgłaszanych w społeczności open source, system do zabezpieczania licencji open source powinien opisywać także ich możliwości naprawcze, bazując na zaleceniach społeczności open source. Linki do łatek do nowych wersji, zalecenia dotyczące konfiguracji systemu czy blokowanie określonych funkcji – wszystkie te opcje pozwolą specjalistom tworzyć oprogramowanie jeszcze bardziej odporne na włamy.

Automatyzacja w zabezpieczeniach open source

W procesie wykrywania błędów w oprogramowaniu automatyzacja pełni niezwykle ważną rolę. Z natury open source opiera się na decentralizacji, przez co dane o lukach w kodzie są rozproszone po wielu zasobach. W efekcie ręczne dopasowanie luk przedstawionych w wykazach do tych, które znajdują się w naszej aplikacji, jest niesłychanie żmudne, a na dłuższą metę po prostu nieefektywne. Dlatego program czuwający nad bezpieczeństwem open source powinien pozwalać na automatyczne ustalanie i egzekwowanie wymogów dotyczących bezpieczeństwa, jakości i polityki licencyjnej. Umożliwi to zablokowanie potencjalnie niebezpiecznych lub problematycznych fragmentów oprogramowania i uzyskanie pełnej kontroli nad wszystkimi komponentami open source wykorzystywanymi w projekcie.

Czym jest Whitesource?

Whitesource to jeden z systemów stworzonych z myślą o zarządzaniu komponentami open source. Łączy on w sobie aspekty bezpieczeństwa i licencjonowania. Działa w czasie rzeczywistym, automatycznie i nieprzerwanie aktualizując bazy bezpieczeństwa. Łączy je bezpośrednio z komponentami open-source zidentyfikowanymi w repozytoriach użytkownika (w wyznaczonych zasobach). Co ważne, Whitesource dostarcza też szczegółowe raporty dotyczące projektowych inwentarzy i zapewnia powiadomienia w czasie rzeczywistym, dzięki czemu w razie potrzeby może szybko zareagować na pojawiające się zagrożenie. Wtyczkę można natychmiast wykorzystać do pracy – wymaga ona od nas tylko podłączenia, bez konieczności regularnej konfiguracji lub dodatkowej obsługi.

Korzyści z użytkowania Whitesource

Wtyczka Whitesource w poszukiwaniu zagrożeń i podatności ustala cyfrowe sygnatury każdej biblioteki i odwołuje się do obszernej bazy danych komponentów open source. Proces ten nie wymaga skanowania ani dostępu do kodu użytkownika, ponieważ tylko cyfrowa sygnatura komponentu użytkownika jest przesyłana na serwer Whitesource. W skrócie – nikt nigdy nie zobaczy kodu źródłowego użytkownika. WhiteSource dysponuje najbardziej stabilną i obszerną bazą danych, która wspiera ponad 200 języków programowania.

Bezpieczeństwo z każdej strony

Wykorzystywana we wtyczce automatyzacja kontroli i minimalnych wymagań zmniejsza liczbę nowych komponentów, które musiałyby zostać sprawdzone manualnie o 75-90%. Takie rozwiązanie znacznie przyspiesza proces wytwarzania oprogramowania i pozwala programistom skupić się na tworzeniu produktu dobrej jakości.

Funkcja shifting left w Whitesource pomaga zespołom zmniejszyć koszty i skrócić czas napraw poprzez wykrycie problemów na wcześniejszym etapie projektu. Oprogramowanie informuje też deweloperów o niebezpiecznych komponentach już podczas przeszukiwania sieci za pomocą rozszerzenia Whitesource do wyszukiwarek – the Web Advisor.

Często luki w projektach open source są odkrywane dopiero wiele lat po ich wydaniu. Tutaj sprawdza się podejście shift right. Whitesource automatycznie monitoruje wszystkie najnowsze wersje programów open source i sprawdza je pod kątem zabezpieczeń, a w przypadku wykrycia zagrożenia natychmiast informuje o nim użytkownika.

Integracja z potokiem CI/CD

Whitesource integruje się z wszystkimi popularnymi platformami do tworzenia i testowania oprogramowania, co znacząco przyspiesza i automatyzuje proces doboru komponentów open source, wykrywania zgodności i łatania luk w zabezpieczeniach.

Kompleksowa baza danych

Baza danych Whitesource zapewnia największy zbiór zagrożeń, wspierając ponad 200 języków programowania i nieustannie monitorując wszystkie bazy podatności (także CVE/NVD). Dostarcza też szeroki wachlarz porad dotyczących bezpieczeństwa i pozwala na monitorowanie zagrożeń w popularnych projektach open source.

Prezycyjne wskazywanie zagrożeń

Whitesource zapewnia pełną analizę, określając potencjalnie zagrożone funkcje w kodzie i określając możliwy sposób wykorzystania tej luki w aplikacji. Te informacje znacznie zmniejszają poziom wysiłku, jaki musiałby zostać włożony w manualne zlokalizowanie niebezpiecznego komponentu.

Dodatkowe korzyści to:

  • łatwa naprawa – Whitesource zapewnia sprawdzone ulepszenia crowdsourcingowe, umożliwiając tym samym szybkie rozwiązywanie problemów,
  • sprawny przepływ pracy – program egzekwuje warunki automatycznie na każdym etapie cyklu rozwoju oprogramowania, aby zautomatyzować procesy zatwierdzania i śledzenia,
  • największa baza zagrożeń – baza Whitesource ciągle gromadzi informacje z bazy NVD, poradników bezpieczeństwa i modułów do śledzenia projektów open-source.

Najważniejsze funkcje Whitesource

Które funkcje WhiteSource sprawiają, że można uznać je za czołowy system do wspierania bezpieczeństwa oprogramowania open source?

Detekcja podatności

System automatycznie wykrywa wszystkie komponenty open-source (włącznie z przechodnimi zależnościami) w buildach i repozytoriach. Wykrywa komponenty ze znanymi podatnościami podczas całego cyklu produkcji oprogramowania oraz oferuje podpowiedzi rozwiązań dla ułatwienia procesu napraw i wprowadzania usprawnień.

Alarmowanie użytkownika

Wtyczka Whitesource daje możliwość otrzymania raportu o niepowodzeniu budowania lub rozpoczęciu nowego procesu zatwierdzania przepływu pracy. Egzekwuje zdefiniowane przez użytkownika warunki przez cały czas trwania produkcji oprogramowania i przekazuje alerty o ich niedotrzymaniu w czasie rzeczywistym.

Whitesource oferuje też opcję ustawienia alertów na podstawie stopnia podatności, typu licencji, najczęstszych błędów w oprogramowaniu, nowych wersji, wieku komponentów i innych. Otrzymujemy powiadomienia o nowoodkrytych lukach w zabezpieczeniach w historii wersji, ponieważ Whitesource nieustannie monitoruje historię buildów każdej wersji.

Zrzut ekranu przedstawiający okienko alertów
Alerty w systemie Whitesource

Wybór komponentów

Wtyczka Whitesource’a, Web Advisor, dostarcza informacji o bezpieczeństwie, licencjach i prawach, gdy developerzy szukają online kolejnego komponentu open-source. Otrzymujemy szczegółowy podgląd dla każdego komponentu, przeglądając jego luki, licencje, obliczony wynik jakości i informację, czy komponent jest już używany w jego organizacji. Web Advisor obsługuje wszystkie popularne rejestry (MavenCentral, npm, Pypi, itp.) oraz strony internetowe z odniesieniami do pakietów (StackOverFlow, Tutorials, itp.).

Chcesz dowiedzieć się, jak Whitesource może pomóc w zabezpieczeniu licencji open source używanej w Twojej organizacji? Przeczytaj więcej o produktach Whitesource lub napisz do nas, by porozmawiać o zabezpieczeniach dla Twojego biznesu.

Czytaj więcej:

Radosław Kosiec

Radosław is Partner Product Department Director in Deviniti spaceship. He’s been supporting Deviniti in many areas since 2011. He advises companies about tools for DevOps, service desk, customer service, task and project management, and more! He is proud to be a Deviniti astronaut because the company follows the principles he has always believed in. He is a great Capitan of his crew!

Więcej od tego autora