Inżynieria odwrotna aplikacji SaaS

inżynieria odwrotna

Jeśli zdecydujesz się użyć inżynierii odwrotnej SaaS aplikacji, najpierw uważnie przeczytaj Regulamin. Większość dostawców SaaS ma jasną zasadę, która zabrania inżynierii wstecznej oprogramowania. Dotyczy to nie tylko rozwiązania SaaS, które subskrybujesz, ale także jeśli uzgodniono okres próbny. Ten zakaz często dotyczy bezpłatnych plików do pobrania.

Chcesz uniknąć konieczności ponownego tworzenia oprogramowania i samodzielnego wprowadzenia podobnej usługi na rynek.

Czym jest inżynieria odwrotna?

Inżynieria odwrotna to metoda powielania istniejącego oprogramowania, odkrywania produktu, bez pomocy projektów, dokumentacji lub modeli. Można powiedzieć, że inżynieria odwrotna to proces rozwoju w przeciwnym kierunku, prowadzący do spełnienia wymagań.

Powody stosowania inżynierii odwrotnej

Inżynierię odwrotną można traktować jako proces analizy systemu w celu:

Zidentyfikuj składniki oprogramowania i ich wzajemne relacje.

Podrabianie oprogramowania na innej platformie lub na innym poziomie abstrakcji.

Tworzenie dokładnie tego samego oprogramowania.

Innym powodem zastosowania inżynierii odwrotnej jest skrócenie czasu projektowania. Na konkurencyjnym rynku dostawcy nieustannie szukają nowych sposobów na skrócenie czasu opracowywania, aby wprowadzić nową aplikację SaaS na rynek.

Oto powody zastosowania inżynierii odwrotnej w aplikacjach SaaS:

Nie ma wystarczającej dokumentacji oryginalnego projektu.

Oryginalny projekt zaginął lub nigdy nie istniał.

Oryginalny producent nie dostarcza już aplikacji SaaS.

Oryginalny producent już nie istnieje, ale klient potrzebuje dostosowań.

Niektóre złe części oprogramowania muszą zostać przepisane.

Wzmocnienie dobrych cech oprogramowania jako podstawy do długotrwałego użytkowania.

Przeanalizuj dobre i złe cechy oprogramowania konkurencji.

Aby odkryć nowe sposoby poprawy wydajności i funkcji.

Oryginalny twórca nie jest w stanie lub nie chce realizować dodatkowych funkcji.

Zastąpić przestarzałe komputery, aby uzyskać bardziej nowoczesne, często tańsze systemy.

Aspekt kosztów/korzyści Inżynieria odwrotna

Inżynieria odwrotna umożliwia powielanie istniejącego oprogramowania poprzez analizę (ekranowych) interfejsów, zachowania i innych właściwości. Te następnie stają się wymagania dla duplikatu. Wcześniej potrzebujemy aplikacji analiza cyklu życia i przeprowadzić analizę kosztów i korzyści, aby uzasadnić projekt inżynierii odwrotnej. Inżynieria odwrotna jest zwykle opłacalna tylko wtedy, gdy oprogramowanie odzwierciedla wysoką inwestycję lub generuje wysokie przychody. Ponadto stosujemy inżynierię wsteczną tylko wtedy, gdy oprogramowanie jest absolutnie wymagane i ma krytyczne znaczenie biznesowe.

Prawna strona inżynierii odwrotnej

Załóżmy, że oferujemy oprogramowanie zgodnie z modelem SaaS. Co się stanie, jeśli nasz sprzedawca zdecyduje się na inżynierię wsteczną naszego oprogramowania, aby móc uruchomić konkurencyjną usługę? A co, jeśli nigdy nie podpisaliśmy umowy z tym sprzedawcą? Istnieje tylko ustna umowa o poufności i prawach dotyczących oprogramowania.

Chociaż sprzedawca nie ma dostępu do kodu źródłowego, ma uprawnienia administratora na najwyższym poziomie, a zatem szerszy wgląd w strukturę, funkcjonalność i strukturę oprogramowania.

Dzięki postępowaniu sądowemu odkryjemy, że takie kwestie stanowią ochronę Własności Intelektualnej i tajemnic handlowych. Sędzia dokonał rozróżnienia między kodem źródłowym oprogramowania (który może być tajemnicą handlową) a działaniem i „wyglądem i działaniem” oprogramowania. Nie możemy chronić tych ostatnich jako tajemnic handlowych, ponieważ te właściwości są łatwo rozpoznawalne dla każdego użytkownika. Jeśli jednak nie zawarliśmy umowy o zachowaniu poufności, sędzia odrzuci nasze roszczenie. Ale czy możemy, jako pierwotny dostawca SaaS, udowodnić, że wykonano inżynierię odwrotną?

Jasne pisemne umowy są zawsze lepsze od umów uścisk dłoni i ustnych umów o zachowaniu poufności.

Ryzyko związane z implementacjami On Premise

Zdeterminowany inżynier oprogramowania może wykonać inżynierię wsteczną dowolnego oprogramowania na lokalnych serwerach. Sztuczka polega na tym, aby było to tak trudne, że nie warto próbować.

Edytor programów

Jeśli otworzymy skompilowany program w edytorze, zobaczymy, że jest nieczytelny. Są to dane binarne pliku wykonywalnego. Sztuka czytania i pisania tego rodzaju kodu została w dużej mierze utracona, ponieważ każdy pisze w czytelnym dla człowieka języku programowania (takim jak C, Java, PHP itp.).

Próba dowiedzenia się, co robi program po prostu patrząc na wynik (tzw. testowanie czarnoskrzynkowe) nie jest dobrą praktyką w inżynierii odwrotnej. Oprogramowanie może być nieskończenie złożone i nie ma gwarancji, że program będzie działał tak samo we wszystkich środowiskach.

Użyj Debuggera

Inny narzędzie dla środowiska lokalnego to dobry debugger. Praktycznie wszystkie systemy operacyjne obsługują pewien stopień debugowania. Podczas debugowania oprogramowania debugger przejmuje pełną kontrolę nad aplikacją. Dzięki debuggerowi możemy w każdej chwili zobaczyć, co jest w zmiennych iw przestrzeni pamięci oraz jaki kod programu jest wykonywany. Debuger może losowo uruchomić lub wstrzymać program, zmienić dane lub ustawić go na wstrzymanie, jeśli zostaną spełnione określone warunki.

Na przykład za pomocą debuggera możemy przyjrzeć się wywołaniom API. Zawsze, gdy oprogramowanie chce zapisać dane z pamięci na dysk, uzyskać dostęp do Internetu, wydrukować coś lub zrobić coś innego, można to znaleźć za pomocą debugera.

Chroń kod w chmurze

Istnieje kilka powodów, dla których warto chronić kod źródłowy aplikacji SaaS. Nowoczesne aplikacje są wynikiem kosztownych procesów rozwojowych i musimy je chronić przed konkurencją. Oprócz czynnika ekonomicznego jest to również kwestia bezpieczeństwa. hakerzy szukaj kodu źródłowego, jeśli chcesz ominąć proces uwierzytelniania.

Ochrona przed inżynierią wsteczną nie jest problemem całkowicie wykonalnym, ale problemem możliwym do rozwiązania. Atakującym zawsze pojawia się ważne pytanie: „Czy wysiłek, który muszę zrobić, jest wystarczający w porównaniu z zyskiem, który z tego uzyskam?” Ważne jest, aby jak najbardziej spowolnić napastnika, najlepiej, aby tak nie uważał sprawa biznesowa i nie jest to warte wysiłku. Istnieje kilka rozwiązań inżynierii odwrotnej, z których może korzystać programista, z których najważniejsze jest zaciemnianie.

Obfuscators

Zaciemniacze przekształcają doskonały, czytelny dla człowieka kod źródłowy w format, który jest trudny do odczytania. Kod źródłowy pozostaje w 100% poprawny pod względem składniowym i semantycznym. Ta strategia skutkuje bardzo trudnym do odczytania kodem źródłowym. Istnieje jednak mankament, jeśli oprogramowanie korzysta z publicznych API, komunikacja ta nie jest szyfrowana. Może to zająć trochę czasu, ale haker w końcu się wydostanie. Należy zauważyć, że zajmuje to ogromną ilość czasu i wymaga dużego wglądu w zaszyfrowany kod źródłowy.

Straż robocza

Strażnicy czasu pracy to części kod źródłowy które zostały umieszczone w strategicznych miejscach. Sprawdzają one środowisko wykonawcze. Niektóre typowe kontrole, które strażnicy mogą wykonać, to:

Czy oprogramowanie działa na urządzeniu zbiegającym lub jailbreak?

Weryfikacja źródła, sprawdź, czy manipulowano źródłami?

Czy istnieje debugger?

Strażnicy mogą zamknąć oprogramowanie, jeśli jedna z tych kontroli zawiera nieprawidłowość.

Szyfrowanie dotyczące bieżącego użycia

Szyfruj moduły, których obecnie nie używamy.

Odszyfrowuje moduły, gdy ładujemy je do użycia.

Jest to jednak uważane za coś dla ekspertów, ponieważ nie jest to łatwe do pomyślnego wdrożenia.

Powinno być jasne, że kod zabezpieczający to bardzo poważne i ważne zadanie. To musi być standardowy krok w cyklu wydawniczym.

HAL, środowisko inżynierii odwrotnej dla cyfrowych układów elektronicznych

HAL Jest to zintegrowane środowisko do analizy listy cyfrowych układów elektronicznychjest to kompleksowe ramy inżynierii odwrotnej i manipulacji dla list sieci na poziomie drzwi, które koncentrują się na wydajności, skalowalności i przenośności. HAL jest wyposażony w system wtyczek completo co pozwala na wprowadzenie dowolnych funkcjonalności w jądrze.

Ciekawe przez HAL polega na tym, że pozwala zobaczyć i przeanalizować obwód w GUI i manipulować nim za pomocą skryptów Pythona. W skryptach można korzystać z dołączonej „standardowej biblioteki” funkcji, które implementują operacje teorii grafów, przydatnych w inżynierii odwrotnej cyfrowych układów elektronicznych (przy użyciu tych funkcji można heurystycznie wykrywać różne wzorce projektowe i usuwać proste zaciemnienia za pomocą skryptu w wielu wierszach) .

Biblioteka zawiera również zajęcia z zarządzania projektami w IDE, które można wykorzystać podczas opracowywania wtyczek do analizy i kontroli połączeń. Parsery są dostępne dla języków opisu sprzętu VHDL i Verilog.

To środowisko jest rozwijane przez kilka niemieckich uniwersytetów, napisany w C ++, Qt i Python i wydany na licencji MIT.

Z jego głównych cech wyróżniają się następujące:

Ukierunkowana naturalna graficzna reprezentacja pozycji listy sieci i ich powiązań.

Obsługa niestandardowych bibliotek drzwi.

Wysoka wydajność dzięki zoptymalizowanemu jądru C ++

Modułowość - pisz własne wtyczki C ++ do wydajnej analizy i manipulacji listą sieci (na przykład przy użyciu algorytmów graficznych)

Bogaty w funkcje graficzny interfejs użytkownika, który umożliwia wizualną kontrolę listy sieci i interaktywną analizę

Wbudowana powłoka Pythona do eksploracyjnej interakcji z elementami listy sieci i do interakcji z wtyczkami z GUI

Informacje o HAL w wersji 2.0.0

Teraz to środowisko jest w wersji 2.0.0 w którym Poprawiono analizatory VHDL i Verilog, wraz z systemem kompilacji CMake, który został zaktualizowany w celu używania konfiguracji opartych na celach.

również podkreśla się, że dodano obsługę hierarchizacji i modularyzacji, a także dodatkowy widok izolacji i nowy system projektowania.

Z innych zmian wspomniane w nowej wersji:

Zmiany w systemie bibliotek drzwi

BDD zastąpiono funkcjami boolowskimi

Główne zmiany w wewnętrznej reprezentacji typów bramek

Umożliwia rozróżnienie między LUTami, przerzutnikami, zatrzaskami i kombinowanymi typami bramek

W zatrzaskach i przerzutnikach można teraz określić specjalne sekwencyjne wejścia, takie jak włączanie, zegar, konfiguracja i resetowanie.

Biblioteki bramek JSON zastąpione plikami wolności

Uproszczony system wtyczek

W zestawie biblioteka Igraph

Główny przegląd GUI

Jak zainstalować HAL na Ubuntu i pochodnych?

Dla tych, którzy są zainteresowani zainstalowaniem tej struktury inżynierii odwrotnej dla obwodów elektronicznych, mogą to zrobić, postępując zgodnie z instrukcjami które udostępniamy poniżej.

HAL można zainstalować na dwa sposoby w Ubuntu i pochodnych, pierwsza wspiera nas z repozytorium wniosku (Dotyczy tylko Ubuntu 18.04).

to możemy go dodać do systemu za pomocą terminala (Możesz go otworzyć za pomocą klawiszy skrótu Ctrl + Alt + T) iw nim wpiszemy następujące polecenia.

Najpierw dodamy z repozytorium:

sudo add-apt-repository ppa:sebastian-wallat/hal

Aktualizujemy pakiety i listę repozytoriów o:

sudo apt-get update

I przystępujemy do instalacji aplikacji w naszym systemie, wpisując następujące polecenie:

sudo apt install hal-reverse

Inną metodą instalacji jest kompilacja aplikacji w systemie. W tym celu musimy pobrać kod HAL za pomocą terminala.

Najpierw wpiszemy:

git clone && cd hal

Teraz zamierzamy zainstalować niezbędne zależności:

./install_dependencies.sh

I przystępujemy do kompilacji kodu za pomocą:

mkdir build && cd build cmake .. make

Po zakończeniu kompilacji przystępujemy do instalacji za pomocą:

make install

W końcu może zapoznać się z dokumentacją i innymi informacjami o HAL W poniższym linku.

INŻYNIERIA ODWROTNA OPROGRAMOWANIA

disassembler( minIDAPro)

debugger( minOllyDbg)

hax editor

resource editor

"złamanie" prostej aplikacji

analizy assemblera i prostego patchowania,

rozpoznania struktur języka wysokiego poziomu,

problematyki formatu Portable Executable( PE)

pamięć procesu oraz monitorowanie jego aktywności,

Unpackingu.

Szkolenie prowadzone jest przez dwóch inżynierów dla maksymalnie ośmiu uczestników.

Osoby szkolone wyposażane są w wirtualne maszyny zawierające środowisko i narzedzia potrzebne do odbycia szkolenia. Maszyny wykonane są w dwóch wersjach: VMWare Workstation/Player oraz VirtualBox. Sugerujemy, by uczestnicy pracowali na swoim sprzęcie z wirtualnymi maszynami. Wtedy ma się gotowe narzędzie do pracy w przyszłości. W trakcie szkolenia uczestnik dostaje programy do złamania jak mu się uda to dostaje wyższy dostęp na forum, do którego po szkoleniu ma dostęp. .

Szkolenie ma charakter wprowadzający do zagadnień analizy malware - złośliwego oprogramowania.Szkolenie standardowo trwa 3 dni (9:00 – 17:00).Może to być także szkolenie pięciodniowe łączące dwa zagadnienia: inżynierii odwrotnej (reverse engineering) oraz analizy złośliwego oprogramowania (malware)Terminy umawiane są z miesięcznym wyprzedzeniem.

Jarosław Kułak
Jarosław Kułak

Leave a Comment