Ochrona aplikacji Python

Ochrona aplikacji Python

Ktokolwiek rozwija aplikacje w Pythonie z pewnością docenił jego wszechstronność i łatwość użycia. Jednak ta sama cecha, która czyni Pythona tak popularnym, czyli jego interpretowalność, może stanowić wyzwanie w kontekście 𝐨𝐜𝐡𝐫𝐨𝐧𝐲 𝐰ł𝐚𝐬𝐧𝐨𝐬́𝐜𝐢 𝐢𝐧𝐭𝐞𝐥𝐞𝐤𝐭𝐮𝐚𝐥𝐧𝐞𝐣 (𝐈𝐏 𝐏𝐫𝐨𝐭𝐞𝐜𝐭𝐢𝐨𝐧) 𝐢 𝐥𝐢𝐜𝐞𝐧𝐜𝐣𝐨𝐧𝐨𝐰𝐚𝐧𝐢𝐚 𝐨𝐩𝐫𝐨𝐠𝐫𝐚𝐦𝐨𝐰𝐚𝐧𝐢𝐚.

Twoje algorytmy, know-how i unikalne rozwiązania są narażone na nieautoryzowane kopiowanie i inżynierię wsteczną. Czy można temu zaradzić?

𝐔𝐧𝐢𝐤𝐚𝐥𝐧𝐞 𝐜𝐞𝐜𝐡𝐲 𝐀𝐱𝐏𝐫𝐨𝐭𝐞𝐜𝐭𝐨𝐫 𝐏𝐲𝐭𝐡𝐨𝐧

Jako że Python jest językiem skryptowym, kod aplikacji zapisany w plikach .py jest czytelny dla każdego, kto ma do nich dostęp. Kompilacja kodu do plików .pyc (bytecode) czy generowanie samodzielnych plików wykonywalnych sprawia, że jest mniej czytelny, ale nadal możliwy do wyekstrahowania.  

Niniejsze wprowadzenie ma na celu przedstawienie, w jaki sposób prosto i skutecznie ochronić swój kod napisany w Pythonie, bez potrzeby stosowania dodatkowych zabiegów. Poprowadzi Cię przez proces zabezpieczania, w którym wykorzystasz pakiet AxProtector Python. Skupimy się na najczęściej wykorzystywanych opcjach, tak abyś mógł stworzyć własną, bezpieczną dystrybucję aplikacji w zaledwie kilka minut.  

W celu zabezpieczenia oprogramowania napisanego w Pythonie potrzebne będą:  

·       CodeMeter AxProtector NC GUI 

·       Firm Security Box (FSB) 

·       CodeMeter License Editor

·       Python 

Instalacja środowiska CodeMeter 

AxProtector NC GUI wchodzi w skład pakietu narzędziowego CodeMeter Development Kit, który można pobrać ze strony: https://www.wibu.com/pl/sdk.html  

Pakiet do celów testowych jest darmowy. Po wypełnieniu formularza rejestracyjnego wygenerowana zostanie odpowiednia licencja testowa. Po zainstalowaniu pakietu mamy do dyspozycji wszystkie istotne komponenty środowiska CodeMeter, które pozwolą nam na ochronę kodu w Pythonie.

Kontenery licencyjne i Firm Security Box (FSB) 

AxProtector zabezpiecza kod wynikowy m.in. za pomocą szyfrowania. Wykorzystywane w tym celu klucze przechowywane są w bezpiecznych repozytoriach – kontenerach licencyjnych. W nich również zapisywane są licencje, które określają zakres użycia Twojej aplikacji.   

Rozróżniamy następujące kontenery licencyjne: 

  1. CmDongle – potocznie określany jako "klucz sprzętowy". Jest to karta mikroprocesorowa (np. w postaci niewielkiego pendriva), wyposażona w procesor kryptograficzny, który m.in. wykonuje operacje szyfrowania i deszyfrowania, podłączana do komputera, serwera bądź urządzenia IoT / embedded (np. poprzez port USB). Używane do szyfrowania klucze są w nim trwale zapisane. 
  2. CmCloud – to chmurowa wersja repozytorium kluczy. Jeśli Twoja aplikacja pracuje online i ma stały dostęp do Internetu (środowiska wirtualne, chmurowe, IoT/IIoT), CmCloud stanowić będzie interesującą opcję.  
  3. CmActLicense - to kontener w postaci pliku, unikalnego identyfikatora (odcisku) cyfrowego urządzenia docelowego (komputera, urządzenia IoT / embedded). Zmiana wybranych składników sprzętu wymaga ponownego wygenerowania pliku. CmActLicense zapisywany jest na urządzeniu docelowym. CmReady to wariant, który powiązany jest z kartą SD, znajdujący często zastosowanie w urządzeniach embedded i IoT. 

Zabezpieczenie oprogramowanie za pomocą AxProtector wymaga kluczy, które zapisane są w kontenerze licencyjnym, tzw. Firm Security Box (FSB), i jednoznacznie identyfikują Cię jako producenta. 

Ochrona oprogramowania - proces 

Zabezpieczenie kodu wynikowego składa się z dwóch kroków, które mogą być wykonane w dowolnej kolejności (rys. 1): 

  • Krok 1 – Integracja zabezpieczeń z aplikacją. Wykonywana jest jednokrotnie, dla każdego nowego wydania.  
  • Krok 2 – Tworzenie licencji - czyli zapisanie kluczy umożliwiających odszyfrowanie kodu aplikacji oraz zasad ich użycia (licencji) w jednym z trzech w/w rodzajów kontenerów.  

Rysunek 1. Sposób integracji zabezpieczeń z oprogramowaniem i tworzenie licencji

Ochrona kodu Pythona przy użyciu AxProtector 

Środowisko AxProtector NC służy do ochrony kodu wynikowego. Mamy do wyboru 4 warianty, które przechodzimy za pomocą prostego konfiguratora: 

·       Quick start– zawiera standardowe ustawienia, pozwalające na szyfrowanie i licencjonowanie aplikacji 

·       Basic configuration – daje możliwość zmiany parametrów konfiguracyjnych 

·       Expert configuration – umożliwia określenie konkretnych części aplikacji (metod), do których można przypisać dany typ licencji

License-free protection – aplikacja zostaje zabezpieczona, z pominięciem licencjonowania.

Rys.2 Ekran startowy CodeMeter AxProtector NC GUI

W każdym z wariantów należy skonfigurować parametry dot. licencji: 

  • Firm Code – to unikalny kod producenta. Wersja testowa ma domyślnie 6000010 
  • Product Code (wariant 1-3) – to kod, który nadajesz danym licencjom Twojej aplikacji (funkcjonalności, cechy itp.), np. 201 000.

Tworzenie licencji 

Za wyjątkiem wariantu License-free protection, zabezpieczona aplikacja może być uruchomiona wyłącznie w przypadku, gdy jest dostępna odpowiednia licencja.

W zależności od docelowego środowiska wybieramy kontener licencyjny (CmDongle, Cloud lub CmActLicense) i zapisujemy w nim odpowiednią licencję (np. 201 000). Operację możemy wykonać na kilka sposobów, lecz na potrzeby testów oraz niedużej ilości licencji, wystarczający jest CodeMeter License Editor.  

Rys. 3 Menu kontekstowe CodeMeter License Editor. Tworzenie licencji na kluczu sprzętowym 3-7158095, dla kodu producenta (testowy) 6000010

Uruchamianie zabezpieczonej aplikacji Python

Na docelowym komputerze / urządzeniu instalowana jest natywna biblioteka cprst.dll, która może być dostarczana razem z CodeMeter Runtime lub osobno z aplikacją.

Biblioteka tworzy bezpieczne i odporne na manipulacje środowisko, w którym ma miejsce sprawdzanie licencji i odszyfrowywanie kodu aplikacji. W momencie uruchomienia, biblioteka ładowana jest do pamięci i odszyfrowywany jest kod aplikacji, który następnie wykonywany jest przez interpreter.

Dalsza eksploracja

Omawiany scenariusz pozwala na zabezpieczenie i opcjonalne przypisanie licencji do aplikacji w kilku prostych krokach. Nie wyczerpuje wszystkich możliwości jakie daje AxProtector w zakresie ochrony kodu aplikacji Python ale jest dobrym punktem wyjścia do sprawdzenia jego możliwości.

✨ Jak chronić kod Pythona? ✨ | Janusz Hryszkiewicz
✨ Jak chronić kod Pythona? ✨