Недавно я закончил читать Secure Coding на C и С++ Брайаном Сиакдом, который работает для CERT.
В целом, это отличная книга, и я бы рекомендовал ее любому программисту, который еще не прочитал ее. После прочтения мне приходит в голову, что для всех различных типов уязвимостей безопасности (таких как эксплоит кода эксплойта, переполнение буфера, переполнение целого числа, уязвимости форматирования строк и т.д.) Каждое отверстие безопасности, похоже, сводится к одному: возможность доступа к адресу памяти, который не ограничен буфером, который был законно выделен процессом.
Возможность вводить вредоносный код или перенаправлять логику программы полностью зависит от возможности доступа к адресам памяти, которые попадают за пределы допустимых буферов. Но на языке, подобном Java, это просто невозможно. Самое худшее, что может случиться, - это завершение программы с помощью ArrayIndexOutOfBoundsException
, что приведет к отказу в обслуживании.
Таким образом, существуют ли какие-либо уязвимости безопасности на "безопасных" языках, таких как Java, где недопустимые обращения к памяти невозможны? (Я использую Java в качестве примера здесь, но на самом деле мне интересно знать об уязвимостях безопасности на любом языке, который предотвращает недопустимые обращения к памяти.)