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