Programowanie sieciowe

Luki w warunkach wyścigu w aplikacjach internetowych

Luki w warunkach wyścigu w aplikacjach internetowych
Gdy aplikacja internetowa skonfigurowana do zarządzania funkcjami w ustalonej kolejności jest wymagana do jednoczesnego wykonywania dwóch lub więcej operacji, następuje atak w warunkach wyścigu. Ta technika wykorzystuje opóźnienie czasowe między wprowadzeniem usługi a wystąpieniem kontroli bezpieczeństwa. Atak ten może zostać przeprowadzony na dwa sposoby, w oparciu o aplikacje wielowątkowe: wtargnięcie wykonane przez niezaufane procesy oraz wtargnięcie wykonane przez zaufany proces, który mógłby mieć takie same i równe prawa.

Różne procesy mogą wchodzić ze sobą w interakcje bez odpowiednich środków. Ataki te są również znane jako ataki typu Time of Check, ataki typu Time of Use lub ataki TOC/TOU. Luki w warunkach wyścigu zdarzają się tam przede wszystkim z powodu podstawowych błędów programistycznych, które zwykle tworzą programiści, a te awarie okazały się kosztowne. Złośliwe istoty wykorzystywały warunki rasowe do wielu złych celów, m.in.mi., od otrzymywania darmowych kuponów na rabowanie pieniędzy z kont internetowych i firm inwestycyjnych.

Załóżmy, że dwa równoległe wątki wykonawcze próbują podnieść wartość zmiennej globalnej o 5. Ostatecznie więc zmienna globalna miałaby wartość 10. Jeśli jednak wszystkie wątki działają jednocześnie, wykonanie może być błędne bez blokad zasobów lub synchronizacji. Kiedy pierwszy wątek wykonuje pewne manipulacje na tej zmiennej globalnej, drugi wątek odczytuje ją i zaczyna wykonywać inne manipulacje. W takim przypadku ostateczna wartość nie byłaby taka, jak oczekiwano.

Dzieje się tak, ponieważ efekt zakończenia jednego wątku zależy od wyniku drugiego. Gdy dwa wątki są wykonywane jednocześnie, wystąpią niezamierzone konsekwencje.

Zakres ataków na warunki rasowe:

Wyobraź sobie, że cokolwiek bardziej krytycznego jest wykonywane przez dwa wątki powyższego przykładu, na przykład wymiana pieniędzy między kontami bankowymi. Aby poprawnie wysłać pieniądze, program będzie musiał wykonać te zadania w tej kolejności; Sprawdź, czy na koncie nadawcy jest wystarczające saldo, dodaj pieniądze na konto odbiorcy, a następnie odejmij z konta nadawcy. Ale jeśli jednocześnie prześlesz dwa żądania, możesz być w stanie wywołać warunek, w którym zmienia się kolejność wykonywania wątków. W takiej sytuacji otrzymasz inną kwotę niż oczekiwano.

Luka dotycząca warunków wyścigu została wykryta przez Egora Homakova na stronie Starbucks. Odkrył sposób na stworzenie nieskończonej kwoty kredytu na kuponach upominkowych Starbucks za darmo, korzystając z różnych przeglądarek z różnymi plikami cookie.

Znaczący atak Meltdown jest przykładem podatności na warunki wyścigu. W ataku typu „meltdown” słabość jest wyzwalana przez równoległe przetwarzanie pobierania danych z pamięci i uwierzytelnianie, czy użytkownik może uzyskać dostęp do pamięci. Ta usterka umożliwia narzędziu uniknięcie standardowych kontroli uprawnień, które oddzielają mechanizm ataku od dostępu do danych systemu operacyjnego. Ta luka powoduje, że każdy nieautoryzowany proces może przeglądać dane i informacje z dowolnego innego adresu związanego z aktualnym stanem postępu w pamięci. W procesie nieprawidłowego wykonania informacje z niezatwierdzonego adresu często są szybko umieszczane w pamięci podręcznej procesora, skąd można je odzyskać.

Rzeczywiste scenariusze ataków:

Wysyłając liczne żądania do serwera internetowego w sposób ciągły, możesz wyszukiwać i manipulować warunkami wyścigu w aplikacjach internetowych. Jeśli chcesz sprawdzić, czy możesz wypłacić więcej pieniędzy niż masz na swoim koncie bankowym, korzystając z funkcji curl, możesz jednocześnie wysłać kilka żądań wypłaty na serwer.

zwijanie (wypłata 50000) & (wypłata 50000) & (wypłata 50000) & (wypłata 50000) & (wypłata 50000) & (wypłata 50000)

Im więcej żądań złożysz w krótkim czasie, tym większe są szanse, że twój atak zadziała.

Co więcej, jeśli wyślesz asynchroniczne prośby o uzupełnienie, będziesz kilkakrotnie śledzić użytkownika zamiast wysyłać odpowiedź o błędzie. ja.mi., jeśli dodasz fałszywy nagłówek zawierający %s podczas upuszczania żądań za pomocą intruza turbo i wklej następujący kod Pythona:

def followReqs(cel, listy słów):
silnik = RequestEngine(endpoint=cel.punkt końcowy,
współbieżnePołączenia=40,
żądania na połączenie=100,
potok=Fałsz
)
dla i w zakresie(40):
silnik.kolejka (cel.zad, str(i), bramka='sprawdź')
silnik.openGate('sprawdź')
silnik.ukończone (limit czasu=60)
def responseHandle(req, interesujące):
stół.dodaj(wymagane)

Zobaczysz przycisk ataku. Po naciśnięciu tego Turbo Intruder wysyła 40 zapytań i skanuje kody statusu. Jeśli zobaczysz wiele odpowiedzi ze statusem 201 Wygenerowano, co oznacza, że ​​wielokrotnie śledziłeś daną osobę.

Istnieje luka w sytuacji wyścigu, w której można uzyskać dostęp do wielu konsol oferowanych na darmowych kontach. Większość witryn oferujących darmowe konsole ma darmowe konta, pakiety standardowe i premium. Darmowe konta zapewniają tylko 2 lub 3 konsole na użytkownika. Aby przełamać ten limit i korzystać z nieograniczonej liczby konsol, należy wielokrotnie włamywać się do żądania GET, używając ładunku NULL, np. 100 lub 200. A następnie ręcznie usuń dowolną konsolę z interfejsu użytkownika, gdy wątki są uruchomione.

Wniosek:

W celu podważenia kontroli dostępu uwzględniane są warunki wyścigu. Każdy program zależny od mechanizmów kontroli dostępu może być podatny na ataki. W większości przypadków na stronach instytucji finansowych hakerzy wykorzystują warunki wyścigu. Ponieważ może to prowadzić do nieograniczonych korzyści finansowych dla hakera, jeśli zostanie wykryty stan wyścigu na istotnej funkcji, takiej jak wypłata gotówki, przelew pieniędzy lub płatność kartą kredytową. Platformy handlu elektronicznego, gry wideo i usługi głosowania online to inne technologie wysokiego ryzyka. Wdrożenie bezpiecznej współbieżności to sekret unikania wyścigów. Możesz też użyć blokad zasobów. Będzie również wbudowana funkcja blokowania dla języków programowania z możliwością współbieżności, która pomaga zapobiegać takim warunkom. Ponadto, zgodnie ze standardami bezpiecznego kodowania, i.mi., koncepcja najmniejszych uprawnień i kod audytu zmniejszą szansę na naruszenie przez program.

Gry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
Gry OpenTTD Tutorial
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
Gry SuperTuxKart for Linux
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...