Первая и самая серьёзная архитектурная уязвимость — это однородность оперативной памяти: в ней все можно хранить в произвольном порядке. Конечно, имеются соглашения на уровне ОС о распределении адресных пространств, часть этих соглашений уже давно контролируется аппаратурой (в области ОС нельзя работать прикладным программам), но только часть. Атака, направленная на повышение уровня привилегий, как раз и эксплуатирует уязвимость в архитектуре, не защищённую аппаратурой. В области прикладных программ пока разрешено работать программам с привилегиями уровня ядра ОС, и именно этим пользуются хакеры.

Вторая архитектурная уязвимость — это наличие единого стека. В нём хранится как служебная информация (указатели на точки возврата из процедур), так и локальные данные программ. Соглашение о разделении и упорядочивании стека существует, но не контролируется аппаратурой. Атака через переполнение буфера как раз и эксплуатирует этот механизм методом подмены адреса точки возврата из процедуры. Следовательно, если поставить на контроль целостность адресов области стека, где хранятся указатели на точки возврата из процедур, то можно блокировать целый класс хакерских атак.

Третья архитектурная уязвимость — это равноправие программ, независимо от их источника загрузки в оперативную память. Максимум, что проверяется на данный момент, — это авторство, через цифровые подписи, ну и, видимо, уже скоро начнут контролировать наличие сертификатов на право использование программ. Как показывают недавние громкие скандалы, связанные с дискретизацией подписей и сертификатов, даже эти средства защиты не панацея. Нужно ранжировать непосредственный источник загрузки исполняемого программного кода. Одно дело — локальный диск, это максимальный уровень доверия; другое дело — съёмный носитель либо сетевой доступ (в большинстве случаев им совсем нельзя доверять). Если при загрузке информации (данных и программ) в оперативную память маркировать страницы памяти кодом устройства, с которого произведена загрузка, то становится возможным блокировать попытки запуска программ со съёмных устройств и сети. Атака по типу нашумевшего на весь мир компьютерного червя Stuxnet стала бы просто невозможной.



12 из 72