Przepełnienie bufora (program Bufor): Demonstruje jak możliwe jest przepełnienie bufora przy uzyciu prostej funkjci strcpy. Program zawiesi się ponieważ przepelnienie bufora jest tak duze, że znacznie przekracza jego rozmiar, nadpisujac adres powrotny i zamazując obszar poza ramką stosu. Plik: bufordobryporgramKKK.cpp Po skompilowaniu zmienna "z" i 6-elementowa tablica char zostają odłożone na stos. Przepelniajac bufor (tj. po przepelnieniu tab[6] funkcją strcpy) mozemy pokazac, że dane w zmiennej "z" o wartości 666; zostają nadpisane. Program nie zgłosi błędu, bo wszyskto dzieje sie w obszarze ramki stosu. Jak sie bronic na poziomnie kodu? Funkcja strncpy Funkcja strncpy pozwala zabezpieczyć się przed przepelnieniem bufora. Pobiera rozmiar tablicy do ktorej chcemy kopiowac dane i ogranicza ilość zapisanych danych do tego rozmiaru. ---------------- Prezentowane programy: BinScope Binary Analyzer - darmowe oprogramowanie microsoftowe - analizuje aplikację pod względem bezpieczeństwa. Hex Workshop - edytor plików binarnych, pozwala wyznaczać sumy kontrolne plików wg różnych algorytmów, porównuje pliki, umożliwia wyszukiwanie wzorca wg różnych kryteriów (traktowany jako tekst Unicode, String albo jako liczba całkowitoliczbowa). Free Hex Editor Neo - darmowy edytor plików binarnych. Resource Hacker - darmowy program do podglądu i edycji zasobów pliku wykonywalnego(kursory, grupy kursorów, bitmap, tablice stringów, menu, okna dialogowe, skróty klawiszowe). Po dokonaniu edycji zasobów wybieramy opcję Compile Script, zaś zmodyfikowany plik można zapisać od razu pod postacią *.exe (nie ma konieczności zapisywania oddzielnego pliku *.res). Program kompresujący pliki wykonywalne - upx. Użycie: upx -n , gdzie n należy do zbioru [1..9] i oznacza stopień kompresji. Dekompresja - opcja -d. Debuger - Olly Debug Prezentacja działania programu z użyciem aplikacji z kluczem: Po otwarciu programu, który chcemy poddać analizie - w oknie CPU klikamy prawym przyciskiem i wybieramy opcję: Search for All intermodular calls - w celu wyszukania wszystkich wywołań funkcji spoza modułu aplikacji (funkcje systemowe). W oknie z wywołaniami spoza modułu widzimy dwa, nie na pierwszy rzut oka, wywołania funkcji DestroyWindow. Przy ograniczonej wiedzy na temat włamań, podołamy się na empiryczne poznanie. Wybieramy pierwsze wywołanie funkcji Destroy Window (dwa razy klikamy) i domniemamy, iż przez niefrasobliwość programisty, ostatni test, przed rozpatrywanym wywołaniem, odnosi się właśnie do zamknięcia okna. Interesuje nas działanie po teście: 00401C53 |. 85C9 TEST ECX,ECX mianowicie: 00401C55 |. 74 19 JE SHORT Project1.00401C70 Jeśli wynikiem testu nie będzie zero (flaga ZF będzie równa 0), skaczemy w odpowiednie miejsce aplikacji, w przeciwnym wypadku niechybnie zakończy się program. Dlatego też zmieniamy instrukcję skoku na inny rodzaj skoku - JMP - skok bezwarunkowy: 00401C55 EB 19 JMP SHORT Project1.00401C70 w wyniku czego, zawsze będziemy omijać procedurę zakończenia programu. Aby zapisać zmiany można posłużyć się dodatkowymi opcjami debugera (copy to executable) lub wyszukać odpowiednie offsety w edytorze plików binarnych. Prezentowane programy: BinScope Binary Analyzer - darmowe oprogramowanie microsoftowe - analizuje aplikację pod względem bezpieczeństwa. Hex Workshop - edytor plików binarnych, pozwala wyznaczać sumy kontrolne plików wg różnych algorytmów, porównuje pliki, umożliwa wyszukiwanie wzorca wg różnych kryteriów (traktowany jako tekst Unicode, String albo jako liczba całkowitoliczbowa). Free Hex Editor Neo - darmowy edytor plików binarnych. Resource Hacker - darmowy program do podglądu i edycji zasobów pliku wykonywalnego(kursory, grupy kursorów, bitmap, tablice stringów, menu, okna dialogowe, skróty klawiszowe). Po dokonaniu edycji zasobów wybieramy opcję Compile Script, zaś zmodyfikowany plik można zapisać od razu pod postacią *.exe (nie ma konieczności zapisywania oddzielnego pliku *.res). Program kompresujący pliki wykonywalne - upx. Użycie: upx -n , gdzie n należy do zbioru [1..9] i oznacza stopień kompresji. Dekompresja - opcja -d. Debuger - Olly Debug Prezentacja działania programu z użyciem aplikacji z kluczem: Po otwarciu programu, który chcemy poddać analizie - w oknie CPU klikamy prawym przyciskiem i wybieramy opcję: Search for All intermodular calls - w celu wyszukania wszystkich wywołań funkcji spoza modułu aplikacji (funkcje systemowe). W oknie z wywołaniami spoza modułu widzimy dwa, nie na pierwszy rzut oka, wywołania funkcji DestroyWindow. Przy ograniczonej wiedzy na temat włamań, podołamy się na empiryczne poznanie. Wybieramy pierwsze wywołanie funkcji Destroy Window (dwa razy klikamy) i domniemamy, iż przez niefrasobliwość programisty, ostatni test, przed rozpatrywanym wywołaniem, odnosi się właśnie do zamknięcia okna. Interesuje nas działanie po teście: 00401C53 |. 85C9 TEST ECX,ECX mianowicie: 00401C55 |. 74 19 JE SHORT Project1.00401C70 Jeśli wynikiem testu nie będzie zero (flaga ZF będzie równa 0), skaczemy w odpowiednie miejsce aplikacji, w przeciwnym wypadku niechybnie zakończy się program. Dlatego też zmieniamy instrukcję skoku na inny rodzaj skoku - JMP - skok bezwarunkowy: 00401C55 EB 19 JMP SHORT Project1.00401C70 w wyniku czego, zawsze będziemy omijać procedurę zakończenia programu. Aby zapisać zmiany można posłużyć się dodatkowymi opcjami debugera (copy to executable) lub wyszukać odpowiednie offsety w edytorze plików binarnych. Prezentowane programy: BinScope Binary Analyzer - darmowe oprogramowanie microsoftowe - analizuje aplikację pod względem bezpieczeństwa. Hex Workshop - edytor plików binarnych, pozwala wyznaczać sumy kontrolne plików wg różnych algorytmów, porównuje pliki, umożliwa wyszukiwanie wzorca wg różnych kryteriów (traktowany jako tekst Unicode, String albo jako liczba całkowitoliczbowa). Free Hex Editor Neo - darmowy edytor plików binarnych. Resource Hacker - darmowy program do podglądu i edycji zasobów pliku wykonywalnego(kursory, grupy kursorów, bitmap, tablice stringów, menu, okna dialogowe, skróty klawiszowe). Po dokonaniu edycji zasobów wybieramy opcję Compile Script, zaś zmodyfikowany plik można zapisać od razu pod postacią *.exe (nie ma konieczności zapisywania oddzielnego pliku *.res). Program kompresujący pliki wykonywalne - upx. Użycie: upx -n , gdzie n należy do zbioru [1..9] i oznacza stopień kompresji. Dekompresja - opcja -d. Debuger - Olly Debug Prezentacja działania programu z użyciem aplikacji z kluczem: Po otwarciu programu, który chcemy poddać analizie - w oknie CPU klikamy prawym przyciskiem i wybieramy opcję: Search for All intermodular calls - w celu wyszukania wszystkich wywołań funkcji spoza modułu aplikacji (funkcje systemowe). W oknie z wywołaniami spoza modułu widzimy dwa, nie na pierwszy rzut oka, wywołania funkcji DestroyWindow. Przy ograniczonej wiedzy na temat włamań, podołamy się na empiryczne poznanie. Wybieramy pierwsze wywołanie funkcji Destroy Window (dwa razy klikamy) i domniemamy, iż przez niefrasobliwość programisty, ostatni test, przed rozpatrywanym wywołaniem, odnosi się właśnie do zamknięcia okna. Interesuje nas działanie po teście: 00401C53 |. 85C9 TEST ECX,ECX mianowicie: 00401C55 |. 74 19 JE SHORT Project1.00401C70 Jeśli wynikiem testu nie będzie zero (flaga ZF będzie równa 0), skaczemy w odpowiednie miejsce aplikacji, w przeciwnym wypadku niechybnie zakończy się program. Dlatego też zmieniamy instrukcję skoku na inny rodzaj skoku - JMP - skok bezwarunkowy: 00401C55 EB 19 JMP SHORT Project1.00401C70 w wyniku czego, zawsze będziemy omijać procedurę zakończenia programu. Aby zapisać zmiany można posłużyć się dodatkowymi opcjami debugera (copy to executable) lub wyszukać odpowiednie offsety w edytorze plików binarnych. AsProtect - komercyjny program służący do kompleksowego zabezpieczania plików wykonywalnych - ochrona hasłem, przed debugerami, przed zmianami (kontrola integralności - suma kontrolna), ustawienie wersji trial badanego programu. Program Integralność: -program szyfruje zawartość pliku ok2.txt kluczem, będącym wzorcową sumą kontrolną wyznaczoną algorytmem MD5 niezmodyfikowanego pliku wzorcowego ok.txt. Następnie wyznacza sumę kontrolną pliku ok.txt i porównuje z wzorcowym kluczem. Plik ok2.txt zostanie odszyfrowany otrzymaną sumą kontrolną. -jeśli zmienimy zawartość wzorcowego pliku ok.txt, to nowa suma kontrolna będzie niezgodna z kluczem wzorcowym, będącym poprawną sumą kontrolną pliku przed modyfikacjami. Suma kontrolna jest jednocześnie kluczem, który pozwala nam odszyfrować zawartość pliku ok2.txt (za pomocą algorytmu RC4). Zmiana sumy kontrolnej da nam nieporpawny klucz - więc nie otrzymamy poprawnej zawartości pliku ok2.txt. Program IntegralnośćKodu: -program działa na bazie programu integralność. Program program.exe wykonuje program odszyfruj.exe, który deszyfruje program Project.exe sygnaturą programu Project1.exe. Jeśli zmieniono zawartość plików Project.exe lub Project1.exe, program się nie wykona. Przy poprawnym wykonaniu, na zakończenie, program Project.exe jest szyfrowany sygnaturą programu Project1.exe -Plik wykonywalny Project.exe jest szyfrowany za pomocą klucza wzorcowego(algorytm RC4 - klucz - sygnatura programu Projekt1.exe). Zmodyfikowanie choć jednego bitu programu Project1.exe nie pozwoli nam na uzyskanie poprawnego klucza, zaś jakakolwiek zmiana programu zaszyfrowanego nie pozwoli nam otrzymać poprawny zdeszyfrowany kod. Program IntegralnośćZaciemnianie: -na bazie programu Integralność - skorzystanie z rozwiązania (makra preprocesora) omówionego w prezentacji.