• Nie Znaleziono Wyników

Krzysztof Dyki, Krzysztof Małecki Algorytm bezpiecznej komunikacji oprogramowania z zabezpieczonymi danymiSesja: Kształcenie w dziedzinie elektroniki i telekomunikacji.Politechnika Szczecińska

N/A
N/A
Protected

Academic year: 2021

Share "Krzysztof Dyki, Krzysztof Małecki Algorytm bezpiecznej komunikacji oprogramowania z zabezpieczonymi danymiSesja: Kształcenie w dziedzinie elektroniki i telekomunikacji.Politechnika Szczecińska"

Copied!
4
0
0

Pełen tekst

(1)www.pwt.et.put.poznan.pl. Krzysztof Dyki Krzysztof Małecki Politechnikka Szczecińska Wydział Informatyki ul. Żołnierska 49 71-210 Szczecin e-mail: kdyki@wi.ps.pl, kmalecki@wi.ps.pl. 2005. Poznańskie Warsztaty Telekomunikacyjne Poznań 8 - 9 grudnia 2005. ALGORYTMY BEZPIECZNEJ KOMUNIKACJI OPROGRAMOWANIA Z ZABEZPIECZONYMI DANYMI Streszczenie: W referacie poruszono problematykę bezpieczeństwa danych krytycznych z punktu widzenia autora danego oprogramowania. Przedstawiono aktualne problemy komunikacji niskopoziomowej wraz z aspektami bezpieczeństwa oprogramowania na etapie projektowania. Zaproponowano również efektywne metody doboru poszczególnych algorytmów wraz z metodami ich implementacji oraz przykładowym rozwiązaniem opartym o architekturę klient-serwer.. 1. WSTĘP W procesie projektowania oprogramowania operującego na danych krytycznych (których bezpieczeństwo musi zostać zapewnione) z punktu widzenia autora każdorazowo wymagane jest podjęcie decyzji o wyborze odpowiedniego algorytmu spełniającego określone wymagania względem oprogramowania [6],[7]. Analizując aktualnie stosowane rozwiązania można dojść do wniosku, że producenci nie przykładają zbytniej wagi do ochrony danych, na których operuje ich oprogramowanie lub też nie zdają sobie sprawy ze słabej ochrony wynikającej prawdopodobnie z błędów popełnianych już na etapie projektowania oprogramowania i wyboru algorytmów kryptograficznych przeznaczonych do implementacji. Niejednokrotnie też producent nie zdaje sobie sprawy z wartości danych dołączanych do oprogramowania a szczególnie nie jest świadom możliwości dokonania ich ekstrakcji i konwersji w celu wykorzystania (implementacji) w obcym oprogramowaniu bez wiedzy i zgody autora. Przykładowe typy oprogramowania narażonego na ataki to: –. –. oprogramowanie prawnicze (zawartość aktów prawnych oraz ustawowych dokumentów jest jednolita, w związku z czym stanowi bardzo cenną wartość dla firm produkujących lub chcących wyprodukować konkurencyjne oprogramowanie o tożsamym przeznaczeniu), oprogramowanie bazodanowe (przykładem mogą. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. być słowniki oraz programy do kosztorysów zawierające indeks towarów i usług formatowanych według ściśle określonych urzędowych kategorii, a także ogólnodostępne bazy zawierające informacje o ludności, np. książki telefoniczne wydawane w formie cyfrowej), –. oprogramowanie urzędowe (dane oraz informacje o charakterze niejawnym stanowić mogą cenne źródło informacji dla szerokiego grona osób zainteresowanych ich rozpowszechnieniem, odsprzedaniem lub po prostu wykorzystaniem na własny użytek).. Jak łatwo zauważyć podane przykłady zawierają bardzo cenne źródła danych, a niejednokrotnie źródła informacji mogących stanowić tajemnicę handlową o strategicznym znaczeniu i wymiernej wartości finansowej. W związku z wysokim stopniem narażenia na ataki wyżej wymienione typy danych były, i zapewne w dalszym ciągu będą, obiektami udanych prób ekstrakcji i konwersji ich danych z przeznaczeniem do dalszego wykorzystania. Prawidłowa implementacja komunikacji z algorytmami kryptograficznymi stanowi dla większości programistów trudne zadanie. Sytuacja komplikuje się jeszcze bardziej w przypadku potrzeby skorzystania z ogólnie przyjętych standardów i zastosowania np. kryptografii asymetrycznej opartej na wykorzystaniu klucza prywatnego. W takim przypadku autorzy oprogramowania sięgają najczęściej po gotowe biblioteki kryptograficzne narażając komunikację swojego oprogramowania z algorytmem kryptograficznym na łatwą dekompilację, a w konsekwencji czytelną analizę funkcjonalną [3]. Głównym problemem jest nie tylko wybór odpowiedniego algorytmu kryptograficznego, lecz również, co bardziej istotne od samego algorytmu, sposób jego implementacji i realizacji komunikacji oprogramowania z zabezpieczonymi danymi [2]. 2. AKTUALNE ROZWIĄZANIA Na podstawie wyników przeprowadzonych badań. 1/4.

(2) www.pwt.et.put.poznan.pl. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. deszyfrowania krytycznych danych oprogramowania. Badając aktualne formy zabezpieczeń danych w oprogramowaniu komputerowym można stwierdzić, że standardem stała się implementacja algorytmu RSA w przypadku korzystania z kryptografii asymetrycznej, RC4 i DES w przypadku kryptografii symetrycznej oraz MD5 i SHA dla funkcji haszujących. Powszechnie też jedyną formą zabezpieczenia zewnętrznych danych oprogramowania jest użycie jednej operacji XOR. Co więcej, przeważnie stosowana jest tylko jedna wartość tego operatora w stosunku do całej objętości zabezpieczonych danych [5]. Jednak zastosowanie nawet najsilniejszego asymetrycznego algorytmu kryptograficznego niewiele ma wspólnego z bezpieczeństwem danych nim zabezpieczonych jeśli klucz deszyfrujący jest przechowywany i wykorzystywany przez oprogramowanie bez zastosowania dodatkowych technik zwiększających bezpieczeństwo komunikacji wewnątrz oprogramowania (rysunek 1). Przykładowymi funkcjami narażonymi na ataki wewnątrz oprogramowania są komunikacje: a) oprogramowania z kluczem deszyfrującym, b) deszyfrowania danych, c) odczytu danych odszyfrowanych.. APLIKACJA. OPERACJE I/O. PRZEKAZANIE DANYCH DLA OPROGRAMOWANIA. DANE (B1). ALGORYTM DESZYFRUJACY , BLOK. KOMUNIKACJA. należy przyjąć, że aktualnie stosowane formy zabezpieczania krytycznych danych oprogramowania, poza nielicznymi wyjątkami, nie spełniają podstawowych wymogów bezpieczeństwa dotyczących komunikacji oprogramowania z zabezpieczonymi danymi. Jak wcześniej wspomniano stan taki może być spowodowany różnymi czynnikami, począwszy od nieodpowiedniego stopnia uwagi podczas projektowania oprogramowania i doboru jego algorytmów, poprzez niewłaściwe metody implementacji samych algorytmów, a skończywszy na braku świadomości zagrożenia lub świadomości możliwości stosowania technik odwrotnej inżynierii (ang. reverse engineering) w stosunku do każdej programowej implementacji algorytmu kryptograficznego. Ostatnim najbardziej spektakularnym przykładem błędnej komunikacji algorytmu kryptograficznego oraz niewłaściwej ochrony danych oprogramowania było złamanie 113-bitowego klucza kryptograficznego algorytmu ECDSA (ang. Elliptic Curve DSA) w najpopularniejszym oprogramowaniu do zabezpieczania aplikacji i bibliotek systemowych Armadillo (www.siliconrealms.com). Do złamania klucza wykorzystano niezabezpieczoną komunikację oprogramowania z prywatnym kluczem ECC oraz ewidentny błąd w generatorze (silniku) liczb pierwszych. Pomimo starannego zabezpieczenia struktury oprogramowania wykorzystano otwartą formę komunikacji, co umożliwiło stworzenie generatora kluczy dla teoretycznie odpornego na ataki algorytmu ECDSA. Skupienie się na ochronie komunikacji wewnątrz oprogramowania zamiast implementowania wyrafinowanych algorytmów kryptograficznych mogło w tym przypadku zapobiec złamaniu oprogramowania, ale przede wszystkim zapobiec utracie wizerunku firmy Digital River będącej jednym ze światowych liderów w dziedzinie ochrony oprogramowania, jego licencjonowania i zabezpieczania transakcji finansowych dokonywanych online. W przypadku prawidłowej implementacji algorytmu kryptograficznego szyfrującego dane, zakładając dobór właściwego algorytmu o odpowiedniej długości klucza, nie ma możliwości dokonania dekrypcji danych zaszyfrowanych za jego pomocą bez znajomości klucza deszyfrującego będącego przeważnie kluczem prywatnym w kryptografii asymetrycznej [11]. Wynika to z właściwości matematycznych danego algorytmu (najczęściej właściwości te spełniają algorytmy kryptograficzne w standardzie AES) oraz braku dostępu do klucza deszyfrującego, w jakiejkolwiek postaci. Inaczej jest w przypadku oprogramowania. Oprogramowanie działające w ramach jednostki centralnej, bez względu na formę zaimplementowanej ochrony kryptograficznej (klucz prywatny w kryptografii asymetrycznej lub klucz deszyfrujący w kryptografii symetrycznej), musi operować na krytycznym strumieniu danych stanowiącym klucz deszyfrujący [8]. Najczęstszym błędem popełnianym w trakcie zabezpieczania danych przez producentów oprogramowania jest wybór jednego, ewentualnie dwóch powszechnie znanych algorytmów kryptograficznych, za pomocą których wykonuje się operacje szyfrowania i. Rys. 1 Aktualne formy komunikacji oprogramowania z zabezpieczonymi danymi Brak ochrony komunikacji występującej na poziomie oprogramowania, algorytmu kryptograficznego oraz samego klucza deszyfrującego pozwala na użycie wyżej wymienionych technik analitycznych w celu odszyfrowania danych bądź uzyskania hasła do ich dostępu (bez potrzeby wykonywania dodatkowych operacji). Co więcej, taką formę badania można sklasyfikować jako wysokopoziomową analizę funkcjonalną oprogramowania [4] ponieważ w takim przypadku zbędne jest stosowanie skomplikowanych i zaawansowanych technik niskopoziomowego badania kodu w celu próby określenia funkcjonalności badanego fragmentu oprogramowania. Taki stan nie tylko znacznie ułatwia pracę osoby analizującej zabezpieczenie danych,. 2/4.

(3) www.pwt.et.put.poznan.pl. 3. PROPONOWANE ROZWIĄZANIE Najistotniejszym czynnikiem mającym największy wpływ na bezpieczeństwo danych w kontekście ich odczytu przez oprogramowanie jest maksymalna komplikacja algorytmów komunikacji zachodzących wewnątrz oprogramowania. Przez algorytmy komunikacji należy rozumieć każdy fragment kodu odpowiedzialny za odczyt, modyfikację i zapis danych pobieranych przez oprogramowanie. Przedstawione w rozdziale drugim aktualnie implementowane formy komunikacji charakteryzują się dużą otwartością i czytelnością. Poza tym operują na powszechnie znanych algorytmach kryptograficznych, niejednokrotnie implementowanych w formie komercyjnych bibliotek bądź kontrolek systemowych umożliwiając łatwą i bardzo czytelną analizę funkcjonalną algorytmu, za pomocą którego zabezpieczono dane. Proponowane rozwiązanie nie tylko pozbawione jest tych wad, ale zawiera również propozycję nowej idei zabezpieczeń zewnętrznych danych oprogramowania. Główny nacisk położono na maksymalne skomplikowanie czytelności komunikacji oprogramowania z zabezpieczonymi danymi oraz implementację trzech istotnych czynników w dużym stopniu zwiększających bezpieczeństwo komunikacji, a tym samym zabezpieczonych danych. Czynnikami tymi są: – – –. kompresja danych oparta na własnym algorytmie, zastosowanie podwójnej deszyfracji danych, pobieranie klucza deszyfrującego z serwera.. Schemat ideowy proponowanego rozwiązania przedstawiony został na rysunku 2. Na początku procedur odpowiedzialnych za odczyt bazy danych uruchamiany jest silnik mutujący dane wejściowe w taki sposób, że każdorazowe wykonanie danego fragmentu kodu poprzedzone jest mutacją (przemieszaniem) danych wejściowych. Celem tego typu operacji jest mutacja (zmniejszenie czytelności) algorytmów i funkcji realizowanych wewnątrz oprogramowania [1]. W przypadku proponowanego rozwiązania odczyt klucza B(n)1 (pierwszego z dwóch kluczy niezbędnych do dokonania pełnej dekrypcji, gdzie B oznacza blok danych, (n) jego numer) poprzedzony jest mutacją jego danych wejściowych tak, aby w każdym przypadku ich binarna reprezentacja była inna ale interpretacja taka sama dla oprogramowania. Następnymi krokami w kolejności występowania są:. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. – – – – – – – – – – –. mutacja danych wejściowych i wyjściowych dla operacji odczytu i ewentualnego zapisu na dysku, pobranie bloku danych B(n)1, mutacja bloku danych B(n)1, mutacja zdekompresowanego bloku B(n)1, deszyfrowanie bloku B(n)1, obliczenie indeksu klucza dekrypcji dla bloku B(n)2, połączenie z serwerem (LAN, WWW) w celu pobrania klucza dekrypcji B(n)2, mutacja klucza B(n)2, deszyfrowanie bloku B(n)2, mutacja bloku B(n)2, odszyfrowanych danych dla oprogramowania.. APLIKACJA. SILNIK MUTUJACY ,. DANE (B1). SERWER (B2). ODCZYT KLUCZA DLA BLOKU B(n)1. DEKOMPRESJA. SILNIK MUTUJACY ,. SILNIK MUTUJACY ,. SILNIK MUTUJACY ,. ALGORYTM DESZYFRUJACY BLOK B(n)2. ALGORYTM DESZYFRUJACY BLOK B(n)1. SILNIK MUTUJACY ,. OBLICZENIE INDEKSU KLUCZA DLA BLOKU B(n)2. PRZEKAZANIE DANYCH DLA OPROGRAMOWANIA. OPERACJE I/O. SILNIK MUTUJACY ,. KOMUNIKACJA. ale również poszerza potencjalny krąg osób zdolnych do odbezpieczenia danego zbioru danych. W przypadku wysokopoziomowej analizy wystarczy umiejętność posługiwania się standardowymi funkcjami interfejsu programowania aplikacji wewnątrz danego systemu operacyjnego [1]. Umiejętności takie posiada średnio zaawansowany programista umiejący posłużyć się dowolnym debuggerem i tworzący oprogramowanie, lub jego fragmenty, z użyciem funkcji API (ang. Application Programming Interface) systemu operacyjnego.. Rys. 2 Schemat ideowy proponowanego algorytmu ochrony komunikacji Proponowany algorytm, poza charakterystycznymi punktami zmniejszającymi czytelność danych wejściowych, powinien wykorzystywać własny algorytm dekompresji uniemożliwiający skorzystanie z aktualnie dostępnych bibliotek kompresji i dekompresji danych w celu ręcznej dekompresji danych. Zastosowanie kompresji gwarantuje nie tylko dodatkowy element zabezpieczenia, ale umożliwia również dokonywanie weryfikacji integralności (nienaruszalności) zabezpieczonych danych w celu np. ochrony przed modyfikacją lub sygnalizowania uszkodzeń. Jako algorytmy szyfrujące i deszyfrujące powinny zostać dobrane również własne rozwiązania, nawet teoretycznie słabsze (z matematycznego punktu widzenia) od standardowych algorytmów. Zabieg taki uniemożliwia automatyczne wykrycie sygnatur znanych algorytmów i ich tablic, co ma miejsce w przypadku tradycyjnych rozwiązań dzięki możliwości zastosowania heurystycznych skanerów binarnych (zasadą działania zbliżonych do skanerów antywirusowych). Tym samym analiza i dekompilacja zaimplementowanego algorytmu. 3/4.

(4) www.pwt.et.put.poznan.pl. szyfrującego będzie niewykonalna dla osób nieposiadających poważnego doświadczenia w posługiwaniu się technikami odwrotnej inżynierii. Zamiast implementacji własnego algorytmu można wykorzystać również ogólnodostępne algorytmy wraz z ich kodami źródłowymi w celu modyfikacji ich stałych punktów podatnych na skanowanie heurystyczne oraz skanowanie sygnatur. W tym celu wystarczy modyfikacja kodu źródłowego bez zmiany jego funkcjonalności oraz modyfikacja ziarna (ang. seed) algorytmu. Taki zabieg jest stosunkowo mniej odporny na analizę niż własny algorytm, jednak w dalszym ciągu trudniejszy do odnalezienia i analizy niż powszechnie dostępne biblioteki [10]. Oprócz typowo indywidualnych realizacji implementowanych algorytmów kompresji i kryptografii, w celu dodatkowej ochrony, zaproponowano podwójne szyfrowanie danych oparte na wykorzystaniu dwóch tablic kluczy. Tablica kluczy B(n)1 pobierana byłaby z oprogramowania, natomiast tablica kluczy B(n)2, niezbędna do dokonania pełnej dekrypcji danych, powinna być pobierana zdalnie, aby uniemożliwić jej lokalną ekstrakcję. Zastosowanie serwera z kluczami deszyfrującymi oraz indywidualnego algorytmu indeksującego pozycję kluczy B(n)2 jest nowatorską formą ochrony zaszyfrowanych danych, niespotykaną dotychczas w oprogramowaniu.. sporego nakładu pracy. Biorąc pod uwagę fakt, że każde zabezpieczenie ze swojej natury jest możliwe do odbezpieczenia, a jedynym czynnikiem mogącym powstrzymać osoby je analizujące jest wymiar czasowy niezbędny na przeprowadzenie badań należałoby przyjąć tezę, iż proponowane rozwiązanie spełnia ten wymóg. Czas niezbędny na odbezpieczenie omawianego algorytmu powinien przekroczyć wartość danych nim zabezpieczonych [9]. Proponowane rozwiązanie, w porównaniu do aktualnie stosowanych algorytmów, charakteryzuje się znacznie wyższym stopniem bezpieczeństwa komunikacji oraz skomplikowaniem własnej struktury. Tym samym zabezpieczone dane są dużo trudniejsze do odbezpieczenia. Dzięki zastosowaniu kompresji możliwa jest nie tylko optymalizacja wielkości baz danych, ale również weryfikacja ich integralności oraz ochrona antywirusowa. Nieskomplikowane wymogi względem implementacji (czas implementacji, zasoby systemowe oraz umiejętności programistyczne) umożliwiają zastosowanie omawianego algorytmu w każdym typie oprogramowania, począwszy od oprogramowania typu shareware, poprzez oprogramowanie komercyjne jednostanowiskowe, a skończywszy na rozbudowanych aplikacjach pracujących w środowiskach sieciowych.. 4. WNIOSKI. [1] K. Kaspersky, Hacker Disassembling Uncovered, AList Publishing, 2003. [2] P. Tonella, A. Potrich, Reverse Engineering of Object Oriented Code (Monographs in Computer Science), Springer 1st edition, 2005. [3] D. Aucsmith, Tamper-Resistance Software: An Implementation, Information Hiding, Proceedings of the First International Workshop, volume 1174 of LNCS, 1996. [4] C. Collberg, C. Thomborson, D. Low, Breaking Abstractions and Unstructuring Data Structures, IEEE International Conference on Computer Languages, 1998. [5] C. Wang, J. Hill, J. Knight, J. Davidson, Software Tamper Resistance: Obstructing Static Analysis of Programs, Technical Report CS-2000-12, 2000. [6] A. Lenstra, E. Verheul, Selecting Cryptographic Key Sizes, Selecting Cryptographic Key Sizes, 1999. [7] C. Adams, Symmetric Cryptographic System for Data Encryption, U.S. Patent #5,511,123, 1996. [8] S. Akl, On the Security of Compressed Encodings, Advances in Cryptology–Proceedings of Crypto, 1984. [9] D. Branstad, Encryption Protection in Computer Data Communications, Proceedings of the 4th Data Communications Symposium IEEE, 1975. [10] D. Denning, Cryptography and Data Security, Addison-Wesley, Reading, 1983. [11] P. Geffe, How to Protect Data with Ciphers That Are Really Hard to Break, Electronics 46, 1973.. W prezentowanym referacie ukazano algorytmy i techniki bezpośrednio zwiększające bezpieczeństwo krytycznych danych oprogramowania. Zwrócono także uwagę na najczęściej popełniane błędy podczas implementacji zabezpieczeń zewnętrznych danych. Coraz większa wartość danych zamieszczanych wraz z oprogramowaniem oraz rosnąca skala piractwa i kradzieży intelektualnej powinna skłonić deweloperów do stosowania zaawansowanych technik ich ochrony. Zakładając poprawną implementację proponowanego rozwiązania w celu dokonania pełnej dekrypcji tylko jednego bloku danych niezbędne byłoby wykonanie następujących czynności: – – – –. ręczna ekstrakcja tablicy kluczy B(n)1, zdekompilowanie i odwrócenie algorytmu indeksującego klucze B(n)2, pobranie z serwera tablicy kluczy B(n)2 (na podstawie obliczonego indeksu), zdekompilowanie i ponowna assemblacja algorytmu dekompresji danych.. Wysoki stopień ochrony oraz skomplikowanie funkcjonalne od początku eliminuje szerokie grono potencjalnych osób zdolnych do złamania takiej formy zabezpieczenia danych. W przypadku pozostałych osób, które ewentualnie posiadają zaawansowaną wiedzę z zakresu technik odwrotnej inżynierii oraz kryptografii przeprowadzenie analizy takiego zabezpieczenia i odbezpieczenie danych w dalszym ciągu wymagałoby. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. 5. LITERATURA. 4/4.

(5)

Cytaty

Powiązane dokumenty

1969 język BCPL; Martin Richards z University Mathematical Laboratories w Cambridge; dla pierwszej instalacji systemu operacyjnego UNIX 1970 język B zdefiniowany dwa lata

Kak zajka letal па vozdusnych sarikach (Suksin 1984: 353) Jako prostfedku jazykove komiky uziva Suksin take pfirovnani. V cem spociva podstata jeho komickeho ucinku?.. 1)

Działanie algorytmu oparte jest na minimalizacji funkcji celu , zdefiniowanej jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).. W każdym kroku algorytm

zainicjował założenie tej najpoważniejszej francuskiej placówki badań nad historią nauki i techniki i przez wiele lat nią kierował.. 1

Jaki jednak może być w p ły w tej mody na upowszechnienie historii techniki, a bodaj historii samochodu, skoro w śródmiejskim kiosku „Ruchu” w W arszawie

18(a) show the comparison of cogging torque waveforms under static and dynamic angular misalignment calculated by the proposed method and 3D FEM model, respectively..

Egzaminy certyfikujące będą odbywać się „on-line” przez Internet, ale pod nadzorem osoby upoważnionej przez organizację wydającą certyfikaty... Kluczowe aspekty

Twofish poddaje operacji XOR 128 bitów klucza przed pierwszą rundą sieci Feistela (drugą wartością jest ciąg wejściowy) oraz 128 bitów po ostatniej rundzie