Matematyczne puzzle pozwolą na zabezpieczenie oprogramowania przed odwrotną inżynierią?

Matematyczne puzzle pozwolą na zabezpieczenie oprogramowania przed odwrotną inżynierią?

01.08.2013 12:54

Dla wielu producentów oprogramowania, szczególnie tych, którzyrozwijają wysoce specjalistyczne narzędzia, techniki odwrotnejinżynierii stanowią spore zagrożenie – pozwalają konkurencjiodtworzyć kod źródłowy, poznać wykorzystywane algorytmy i zastosowaćje w swoich produktach. Zapewne podobnie myślą twórcy szkodliwegooprogramowania, poszukujący sposobów na zabezpieczenie swojego koduprzed antywirusowymi skanerami. Jedni i drudzy nie od dzisiaj więcszukają sposobów na takie zabezpieczenie programów, by stały się onedla osób postronnych „czarnymi skrzynkami”, a przy tymzachowywały wszystkie swoje funkcje, uruchomione na komputerachkońcowych użytkowników (czy ofiar). Za sprawą prac grupyamerykańskich informatyków nad szyfrowaniem funkcjonalnym inieodróżnialnym zaciemnianiem zabezpieczeniatakie miałyby stać się powszechnie wykorzystywane do ochronywłasności intelektualnej.Stojący na czele grupy prof. AmitSahai z University of California, wraz ze swoimi kolegami z IBMResearch i University of Texas, zajęli się problemem takiegoszyfrowania oprogramowania, by nie tylko zachowało ono wszystkieswoje funkcje, ale też było z zasady niemożliwe do dekompilacji,odporne na wszystkie znane techniki odwrotnej inżynierii. Dostępne dotej pory techniki zaciemniania kodu pozwalały co najwyżej nazwiększenie stopnia trudności dekompilacji – ale zdeterminowanynapastnik, poświęcając nieco czasu, mógł sobie z nimi ostatecznieporadzić i uzyskać wgląd w działanie programu.[img=reverseengineering]Sahai wyjaśnia, że kluczem donowej techniki zaciemniania są nowego rodzaju wieloliniowepuzzle: matematyczna układanka,której siłowe rozwiązanie wymagałoby setek lat pracy współczesnychkomputerów, która zamienia strukturę kodu w bezsensowne dlanapastnika ciągi liczb. To co dajemy to tylko matematyka,tylko liczby, sekwencja liczb. Jednak liczby te żyją w matematycznejstrukturze, poprzez którą te indywidualne elementy układanki, tesekwencje liczb mogą być połączone z innymi elementami tylko w ściśleokreślony sposób. Możesz to przeglądać z góry do dołu, z różnychstron, i wciąż nie będziesz wiedział, co zaciemniony program robi.Jedyne co możesz zrobić, to zestawić go razem tak, jak miał byćzestawiony; każde inne zestawienie – np. jakbyś chciał rozbićjeden element i zwrócić go w innej formie – zwróci ci tylkośmieci.W metaforze wieloliniowego puzzleposzczególne fragmenty kodu postrzegane są jako elementy puzzle –i podobnie jak w namacalnej układance, mogą być zestawione tylko wsposób zgodny z ich strukturą. Poprawna wieloliniowa forma tychelementów jest sugerowanym rozwiązaniem układanki, sugeruje, w jakisposób można połączyć jej części. Do tworzenia układankiwykorzystywane są dwa algorytmy: generator i weryfikator. Pierwszybuduje parametry systemu i elementy grup, drugi weryfikuje, czystanowią one poprawne rozwiązanie układanki. Jedynie ten, ktowygenerował parametry systemowe może zakodować ustawienie elementów.Podjęte przez zespół prace nadtechnikami zaciemniania oprogramowania przyniosły też inne znacząceosiągnięcie – możliwość wykorzystania w szyfrowaniufunkcjonalnym, czyli technice zastępowania zaszyfrowanych wiadomościzaszyfrowanymi funkcjami, dowolnej obliczalnej funkcji (do tej porymożliwe było wykorzystanie jedynie kilku ściśle określonych funkcji).Według Sahaiego technika ta może posłużyć do zabezpieczeniapojedynczej wiadomości rozsyłanej do dużej grupy odbiorców, tak bykażdy z nich otrzymał inną treść, uzależnioną od np. swojego adresu.W ten sposób odbiorca uzyskując odpowiedź na swoje zapytanie, niejest w stanie dowiedzieć się niczego więcej ponad to, co było dlaniego zamierzone.Artykuł pt. Candidate Indistinguishability Obfuscation and FunctionalEncryption for all circuits, w którym szczegółowo opisano tętechnikę zaciemniania kodu, to ponad 40 stron algebraicznychrozważań, których przeniesienie na język mniej formalny nie jestłatwym zadaniem. Z tego co bez głębszej analizy udało się nam wredakcji ustalić, obwody (ang. circuits) o którym mowa wtekście to liniowe zestawienia bramek logicznych AND, OR i NOT, którena wejściu przyjmują łańcuch bitów i zwracają kolejny łańcuch ookreślonej długości. Zaciemnianie polegałoby na przekształcaniuobwodów w ich równoważniki, uzupełnione losowo dobraną logiką, niewpływającą ostatecznie na wynik. A jak mogłoby to wyglądać od stronysamego uruchamiania kodu? Zapewne rezerwowany byłby odpowiednio dużyobszar pamięci, po którym następnie rozrzucane byłyby fragmenty kodu,połączone wieloma instrukcjami skoku i indeksami (strukturąukładanki, o której piszą autorzy).Oczywiście wątpliwości co doskuteczności takiego zabezpieczenia jest sporo. Wydaje się, żewydajność przetworzonego tak oprogramowania może znacznie spaść –sami autorzy piszą: choć nasza obecna konstrukcja zaciemnianiadziała w czasie wielomianowym, to jest prawdopodobnie za mało wydajnadla większości praktycznych problemów. Ważnym celem będziezwiększenie wydajności, by wykorzystać tę metodę w praktycznychzastosowaniach. Z drugiej strony nie wiadomo, jak takiezaciemnianie miałoby chronić przed napastnikiem uruchamiającymprogram w maszynie wirtualnej, pod kontrolą hiperwizora pozwalającegona zrzuty pamięci i zapis kompletnych stanów maszyny. W ten sposóbcierpliwy napastnik mógłby odtworzyć całe zachowanie algorytmu zinformacji o kolejnych krokach procesora i operacjach na pamięci.

Źródło artykułu:www.dobreprogramy.pl
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (32)