Code signing – fundamentalne bezpieczeństwo innowacji

Coraz liczniejsze obszary naszego życia powierzamy technologii cyber-fizycznych systemów i usług. Oswoiliśmy coraz mocniej połączone z siecią samochody, inteligentne sieci dystrybucji energii i elektroniczne infrastruktury płatnicze.

W takiej rzeczywistości trzeba wyraźnie dostrzegać potencjał ryzyka nadużyć. Grupy przestępcze wykorzystują złośliwe oprogramowanie do kradzieży lub monitorowania danych, przejmowania własności intelektualnej i wyłudzeń finansowych. Złośliwe oprogramowanie powinno napotykać blokadę na każdym poziomie – nie wolno zakładać, że „sprawy nie zajdą aż tak daleko”.

Konieczne są procedury wymagające zabezpieczenia kryptograficznego aktualizacji oprogramowania over-the-air,  ponieważ one właśnie dają pewność, że kod dotrze na miejsce przeznaczenia nienaruszony i niezmieniony. Zasadnicze znaczenie ma przy tym to, by system operacyjny znał pochodzenie swoich bibliotek kodów i mógł odrzucić nierozpoznane oprogramowanie lub nie dopuścić do jego aktywacji. To zapewni ochronę danych i informacji.

Najpopularniejszą technologią stosowaną do potwierdzenia pochodzenia oprogramowania jest podpis cyfrowy, a dokładniej podpisywanie kodu, czyli code signing.  Podpisywanie kodu jest ważne w obydwu przypadkach:

  • wdrożenia cyber-fizycznego systemu,
  • aktualizacji, czy to w przypadku naprawiania błędów, czy udoskonalania funkcji (aktualizacja over-the-air).

Code signing – jak to działa?

Aby zapobiec włamaniu, prywatny klucz jest przechowywany przez wydawcę oprogramowania w dobrze kontrolowanym środowisku, na przykład w module HSM. W przypadku systemów cyber-fizycznych klucz publiczny jest wpisywany na początkowym etapie produkcji i instalowany wraz z urządzeniem.

Kiedy oprogramowanie jest gotowe do instalacji, zostaje podpisane prywatnym kluczem podpisywania kodu wydawcy i podpis ten jest dystrybuowany wraz z oprogramowaniem. Każdy odbiorca może wtedy zweryfikować integralność i autentyczność oprogramowania za pomocą zgodnego klucza publicznego i dostarczonego podpisu cyfrowego. Systemy cyber-fizyczne – czyli „rzeczy” w Internecie Rzeczy – powinny odrzucić każdy kod, którego podpis cyfrowy nie może zostać pozytywnie zweryfikowany.

Code signing to istotne narzędzie zapewniające integralność systemu i zapobiegające manipulacjom. Aby było efektywne, nieautoryzowane podmioty nie mogą mieć dostępu do (prywatnego) klucza podpisującego kod wydawcy oprogramowania. Ma to decydujące znaczenie. Firmy tworzące oprogramowanie muszą podchodzić do tego klucza tak restrykcyjnie, jak do bezpieczeństwa swoich kont bankowych. Jeśli istnieje podejrzenie wycieku tego certyfikatu, należy go niezwłocznie unieważnić i odświeżyć. Stary kod nie zapewnia już bezpieczeństwa i musi zostać ponownie podpisany – co w przypadku urządzeń wbudowanych może nie być zbyt proste. Takie zamieszanie może mieć ogromny wpływ na reputację i kondycję ekonomiczną firmy. Sprzętowe moduły bezpieczeństwa Utimaco to rozwiązanie tego właśnie problemu, ponieważ  są wyposażone w funkcje podpisywania RSA i ECDSA, w obu przypadkach gotowe do użycia, dla wszystkich rozmiarów kluczy i krzywych.

  • Najlepszą praktyką, rekomendowaną dla dostawców oprogramowania, jest przechowywanie prywatnego klucza podpisywania kodu w module HSM, dzięki czemu nie będzie mógł zostać skopiowany, skradziony ani poddany manipulacji.
  • Wdrożone do użytku urządzenia „są własnością”  posiadacza klucza prywatnego używanego do podpisywania ich bibliotek kodu. Może to być prawowity właściciel klucza lub osoba, zespół czy kraj, który dokonał jego przejęcia.

Dlaczego warto zastosować HSM?

  • Przeglądarki internetowe i systemy operacyjne zazwyczaj dokonują tej weryfikacji automatycznie. Jeśli się powiedzie, oprogramowanie jest instalowane i działa, jeśli zakończy się niepowodzeniem –  użytkownik otrzyma ostrzeżenie o możliwym zagrożeniu ze strony oprogramowania. W środowisku PC użytkownicy mogą mieć możliwość pominięcia tego ostrzeżenia i dalszego korzystania z podejrzanego oprogramowania.
  • Urządzenia mobilne z reguły wymagają od dostawców oprogramowania przedłożenia ich aplikacji lub aktualizacji właścicielowi sklepu App store (Apple, Google, Microsoft), zanim zostaną tam umieszczone. W takim przypadku urządzenie (np. iPhone czy telefon z Androidem) jest wprowadzane na rynek z kluczem publicznym sklepu. Odpowiedni certyfikat podpisywania kodu, wraz z kluczem prywatnym jest wówczas administrowany przez właściciela sklepu. Dostawca sklepu wymaga następnie, by oprogramowanie zostało podpisane przez wydawcę za pomocą jego klucza prywatnego. W ten sposób tworzy się kompletny łańcuch zaufania pomiędzy wydawcą a sklepem oraz między sklepem a urządzeniem.
  • Odpowiedni klucz publiczny jest udostępniany użytkownikowi oprogramowania. W przypadku komputerów PC lub aplikacji przeglądarkowych służy do tego zazwyczaj certyfikat cyfrowy, podpisany przez uznane centrum certyfikacji.
  • Najpierw wydawca oprogramowania musi pozyskać (wygenerować lub kupić) parę kluczy do wykonania operacji podpisu elektronicznego. Klucz ten należy chronić przed naruszeniem, ponieważ jego niewłaściwe użycie może dać zewnętrznym podmiotom możliwość podpisania fałszywego oprogramowania, a podpis jest zatwierdzany przez urządzenia jako „prawomocny”.
  • Systemy mogą mieć możliwość dokonywania aktualizacji w tle, over-the-air. Dlatego tak ważne jest, by automatycznie zapewnić integralność i autentyczność aktualizacji, taki scenariusz daje bowiem człowiekowi niewiele możliwości ingerencji i kontroli.
Wciąż szukasz? Napisz do nas!
Poznaj jedno z najbardziej zaufanych rozwiązań w świecie zabezpieczeń. Poznaj sprzętowy moduł bezpieczeństwa Utimaco.
Wciąż szukasz? Napisz do nas!