Осенью 2005 года один из лучших специалистов по внутренностям Windows вставил в привод купленный музыкальный CD — и обнаружил, что диск установил на его компьютер шпионское ПО, которое прячется так же, как это делают вирусы.
Марк Руссинович — фигура в мире Windows почти легендарная. Сооснователь компании Winternals, автор утилит Sysinternals, которые системные администраторы по всему миру использовали (и используют до сих пор) для диагностики. Человек, который знал архитектуру Windows на уровне ядра. Тестируя собственную утилиту RootkitRevealer — инструмент, предназначенный для обнаружения скрытых компонентов в системе, — он увидел нечто неожиданное. На его домашнем компьютере прятался драйвер, который перехватывал системные вызовы и скрывал от пользователя любые файлы и процессы, чьё имя начиналось с префикса «$sys$». Классический приём руткита — вредоносной программы, которая маскирует своё присутствие, залезая глубоко в операционную систему.
Руссинович начал разматывать клубок. Драйвер появился после того, как он послушал на компьютере музыкальный CD, купленный в обычном магазине. Диск был выпущен лейблом Sony BMG. При вставке в привод Windows автоматически запускала программу установки — благодаря механизму автозапуска (autorun), который в те годы был включён по умолчанию и срабатывал без явного согласия пользователя. Программа предлагала принять лицензионное соглашение (EULA), текст которого не упоминал ни руткит-подобное поведение, ни установку драйверов уровня ядра. Пользователь, нажавший «Agree», получал на свою машину компонент, работающий на самом глубоком уровне привилегий Windows — и не имел штатного способа его удалить.
Руссинович не стал тянуть: 31 октября 2005 года он опубликовал подробный разбор в своём блоге. Пост стал одним из самых читаемых технических текстов года. Меня до сих пор поражает точность его работы: он не просто обнаружил аномалию, но шаг за шагом описал, какие системные вызовы перехватывает драйвер, как именно фильтрация имён файлов реализована на уровне ядра и почему попытка вручную удалить компонент приводила к отказу CD-привода. Последнее — отдельная деталь: драйвер встраивался в стек устройств привода, и его удаление ломало цепочку обработки запросов.
Технология называлась Extended Copy Protection (XCP) и была разработана британской компанией First 4 Internet. Sony BMG лицензировала её для защиты музыкальных дисков от копирования. Идея, в общих чертах, была такой: при вставке CD в компьютер на машину устанавливался специальный медиаплеер, который позволял слушать музыку, но ограничивал количество копий (обычно до трёх). Чтобы пользователь не мог обойти ограничение, программа устанавливала драйвер, работающий в режиме ядра, — и этот драйвер скрывал компоненты защиты от глаз пользователя и от антивирусных программ.
Технически XCP перехватывала несколько ключевых системных вызовов Windows, отвечающих за перечисление файлов и процессов. Любой объект, чьё имя начиналось с «$sys$», становился невидимым для стандартных средств ОС: проводника, диспетчера задач, большинства антивирусов того времени. Драйвер загружался при каждом старте системы и работал постоянно — вне зависимости от того, слушал ли пользователь защищённый диск или нет.
XCP была установлена на примерно 2 миллиона дисков, охватывавших 52 наименования в каталоге Sony BMG. Это была лишь часть каталога — но часть, разошедшаяся по магазинам по всему миру. Покупатель, приобретавший альбом Нила Даймонда или Селин Дион, не мог определить по внешнему виду упаковки, что диск содержит программное обеспечение, которое перепишет поведение его операционной системы на уровне ядра. Маленькая надпись о наличии «content protection» присутствовала, но не раскрывала ни природу защиты, ни глубину вмешательства в систему.
Проблема XCP была бы скандалом сама по себе — навязанное скрытое ПО на легально купленном продукте. Но у истории появилось второе дно, которое превратило корпоративную неловкость в полноценную угрозу безопасности.
Механизм сокрытия, реализованный драйвером XCP, был универсальным. Он прятал всё, что начиналось с «$sys$», — не проверяя, принадлежит ли файл системе защиты Sony BMG или чему-то совершенно другому. По сути, Sony BMG бесплатно раздала авторам вредоносного ПО готовый плащ-невидимку. Любой троян, червь или шпионская программа могла переименовать свои файлы, добавив этот префикс, — и мгновенно стать невидимой на миллионах компьютеров, где уже был установлен XCP-драйвер.
И авторы малвари не заставили себя ждать. В течение нескольких недель после публикации Руссиновича появились вредоносные программы, целенаправленно использующие уязвимость XCP для маскировки. Трояны и черви прятались за тем же самым префиксом, пользуясь тем, что антивирусы не видели скрытых файлов. Агентство US-CERT (подразделение Министерства внутренней безопасности США, отвечающее за кибербезопасность) выпустило официальное предупреждение, квалифицировав XCP как угрозу. Когда государственная структура, занимающаяся защитой критической инфраструктуры, публикует бюллетень о программе, установленной музыкальным лейблом, — это уже территория, на которую ни один корпоративный юрист не хочет ступать.
Грубо говоря, Sony BMG создала ситуацию, в которой покупка легального музыкального диска делала компьютер менее защищённым, чем скачивание того же альбома с пиратского торрент-трекера. Пират получал чистые MP3-файлы. Законопослушный покупатель получал руткит.
Первые дни после публикации Руссиновича Sony BMG провела в режиме, который можно описать как агрессивное отрицание. Президент глобального цифрового подразделения компании Томас Хессе в эфире NPR произнёс фразу, ставшую символом корпоративной глухоты: «Большинство людей даже не знают, что такое руткит, так зачем им об этом беспокоиться?» Аргумент из серии «пока вы не видите проблему, проблемы не существует» — применённый, по иронии судьбы, к технологии, специально спроектированной, чтобы быть невидимой.
Под нарастающим давлением прессы, сообщества безопасности и предупреждения US-CERT компания начала сдавать позиции — но медленно и неуклюже. Сначала Sony BMG выпустила «патч», который якобы убирал функцию маскировки, но не удалял сам драйвер. Затем предложила деинсталлятор. И здесь история приобрела оттенок, от которого хочется одновременно смеяться и хвататься за голову.
Чтобы получить деинсталлятор, пользователь должен был зайти на сайт Sony BMG, заполнить форму, указать свой email, дождаться ответного письма со ссылкой, перейти по ней — и установить ActiveX-компонент, который и выполнял удаление. ActiveX — технология, привязанная к Internet Explorer, — требовала от пользователя разрешения на запуск произвольного кода с веб-страницы. Исследователи безопасности немедленно обнаружили, что этот ActiveX-компонент сам содержал уязвимости: он оставался в системе после удаления XCP и мог быть использован любым вредоносным сайтом для выполнения произвольного кода на компьютере жертвы. Деинсталлятор, призванный залатать дыру, прорубил новую.
15 ноября 2005 года Sony BMG наконец объявила об отзыве всех затронутых дисков из продажи и предложила обмен на версии без DRM-защиты. От момента публикации Руссиновича до отзыва прошло ровно две недели — срок, за который вредоносные программы уже научились использовать предоставленный Sony BMG механизм маскировки.
XCP не была единственной DRM-системой, которую Sony BMG встраивала в свои диски. Параллельно использовалась технология MediaMax, разработанная компанией SunnComm. MediaMax работала иначе: она не устанавливала руткит-драйвер и не скрывала файлы на уровне ядра. Её проблемы были другого рода — она устанавливала компоненты на жёсткий диск ещё до того, как пользователь принимал лицензионное соглашение, и имела собственные уязвимости. Но смешивать эти два случая — ошибка: техническая природа угроз принципиально различалась.
Масштаб, впрочем, MediaMax добавляла колоссальный. Если XCP затронула 2 миллиона дисков, то MediaMax была установлена на 20 миллионов копий, охватывающих 50 наименований. В сумме Sony BMG распространила DRM-защиту с теми или иными проблемами на десятках миллионов физических носителей. Оба эпизода слились в один кризис, который публика запомнила просто как «руткит Sony» — хотя руткитом в строгом смысле была только XCP.
Меня удивляет, насколько масштаб MediaMax-дисков превышал XCP, — и насколько меньше внимания она получила. Видимо, слово «руткит» обладает собственной гравитацией в медийном пространстве: оно затягивает всё внимание на себя, оставляя менее драматичные, но не менее реальные проблемы в тени.
Ещё один слой скандала — и один из самых едких — обнаружился, когда исследователи заглянули внутрь самой XCP. Программа, призванная защищать авторские права Sony BMG на музыку, содержала фрагменты кода из проектов с открытым исходным кодом: кодировщика LAME, библиотеки mpglib, кодека FAAC, библиотеки тегов id3lib и медиаплеера VLC. Все эти проекты распространялись под свободными лицензиями (GPL и LGPL), которые требовали, как минимум, раскрытия исходного кода производных работ и указания авторства.
Sony BMG — корпорация, тратившая миллионы на судебные преследования людей, скачивавших музыку, — сама нарушила условия лицензий чужого программного обеспечения. Она взяла чужой код, скомпилировала его в закрытый коммерческий продукт и распространила на миллионах носителей, не выполнив ни одного требования лицензий. Это было не просто лицемерие — это было юридически значимое нарушение авторских прав, совершённое в процессе агрессивной защиты собственных авторских прав. Симметрия настолько совершенная, что кажется выдуманной, — но она документально подтверждена.
Юридические последствия начали нарастать почти сразу. Коллективные иски были поданы в нескольких штатах. Генеральный прокурор Техаса Грег Эбботт подал иск против Sony BMG, ссылаясь на закон штата о шпионском ПО — один из первых случаев, когда DRM была юридически квалифицирована как spyware. Генеральный прокурор Нью-Йорка также начал расследование. Федеральная торговая комиссия (FTC) провела собственное расследование практик компании.
30 января 2007 года было достигнуто урегулирование по результатам расследования FTC. Sony BMG обязалась выплатить пользователям компенсацию — до $150 за ущерб, нанесённый деинсталлятором и самой XCP. Компания также взяла на себя обязательство не устанавливать программное обеспечение скрытно, без явного и информированного согласия пользователя. Формулировка обязательства звучит настолько очевидно, что сам факт необходимости её закреплять в юридическом документе говорит о многом.
Помимо прямых финансовых потерь — компенсаций, судебных издержек, стоимости отзыва и замены дисков — Sony BMG понесла репутационный ущерб, который трудно выразить в цифрах, но легко проследить по последствиям. Слово «rootkit» навсегда приклеилось к бренду в контексте цифровой безопасности. Кейс стал учебным примером в курсах по информационной безопасности, компьютерной этике и корпоративному праву. Каждый раз, когда какая-либо компания рассматривает возможность встроить агрессивную DRM в свой продукт, кто-нибудь в комнате произносит «Sony rootkit» — и разговор меняет направление.
Отдельного разбора заслуживает роль автозапуска Windows (autorun/autoplay) во всей этой истории. В 2005 году при вставке CD в привод Windows автоматически выполняла файл autorun.inf с диска — без какого-либо подтверждения от пользователя. Этот механизм был задуман для удобства: чтобы установочные диски сами запускали инсталлятор, а музыкальные — плеер. На практике он превратился в вектор атаки, которым пользовались и вирусописатели, и, как выяснилось, крупные звукозаписывающие лейблы.
XCP эксплуатировала автозапуск для показа лицензионного соглашения (EULA), текст которого был непрозрачен. Соглашение не объясняло, что на компьютер будет установлен драйвер уровня ядра с функциями маскировки. Оно не предупреждало, что удаление компонента штатными средствами невозможно и что попытка ручного удаления может вывести из строя CD-привод. Пользователь, который хотел просто послушать купленный альбом, оказывался перед выбором: принять непонятное соглашение или не иметь возможности воспользоваться продуктом, за который уже заплатил. А если у него была отключена функция автозапуска — что в 2005 году было редкостью среди обычных пользователей — фирменный плеер просто не устанавливался, и диск оставался обычным аудио-CD.
После скандала с Sony BMG дискуссия о безопасности автозапуска вышла на новый уровень. Microsoft в конечном итоге изменила поведение autorun в последующих версиях Windows, ограничив автоматическое выполнение кода с оптических носителей и USB-устройств. Путь к этому изменению занял годы, но руткит Sony BMG был одним из самых громких аргументов в пользу реформы.
История XCP ценна не как курьёз и не как повод для злорадства по адресу крупной корпорации. Она ценна как демонстрация фундаментального противоречия, заложенного в саму идею агрессивного DRM.
Любая система защиты от копирования, работающая на компьютере пользователя, вынуждена действовать против интересов этого пользователя — ограничивать его возможности на его же машине. Чтобы быть эффективной, она должна быть трудноудаляемой. Чтобы быть трудноудаляемой, она должна прятаться. Чтобы прятаться, она должна использовать те же техники, что и вредоносное ПО. Эта цепочка неизбежна, и XCP просто прошла по ней до логического конца — до руткита в ядре операционной системы, установленного с музыкального компакт-диска.
Мне кажется, самая точная формулировка проблемы принадлежит не юристам и не журналистам, а самой логике произошедшего: корпорация, борющаяся с нелегальным копированием, использовала методы, неотличимые от методов тех, с кем она боролась, — и при этом нарушила чужие авторские права, встроив в свою защиту чужой открытый код без соблюдения лицензий. Компания, требовавшая от потребителей уважения к интеллектуальной собственности, продемонстрировала, что сама не считает нужным соблюдать аналогичные правила, когда они касаются чужого труда.
После урегулирования 2007 года Sony BMG отказалась от использования XCP и MediaMax. Индустрия в целом начала отходить от DRM на физических носителях — не столько из этических соображений, сколько из прагматических: цифровая дистрибуция через iTunes и позднее стриминговые сервисы сделала защиту CD бессмысленной. Но прецедент остался. Он остаётся актуальным каждый раз, когда производитель оборудования, разработчик игры или поставщик контента решает, что ради защиты своего продукта допустимо тайно установить на чужой компьютер программу, о которой владелец этого компьютера ничего не знает, — и которую он не просил.