Креш
Креш (англ. crash) або відмова системи (також аварійна відмова[1][2], фатальний збій[2], аварія[3][2], розм. крах, падіння) — серйозний баг, помилка у програмі, що викликає аварійне завершення програми або операційної системи, коли вона перестає функціонувати належним чином.
Часто помилка такого роду призводить до виходу з ураженої програми. Програма може не відповідати, доки служба звітності аварії не повідомить подробиці відмови. Якщо програма є критичною частиною операційної системи, вся система може аварійно завершити роботу або зависнути, що часто призводить до поломки ядра або фатальної системної помилки.
Більшість відмов з'являється внаслідок виконання недопустимих машинних інструкцій. Наприклад, коли певний об'єкт був видалений (або переміщений), а значення вказівника не було змінено на нульове, тому він все ще вказує на область пам'яті, де знаходився цей об'єкт і може мати до нього доступ; або в результаті переповнення буфера перезаписуються інші дані що знаходяться поруч з буфером, які може бути пошкоджено[4] а інтерпретація інформації як виконуючого коду порушена[5]. Подібні помилки призводять до порушення безпеки доступу до пам'яті, та виконання обробки винятків.
Початкова помилка програмного забезпечення, що викликала події, що привели до відмови системи, вважається причиною збою та виявляється в процесі налагодження програми. Загалом, знайти початкову помилку буває досить важко, вона може здаватися нічим не пов'язаною зі збоєм, впливаючи на місце крашу не безпосередньо а через серію взаємопов'язаних подій.
Відмова програми
Програмний додаток зазвичай завершує свою роботу у випадку виконання операції, що не дозволена операційною системою. Тому після такої спроби система запускає в додатку обробку винятків або сигнал.
Unix додатки традиційно відповідають на сигнал за допомогою дампа пам'яті. Більшість Windows та Unix додатків з графічним інтерфейсом користувача відповідають відображаючи діалогове вікно з можливістю підключення налагоджувача, якщо він встановлений.
Деякі додатки намагаються відновитись після помилки та продовжити роботу замість повного завершення.
Типові помилки, що призводять до збою в додатках, містять:
- спробу зчитувати або записувати в пам'ять, що не призначена для читання або запису цим додатком (помилка сегментації або помилка захисту);
- спробу виконати привілегійовані або недієві команди;
- спробу виконати операції вводу-виводу на пристроях, до яких у нього немає дозволу на доступ;
- передачу недопустимих аргументів системним викликам;
- спробу отримати доступ до інших системних ресурсів, до яких у додатка немає дозволу на доступ;
- спробу виконати машинні команди з «поганими» аргументами (в залежності від процесорної архітектури): ділення на нуль, операції зі значеннями денормалізованих чисел або NaN, доступ до пам'яті в неприєднаних адресах і т. ін.
Відмова Web-сервера
Додаток, запущений у веб-сервері, може відмовити, що викличе повну недієздатність сайту або роботу в режимі сповіщення повідомлення про помилку.
Наприклад, якщо сайт, що використовує базу даних SQL (наприклад MySQL) використає скрипт (наприклад на PHP), і цей сервер бази даних відмовить, то PHP видасть повідомлення про помилку підключення.
Наслідки аварій в безпеці даних
Багато програмних помилок, що спричинюють відмову системи, також використовуються як експлойти для виконання довільного коду та інших видів підвищення привілеїв.[6][7] Наприклад, переповнення стекового буфера може перезаписати адресу повернення підпрограми з недійсним значенням, що призводить до помилки сегментації, коли підпрограма поверне значення. Однак, якщо експлойт перезаписує адресу повернення дійсним значенням, то код у цій адресі буде виконано.
Див. також
Примітки
- Першиков. Толковый словарь по информатике. — 1991. — С. 245.
- Орлов. Англо-русский словарь по вычислительной технике и информационным технологиям. — 4-е изд. — 2009. — ISBN 5-93037-124-5.
- Толковый словарь по вычислительной технике. — Microsof Press, 1995. — С. 107. — ISBN 5750200086.
- Джон Эриксон. Хакинг. Искусство эксплойта. — СПб. : Символ-Плюс, 2010. — С. 139. — ISBN 978-5-93286-158-5.
- Джон Эриксон. Хакинг. Искусство эксплойта. — СПб. : Символ-Плюс, 2010. — С. 142. — ISBN 978-5-93286-158-5.
- Analyze Crashes to Find Security Vulnerabilities in Your Apps. Msdn.microsoft.com. 26 квітня 2007. Процитовано 26 червня 2014.
- Jesse Ruderman » Memory safety bugs in C++ code. Squarefree.com. 1 листопада 2006. Процитовано 26 червня 2014.
Література
- Andreas Zeller. Why Programs Fail: A Guide to Systematic Debugging. — Morgan Kaufmann, 2006. — 448 с. — ISBN 1-55860-866-4.
Посилання
- Analyze Crashes to Find Security Vulnerabilities in Your Apps(англ.)
- Crash Computing | www.infopackets.com(англ.)
- Computer Crash(англ.)
- Picking Up The Pieces After A Computer Crash(англ.)
- Why do computers crash? — Scientific American(англ.)
- PCGuide — TSX — Troubleshooting System Instablity, Reboots and Crashes(англ.)