30 Янв, 2023

Переполнение целых чисел

Vulnerability Assessment as a Service (VAaaS)

Tests systems and applications for vulnerabilities to address weaknesses.

Переполнение целых чисел - это уязвимость в программном обеспечении, при которой вычисление числового значения, такого как индекс массива, переходит от максимального значения, которое может быть сохранено в целочисленной переменной, к минимальному значению, которое может быть сохранено, вместо того, чтобы останавливаться на максимальном значении. Это может привести к неожиданному и потенциально вредоносному поведению, такому как запись в непреднамеренные ячейки памяти или выполнение произвольного кода. Эта уязвимость может быть вызвана неявным предположением в коде, что целочисленные значения всегда будут вписываться в определенный диапазон, или неправильной проверкой условий арифметического переполнения.

Пример уязвимого кода на разных языках программирования:

в C:

				
					#include <stdio.h>

int main()
{
   int x = 2147483647;
   int y = 2147483647;
   int z = x * y;
   printf("%d\n", z);
   return 0;
}
				
			


В этом примере результатом x * y должно быть отрицательное число, но из-за переполнения целых чисел результат неверен и создается уязвимость.

в Java:

				
					public class IntegerOverflow {
   public static void main(String[] args) {
      int x = Integer.MAX_VALUE;
      int y = Integer.MAX_VALUE;
      int z = x * y;
      System.out.println(z);
   }
}
				
			


В этом примере произведение целых чисел.MAX_VALUE и целое число.Значение MAX_VALUE слишком велико для хранения в 32-разрядном целом числе и приведет к переполнению, создавая уязвимость.

в Python:

				
					def overflow_example(a, b):
    return a * b

print(overflow_example(2147483647, 2147483647))
				
			


В этом примере функция overflow_example принимает два целых входных значения a и b и возвращает их произведение. Однако произведение 2147483647 и 2147483647 слишком велико, чтобы быть сохраненным в 32-разрядном целом числе, и приведет к переполнению.

Примеры использования переполнения целых чисел

Примером использования уязвимости переполнения целых чисел может быть случай, когда программа выполняет арифметические операции с целочисленными типами данных. Если результат операции превышает максимальный размер типа данных, происходит переполнение, в результате чего значение переносится. Злоумышленник может манипулировать входными данными для операции, чтобы вызвать переполнение, что приведет к неожиданному поведению программы. Это может быть использовано для компрометации системы путем внесения вредоносных данных в память или перенаправления выполнения программы. Распространенные языки программирования, подверженные уязвимостям переполнения целых чисел, включают C, C ++, Java и Python.

Вот несколько примеров использования уязвимостей переполнения целых чисел:

  1. Переполнение буфера: уязвимость с целочисленным переполнением может привести к атаке с переполнением буфера, когда злоумышленник переполняет буфер данными, превышающими его размер, что приводит к аварийному завершению работы программы или выполнению произвольного кода.

  2. Атака строки формата: уязвимость переполнения целых чисел также может быть использована для выполнения атаки строки формата, когда злоумышленник вводит специально созданную строку, которая приводит к уязвимости строки формата при вызове функции.

  3. Переполнение кучи: уязвимость с целочисленным переполнением может привести к атаке с переполнением кучи, когда злоумышленник переполняет выделенный в куче буфер, что приводит к переполнению буфера на основе кучи.

  4. Атака с усечением целых чисел: уязвимость переполнения целых чисел также может быть использована для выполнения атаки с усечением целых чисел, когда злоумышленник вводит большое значение, которое усекается, когда оно хранится в меньшем типе данных, что приводит к неожиданным результатам.

  5. Переполнение стека: уязвимость с целочисленным переполнением может привести к атаке с переполнением стека, когда злоумышленник переполняет выделенный в стеке буфер, что приводит к переполнению буфера на основе стека.

Методы повышения привилегий Переполнение целых чисел

В общем, повышение привилегий относится к процессу получения повышенных привилегий или доступа к ограниченным ресурсам в компьютерной системе. Что касается переполнения целых чисел, использование уязвимости потенциально может привести к повышению привилегий, если злоумышленник сможет манипулировать обрабатываемыми данными таким образом, чтобы получить контроль над системой или выполнить произвольный код с повышенными привилегиями. Некоторые распространенные методы использования уязвимостей переполнения целых чисел включают, среди прочего, переполнение буфера, переполнение буфера на основе стека и переполнение буфера на основе кучи. Однако точные методы и приемы, используемые для повышения привилегий, зависят от конкретных деталей уязвимости, целевой системы и доступных эксплойтов.

Вот несколько примеров того, как уязвимость переполнения целых чисел может быть использована для выполнения повышения привилегий:

  1. Переполнение двоичного файла Setuid: злоумышленник может использовать уязвимость переполнения целых чисел в двоичном файле setuid для переполнения буфера и выполнения произвольного кода с повышенными привилегиями.

  2. Повышение привилегий до уровня ядра: злоумышленник может использовать уязвимость переполнения целых чисел в компоненте уровня ядра для повышения своих привилегий до уровня ядра, что позволяет ему получать доступ к конфиденциальной информации и выполнять вредоносные действия.

  3. Повышение привилегий суперпользователя: злоумышленник может использовать уязвимость переполнения целых чисел для повышения своих привилегий до корневого уровня, предоставляя им полный контроль над системой.

  4. Повышение привилегий в сервисных демонах: злоумышленник может использовать уязвимость переполнения целых чисел в сервисном демоне для повышения своих привилегий, что позволяет им выполнять вредоносные действия с повышенными привилегиями.

  5. Повышение привилегий в веб-приложениях: злоумышленник может использовать уязвимость переполнения целых чисел в веб-приложении для повышения своих привилегий, что позволяет ему получать доступ к конфиденциальной информации и выполнять вредоносные действия.

Общая методология и контрольный список для тестирования на переполнение целых чисел

Методология:

1. Определите поля ввода в приложении или системе, которые могут вызвать переполнение целых чисел

2. Предоставьте тестовые входные данные, которые могут вызвать переполнение целых чисел, и проверьте, правильно ли система обрабатывает их

3. Понаблюдайте за поведением системы и проверьте, не происходит ли сбой, возвращает ли она неожиданные результаты или генерирует ошибки

4. Убедитесь, что система имеет надлежащую проверку границ и санитарную обработку, чтобы предотвратить возникновение условий переполнения

5. Если обнаружена уязвимость, проверьте, может ли она использоваться для вредоносных целей, таких как повышение привилегий, кража данных или отказ в обслуживании

Контрольный список:

Просмотрите исходный код, чтобы определить области, в которых используются целые числа

Проверьте, нет ли каких-либо арифметических операций, которые могут вызвать переполнение целых чисел

Проверьте, нет ли вычислений размера буфера, которые могут привести к переполнению целых чисел

Проверьте правильность входных данных, чтобы предотвратить использование переполнения целых чисел

Проверьте правильность обработки ошибок в коде, чтобы предотвратить использование переполнения целых чисел

Запустите код с помощью средства анализа кода для выявления любых уязвимостей переполнения целых чисел

Проводите ручное тестирование, включая ввод больших значений и мониторинг поведения переполнения

Запустите код в тестовой среде для проверки результатов анализа и тестирования.

Набор инструментов для использования переполнения целых чисел

  1. Fuzzing tools: эти инструменты генерируют случайные входные данные, чтобы попытаться выявить уязвимости в системе.

  2. Debuggers: Отладчики позволяют пошагово просматривать код, проверять переменные и определять области, в которых может возникнуть переполнение целых чисел.

  3. Exploitation frameworks: Эти платформы предоставляют предварительно упакованный код для использования уязвимостей переполнения целых чисел, что ускоряет и упрощает процесс эксплуатации. Примерами могут служить Metasploit, Core Impact и Canvas.

  4. Custom tools: Вы также можете написать свои собственные инструменты для автоматизации процесса использования уязвимостей переполнения целых чисел.

Средний балл CVSS по переполнению целых чисел

Средняя оценка уязвимости переполнения целых чисел по CVSS (Common Vulnerability Score System) зависит от конкретного случая и серьезности уязвимости. Как правило, уязвимости с переполнением целых чисел считаются высокосерьезными с оценкой CVSS в диапазоне от 7 до 10. Точная оценка будет зависеть от таких факторов, как влияние на конфиденциальность, целостность и доступность, а также от простоты использования и вероятности успешного использования.

Общее перечисление слабых мест (CWE)

Общее перечисление слабых мест (CWE) - это список слабых мест программного обеспечения, поддерживаемый корпорацией MITRE.

Вот список записей CWE, связанных с уязвимостью переполнения целых чисел, с кратким описанием:

1. CWE-190: Переполнение или обтекание целого числа: когда программа выполняет арифметическую операцию, такую как сложение или умножение, результат может быть слишком большим, чтобы его можно было сохранить в используемом типе данных. Это может вызвать переполнение, когда результат оборачивается к отрицательному значению, или обтекание, когда результат превышает максимальное значение, которое может быть сохранено в типе данных. Это может привести к неожиданному и непреднамеренному поведению, такому как выполнение вредоносного кода или повреждение данных.

2. CWE-191: Неполный поток целых чисел: когда программа выполняет арифметическую операцию, такую как вычитание или деление, результат может быть слишком мал, чтобы его можно было сохранить в используемом типе данных. Это может привести к недостаточному потоку, когда результат оборачивается к большому положительному значению. Это также может привести к неожиданному и непреднамеренному поведению, такому как выполнение вредоносного кода или повреждение данных.

3. CWE-192: Ошибка расширения знака: когда программа преобразует подписанный тип данных в тип данных с расширенным диапазоном, например короткое целое число в длинное целое число, она может потерять самый значимый бит в процессе. Это может привести к тому, что неверное значение будет сохранено и использовано в последующих операциях, что может привести к неожиданному и непреднамеренному поведению.

4. CWE-193: однократная ошибка: когда программа предполагает, что в массиве на один элемент больше, чем в действительности, она может обращаться к памяти, которая находится за пределами конца массива, что приводит к переполнению. Это может привести к неожиданному и непреднамеренному поведению, такому как выполнение вредоносного кода или повреждение данных.

5. CWE-196: Ошибка целочисленного преобразования: когда программа выполняет преобразование типа из одного целочисленного типа в другой, например, короткое целое число в длинное целое число, новый тип может быть не в состоянии представить исходное значение. Это может привести к усечению или переносу значения, что может привести к неожиданному и непреднамеренному поведению, такому как выполнение вредоносного кода или повреждение данных.

Эксплойты переполнения целых чисел

Эксплойт переполнения целых чисел - это атака, которая использует ошибку переполнения при обработке приложением целочисленных значений, чтобы вызвать непреднамеренное поведение или сбой. Эта уязвимость может привести к целому ряду проблем безопасности, таких как выполнение кода, повреждение памяти и повышение привилегий. Процесс эксплуатации включает в себя создание и отправку вредоносных входных данных, которые приводят к переполнению целочисленного значения, что приводит к неожиданным результатам. Чтобы быть защищенным от уязвимостей, связанных с переполнением целых чисел, важно использовать правильные типы данных и обеспечить проверку входных данных и обработку ошибок. Другие методы смягчения последствий включают использование методов безопасного кодирования, проверки кода и инструментов статического анализа.

Вот несколько примеров эксплойтов, которые могут быть выполнены в результате уязвимости переполнения целых чисел:

  1. Переполнение буфера: злоумышленник может использовать уязвимость переполнения целых чисел для переполнения буфера и выполнения произвольного кода, который может быть использован для получения контроля над системой.

  2. Выполнение произвольного кода: злоумышленник может использовать уязвимость переполнения целых чисел для выполнения произвольного кода, который может быть использован для компрометации системы и кражи конфиденциальной информации.

  3. Раскрытие информации: злоумышленник может использовать уязвимость переполнения целых чисел для доступа к конфиденциальной информации, которая в противном случае была бы ему недоступна.

  4. Отказ в обслуживании (DoS): злоумышленник может использовать уязвимость переполнения целых чисел, чтобы вызвать сбой системы или ее недоступность, что приводит к атаке типа "отказ в обслуживании".

  5. Повышение привилегий: злоумышленник может использовать уязвимость переполнения целых чисел для повышения своих привилегий в системе, что позволяет ему получать доступ к конфиденциальной информации и выполнять вредоносные действия с повышенными привилегиями.

Практика в тестировании на переполнение целых чисел

1. Определите программное обеспечение, которое может быть уязвимо к переполнению целых чисел, например программы на C / C ++, которые используют целые числа для хранения размеров буфера.

2. Ознакомьтесь с конкретным языком программирования и его типами данных, особенно с целочисленными типами данных.

3. Напишите тестовые примеры для запуска условий переполнения целых чисел в программном обеспечении, таких как попытка сохранить значение, превышающее максимальное значение, которое может быть сохранено в целочисленном типе данных.

4. Используйте отладчик или другой инструмент для анализа состояния памяти и регистра программы при переполнении целого числа.

5. Убедитесь, что программа ведет себя должным образом, когда происходит переполнение целого числа, например, вызывая сбой или переполнение буфера.

6. Повторите эти шаги для разных целых чисел, типов данных и языков программирования, чтобы получить общее представление об уязвимостях переполнения целых чисел и о том, как их идентифицировать и использовать.

Для изучения переполнения целых чисел

Вот несколько советов и ресурсов, которые помогут вам изучить уязвимости переполнения целых чисел:

  1. Изучите основы компьютерной архитектуры и программирования: начните с глубокого понимания компьютерных систем и языков программирования.

  2. Читайте соответствующие книги и статьи: ищите ресурсы, в которых конкретно рассматриваются уязвимости с переполнением целых чисел, такие как “Взлом: искусство эксплуатации” Джона Эриксона и “Обращение вспять: секреты обратного проектирования” Эльдада Эйлама.

  3. Практикуйте кодирование: напишите код на разных языках программирования и поймите, как уязвимости переполнения целых чисел могут возникать в реальных приложениях.

  4. Участвуйте в онлайн-сообществах и форумах: Общайтесь с другими профессионалами и энтузиастами в этой области, участвуя в онлайн-форумах, дискуссионных группах и сообществах, посвященных компьютерной безопасности и методам эксплуатации.

  5. Посещайте конференции и семинары: Посещайте конференции и семинары, посвященные компьютерной безопасности и методам эксплуатации, чтобы быть в курсе последних разработок в этой области.

  6. Участие в мероприятиях Capture the Flag (CTF): Участие в мероприятиях CTF дает практический опыт в обнаружении и использовании уязвимостей переполнения целых чисел.

  7. Используйте онлайн-ресурсы: используйте онлайн-ресурсы, такие как онлайн-курсы, учебные пособия и видеолекции, чтобы углубить свое понимание уязвимостей переполнения целых чисел и методов использования.

Следуя этим советам и активно взаимодействуя с сообществом, вы сможете получить четкое представление об уязвимостях переполнения целых чисел и методах, используемых для их использования.

Книги с обзором переполнения целых чисел

  1. “Black Hat Python: программирование на Python для хакеров и пентестеров” Джастина Сейтца: Эта книга представляет собой введение в программирование на Python специально для тестировщиков на проникновение и этичных хакеров. В нем рассматриваются такие темы, как сетевой и веб-взлом, использование уязвимостей и кодирование собственных эксплойтов, включая методы использования переполнения целых чисел.

  2. “Практический двоичный анализ: создайте свои собственные инструменты Linux для двоичного инструментария, анализа и дизассемблирования” Денниса Андриесса: Эта книга представляет собой полное руководство по двоичному анализу, включая использование переполнения целых чисел. В нем рассматриваются такие темы, как реверс-инжиниринг, инструментарий программирования и инструменты бинарного анализа.

  3. “Искусство судебной экспертизы памяти: обнаружение вредоносных программ и угроз в памяти Windows, Linux и Mac” Майкла Хейла Лайга и др.: Эта книга представляет собой полное руководство по судебной экспертизе памяти, включая методы обнаружения и использования уязвимостей переполнения целых чисел в памяти. В нем рассматриваются такие темы, как сбор и анализ памяти, поиск угроз и анализ вредоносных программ.

Список полезных нагрузок, подходящих для уязвимости

Некоторые распространенные полезные нагрузки, которые могут быть использованы для использования уязвимостей переполнения целых чисел:

  1. Большие целочисленные входные данные: Полезная нагрузка - это большое целочисленное значение, которое используется для переполнения целевой переменной, в результате чего она обтекается и выдает неожиданное значение.

  2. Последовательность меньших целочисленных входных данных: последовательность меньших целочисленных входных данных, которые при объединении приводят к переполнению.

  3. Управляющие символы: полезная нагрузка, состоящая из управляющих символов, которые можно использовать для управления значением целевой переменной.

  4. Символы ASCII: полезная нагрузка, состоящая из символов ASCII, которые можно использовать для управления значением целевой переменной.

  5. Двоичные данные: полезная нагрузка, состоящая из двоичных данных, которые могут быть использованы для манипулирования значением целевой переменной.

  6. Числа с плавающей запятой: полезная нагрузка, состоящая из чисел с плавающей запятой, которые могут использоваться для создания переполнения целых чисел при их преобразовании в целые числа.

  7. Входные данные вредоносных файлов: полезная нагрузка, состоящая из вредоносных файлов, которые могут быть использованы для создания переполнения целых чисел при их анализе или загрузке целевой системой.

  8. Сетевые входные данные: полезная нагрузка, состоящая из сетевых входных данных, таких как пакеты или сетевой трафик, которые могут использоваться для создания переполнения целых чисел при их обработке целевой системой.

Эти полезные нагрузки могут быть использованы для демонстрации существования уязвимости переполнения целых чисел и для разработки эксплойтов, подтверждающих концепцию.

Как защититься от переполнения целых чисел

1. Используйте безопасный тип данных: используйте тип данных с достаточно большим диапазоном для обработки максимально возможного значения. Например, используйте unsigned long вместо int .

2. Проверка на переполнение: проверка на переполнение путем проверки, превышает ли результат операции максимально возможное значение для данного типа данных.

3. Используйте безопасные функции: Используйте безопасные функции, предназначенные для обработки переполнения, такие как strncat вместо strcat.

4. Используйте библиотечные функции: Используйте библиотечные функции, которые выполняют проверку переполнения, такие как функция strncpy_s в среде выполнения Microsoft Visual C++.

5. Используйте защитное программирование: используйте методы защитного программирования, такие как проверка входных данных и проверка границ, чтобы предотвратить переполнение буфера и переполнение целых чисел.

6. Постоянно обновляйте программное обеспечение: постоянно обновляйте программное обеспечение, чтобы убедиться, что применяются исправления и обновления безопасности.

7. Используйте методы безопасного кодирования: используйте методы безопасного кодирования и следуйте рекомендациям, чтобы убедиться, что ваш код безопасен и свободен от уязвимостей.

Меры по смягчению последствий переполнения целых чисел

1. Проверка и тестирование кода: проведите тщательную проверку кода и внедрите тесты для выявления и устранения проблем с переполнением целых чисел перед развертыванием.

2. Проверка границ: убедитесь, что входные данные проверены на наличие границ и не превышают максимальных значений, которые могут хранить переменные.

3. Использование безопасных функций: Используйте безопасные библиотеки и функции, которые автоматически обрабатывают переполнение целых чисел, такие как strtoul() или strtol().

4. Выбор типа данных: тщательно выбирайте типы данных, выбирая наименьший тип данных, который может вместить ожидаемый диапазон значений.

5. Флаги компилятора: используйте флаги компилятора для обнаружения переполнения целых чисел, например -D_FORTIFY_SOURCE в GCC.

6. Инструменты обнаружения переполнения целых чисел: Используйте специализированные инструменты, которые могут обнаруживать уязвимости переполнения целых чисел, такие как Checkmarx, Coverity и SonarQube.

7. Обновление программного обеспечения: Регулярно обновляйте программное обеспечение и библиотеки для устранения известных уязвимостей переполнения целых чисел.

Заключение

Переполнение целых чисел - это тип уязвимости, возникающий, когда арифметическая операция приводит к результату, превышающему максимальное значение, которое может быть сохранено в типе данных, используемом для его представления. Это может привести к неожиданному поведению, такому как переполнение буфера, которое может быть использовано злоумышленниками для выполнения произвольного кода или получения повышенных привилегий. Для защиты от переполнения целых чисел важно правильно проверять вводимые пользователем данные и использовать типы данных, которые могут обрабатывать ожидаемый диапазон значений. Кроме того, функции безопасности, такие как предотвращение выполнения данных (DEP) и рандомизация компоновки адресного пространства (ASLR), могут помочь предотвратить успешное использование уязвимостей переполнения целых чисел. Кроме того, методы программирования, ориентированные на безопасность, такие как написание защищенного кода, выполнение проверок кода и использование таких инструментов, как статический анализ и нечеткое тестирование, также могут помочь снизить риск уязвимостей, связанных с переполнением целых чисел.

Другие Услуги

Готовы к безопасности?

Связаться с нами