Крис Касперски
Умные в споре ищут истину, глупцы – выясняют, кто умнее.
Народное
На рынке имеется множество средств как коммерческих, так и бесплатных,
обещающих решить проблему переполняющихся буферов раз и навсегда, но хакеры
ломают широко разрекламированные защитные комплексы один за другим. Почему?
Давайте заглянем под капот Stack-Guard, Stack-Shield, Pro-Police и Microsoft
Visual Studio .NET, сравнив заявленные возможности с реальными.
Ошибки переполнения вездесущи – это факт. Буквально каждые несколько дней
обнаруживается новая дыра, а сколько дыр остаются необнаруженными – приходится
только гадать. Как с ними борются? Арсенал имеющихся средств довольно
разнообразен и простирается от аппаратных защит типа NX/XD-битов до статических
анализаторов наподобие Spilnt.
В последнее время в обиход вошел термин «secure programming»
и издано множество книг по безопасности, настоятельно рекомендующих
использовать динамические средства защиты типа Stack-Guard, внедряющие в компилируемую
программу дополнительный код, проверяющий целостность адреса возврата перед
выходом из функции и предпринимающий другие действия, затрудняющие
атаку.
Расплатой за «безопасность» становятся снижение
производительности (впрочем, довольно незначительное) и необходимость
перекомпиляции всего кода. Но это только внешняя сторона проблемы. Понадеявшись
на широко разрекламированные защитные средства, разработчики расслабляются и…
начинают строчить небрежный код, который StackGuard (StackShield/Pro-Police)
все равно «исправит». Но что именно он правит? Давайте задвинем рекламу в
сторону и посмотрим на защиту глазами хакера, который ломится не в дверь
(там замок), и не в окно (там – сигнализация), а проникает через
никем не охраняемую вентиляционную/канализационную трубу или даже дымоход.
Все защитные механизмы, имеющиеся на рынке,
спроектированы так, что дрожь берет. Сразу видно, что их создатели никогда не
атаковали чужие системы, не писали shell-код и даже не общались с теми,
кто всем этим занимается. Защита не только не останавливает атакующего, но в
некоторых случаях даже упрощает атаку!