Assumed cyberpunk superuser
Большинство любителей фантастики знает, что Уильям Гибсон писал Нейроманта, зеленого понятия не имея о программировании и сетевых технологиях. Возможно, с этим связана характерная для вселенной Муравейника и ранних реализаций графических интерфейсов пользователя цветовая схема “зеленым по черному”. В последнее время она, кстати, переживает некоторый ренессанс в коммуникаторах и планшетах с экранами, выполненными по технологии AMOLED. Дело в том, что реализация ее, предпочитаемая Samsung, следует так называемой Pentile-укладке органических светодиодов, при которой фактическое число зеленых субпикселей вдвое больше, чем красных и синих. Очевидно, что для AMOLED вообще предпочтительны темные темы, поскольку темный фон в этом случае означает эффективно бесконечную контрастность, но только цветовая схема “зеленое на черном” позволяет избавиться от надоедливых цветных лесенок на тонких элементах интерфейса.
Однако вернемся к Гибсону: так получилось, что именно с Нейроманта, собравшего полную корзинку всевозможных жанровых премий (результат, превзойденный впоследствии только Энн Лекки с ее Служанкой правосудия, и тоже дебютным романом), ведется формальный отсчет киберпанка как отдельного направления в НФ. Легко убедиться, что такое мнение ошибочно: например, совершенно киберпанковские по духу рассказы Матесона и Желязны написаны еще до появления первых микропроцессоров, а в 1974 г. М. Джон Харрисон проделал первую убедительную попытку скрестить киберпанк и космооперу в “космоопере без героя”.
И все же именно по раннему (!) Гибсону с его характеристичным невниманием к аппаратной реализации заклепок меряют обычно авторов киберпанка. Сегодня выпал повод привести контрпример к этому утверждению. Он взят из работы Джона Ширли Затмение: корона, третьего тома трилогии Песня по имени Юность. Действие работы Ширли происходит в постапокалиптической Европе и антиутопической Северной Америке времен Третьей мировой войны между возрожденным Советским Союзом и НАТО, а больше всего места в цикле отведено Парижу. Ну вы поняли.
Кроме того, Ширли в среде киберпанков фигура не первая, но и не вторая: он носит ласковое прозвище “Пациент Зеро”, написал в 1980 г. (то есть за четыре года до Нейроманта) роман И пришел город…, где коллективное бессознательное мегаполиса сращивается в отражении зеркальных очков с медиа-электронной инфосферой, и посоветовал Гибсону со Стерлингом довести-таки до ума сборник Сожжение Хром, к созданию которого и сам приложил руку.
Итак, рассмотрим отрывок из романа Ширли, иллюстрирующий работу хакеров Нового Сопротивления (перевод по русскому изданию 2015 г.).
— Только на публике вот этой хуйни не надо-а-а-а! — завизжал он.
— Да ну, сынок, я ж п’сто играюсь…
— Слышь, на сцене командую я, мы ж договорились, ну Беттина! Не смей со мной так шутить на сцене! — запротестовал он и вырвался.
— Мы за кулисами. А ну быро взял меня покиссал.
Она навалилась на него, и Жером подчинился. Потом, отпустив его голову, она заглянула ему в глаза: почти нос в нос.
— В протоколах шаришь?
— Знаю я протоколы Unix. И знаю, какой системный вызов для суперпользователя нужен. Знаю, как отладку запустить.
Если они эту функцию не переписали.
В данном случае речь идет о системном вызове ptrace(), применяемом для отладки средствами стандартных дебаггеров *nix-систем, например, gdb. С его помощью пользователь может подсоединяться к целевому процессу для изучения его внутреннего состояния, при необходимости манипулируя файловыми дескрипторами, объемом выделяемой памяти и прочими свойствами, однако это касается только процессов с тем же идентификатором пользователя (user ID).
Суть предлагаемого Жеромом эксплойта в том, что, если отслеживание состояния процесса средствами gdb и ptrace() через точки прерывания (breakpoints) начнется раньше, чем временные ID (euid, egid) порождаемого (например, через /sbin/modprobe) дочернего процесса будут назначены ядром системы, то в этот дочерний процесс можно внедрить и запустить на выполнение вирусный код с правами суперпользователя (рут, root). Для нужд взлома системы данный отладчик следует использовать вместе с программами дезассемблирования на исходные коды.
Как именно использует хакер в книге Ширли уязвимость при временном назначении суперпользовательского идентификатора?
Левое полушарие мозга работало с чипом, сигнал которого обеспечивал взаимодействие с мощным микрокомпьютером, скрытым в слюдяных на вид чиповых слоях внутри Боунсова синтезатора. Жером-X увидел на галлюцинаторном ЖК-дисплее перед своим мысленным оком:
London UNET: ID#, date, assumed SUPERUSER name.
Он запустил программу электронной почты, которая на самом деле была шифровальным червем. Дьявольски хитрый алгоритм, используя переполнение буфера ввода, взметнул его и понес прямо в командный центр компьютера-жертвы. В обход паролей и системы безопасности.
На первый взгляд может показаться, что описанный прием ничем не лучше голливудских сценариев, где в Пароле Рыба-меч взламывают шифр Вернама типа “одноразовый блокнот”, а в Девушке с татуировкой дракона заставляют Лисбет Саландер перед отправкой письма своему другу Чуме внимательно созерцать экран ноутбука, где вместо “Идет шифрование” возникает надпись “Идет расшифровка”.
Но это не так. Предположим, что эффективный метод архивации данных ужимает очень большой файл (несколько десятков Гб нулей и сравнительно небольшой вирусный код) до существенно меньшего размера, и затем этот файл отсылается по почте. Если антивирусное программное обеспечение недостаточно хорошо испытано на файлах такого объема, то вирусный код действительно может получить эксплойт-доступ к суперпользовательским привилегиям, поскольку атрибут setuid (присвоение идентификатора пользователя, ID, на время выполнения) устанавливается в ситуации переполнения буфера или сегментации файла, корректную обработку которой программист мог и не предусмотреть (а обычно как раз не предусмотрел).
Например, обыкновенно argv[0] в *nix-системах возвращает имя программы путем чтения из массива указателей на стрóки аргументов командной строки, но этому указателю можно присвоить и произвольное значение. Теперь, если программа электронной почты на стороне жертвы, обнаружив, что не в состоянии обработать письмо, генерирует процесс-копию для создания сообщения об ошибке, то при условии, что для этого запускается системный вызов execv(argv[0], argv), а вирусный код уже изменил значение argv[0], возникает локальный рут-эксплойт.
Из приведенных отрывков ясно, что представление о механизмах работы *nix-систем под капотом у Ширли, киберпанк-пациента Зеро, всяко не хуже, чем у классика USENET-космооперы и преданного поклонника UNIX Вернора Винджа.
К сожалению, трилогия Затмения до сих пор остается его лучшей работой, да и она не лишена откровенных слабостей. Например, как вам понравится танковый поход русских неокоммунистов в Европу за продовольствием на фоне стычек за арктический нефтеносный шельф? И да, Третья мировая война разворачивается там почти исключительно на европейском ТВД, а о существовании Китая с Индией, Пакистаном и Японией автор практически забывает.
LoadedDice