Автор: Киви Берд
Мир компьютерной безопасности живет таким образом, что здесь чуть ли не каждый день выявляются все новые и новые дыры-уязвимости. Число которых, несмотря на постоянную с ними борьбу и латания, ничуть не уменьшается. Как правило, всякая очередная брешь или вредоносный код - это разновидность опасностей того или иного уже известного типа. Поэтому рассказывать о текущих сражениях с подобными угрозами - сколь бы напряженной и важной эта борьба ни была - дело довольно скучное. Но иногда здесь случаются действительно важные события принципиального характера.
Например, всякая серьезная уязвимость в плеере flash-файлов - катастрофа по определению. Пользователи Сети используют много разных браузеров, которые работают на основе существенно разных операционных систем. Однако технология Flash едина для всех, flash-плеер изготовляет лишь один разработчик - Adobe, так что одна и та же по сути программа работает на платформах Windows, Mac OS, Linux и пр. И коль скоро сложилось так, что flash-плееры ныне устанавливают почти на все браузеры, то любая серьезная дыра, обнаруженная злоумышленниками в защите Flash, потенциально становится общей проблемой. Что недавно и произошло.
В первой половине апреля Марк Дауд (Mark Dowd), сотрудник хакерской команды X-Force в подразделении IBM Internet Security Systems, опубликовал информацию об обнаруженной им уязвимости типа "переполнение буфера памяти" в программе Adobe Flash Player, когда та выполняет обработку мультимедиа-файлов. В частности, Дауд сообщил, что удаленный злоумышленник, создав медиа-файл особой структуры и убедив жертву его воспроизвести, способен заставить систему выполнять произвольные команды. Например, подсадить троянца или обустроить "черный ход" для проникновения в систему. Поскольку выявлением дыры занимался серьезный специалист из почтенной фирмы, компания Adobe была предупреждена заранее, так что объявление о новой дыре было сделано в тот же день, когда в Сети появилась версия Flash Player с патчем, эту дыру латающим. В общем, внешне все было как и обычно в данной сфере.
Но спустя неделю Марк Дауд опубликовал на сайте IBM ISS статью, в которой описал, что представляет собой выявленная уязвимость и как именно ее можно эксплуатировать на Wintel-системах. Из этой работы специалистам, хорошо понимающим суть дела, стало ясно, что история с flash-плеером представляет собой далеко не рядовой случай, а, похоже, открывающий новую страницу в противостоянии средств компьютерной обороны и все более усложняющихся методов атак.
С присущей компьютерам проблемой переполнения буфера памяти мир безопасности вплотную познакомился в 1996 году, когда появилась работа хакера Aleph One "О сокрушении стека памяти ради забавы и прибыли" ("Smashing the Stack for fun and Profit", documents.iss.net/whitepapers/IBM_X-Force_WP_final.pdf). Статья не только наглядно демонстрировала, как можно эксплуатировать эту уязвимость, но и стала основой для множества последовавших атак этого типа. Многие годы борьбы с этой напастью позволили создать и отточить эффективные средства защиты от злонамеренных нарушений в работе памяти. Однако нынешняя статья Дауда показывает, по свидетельству экспертов, что проблема не исчезла, а просто переместилась на более сложный и, можно даже сказать, изощренный уровень.
В самом простом изложении техническая суть открытия Дауда сводится к очень тонкой работе с NULL pointer, особым указателем адреса памяти с несуществующим значением. В большинстве случаев приложение должно остановиться и обрушиться, если почему-то вдруг происходит обращение к значению NULL в памяти. Однако обнаружено, что в данной ситуации есть возможность заставлять некоторые приложения обращаться к произвольным адресам памяти и выполнять соответствующие коды всякий раз, когда происходит доступ к NULL pointer. Правда, добиться этого в реальности чрезвычайно сложно, а в общей ситуации для разных приложений практически невозможно. Так, во всяком случае, считалось до работы Марка Дауда, открывшей новый класс уязвимостей, свойственных чуть ли не всем компьютерным платформам.
Возникает закономерный вопрос: если эти самые NULL-указатели так опасны, почему их до сих пор используют в кодах программ, вместо того чтобы от них отказаться? К сожалению, эта проблема программирования имеет слишком глубокие корни, уходящие к аппаратным кодам, которые непосредственно управляют работой регистров памяти. Иначе говоря, опора на NULL-указатели, чрезвычайно полезные для начальных установок переменных, заложена в основы взаимодействий компьютера с программными приложениями.
Поскольку эта опасность известна давно, в современных ОС предпринят ряд мер для защиты от угрозы и предельного сокращения времени, в течение которого может действовать вредоносный баг. По этой причине опасные в прошлом баги стали ненадежны с точки зрения атак, и их, вообще говоря, перестали воспринимать как существенную угрозу. Теперь же работа Дауда показала, что, сконцентрировавшись на единственном, но широко распространенном приложении вроде flash-плеера, злоумышленники по-прежнему могут эффективно использовать переполнение буфера. В частности, продемонстрировано, что встроенная в плеер виртуальная машина (ActionScript Virtual Machine) может быть очень полезна не только для быстрого выполнения скриптов в онлайновой рекламе, но и для хитроумных атак злоумышленников. Дауд изготовил вредоносный SWF-файл (Shockwave Flash), способный одновременно и без следов поражать компьютеры как с браузерами Internet Explorer, так и Firefox, не вызывая сбоев в работе самих программ.