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), можуть допомогти запобігти успішне використання вразливостей переповнення цілих чисел. Крім того, методи програмування, орієнтовані на безпеку, такі як написання безпечного коду, виконання перевірок коду та використання таких інструментів, як статичний аналіз нечітке тестування, також можуть допомогти знизити ризик вразливостей, пов'язаних з переповненням цілих чисел.

Інші Послуги

Готові до безпеки?

зв'язатися з нами