Wprowadzenie do luk integer Overflow i underflows
luki Integer overflow i underflow są uważane za ósmą najniebezpieczniejszą lukę na liście Top 25 Top 2019 Common Weakness Enumeration (CWE). Tego typu luki są tworzone przez niewłaściwe użycie typów zmiennych i mogą być wykorzystywane do ominięcia zabezpieczeń przed innymi typami luk, takimi jak przepełnienia buforów.
typy i rozmiary zmiennych
każdy język programowania ma pojęcie o różnych typach zmiennych. Znak, który może zawierać dane tekstowe, bardzo różni się od liczby całkowitej lub liczby zmiennoprzecinkowej. Jednak poza tymi ogólnymi typami są dodatkowe rozróżnienia między zmiennymi, a te rozróżnienia są tym, co sprawia, że luki w zakresie przepełnienia i niedopełnienia są możliwe.
większość języków programowania ma koncepcję liczb całkowitych signed i unsigned. Liczba całkowita ze znakiem (jak sama nazwa wskazuje) ma znak, pozwalający na przechowywanie zarówno wartości dodatnich, jak i ujemnych. Z drugiej strony, niepodpisana zmienna może przechowywać tylko liczby dodatnie.
jak pokazano na powyższym obrazku, zmienne sygnowane i niepodpisane o określonym rozmiarze są zapisywane identycznie w pamięci komputera. Jedyną różnicą jest sposób interpretacji wartości. W wartości podpisanej pierwsza oznacza liczbę ujemną, podczas gdy w wartości niepodpisanej jedna w pierwszym miejscu oznacza po prostu dużą liczbę.
innym głównym rozróżnieniem pomiędzy różnymi typami zmiennych” integer ” jest rozmiar wartości, którą mogą zawierać. Języki programowania mają pojęcia short, integer, long I beyond, z których każdy określa rozmiar przestrzeni pamięci przydzielonej dla tej zmiennej i zakres wartości, które może zawierać.
przepełnienia i niedociągnięcia liczby całkowitej
luki w przepełnieniach i niedociągnięciach liczby całkowitej sprowadzają się do niebezpiecznej konwersji między zmiennymi podpisanymi i niepodpisanymi oraz typami zmiennych całkowitych o różnych rozmiarach. Ogólnie dozwolone jest konwertowanie między tymi różnymi typami i, w wielu przypadkach, (Czytaj więcej…)