Bezpieczeństwo w sieci

Dlaczego open source notuje rekordowo duży poziom błędów?

Karol Woś
Dlaczego open source notuje rekordowo duży poziom błędów?
42

Bezpieczeństwo jest krytycznym elementem każdej infrastruktury, również informatycznej. Zwiększająca się wciąż popularność oprogramowania open source, a tym samym bezpieczeństwo jego kodu, tworzonego przez dziesiątki, a może nawet setki tysięcy programistów na całym świecie, zaczyna mieć kluczowe znaczenie dla nas wszystkich.

Skala problemu

Według raportu firmy WhiteSource opublikowanego 12 marca tego roku liczba różnego rodzaju luk i podatności w oprogramowaniu open source przebiła rekordowo wysoką liczbę 6000 w 2019 roku. W porównaniu z poprzednim rokiem gdzie liczba ta przekroczyła 4000, wzrost wyniósł prawie 50% ! Tak wysoką liczbę nowo odkrywanych błędów można przypisać wzrostowi świadomości na temat bezpieczeństwa oprogramowania open source, szerokiej adaptacji tegoż oprogramowania oraz masowemu rozwojowi jego społeczności.

Przyjrzymy się liczbie opublikowanych w ubiegłym roku luk bezpieczeństwa, również biorąc pod uwagę sytuację w różnych językach programowania. Omówimy najczęstsze CWE (Common Weakness Enumeration - system kategoryzowania luk i podatności w oprogramowaniu) i przyjrzymy się systemowi CVSS, za pomocą którego dokonuje się oceny punktowej poziomu zagrożeń, jakie tworzą podatności.

Dane wykorzystane w raporcie pochodzą z kilku źródeł:

  • NDV - amerykańskie rządowe repozytorium błędów bezpieczeństwa oprogramowania, które umożliwia automatyzację zarządzania podatnością na zagrożenia, pomiaru bezpieczeństwa i zgodności oprogramowania.
  • Wywiady z dziesiątkami ekspertów do spraw bezpieczeństwa.
  • Recenzowane bazy danych luk bezpieczeństwa.
  • Issue trackery - listy i narzędzia do śledzenia podatności w oprogramowaniu.

Dobre i złe wieści

Dobrą informacją jest to, że według badaczy 85% błędów zostało odkrytych i poprawionych. Największe firmy technologiczne poczyniły duże inwestycje w swoje departamenty do spraw bezpieczeństwa. Społeczność open source również ciężko pracuje nad odkrywaniem nowych podatności oraz publikacją poprawek oprogramowania, najczęściej w formie nowych wersji programów lub łatek do zainstalowania.

Do złych wieści należ zaliczyć fakt, że wykryte błędy nie są publikowane w jednej scentralizowanej bazie danych a rozrzucone po setkach różnych zasobów. Czasem zostają również źle zindeksowane, co dodatkowo utrudnia ich wyszukiwanie. Skutkiem tego jest to, że tylko około 84% wykrytych zagrożeń pojawia się w bazie danych NVD. Około 45% z nich nie jest początkowo w ogóle tam publikowana lub dociera tam kilka miesięcy po publikacji w innych źródłach. Według badaczy z WhiteSource tylko 29% błędów zgłoszonych poza NVD jest ostatecznie w niej opublikowanych.

Które języki programowania są najbezpieczniejsze?

Badacze porównali siedem najpopularniejszych języków programowania. Porównany został poziom błędów z 2019 roku z ich liczbą w ostatnim dziesięcioleciu.

Największy odsetek błędów dzierży język C, co spowodowane jest dużą ilością kodu, który jest w nim napisany. Ilość błędów jednak spada, w związku ze zwiększaniem się popularności innych języków programowania.

Względna liczba luk bezpieczeństwa w PHP znacznie wzrosła, podczas gdy nic nie wskazuje na taki sam wzrost popularności tego języka.

W przypadku Javy i C++ ilość błędów bezpieczeństwa również wzrosła. JavaScript natomiast zachował ich ilość na tym samym poziomie.

Ze stawki wyróżnia się Python, który pomimo swojej rosnącej popularności w społeczności open source, zachowuje niską liczbę podatności. Co może być wynikiem stosowania bezpiecznych praktyk programowania.

Liczba błędów języka Ruby również wykazuje niską i zmniejszającą się liczbę podatności.

Zobacz również: Nie dajcie się nabrać na fałszywe SMS-y. Bank ostrzega przed oszustwami

Jakie kategorie błędów są najpowszechniejsze?

5 najczęściej spotykanych rodzajów błędów, które związane są z ujawnieniem niepożądanych danych, utrzymuje się w czołówce od lat. Niestety najczęściej wynikają one z prostych błędów w kodzie i nieprecyzyjnego programowania, których dałoby się uniknąć, gdyby wszyscy programiści przestrzegali podstawowych standardów kodowania.

Poniżej zestawienie 5 najczęstszych rodzajów błędów dla poszczególnych lat z okresu 2014 - 2019.
Wśród 10 najczęstszych błędów w 2019 roku pojawił się CWE-352 Cross-Site Request Forgery (CSRF), natomiast CWE-89 SQL Injection pojawił się na liście ponownie, po zniknięciu z niej w 2015 roku, co może wskazywać na wzrost ilości projektów open source związanych z internetem. Może to jednak być zwiastun narastającej liczby luk bezpieczeństwa w zabezpieczeniach sieci, co należy mieć na uwadze podczas programowania. Poniżej natomiast zebrano najczęstsze błędy wśród siedmiu najpopularniejszych języków programowania w latach 2014-2019

Okazuje się, że trzy najczęściej spotykane kategorie błędów są wspólne dla tych języków programowania z wyjątkiem C. Są to:

  • Cross-Site-Scripting (XSS) (CWE-79)
  • Information Leak / Disclosure (CWE-200)
  • Input Validation (CWE-20)

Najprawdopodobniej jest to spowodowane tym, że badacze w coraz większym stopniu polegają na automatycznych narzędziach do wykrywania podatności, a problemy związane z XSS (CWE-79) i walidacją danych wejściowych (CWE-20), są stosunkowo łatwe do wykrycia, za pomącą tych narzędzi.

Czy dobrze oceniamy błędy bezpieczeństwa?

W obliczu wzrastającej liczby zgłaszanych błędów bezpieczeństwa, od zespołów programistów wymagane jest szybkie ustalenie priorytetów działań naprawczych.

Najczęściej to ocena CVSS (Common Vulnerability Scoring System - wspólny system oceny podatności) jest parametrem określającym priorytety działań naprawczych, ale czy powinna nim być? CVSS był aktualizowany kilka razy w ciągu ostatnich lat (z wersji 2 do 3, a ostatnio 3.1), w nadziei, że uda się uzyskać miarodajny i obiektywny standard, który posłuży wszystkim firmom i organizacjom. Razem z nim zmieniła się również definicja tego, czym są podatności o znaczeniu krytycznym.

Najbardziej zauważalną zmianą aktualizacji z wersji 2 do wersji 3 było to, że wyniki punktacji znacznie wzrosły. Luka, która zostałaby oceniona na 7,6 w CVSS v2, może mieć ocenę 9,8 w CVSS v3.0. W następstwie CVSS w wersji 3.0 zespoły musiały zmierzyć się z większą liczbę luk w zabezpieczeniach o wysokim i krytycznym znaczeniu.

Patrząc na rozkład wyników w nowej wersji CVSS 3.1, możemy zauważyć, że nie jest to rozkład normalny, ponieważ aż 15% podatności ma znaczenie krytyczne, a tylko 2% jest na niskim poziomie.

Choć społeczność intensywnie pracuje nad rozwiązaniem tego problemu, to standard ten musi zostać jeszcze dopracowany. Bez odpowiedzi pozostaje również pytanie, jak zespoły bezpieczeństwa mają ustalać priorytety swoich działań, jeśli ponad 55% podatności ma wysokie lub krytyczne znaczenie.

Zobacz również: Czy wiedziałbyś, co zrobić w przypadku włamania do Twojego telefonu lub komputera? Większość polskich internautów nie wie

Prognozy na przyszłość

Ciągle zwiększające się wykorzystanie i adaptacja oprogramowania open source, a także wzrost ilości badań nad bezpieczeństwem zwiastują ciągły wzrost liczby wykrywanych podatności. Społeczność związana z otwartym oprogramowaniem zaczyna jednak poszukiwać rozwiązań mających zmniejszyć chaos panujący w dziedzinie bezpieczeństwa.

Jednym z przykładów takich działań jest stworzenie GitHub Security Lab, który ma pomagać badaczom, opiekunom projektów oraz użytkownikom, zgłaszać błędy bezpieczeństwa w sposób bezpieczny bez wystawiania świata na zagrożenia typy zero - day. Ma również zachęcić opiekunów projektów do zgłaszania błędów bezpieczeństwa, zamiast wypuszczania jedynie stosownych poprawek kodu.

Gdyby ktoś myślał, że problem go nie dotyczy, oto kilka przykładów podatności wykrytych w 2019 roku:

  • ZeroMQ CVE-2019-6250 Score: High - 9
  • Android CVE-2018-9583 Score: Critical - 9.8
  • libssh2 CVE-2019-3855 Score: High - 8.8
  • WordPress CVE-2019-9787 Score: High - 8.8
  • SQLite CVE-2019-8457 Score: Critical - 9.8
  • Symfony CVE-2019-10910, CVE-2019-10913 Score: Critical - 9.8
  • RubyGems CVE-2019-8320 Score: High - 7.4
  • PostgreSQL CVE-2019-10164 Score: High - 8.8
  • Linux kernel CVE-2019-15292 Score: Critical - 9.8
  • Go CVE-2019-14809 Score: Critical - 9.8
  • Google Chrome CVE-2019-5858 Score: High - 8.8
  • PHP CVE-2019-11049 Score: Critical - 9.8
  • TensorFlow CVE-2019-16778 Score: Critical - 9.8

Podsumowując

Postrzeganie i wykorzystanie otwartego oprogramowania zmienia się na świecie. Ciągła gonitwa w dostarczaniu coraz nowszego oprogramowania nie sprzyja jednak zachowaniu jego bezpieczeństwa. Dlatego tak ważną rolę w produkcji oprogramowania odgrywają testy czy to przeprowadzane przez ludzi, czy też zautomatyzowane.

Natomiast to, że popularne projekty open source mają luki w zabezpieczeniach, nie oznacza, że są złe i niebezpieczne. Oznacza to, że jako użytkownicy takiego oprogramowania powinniśmy być świadomi zagrożeń bezpieczeństwa i upewnić się, że wszelkie zależności oprogramowania open source, których używamy, są aktualne. Mniej błędów a więcej radości i możliwości w korzystaniu z otwartego oprogramowania tego Wam i sobie życzę.

A co Wy o tym myślicie, może chcielibyście przeczytać więcej na ten lub inny nurtujący Was temat? Dajcie znać w komentarzach. Zachęcam również do zapoznania się z innymi wpisami mojego autorstwa.

Pozdrawiam Karol Woś.

Źródło: WhiteSource.

Hej, jesteśmy na Google News - Obserwuj to, co ważne w techu