Безпека доступу до пам'яті (англ. Memory safety) — концепція в розробці програмного забезпечення, метою якої є запобігти виникненню програмних помилок, що призводять до вразливостей пов'язаних з доступом до оперативної пам'яті комп'ютера, таким як переповнення буфера, завислі вказівники тощо.
Мови програмування з низьким рівнем абстракції, такі як C чи , що надають безпосередній доступ до пам'яті комп'ютера (довільна арифметика вказівників, виділення чи вивільнення пам'яті) та приведення типів, але в той же час не мають автоматичної [en], не є безпечними з точки зору доступу до пам'яті.
Вразливості, зв'язані з доступом до пам'яті
Одним із найрозповсюдженіших типів вразливостей програмного забезпечення є саме проблеми безпеки доступу до пам'яті. Даний тип вразливостей відомий протягом більш ніж 30 років. Безпеку доступу до пам'яті слід розуміти як запобігання спробам використати або модифікувати дані в тих випадках, де це не було спроектовано при створенні програмного продукту.
Більшість критичних за продуктивністю програм створюються мовами програмування з низьким рівнем абстракції (C та ), чим обумовлено виникнення вразливостей даного типу. Відсутність захищеності цих мов програмування дозволяє атакуючій стороні отримати повний контроль над програмою, змінювати потік керування, мати несанкціонований доступ до конфіденційної інформації. Існують різні варіанти рішення проблеми щодо доступу до пам'яті, механізми захисту повинні бути водночас ефективними як з точки зору безпеки, так і з точки зору продуктивності її виконання.
Перше історичне освітлення помилки пам'яті мало місце в 1972 році. З цього моменту й надалі вона була проблемою багатьох програмних продуктів, засобом, що дозволяє застосовувати експлойти. Наприклад, Хробак Морріса використовував численні вразливості, значна частина котрих була зв'язана саме з помилками роботи із пам'яттю.
Різновидності помилок пам'яті
Розрізняють декілька видів помилок пам'яті (вразливостей), які можуть виникати в деяких мовах програмування:
- [en] (або вихід за межі масиву; англ. bounds checking) — спроба використання значень, що знаходяться поза допустимими межами. За звичай помилка виникає, якщо намагатись зберегти значення змінної поза межами яку не підтримує тип даних. Іншим відомим випадком порушення меж масивів є спроба звертатися до неіснуючої комірки масиву не перевіривши його межі. Окремо виділяють помилку на одиницю, логічна помилка в алгоритмі, коли задана кількість ітерацій циклу виявляється на одиницю більше або менше необхідного, або ж виникає плутанина з початком відліку індексації масиву (у багатьох мовах вона починається з нуля а не з одиниці).
- Переповнення буфера (англ. buffer overflow) — запис за межами виділеного об'єму пам'яті буфера. Виникає при спробі запису в буфер блоку даних, що перевищує розмір цього буфера. В результаті переповнення інші дані що знаходяться поруч з буфером може бути пошкоджено, інтерпретація інформації як виконуючого коду може бути порушена. Використання даної вразливості є однією з найбільш популярних способів злому комп'ютерних систем.
- [en] (англ. buffer over-read) — аномальне читання чи його спроба поза межами виділеного в пам'яті буфера. Наслідками можуть стати порушення безпеки системи (втрата конфіденційності), нестабільна та неправильна поведінка виконання програмного коду, помилки прав доступу до пам'яті. Ця вразливість входить у список найбільш поширених та небезпечних помилок в програмному забезпеченні.
- Помилки при роботі з динамічною пам'яттю — неправильне використання динамічно виділяємої пам'яті та вказівниками. В даному випадку виділення пам'яті під об'єкти здійснюється під час виконання програми, що може спричинити помилки [en] (англ. runtime system). Даній вразливості підвержені мови програмування з низьким рівнем абстракції, що підтримують безпосередній доступ до пам'яті комп'ютера (C, ).
- Завислий вказівник (або символ покажчик; англ. dangling pointer) — вказівник, що не має посилання на допустимий об'єкт відповідного типу. Цей вид вказівників виникає в разі, коли об'єкт був видалений (або переміщений), але значення вказівника не було змінено на (нульове). У цьому разі він все ще вказує на ділянку пам'яті, де знаходився цей об'єкт і може стати причиною отримання конфіденційної інформації зловмисником. Також можливий випадок коли система вже перерозподілила адресну пам'ять під інший об'єкт, а доступ через завислий вказівник може зіпсувати розташовані там дані. Особливий підтип помилки — використання після вивільнення (англ. use after free) (звернення до вже вивільненої області пам'яті) — є найбільш поширеною причиною помилок програм, наприклад вразливостей інтернет браузерів.
- Звернення за нульовим вказівником (англ. null pointer) — так як нульовий вказівник має спеціальне зарезервоване значення, що повідомляє що даний вказівник не посилається на допустимий об'єкт, звернення за нульовим вказівником стане причиною обробки винятків і призведе до аварійної зупинки програми.
- Вивільнення завчасно не виділеної пам'яті — спроба вивільнити область оперативної пам'яті, яка не є виділеною (тобто на даний момент вільна). Найбільш часто це проявляться у випадку подвійного вивільнення пам'яті, коли виникає повторна спроба вивільнити вже вивільнену пам'ять. Дана дія може спричинити помилку керування пам'яттю в менеджері пам'яті. Наприклад в мові програмування C це виникає при повторному виклику функції
free
з одним і тим же вказівником, де другий виклик намагається вивільнити не виділену пам'ять.
- Вивільнення завчасно не виділеної пам'яті — спроба вивільнити область оперативної пам'яті, яка не є виділеною (тобто на даний момент вільна). Найбільш часто це проявляться у випадку подвійного вивільнення пам'яті, коли виникає повторна спроба вивільнити вже вивільнену пам'ять. Дана дія може спричинити помилку керування пам'яттю в менеджері пам'яті. Наприклад в мові програмування C це виникає при повторному виклику функції
- Використання різних менеджерів пам'яті — помилка полягає в розриві зв'язку аллокатор-деаллокатор пам'яті з використанням різних засобів для роботи з одним сегментом. Наприклад, в використати
free
для ділянки пам'яті, виділеною за допомогоюnew
або ж, аналогічно, використатиdelete
після викликуmalloc
. Стандарт C++ не описує який-небудь зв'язок міжnew/delete
та функціями роботи з динамічною пам'яттю з мови C, хочаnew/delete
в загальному випадку і реалізовані через обгорткиmalloc/free
, та змішане використання може спричинити невизначену поведінку програми.
- Використання різних менеджерів пам'яті — помилка полягає в розриві зв'язку аллокатор-деаллокатор пам'яті з використанням різних засобів для роботи з одним сегментом. Наприклад, в використати
- Втрата вказівника — втрата адреси виділеного фрагмента пам'яті під час перезапису його новим значення, що посилається на іншу ділянку пам'яті. При цьому адресована попереднім вказівником пам'ять стає недосяжною. Такий тип помилки приводить до явища витоку пам'яті (англ. memory leak), так як виділена пам'ять більше не може бути вивільнена. В мові програмування C це може трапитися при повторному присвоюванні результату функції
malloc
одному і тому ж вказівнику, без проміжного вивільнення пам'яті.
- Втрата вказівника — втрата адреси виділеного фрагмента пам'яті під час перезапису його новим значення, що посилається на іншу ділянку пам'яті. При цьому адресована попереднім вказівником пам'ять стає недосяжною. Такий тип помилки приводить до явища витоку пам'яті (англ. memory leak), так як виділена пам'ять більше не може бути вивільнена. В мові програмування C це може трапитися при повторному присвоюванні результату функції
- [en] (англ. uninitialized variable) — змінні, що були [en] без присвоєння значення. При спробі їх використання значення вони все ж матимуть, але, загалом, важко передбачуване (зчитується попередня, неперезаписана у ділянку пам'яті інформація). Вразливість для пам'яті може виникати за наявності неініціалізованих завислих («диких») вказівників. Такі вказівники в своїй поведінці схожі з завислими вказівниками, спроба звернення до них у більшості випадків буде супроводжуватися помилками сегментації чи пошкодженням даних. Однак, можливе отримання конфіденційної інформації, тої що могла лишитися в даній області пам'яті після попереднього використання.
- Помилки нестачі пам'яті — проблеми, що виникають при нестачі кількості доступної пам'яті для даної програми.
- Переповнення стека (англ. stack overflow) — перевищення програмою кількості інформації, яка може знаходитися у стеку викликів (вказівник вершини стеку виходить за межі допустимої області). При цьому програма аварійно завершується. Причиною помилки може бути глибока (або нескінченна) рекурсія, або виділення великої кількості пам'яті для локальних змінних у стеку.
- [en] (англ. out of memory) — спроба програми виділити більшу кількість пам'яті, ніж їй доступно. Виникає внаслідок частого і, частіше всього, невірного користування динамічною пам'яттю. У разі виникнення помилки, операційна система завершить найбільш умісний з її точки зору процес (той що викликав помилку, але інколи — довільний).
Виявлення помилок
Можливі помилки роботи з пам'яттю можуть бути встановлені як під час компіляції програми, так і під час її [en] (налагодження програми).
Окрім попереджень з боку компілятора, для виявлення помилок до моменту [en] використовуються статичні аналізатори коду. Вони дозволяють покрити значну частину небезпечних ситуацій досліджуючи вихідний код більш детально, ніж поверхневий аналіз компілятора. Статичні аналізатори можуть виявити:
- вихід за межі масивів;
- використання завислих (а також нульових або неініціалізованих) вказівників;
- неправильне використання бібліотечних функцій;
- витік пам'яті, як наслідок неправильної роботи з вказівниками.
Під час налагодження програми можуть використовуватися спеціальні менеджери пам'яті. У даному випадку навколо аллоційованих в купі об'єктів створюються «мертві» області пам'яті, потрапляючи в які стає можливим виявити помилки. Альтернативою є спеціалізовані віртуальні машини, що перевіряють доступ до пам'яті (Valgrind). Виявити помилки допомагають системи [en] коду, в тому числі забезпечені компілятором (Sanitizer).
Способи забезпечення безпеки
Більшість мов програмування високого рівня забезпечують рішення таких проблем шляхом видалення з мови арифметики вказівників, обмеженням можливості приведення типів, а також введенням збирання сміття (англ. garbage collection) як єдиної схеми управління пам'яттю. На відміну від низькорівневих мов, де важливою є швидкість виконання, високорівневі, загалом, здійснюють додаткові перевірки, наприклад меж при звертанні до масивів та об'єктів.
Щоб уникнути витоку пам'яті і ресурсів та забезпечити безпеку щодо винятків у сучасному використовуються розумні вказівники. Зазвичай вони являють собою клас, що імітує інтерфейс звичайного вказівника, чим розширює його функціональність, наприклад перевірку меж масивів та об'єктів, автоматичне управління виділенням та вивільненням пам'яті для виконуваного об'єкта. Вони допомагають реалізувати ідіому «Отримання ресурсу є ініціалізація», що означає: отримання об'єкта неподільно зв'язано з його ініціалізацією, а вивільнення — із його знищенням.
При використанні бібліотечних функцій слід приділяти увагу [en], щоб виявити можливі порушення в їх роботі. Функції для роботи з динамічною пам'яттю в мові C сигналізують про помилку (нестача вільної пам'яті запрошеного розміру), повертаючи замість вказівника на блок пам'яті нульовий вказівник; в використовується обробка винятків. Правильна обробка даних ситуацій дозволяє уникнути неправильного (аварійного) завершення програми.
Підвищенню безпеки сприяє перевірка меж при використанні вказівників. Подібні перевірки додаються під час компіляції та можуть сповільнювати роботу програм; для їх пришвидшення були розроблені спеціальні апаратні додатки (наприклад Intel MPX).
На нижніх рівнях абстракцій існують спеціальні системи, що забезпечують безпеку пам'яті. На рівні операційної системи цим займається [en], він розподіляє доступні області пам'яті для окремих процесів (підтримка багатозадачності), та засоби синхронізації для підтримання багатопоточності. Апаратний рівень також, як правило, включає певні механізми, такі як кільця захисту.
Див. також
Примітки
- Erik Poll. Lecture Notes on Language-Based Security. — Radboud University Nijmegen, . / «Language features that break memory safety include …»
- Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory. — 2013 IEEE Symposium on Security and Privacy, 2013. / «Memory corruption bugs in software written in low-level languages like C or C++ are one of the oldest problems in computer security.»
- Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Memory Errors: The Past, the Present, and the Future. — RAID’12; Amsterdam, The Netherlands, . / «… and still rank among the top 3 most dangerous software errors.»
- Dawn Song. Memory safety — Attacks and Defenses. — Berkeley CS161 Computer Security, 2015. — Весна. / «In fact, after configuration errors, implementation errors are probably the largest single class of security errors exploited in practice.»
- Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory. — 2013 IEEE Symposium on Security and Privacy, 2013. / «This problem has existed for more than 30 years …»
- Dawn Song. Memory safety — Attacks and Defenses. — Berkeley CS161 Computer Security, 2015. — Весна. / «… preventing attackers from reading or writing to memory locations other than those intended by the programmer.»
- Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory. — 2013 IEEE Symposium on Security and Privacy, 2013. / «Applications written in low-level languages like C or C++ are prone to these kinds of bugs. The lack of memory safety … enables attackers to exploit memory bugs by maliciously altering the program's behavior or even taking full control over the control-flow.»
- Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory. — 2013 IEEE Symposium on Security and Privacy, 2013. / «… in finding the balance betweeneffectiveness(security)andefficiency.»
- Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Memory Errors: The Past, the Present, and the Future. — RAID’12; Amsterdam, The Netherlands, . / «Memory errors were first publicly discussed in 1972 by the Computer Security Technology Planning Study Panel.»
- Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Memory Errors: The Past, the Present, and the Future. — RAID’12; Amsterdam, The Netherlands, . / «The Internet Worm exploited a number of vulnerabilities, including memory error-related ones.»
- Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory. — 2013 IEEE Symposium on Security and Privacy, 2013.
- Dawn Song. Memory safety — Attacks and Defenses. — Berkeley CS161 Computer Security, 2015. — Весна.
- Katrina Tsipenyuk, Brian Chess, Gary McGraw. Seven Pernicious Kingdoms: A Taxonomy of Software Security Errors. — NIST Workshop on Software Security Assurance Tools, Techniques, and Metrics, Long Beach, CA, 2005. — Листопад.
- Richard Jones and Paul Kelly. Bounds Checking for C. — Imperial College, 1995. — Липень. / «One response to this analysis is to discard C, since this lack of efficient checkability is responsible for many software failures.»
- Edsger W. Dijkstra. Why numbering should start at zero (EWD 831). — Plataanstraat 5, 5671 AL NUENEN, The Netherlands, . / «… the use of the other three conventions has been a constant source of clumsiness and mistakes …»
- Джон Эриксон. Хакинг. Искусство эксплойта. — СПб. : Символ-Плюс, 2010. — С. 139. — .
- Джон Эриксон. Хакинг. Искусство эксплойта. — СПб. : Символ-Плюс, 2010. — С. 142. — .
- David A. Wheeler. Secure Programming HOWTO. — Published v3.72, 2015. / «Buffer overflows are an extremely common and dangerous security flaw …»
- Common Weakness Enumeration (08 грудня 2015). . Архів оригіналу за 27 вересня 2016. Процитовано 24 листопада 2016. / «This typically occurs when the pointer or its index is incremented to a position beyond the bounds of the buffer …»
- Steve Christey (13 вересня 2011). . MITRE. Архів оригіналу за 12 квітня 2018. Процитовано 24 листопада 2016.
- Guy Keren (2001—2002). . Архів оригіналу за 27 вересня 2016. Процитовано 24 листопада 2016. / «The runtime environment defines not only how memory is allocated and freed …»
- Robert C. Seacord. Secure Coding in C and C++. — Addison-Wesley, 2013. — С. 162. — .
- Jonathan Afek, Adi Sharabani. Dangling Pointer. Smashing the Pointer for Fun and Profit. — Watchfire Corporation, 2007.
- Компьютерная газета. . Архів оригіналу за 22 червня 2018. Процитовано 24 листопада 2016. / «… уязвимости, к которым может привести неправильное использование указателей и ссылок.»
- Common Weakness Enumeration (08 грудня 2015). . Архів оригіналу за 18 липня 2019. Процитовано 24 листопада 2016. / «Referencing memory after it has been freed can cause a program to crash, use unexpected values, or execute code.»
- Juan Caballero, Gustavo Grieco, Mark Marron, Antonio Nappa. Undangle: Early Detection of Dangling Pointers in Use-After-Free and Double-Free Vulnerabilities. — IMDEA Software Institute; Madrid, Spain. / «Use-after-free vulnerabilities are rapidly growing in popularity, especially for exploiting web browsers.»
- comp.lang.c. . Архів оригіналу за 27 вересня 2016. Процитовано 24 листопада 2016. / «The language definition states that for each pointer type, there is a special value …»
- Oracle. . Архів оригіналу за 23 квітня 2018. Процитовано 24 листопада 2016. / «Thrown when an application attempts to use null in a case where an object is required.»
- Common Weakness Enumeration (08 грудня 2015). . Архів оригіналу за 27 вересня 2016. Процитовано 24 листопада 2016. / «When a program calls free() twice with the same argument …»
- Yan Huang. (PDF). Архів оригіналу (PDF) за 17 квітня 2018. Процитовано 24 листопада 2016. / «If free(p) has already been called before, undefined behavior occurs.»
- Andrei Alexandrescu. Modern C++ Design: Generic Programming and Design Patterns Applied. — Addison Wesley, 2001. / «… it is usually implemented as a thin wrapper around the C heap allocator …»
- Guy Keren (2001—2002). . Архів оригіналу за 27 вересня 2016. Процитовано 25 листопада 2016. / «For example, the GNU C++ compiler's new operator actually invokes the C runtime malloc() function.»
- . Архів оригіналу за 10 вересня 2018. Процитовано 25 листопада 2016. / «The C++ operators new and delete guarantee proper construction and destruction … The C-style functions … don't ensure that.»
- OWASP. . Архів оригіналу за 23 листопада 2016. Процитовано 25 листопада 2016.
- Проблемы, связанные с указателями. Архів оригіналу за 26 лютого 2013. Процитовано 25 листопада 2016. / «Ничто так не беспокоит, как „дикие“ указатели!»
- Halvar Flake (2006). (PDF). Архів оригіналу (PDF) за 3 червня 2016. Процитовано 25 листопада 2016. / «We're looking at the following situation then …»
- Common Weakness Enumeration (08 грудня 2015). . Архів оригіналу за 2 жовтня 2016. Процитовано 25 листопада 2016. / «An attacker can sometimes control or read these contents.»
- Using and Porting GNU Fortran. James Craig, Burley. 1 червня 1991. Архів оригіналу за 5 жовтня 2012. Процитовано 25 листопада 2016.
- Danny Kalev (5 вересня 2000). Understanding Stack Overflow. Архів оригіналу за 5 жовтня 2012. Процитовано 25 листопада 2016. / «The two most common causes for a stack overflow …»
- John Boyland. Position Paper: Handling „Out Of Memory“ Errors. — University of Wisconsin-Milwaukee, USA. з джерела 22 березня 2016. Процитовано 2018-04-10. / «An „out of memory“ error can be catastrophic for a program, especially one written in a language such as Java that uses memory allocation frequently.»
- Mulyadi Santosa (11/30/2006). . Архів оригіналу за 14 квітня 2018. Процитовано 15 листопада 2016. / «… you can no longer allocate more memory and the kernel kills a task (usually the current running one).»
- Anders Moller and Michael I. Schwartzbach. Static Program Analysis. — Department of Computer Science, Aarhus University, 2015. — Травень.
- . Архів оригіналу за 18 січня 2016. Процитовано 25 листопада 2016. / «Detect various kinds of bugs in your code …»
- Semantic Designs. . Архів оригіналу за 18 квітня 2018. Процитовано 25 листопада 2016. / «Programs with pointers can commit a variety of errors in accessing memory …»
- PVS-Studio (25.03.2015). . Архів оригіналу за 25 січня 2018. Процитовано 25 листопада 2016.
- Emery D. Berger, Benjamin G. Zorn. DieHard: Probabilistic Memory Safety for Unsafe Languages. — PLDI’06; Ottawa, Ontario, Canada, .
- Konstantin Serebryany, Dmitry Vyukov (10 липня 2012). (PDF). GNU Tools Cauldron. Архів оригіналу (PDF) за 12 березня 2016. Процитовано 25 листопада 2016.
- Erik Poll. (PDF). Radboud Universiteit Nijmegen. Архів оригіналу (PDF) за 5 листопада 2016. Процитовано 25 листопада 2016. / «Manual memory management can be avoided by …»
- Dinakar Dhurjati and Vikram Adve. Backwards-Compatible Array Bounds Checking for C with Very Low Overhead. — Department of Computer Science University of Illinois at Urbana-Champaign. / «… an unsolved problem despite a long history of work on detecting array bounds violations or buffer overruns, because the best existing solutions to date are either far too expensive for use in deployed production code …»
- Bruce Eckel. Thinking in Java. Fourth Edition. / «Both arrays and containers guarantee that you can't abuse them. Whether you're using an array or a container, you'll get a RuntimeException if you exceed the bounds, indicating a programmer error.»
- David Kieras. Using C++11’s Smart Pointers. — EECS Department, University of Michigan, 2016. — Червень. / «Smart pointers are class objects that behave like built-in pointers but also manage objects that you create …»
- Microsoft Developer Network. . Архів оригіналу за 5 грудня 2017. Процитовано 25 листопада 2016. / «Они чрезвычайно важны для идиомы программирования RAII или Resource Acquisition Is Initialialization …»
- Common Weakness Enumeration (08 грудня 2015). . Архів оригіналу за 18 липня 2019. Процитовано 25 листопада 2016. / «The software does not check the return value from a method or function, which can prevent it from detecting unexpected states and conditions.»
- malloc. learn.microsoft.com (en-us) . 7 лютого 2023. Процитовано 8 березня 2024.
- . Архів оригіналу за 29 березня 2018. Процитовано 25 листопада 2016. / «throws std::bad_alloc or another exception derived from std::bad_alloc (since C++11) on failure to allocate memory»
- Paul and Harvey Deitel. C : how to program.
- Intel Developer Zone (16 липня 2013). . Архів оригіналу за 5 травня 2019. Процитовано 25 листопада 2016.
- Sarah Diesburg. (PDF). Архів оригіналу (PDF) за 9 серпня 2017. Процитовано 25 листопада 2016.
- Michael D. Schroeder and Jerome H. Saltzer. A Hardware Architecture for Implementing Protection Rings. — Third ACM Symposium on Operating Systems Principles, Palo Alto, California, .
Література
- Erik Poll. Lecture Notes on Language-Based Security. — Radboud University Nijmegen, .
- David A. Wheeler. Secure Programming HOWTO. — v3.72 Edition. — 2015.
Посилання
Загальні публікації
- Laszlo Szekeres, Mathias Payer, Tao Wei, Dawn Song. SoK: Eternal War in Memory. — IEEE Computer Society Washington, DC, USA, . — . — DOI: .
- Dawn Song. Memory safety — Attacks and Defenses. — Berkeley CS 161 Computer Security, 2015. — Весна.
- Katrina Tsipenyuk, Brian Chess, Gary McGraw. Seven Pernicious Kingdoms: A Taxonomy of Software Security Errors. — . — ISSN 1540-7993. — DOI: .
- Emery D. Berger, Benjamin G. Zorn. DieHard: Probabilistic Memory Safety for Unsafe Languages. — PLDI '06; Ottawa, Ontario, Canada, . — . — DOI: .
- Erik Poll. (PDF). Radboud Universiteit Nijmegen (англ.). Архів оригіналу (PDF) за 5 листопада 2016. Процитовано 24 листопада 2016.
- Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Memory Errors: The Past, the Present, and the Future. — RAID'12; Amsterdam, The Netherlands, . — . — DOI: .
Тематичні публікації
- Guy Keren (2001—2002). (англ.). Архів оригіналу за 27 вересня 2016. Процитовано 24 листопада 2016.
- Jonathan Afek, Adi Sharabani. Dangling Pointer. Smashing the Pointer for Fun and Profit. — Watchfire Corporation, 2007.
- Juan Caballero, Gustavo Grieco, Mark Marron, Antonio Nappa. Undangle: Early Detection of Dangling Pointers in Use-After-Free and Double-Free Vulnerabilities. — ISSTA 2012; Minneapolis, MN, USA, . — . — DOI: .
- Yan Huang (2016). (PDF) (англ.). Архів оригіналу (PDF) за 17 квітня 2018. Процитовано 24 листопада 2016.
- Halvar Flake (2006). (PDF). Black Hat Federal (англ.). Архів оригіналу (PDF) за 3 червня 2016. Процитовано 24 листопада 2016.
- John Boyland. Position Paper: Handling „Out Of Memory“ Errors. — ECOOP 2005 Workshop on Exceptional Handling in Object-Oriented Systems; University of Wisconsin-Milwaukee, USA, 2005. — Липень.
- David Kieras. Using C++11’s Smart Pointers. — EECS Department, University of Michigan, 2016. — Червень.
- Dinakar Dhurjati, Vikram Adve. Backwards-Compatible Array Bounds Checking for C with Very Low Overhead. — ICSE '06; Shanghai, China, . — . — DOI: .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Bezpeka dostupu do pam yati angl Memory safety koncepciya v rozrobci programnogo zabezpechennya metoyu yakoyi ye zapobigti viniknennyu programnih pomilok sho prizvodyat do vrazlivostej pov yazanih z dostupom do operativnoyi pam yati komp yutera takim yak perepovnennya bufera zavisli vkazivniki tosho Movi programuvannya z nizkim rivnem abstrakciyi taki yak C chi C sho nadayut bezposerednij dostup do pam yati komp yutera dovilna arifmetika vkazivnikiv vidilennya chi vivilnennya pam yati ta privedennya tipiv ale v toj zhe chas ne mayut avtomatichnoyi en ne ye bezpechnimi z tochki zoru dostupu do pam yati Vrazlivosti zv yazani z dostupom do pam yatiOdnim iz najrozpovsyudzhenishih tipiv vrazlivostej programnogo zabezpechennya ye same problemi bezpeki dostupu do pam yati Danij tip vrazlivostej vidomij protyagom bilsh nizh 30 rokiv Bezpeku dostupu do pam yati slid rozumiti yak zapobigannya sprobam vikoristati abo modifikuvati dani v tih vipadkah de ce ne bulo sproektovano pri stvorenni programnogo produktu Bilshist kritichnih za produktivnistyu program stvoryuyutsya movami programuvannya z nizkim rivnem abstrakciyi C ta C chim obumovleno viniknennya vrazlivostej danogo tipu Vidsutnist zahishenosti cih mov programuvannya dozvolyaye atakuyuchij storoni otrimati povnij kontrol nad programoyu zminyuvati potik keruvannya mati nesankcionovanij dostup do konfidencijnoyi informaciyi Isnuyut rizni varianti rishennya problemi shodo dostupu do pam yati mehanizmi zahistu povinni buti vodnochas efektivnimi yak z tochki zoru bezpeki tak i z tochki zoru produktivnosti yiyi vikonannya Pershe istorichne osvitlennya pomilki pam yati malo misce v 1972 roci Z cogo momentu j nadali vona bula problemoyu bagatoh programnih produktiv zasobom sho dozvolyaye zastosovuvati eksplojti Napriklad Hrobak Morrisa vikoristovuvav chislenni vrazlivosti znachna chastina kotrih bula zv yazana same z pomilkami roboti iz pam yattyu Riznovidnosti pomilok pam yatiRozriznyayut dekilka vidiv pomilok pam yati vrazlivostej yaki mozhut vinikati v deyakih movah programuvannya en abo vihid za mezhi masivu angl bounds checking sproba vikoristannya znachen sho znahodyatsya poza dopustimimi mezhami Za zvichaj pomilka vinikaye yaksho namagatis zberegti znachennya zminnoyi poza mezhami yaku ne pidtrimuye tip danih Inshim vidomim vipadkom porushennya mezh masiviv ye sproba zvertatisya do neisnuyuchoyi komirki masivu ne perevirivshi jogo mezhi Okremo vidilyayut pomilku na odinicyu logichna pomilka v algoritmi koli zadana kilkist iteracij ciklu viyavlyayetsya na odinicyu bilshe abo menshe neobhidnogo abo zh vinikaye plutanina z pochatkom vidliku indeksaciyi masivu u bagatoh movah vona pochinayetsya z nulya a ne z odinici Perepovnennya bufera angl buffer overflow zapis za mezhami vidilenogo ob yemu pam yati bufera Vinikaye pri sprobi zapisu v bufer bloku danih sho perevishuye rozmir cogo bufera V rezultati perepovnennya inshi dani sho znahodyatsya poruch z buferom mozhe buti poshkodzheno interpretaciya informaciyi yak vikonuyuchogo kodu mozhe buti porushena Vikoristannya danoyi vrazlivosti ye odniyeyu z najbilsh populyarnih sposobiv zlomu komp yuternih sistem en angl buffer over read anomalne chitannya chi jogo sproba poza mezhami vidilenogo v pam yati bufera Naslidkami mozhut stati porushennya bezpeki sistemi vtrata konfidencijnosti nestabilna ta nepravilna povedinka vikonannya programnogo kodu pomilki prav dostupu do pam yati Cya vrazlivist vhodit u spisok najbilsh poshirenih ta nebezpechnih pomilok v programnomu zabezpechenni Pomilki pri roboti z dinamichnoyu pam yattyu nepravilne vikoristannya dinamichno vidilyayemoyi pam yati ta vkazivnikami V danomu vipadku vidilennya pam yati pid ob yekti zdijsnyuyetsya pid chas vikonannya programi sho mozhe sprichiniti pomilki en angl runtime system Danij vrazlivosti pidverzheni movi programuvannya z nizkim rivnem abstrakciyi sho pidtrimuyut bezposerednij dostup do pam yati komp yutera C C Zavislij vkazivnik abo simvol pokazhchik angl dangling pointer vkazivnik sho ne maye posilannya na dopustimij ob yekt vidpovidnogo tipu Cej vid vkazivnikiv vinikaye v razi koli ob yekt buv vidalenij abo peremishenij ale znachennya vkazivnika ne bulo zmineno na nulove U comu razi vin vse she vkazuye na dilyanku pam yati de znahodivsya cej ob yekt i mozhe stati prichinoyu otrimannya konfidencijnoyi informaciyi zlovmisnikom Takozh mozhlivij vipadok koli sistema vzhe pererozpodilila adresnu pam yat pid inshij ob yekt a dostup cherez zavislij vkazivnik mozhe zipsuvati roztashovani tam dani Osoblivij pidtip pomilki vikoristannya pislya vivilnennya angl use after free zvernennya do vzhe vivilnenoyi oblasti pam yati ye najbilsh poshirenoyu prichinoyu pomilok program napriklad vrazlivostej internet brauzeriv Zvernennya za nulovim vkazivnikom angl null pointer tak yak nulovij vkazivnik maye specialne zarezervovane znachennya sho povidomlyaye sho danij vkazivnik ne posilayetsya na dopustimij ob yekt zvernennya za nulovim vkazivnikom stane prichinoyu obrobki vinyatkiv i prizvede do avarijnoyi zupinki programi Vivilnennya zavchasno ne vidilenoyi pam yati sproba vivilniti oblast operativnoyi pam yati yaka ne ye vidilenoyu tobto na danij moment vilna Najbilsh chasto ce proyavlyatsya u vipadku podvijnogo vivilnennya pam yati koli vinikaye povtorna sproba vivilniti vzhe vivilnenu pam yat Dana diya mozhe sprichiniti pomilku keruvannya pam yattyu v menedzheri pam yati Napriklad v movi programuvannya C ce vinikaye pri povtornomu vikliku funkciyi free z odnim i tim zhe vkazivnikom de drugij viklik namagayetsya vivilniti ne vidilenu pam yat Vikoristannya riznih menedzheriv pam yati pomilka polyagaye v rozrivi zv yazku allokator deallokator pam yati z vikoristannyam riznih zasobiv dlya roboti z odnim segmentom Napriklad v C vikoristati free dlya dilyanki pam yati vidilenoyu za dopomogoyu new abo zh analogichno vikoristati delete pislya vikliku malloc Standart C ne opisuye yakij nebud zv yazok mizh new delete ta funkciyami roboti z dinamichnoyu pam yattyu z movi C hocha new delete v zagalnomu vipadku i realizovani cherez obgortki malloc free ta zmishane vikoristannya mozhe sprichiniti neviznachenu povedinku programi Vtrata vkazivnika vtrata adresi vidilenogo fragmenta pam yati pid chas perezapisu jogo novim znachennya sho posilayetsya na inshu dilyanku pam yati Pri comu adresovana poperednim vkazivnikom pam yat staye nedosyazhnoyu Takij tip pomilki privodit do yavisha vitoku pam yati angl memory leak tak yak vidilena pam yat bilshe ne mozhe buti vivilnena V movi programuvannya C ce mozhe trapitisya pri povtornomu prisvoyuvanni rezultatu funkciyi malloc odnomu i tomu zh vkazivniku bez promizhnogo vivilnennya pam yati en angl uninitialized variable zminni sho buli en bez prisvoyennya znachennya Pri sprobi yih vikoristannya znachennya voni vse zh matimut ale zagalom vazhko peredbachuvane zchituyetsya poperednya neperezapisana u dilyanku pam yati informaciya Vrazlivist dlya pam yati mozhe vinikati za nayavnosti neinicializovanih zavislih dikih vkazivnikiv Taki vkazivniki v svoyij povedinci shozhi z zavislimi vkazivnikami sproba zvernennya do nih u bilshosti vipadkiv bude suprovodzhuvatisya pomilkami segmentaciyi chi poshkodzhennyam danih Odnak mozhlive otrimannya konfidencijnoyi informaciyi toyi sho mogla lishitisya v danij oblasti pam yati pislya poperednogo vikoristannya Pomilki nestachi pam yati problemi sho vinikayut pri nestachi kilkosti dostupnoyi pam yati dlya danoyi programi Perepovnennya steka angl stack overflow perevishennya programoyu kilkosti informaciyi yaka mozhe znahoditisya u steku viklikiv vkazivnik vershini steku vihodit za mezhi dopustimoyi oblasti Pri comu programa avarijno zavershuyetsya Prichinoyu pomilki mozhe buti gliboka abo neskinchenna rekursiya abo vidilennya velikoyi kilkosti pam yati dlya lokalnih zminnih u steku en angl out of memory sproba programi vidiliti bilshu kilkist pam yati nizh yij dostupno Vinikaye vnaslidok chastogo i chastishe vsogo nevirnogo koristuvannya dinamichnoyu pam yattyu U razi viniknennya pomilki operacijna sistema zavershit najbilsh umisnij z yiyi tochki zoru proces toj sho viklikav pomilku ale inkoli dovilnij Viyavlennya pomilokMozhlivi pomilki roboti z pam yattyu mozhut buti vstanovleni yak pid chas kompilyaciyi programi tak i pid chas yiyi en nalagodzhennya programi Okrim poperedzhen z boku kompilyatora dlya viyavlennya pomilok do momentu en vikoristovuyutsya statichni analizatori kodu Voni dozvolyayut pokriti znachnu chastinu nebezpechnih situacij doslidzhuyuchi vihidnij kod bilsh detalno nizh poverhnevij analiz kompilyatora Statichni analizatori mozhut viyaviti vihid za mezhi masiviv vikoristannya zavislih a takozh nulovih abo neinicializovanih vkazivnikiv nepravilne vikoristannya bibliotechnih funkcij vitik pam yati yak naslidok nepravilnoyi roboti z vkazivnikami Pid chas nalagodzhennya programi mozhut vikoristovuvatisya specialni menedzheri pam yati U danomu vipadku navkolo allocijovanih v kupi ob yektiv stvoryuyutsya mertvi oblasti pam yati potraplyayuchi v yaki staye mozhlivim viyaviti pomilki Alternativoyu ye specializovani virtualni mashini sho pereviryayut dostup do pam yati Valgrind Viyaviti pomilki dopomagayut sistemi en kodu v tomu chisli zabezpecheni kompilyatorom Sanitizer Sposobi zabezpechennya bezpekiBilshist mov programuvannya visokogo rivnya zabezpechuyut rishennya takih problem shlyahom vidalennya z movi arifmetiki vkazivnikiv obmezhennyam mozhlivosti privedennya tipiv a takozh vvedennyam zbirannya smittya angl garbage collection yak yedinoyi shemi upravlinnya pam yattyu Na vidminu vid nizkorivnevih mov de vazhlivoyu ye shvidkist vikonannya visokorivnevi zagalom zdijsnyuyut dodatkovi perevirki napriklad mezh pri zvertanni do masiviv ta ob yektiv Shob uniknuti vitoku pam yati i resursiv ta zabezpechiti bezpeku shodo vinyatkiv u suchasnomu C vikoristovuyutsya rozumni vkazivniki Zazvichaj voni yavlyayut soboyu klas sho imituye interfejs zvichajnogo vkazivnika chim rozshiryuye jogo funkcionalnist napriklad perevirku mezh masiviv ta ob yektiv avtomatichne upravlinnya vidilennyam ta vivilnennyam pam yati dlya vikonuvanogo ob yekta Voni dopomagayut realizuvati idiomu Otrimannya resursu ye inicializaciya sho oznachaye otrimannya ob yekta nepodilno zv yazano z jogo inicializaciyeyu a vivilnennya iz jogo znishennyam Pri vikoristanni bibliotechnih funkcij slid pridilyati uvagu en shob viyaviti mozhlivi porushennya v yih roboti Funkciyi dlya roboti z dinamichnoyu pam yattyu v movi C signalizuyut pro pomilku nestacha vilnoyi pam yati zaproshenogo rozmiru povertayuchi zamist vkazivnika na blok pam yati nulovij vkazivnik v C vikoristovuyetsya obrobka vinyatkiv Pravilna obrobka danih situacij dozvolyaye uniknuti nepravilnogo avarijnogo zavershennya programi Pidvishennyu bezpeki spriyaye perevirka mezh pri vikoristanni vkazivnikiv Podibni perevirki dodayutsya pid chas kompilyaciyi ta mozhut spovilnyuvati robotu program dlya yih prishvidshennya buli rozrobleni specialni aparatni dodatki napriklad Intel MPX Na nizhnih rivnyah abstrakcij isnuyut specialni sistemi sho zabezpechuyut bezpeku pam yati Na rivni operacijnoyi sistemi cim zajmayetsya en vin rozpodilyaye dostupni oblasti pam yati dlya okremih procesiv pidtrimka bagatozadachnosti ta zasobi sinhronizaciyi dlya pidtrimannya bagatopotochnosti Aparatnij riven takozh yak pravilo vklyuchaye pevni mehanizmi taki yak kilcya zahistu Div takozhPerepovnennya bufera Zavisli vkazivniki Perepovnennya stekaPrimitkiErik Poll Lecture Notes on Language Based Security Radboud University Nijmegen Language features that break memory safety include Laszlo Szekeres Mathias Payer Dawn Song SoK Eternal War in Memory 2013 IEEE Symposium on Security and Privacy 2013 Memory corruption bugs in software written in low level languages like C or C are one of the oldest problems in computer security Victor van der Veen Nitish dutt Sharma Lorenzo Cavallaro Herbert Bos Memory Errors The Past the Present and the Future RAID 12 Amsterdam The Netherlands and still rank among the top 3 most dangerous software errors Dawn Song Memory safety Attacks and Defenses Berkeley CS161 Computer Security 2015 Vesna In fact after configuration errors implementation errors are probably the largest single class of security errors exploited in practice Laszlo Szekeres Mathias Payer Dawn Song SoK Eternal War in Memory 2013 IEEE Symposium on Security and Privacy 2013 This problem has existed for more than 30 years Dawn Song Memory safety Attacks and Defenses Berkeley CS161 Computer Security 2015 Vesna preventing attackers from reading or writing to memory locations other than those intended by the programmer Laszlo Szekeres Mathias Payer Dawn Song SoK Eternal War in Memory 2013 IEEE Symposium on Security and Privacy 2013 Applications written in low level languages like C or C are prone to these kinds of bugs The lack of memory safety enables attackers to exploit memory bugs by maliciously altering the program s behavior or even taking full control over the control flow Laszlo Szekeres Mathias Payer Dawn Song SoK Eternal War in Memory 2013 IEEE Symposium on Security and Privacy 2013 in finding the balance betweeneffectiveness security andefficiency Victor van der Veen Nitish dutt Sharma Lorenzo Cavallaro Herbert Bos Memory Errors The Past the Present and the Future RAID 12 Amsterdam The Netherlands Memory errors were first publicly discussed in 1972 by the Computer Security Technology Planning Study Panel Victor van der Veen Nitish dutt Sharma Lorenzo Cavallaro Herbert Bos Memory Errors The Past the Present and the Future RAID 12 Amsterdam The Netherlands The Internet Worm exploited a number of vulnerabilities including memory error related ones Laszlo Szekeres Mathias Payer Dawn Song SoK Eternal War in Memory 2013 IEEE Symposium on Security and Privacy 2013 Dawn Song Memory safety Attacks and Defenses Berkeley CS161 Computer Security 2015 Vesna Katrina Tsipenyuk Brian Chess Gary McGraw Seven Pernicious Kingdoms A Taxonomy of Software Security Errors NIST Workshop on Software Security Assurance Tools Techniques and Metrics Long Beach CA 2005 Listopad Richard Jones and Paul Kelly Bounds Checking for C Imperial College 1995 Lipen One response to this analysis is to discard C since this lack of efficient checkability is responsible for many software failures Edsger W Dijkstra Why numbering should start at zero EWD 831 Plataanstraat 5 5671 AL NUENEN The Netherlands the use of the other three conventions has been a constant source of clumsiness and mistakes Dzhon Erikson Haking Iskusstvo eksplojta SPb Simvol Plyus 2010 S 139 ISBN 978 5 93286 158 5 Dzhon Erikson Haking Iskusstvo eksplojta SPb Simvol Plyus 2010 S 142 ISBN 978 5 93286 158 5 David A Wheeler Secure Programming HOWTO Published v3 72 2015 Buffer overflows are an extremely common and dangerous security flaw Common Weakness Enumeration 08 grudnya 2015 Arhiv originalu za 27 veresnya 2016 Procitovano 24 listopada 2016 This typically occurs when the pointer or its index is incremented to a position beyond the bounds of the buffer Steve Christey 13 veresnya 2011 MITRE Arhiv originalu za 12 kvitnya 2018 Procitovano 24 listopada 2016 Guy Keren 2001 2002 Arhiv originalu za 27 veresnya 2016 Procitovano 24 listopada 2016 The runtime environment defines not only how memory is allocated and freed Robert C Seacord Secure Coding in C and C Addison Wesley 2013 S 162 ISBN 978 0 321 82213 0 Jonathan Afek Adi Sharabani Dangling Pointer Smashing the Pointer for Fun and Profit Watchfire Corporation 2007 Kompyuternaya gazeta Arhiv originalu za 22 chervnya 2018 Procitovano 24 listopada 2016 uyazvimosti k kotorym mozhet privesti nepravilnoe ispolzovanie ukazatelej i ssylok Common Weakness Enumeration 08 grudnya 2015 Arhiv originalu za 18 lipnya 2019 Procitovano 24 listopada 2016 Referencing memory after it has been freed can cause a program to crash use unexpected values or execute code Juan Caballero Gustavo Grieco Mark Marron Antonio Nappa Undangle Early Detection of Dangling Pointers in Use After Free and Double Free Vulnerabilities IMDEA Software Institute Madrid Spain Use after free vulnerabilities are rapidly growing in popularity especially for exploiting web browsers comp lang c Arhiv originalu za 27 veresnya 2016 Procitovano 24 listopada 2016 The language definition states that for each pointer type there is a special value Oracle Arhiv originalu za 23 kvitnya 2018 Procitovano 24 listopada 2016 Thrown when an application attempts to use null in a case where an object is required Common Weakness Enumeration 08 grudnya 2015 Arhiv originalu za 27 veresnya 2016 Procitovano 24 listopada 2016 When a program calls free twice with the same argument Yan Huang PDF Arhiv originalu PDF za 17 kvitnya 2018 Procitovano 24 listopada 2016 If free p has already been called before undefined behavior occurs Andrei Alexandrescu Modern C Design Generic Programming and Design Patterns Applied Addison Wesley 2001 it is usually implemented as a thin wrapper around the C heap allocator Guy Keren 2001 2002 Arhiv originalu za 27 veresnya 2016 Procitovano 25 listopada 2016 For example the GNU C compiler s new operator actually invokes the C runtime malloc function Arhiv originalu za 10 veresnya 2018 Procitovano 25 listopada 2016 The C operators new and delete guarantee proper construction and destruction The C style functions don t ensure that OWASP Arhiv originalu za 23 listopada 2016 Procitovano 25 listopada 2016 Problemy svyazannye s ukazatelyami Arhiv originalu za 26 lyutogo 2013 Procitovano 25 listopada 2016 Nichto tak ne bespokoit kak dikie ukazateli Halvar Flake 2006 PDF Arhiv originalu PDF za 3 chervnya 2016 Procitovano 25 listopada 2016 We re looking at the following situation then Common Weakness Enumeration 08 grudnya 2015 Arhiv originalu za 2 zhovtnya 2016 Procitovano 25 listopada 2016 An attacker can sometimes control or read these contents Using and Porting GNU Fortran James Craig Burley 1 chervnya 1991 Arhiv originalu za 5 zhovtnya 2012 Procitovano 25 listopada 2016 Danny Kalev 5 veresnya 2000 Understanding Stack Overflow Arhiv originalu za 5 zhovtnya 2012 Procitovano 25 listopada 2016 The two most common causes for a stack overflow John Boyland Position Paper Handling Out Of Memory Errors University of Wisconsin Milwaukee USA z dzherela 22 bereznya 2016 Procitovano 2018 04 10 An out of memory error can be catastrophic for a program especially one written in a language such as Java that uses memory allocation frequently Mulyadi Santosa 11 30 2006 Arhiv originalu za 14 kvitnya 2018 Procitovano 15 listopada 2016 you can no longer allocate more memory and the kernel kills a task usually the current running one Anders Moller and Michael I Schwartzbach Static Program Analysis Department of Computer Science Aarhus University 2015 Traven Arhiv originalu za 18 sichnya 2016 Procitovano 25 listopada 2016 Detect various kinds of bugs in your code Semantic Designs Arhiv originalu za 18 kvitnya 2018 Procitovano 25 listopada 2016 Programs with pointers can commit a variety of errors in accessing memory PVS Studio 25 03 2015 Arhiv originalu za 25 sichnya 2018 Procitovano 25 listopada 2016 Emery D Berger Benjamin G Zorn DieHard Probabilistic Memory Safety for Unsafe Languages PLDI 06 Ottawa Ontario Canada Konstantin Serebryany Dmitry Vyukov 10 lipnya 2012 PDF GNU Tools Cauldron Arhiv originalu PDF za 12 bereznya 2016 Procitovano 25 listopada 2016 Erik Poll PDF Radboud Universiteit Nijmegen Arhiv originalu PDF za 5 listopada 2016 Procitovano 25 listopada 2016 Manual memory management can be avoided by Dinakar Dhurjati and Vikram Adve Backwards Compatible Array Bounds Checking for C with Very Low Overhead Department of Computer Science University of Illinois at Urbana Champaign an unsolved problem despite a long history of work on detecting array bounds violations or buffer overruns because the best existing solutions to date are either far too expensive for use in deployed production code Bruce Eckel Thinking in Java Fourth Edition Both arrays and containers guarantee that you can t abuse them Whether you re using an array or a container you ll get a RuntimeException if you exceed the bounds indicating a programmer error David Kieras Using C 11 s Smart Pointers EECS Department University of Michigan 2016 Cherven Smart pointers are class objects that behave like built in pointers but also manage objects that you create Microsoft Developer Network Arhiv originalu za 5 grudnya 2017 Procitovano 25 listopada 2016 Oni chrezvychajno vazhny dlya idiomy programmirovaniya RAII ili Resource Acquisition Is Initialialization Common Weakness Enumeration 08 grudnya 2015 Arhiv originalu za 18 lipnya 2019 Procitovano 25 listopada 2016 The software does not check the return value from a method or function which can prevent it from detecting unexpected states and conditions malloc learn microsoft com en us 7 lyutogo 2023 Procitovano 8 bereznya 2024 Arhiv originalu za 29 bereznya 2018 Procitovano 25 listopada 2016 throws std bad alloc or another exception derived from std bad alloc since C 11 on failure to allocate memory Paul and Harvey Deitel C how to program Intel Developer Zone 16 lipnya 2013 Arhiv originalu za 5 travnya 2019 Procitovano 25 listopada 2016 Sarah Diesburg PDF Arhiv originalu PDF za 9 serpnya 2017 Procitovano 25 listopada 2016 Michael D Schroeder and Jerome H Saltzer A Hardware Architecture for Implementing Protection Rings Third ACM Symposium on Operating Systems Principles Palo Alto California LiteraturaErik Poll Lecture Notes on Language Based Security Radboud University Nijmegen David A Wheeler Secure Programming HOWTO v3 72 Edition 2015 PosilannyaZagalni publikaciyi Laszlo Szekeres Mathias Payer Tao Wei Dawn Song SoK Eternal War in Memory IEEE Computer Society Washington DC USA ISBN 978 0 7695 4977 4 DOI 10 1109 SP 2013 13 Dawn Song Memory safety Attacks and Defenses Berkeley CS 161 Computer Security 2015 Vesna Katrina Tsipenyuk Brian Chess Gary McGraw Seven Pernicious Kingdoms A Taxonomy of Software Security Errors ISSN 1540 7993 DOI 10 1109 MSP 2005 159 Emery D Berger Benjamin G Zorn DieHard Probabilistic Memory Safety for Unsafe Languages PLDI 06 Ottawa Ontario Canada ISBN 1 59593 320 4 DOI 10 1145 1133981 1134000 Erik Poll PDF Radboud Universiteit Nijmegen angl Arhiv originalu PDF za 5 listopada 2016 Procitovano 24 listopada 2016 Victor van der Veen Nitish dutt Sharma Lorenzo Cavallaro Herbert Bos Memory Errors The Past the Present and the Future RAID 12 Amsterdam The Netherlands ISBN 978 3 642 33337 8 DOI 10 1007 978 3 642 33338 5 5 Tematichni publikaciyi Guy Keren 2001 2002 angl Arhiv originalu za 27 veresnya 2016 Procitovano 24 listopada 2016 Jonathan Afek Adi Sharabani Dangling Pointer Smashing the Pointer for Fun and Profit Watchfire Corporation 2007 Juan Caballero Gustavo Grieco Mark Marron Antonio Nappa Undangle Early Detection of Dangling Pointers in Use After Free and Double Free Vulnerabilities ISSTA 2012 Minneapolis MN USA ISBN 978 1 4503 1454 1 DOI 10 1145 2338965 2336769 Yan Huang 2016 PDF angl Arhiv originalu PDF za 17 kvitnya 2018 Procitovano 24 listopada 2016 Halvar Flake 2006 PDF Black Hat Federal angl Arhiv originalu PDF za 3 chervnya 2016 Procitovano 24 listopada 2016 John Boyland Position Paper Handling Out Of Memory Errors ECOOP 2005 Workshop on Exceptional Handling in Object Oriented Systems University of Wisconsin Milwaukee USA 2005 Lipen David Kieras Using C 11 s Smart Pointers EECS Department University of Michigan 2016 Cherven Dinakar Dhurjati Vikram Adve Backwards Compatible Array Bounds Checking for C with Very Low Overhead ICSE 06 Shanghai China ISBN 1 59593 375 1 DOI 10 1145 1134285 1134309