Конечно, если известен принцип использования уязвимости, должны существовать и «контрпринципы». Например, если атакуемая программа написана на паскалеподобном языке, то сам компилятор озаботится проверкой целостности стека и не позволит shell-коду перехватить управление. Правда, в этом случае программа, скорее всего, просто «вылетит» с сообщением об ошибке. Другой способ борьбы с переполнением буферов — выделять их не в стеке, а в динамической памяти. Есть и способ номер три, и способ номер четыре и т. д. Все они активно применяются для написания «безошибочных» программ. Но стопроцентной гарантии корректности и они не дают. Ведь типичные системные программы содержат миллионы строк кода, написанных в разных условиях разными программистами. Как ни вылизывай, ни отлаживай, ни тестируй такую программу, все равно просмотришь какую-нибудь «мелочь»: в одном месте не проверяется количество параметров, передаваемых функции; в другом — под локальные данные выделяется статический массив; еще где-нибудь вместо «длинных» указателей используются «короткие» и т. п. Да и сроки на отладку ограничены: ежегодно появляются новые версии операционных систем и системных программ с новыми ошибками, и заранее предсказать, где и в какой момент обнаружится новая «дыра», практически невозможно. Конечно, производители активно занимаются поиском ошибок и в новом, и в давно эксплуатируемом программном обеспечении, регулярно выпускают обновления, «заплатки» и т. п. Но скорой и окончательной победы над уязвимостями пока не ожидается.
Поиском ошибок занимаются не только производители программного обеспечения, но и многочисленные «посторонние» исследователи. Это не вирусописатели, это представители совсем другой хакерской специализации — «реверсеры». Их основные инструменты — отладчики и дизассемблеры. Нередко в их распоряжении имеются даже исходные тексты исследуемых программ: в частности, только в XXI веке произошли, по крайней мере, две крупные утечки конфиденциальных материалов из Microsoft. А исходный текст значительной части программного обеспечения для Linux вообще открыт и общедоступен. Реверсеров можно разделить на три большие группы.





Свежие комментарии