Архивы: по дате | по разделам | по авторам

Кивино гнездо: Ближе к железу

АрхивКивино гнездо
автор : Берд Киви   18.11.2010

Если в течение недели из разных ИТ-областей появляются по меньшей мере три новости примерно на одну и ту же тему, то на тенденцию явно имеет смысл обратить внимание.

=+=+=+=

Темой нынешнего обзора станут новости о программных средствах, в потенциале способных наносить вред компьютерному оборудованию и данным не на обычном уровне операционной системы и приложений, а значительно глубже — на уровне аппаратного обеспечения.

Скрытый отладочный режим в процессорах AMD

Некий анонимный исследователь-хакер, укрывшийся под ником Czernobyl или просто "Черно", обнародовал в интернете информацию о секретном отладочном режиме, встроенном во все процессоры AMD, начиная с поколения Athlon XP. Данная публикация открывает двери для весьма продвинутых экспериментов, простирающихся далеко за границы того, что определено официальными спецификациями к процессорной архитектуре x86.

Отладочный режим, обнаруженный Чернобылем, выглядит как сугубо внутренний сервис фирмы AMD, закодированный в процессоры изначально, однако отключенный чипах, поступающих в продажу. Хотя расширенные функциональные возможности по-прежнему остаются в процессоре, получить к ним доступ можно лишь в том случае, если определенные служебные регистры заполнить набором определенных байтов. По сути дела, это эквивалентно вводу пароля.

Но коль скоро пароль этот постоянный и фактически зашит в схему микропроцессоров, Чернобыль сумел его отыскать путем сканирования памяти компьютера. Для человека, понимающего, что он делает, подобная задача не слишком сложна, принимая во внимание, что хакеру уже удалось перед этим раздобыть имена тех конкретных регистров, в которые следует поместить байты отпирающей комбинации.

Получив доступ к отладочному режиму, Черно обнаружил массу новых заманчивых возможностей, которые делают процессоры AMD "наиболее предпочтительным выбором" для специалистов, занимающихся программированием на глубоком уровне. В особенности же — для тех людей, которые решают задачи обратной инженерной разработки. В частности, среди новых возможностей теперь есть такие, как условные точки останова программы в зависимости от содержимого данных и точки останова прочих типов (data-aware conditional breakpoints, page-guard breakpoints и т.д.), реализуемые непосредственно на аппаратном уровне.

Чернобыль достаточно подробно описывает проделанную им работу в документации об активации отладочного режима. Поскольку восстановление функций отладочного инструментария происходит, по сути, методом тыка, исследователь характеризует свое творчество как "проект в процессе реализации, но уже работоспособный — поэтому публикуемый как есть".

Среди инструкций Чернобыля, в частности, встречаются и такие пассажи: "Предупреждение! Выставление в младших битах регистра значения Control=1 следует рассматривать как 'зарезервировано / опасно / не используется'. И хотя сам я знаю (мне думается), каким образом микрокод функционирует при такой установке параметра, я не буду это документировать. Ничего полезного там нет (впрочем, любители приключений не обязаны принимать мои слова на веру)"...

Все, что Чернобыль счел нужным рассказать о своих открытиях, он опубликовал на сайте Woodmann.com в тексте под названием "Суперсекретные отладочные возможности процессоров AMD".

Затачивание вредоносного ПО под конкретный процессор

В условиях, когда свыше девяти десятых долей от всех компьютеров в мире работало под управлением нескольких вариаций одной и той же ОС Microsoft Windows, для писателей всевозможных вредоносных программ типа вирусов и червей создалась максимально благоприятная обстановка. Если же учесть, сколь мощно монокультура Windows подпитывалась набором абсолютно доминирующих приложений от того же поставщика — типа Microsoft Office, браузер Internet Explorer и почтовый клиент Outlook, — то написание вредоносного кода, который имел бы высокие шансы отыскать в качестве мишени уязвимую систему, стало делом по сути тривиальным.

Ныне, как известно, эта безрадостная с точки зрения инфобезопасности ситуация начала меняться. Хотя и медленно, но рынок Windows сужается по мере того, как конкуренты вроде платформ Mac и Linux набирают все больше поклонников. Особенно же отчетливо эта тенденция проявляется в том, как народ все больше и больше переходит от настольных компьютеров к мобильным устройствам, работающим на основе платформ Apple iOS, Google Android, RIM Blackberry и так далее. Соответственно, наблюдается и стабильное сокращение рыночной доли программ Microsoft.

Вместе с исчезновением монокультуры Windows и радикальным расширением спектра программных средств, злоумышленникам придется отыскивать и новые типы атак — которые уже не будут специфическими для конкретной ОС или для конкретных приложений. Один из наиболее логичных и естественных шагов в данном направлении, по мнению экспертов-исследователей, это нацеливать атаки уже не на программы, а на аппаратное обеспечение. В частности, на процессоры конкретных фирм-изготовителей.

В ноябре этого года опубликована статья исследователей из парижского ИТ-института ESIEA (Ecole Superiore d'Informatique, Electronique, Automatique), в общих чертах демонстрирующая, каким примерно образом это будет происходить. В работе французских авторов (Anthony Desnos, Robert Erra, Eric Filiol) представлен открытый ими метод для выявления процессора, используемого произвольной системой, c целью последующего захвата управления этим аппаратным обеспечением. По заключению экспертов, защитить систему от атак, воздействующих на уровне "железа", оказывается существенно труднее.

Понятно, что для успеха атаки в данном направлении задача по идентификации конкретного процессора в системе- мишени представляется одной из принципиально важных. И хотя задачу эту нельзя назвать тривиальной, французские авторы показывают, что решить ее не так уж сложно.

Один из ключей к ее решению предоставляет давнишний баг в процессорах Intel P5, обнаруженный в середине 1990-х годов и вызывавший ошибки в операциях арифметики с плавающей точкой (или плавающей десятичной запятой, если кому-то такой термин нравится больше). Простой способ для определения того, используется ли в каком-то из компьютеров данный чип, — это выполнить определенное вычисление, о котором заведомо известно, что Пентиум сделает там ошибку.

Авторы статьи из ESIEA отмечают, что все реально используемые чипы имеют в себе определенные математические ограничения, продиктованные теми стандартами, которые они применяют для кодирования чисел и выполнения операций арифметики с плавающей точкой. Некоторые из этих ограничений достаточно хорошо известны специалистам, другие известны хуже, но самое главное, что все они приводят к тем или иным неточностям в результатах вычислений. А специфика архитектуры конкретного процессора, соответственно, способна порождать своего рода "подпись" из такого рода неточностей.

Поэтому исходная задача, которую поставили перед собой Эрик Филиоль и его коллеги, свелась к тому, чтобы отыскать некий относительно небольшой и универсальный набор вычислений с плавающей точкой, который мог бы уникально идентифицировать любой процессор по его сигнатуре неточностей.

На данном пути исследователям уже удалось достичь вполне определенных результатов. Для этого, в частности, используются такие задачи, как вычисление функции sin(10^10 pi) при варьировании количества цифр в представлении величины числа Пи. Авторы пока что не могут установить конкретные модели процессоров, однако уже вполне способны использовать свою технику для идентификации семейств — таких как AMD, Intel (Dual Core, Atom), Sparc, Digital Alpha, Cell и так далее.

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

Ну а то, что подобного рода компьютерные атаки — это уже дело отнюдь не отдаленного будущего, а реальные события настоящего времени, свидетельствует следующая новость.

Изощренное вредительство червя Stuxnet

В коде вредоносного "боевого червя" Stuxnet (подробности см. здесь и здесь) антивирусным исследователям удалось выявить важные свидетельства, указывающие на то, что эта программа была нацелена на диверсию против ядерных фабрик по обогащению урана. Причем целью программы-диверсанта была не организация аварии, а намного более тонкий саботаж — кратковременное ускорение и замедление работы моторов в центрифугах на протяжении многих недель и месяцев. Подобная работа оборудования катастрофически снижает качество обогащаемого урана.

В обновленной версии так называемого "Досье Stuxnet", которое заведено на эту программу в подразделении Symantec Security Response, отмечается: "Это свидетельствует, что [создатели Stuxnet] хотели закрепиться в системе без обнаружения, оставаться там длительное время и незаметно изменять производственный процесс, однако без срывов его работы".

Червь Stuxnet был обнаружен в Иране в июне 2010 и к настоящему времени заразил свыше 100 000 компьютерных систем по всему миру. Главное отличие этого червя — помимо необычной сложности программы — это целенаправленная атака против конкретной разновидности SCADA-систем промышленного управления, а именно Siemens Simatic WinCC.

Исследователи вируса давно установили, что Stuxnet перехватывает команды, отправляемые SCADA-системой для управления определенными функциями на промышленном объекте, однако вплоть до последнего времени было неясно, какого рода конкретные функции были целью саботажа. Строго говоря, в Symantec и сейчас воздерживаются от непосредственного указания на объект, являвшийся наиболее вероятной целью атаки Stuxnet. Однако вся новая информация достаточно прозрачно указывает на то, что мишенью была фабрика по обогащению урана в Натанзе, тысячи центрифуг которой являются важнейшим элементом ядерной программы Ирана.

Исследователи Symantec подчеркивают, что они ни в коей мере не являются экспертами по компьютерным системам промышленного управления, однако благодаря консультациям и помощи со стороны такого рода специалистов из голландской фирмы Profibus, они сумели-таки восстановить назначение кодов атаки в Stuxnet.

Согласно досье Symantec, целью червя Stuxnet являются специфические драйверы преобразователя частоты — устройства, которое используется для управления скоростью работы механизмов типа электромотора. Червь перехватывает команды, посылаемые таким драйверам от управляющей программы Siemens SCADA, и подменяет их вредительскими командами, сильно изменяющими скорость вращения в сравнении со штатным режимом.

При этом, однако, вредоносная программа портит далеко не любой конвертер частоты. Червь тщательно сканирует аппаратный состав той сети, в которую проник, и начинает работу лишь в том случае, когда в конфигурации имеется по крайней мере 33 конвертера частоты, изготовленных либо иранской фирмой Fararo Paya, либо финской компанией Vacon.

Избирательность червя простирается еще глубже, поскольку Stuxnet интересуется только такими драйверами, которые работают с высокими частотами вращения — от 807 до 1210 Герц. Как свидетельствуют специалисты, столь высокие частоты в производстве используются лишь для узкого круга промышленных приложений. Нельзя, конечно, стопроцентно утверждать, что это явно указывает на ядерную фабрику, однако в досье Symantec отмечается такой факт: "Драйверы конвертера частоты для выходных значений свыше 600 Гц в США подпадают под контроль со стороны Комиссии по ядерному регулированию, поскольку они могут быть использованы для обогащения урана".

Насколько известно сейчас, червь Stuxnet начал заражать системы в январе 2009 года. В июле 2009 в интернете появлялись неофициальные сообщения, что на фабрике обогащения урана в Натанзе произошел некий "серьезный" ядерный инцидент. Опубликованная позже статистика по ядерной программе Ирана за 2009 год показала, что в тот же период количество центрифуг по обогащению урана загадочным образом уменьшилось с примерно 4700 до 3900.

Среди антивирусных исследователей, занимавшихся изучением Stuxnet, поразительная сложность червя довольно быстра привела к консенсусу, согласно которому за созданием столь изощренной программы, скорее всего, стоит некая государственная спецслужба, щедро финансируемая и сильно продвинутая в компьютерных спецоперациях. Поначалу, правда, предполагалось, что цель Stuxnet — какая-нибудь серьезная авария на производстве, типа взрыва или массового выхода оборудования из строя. Однако последние результаты анализа в Symantec четко указывают на то, что червь был создан для куда более тонкого саботажа, скрытно длящегося продолжительное время на протяжении многих месяцев. Кроме того, уже не вызывает никакого сомнения, что авторы программы-диверсанта затачивали ее под совершенно конкретный объект (или ряд идентичных объектов), имея при этом подробные и обширные сведения о специфике системы-мишени.

Как указывается в досье Symantec, драйверы конвертера частоты используются для управления скоростью вращения другого устройства — например, мотора на производстве или электростанции. Увеличение частоты означает увеличение скорости вращения ротора в моторе. В конкретном случае Stuxnet, червь целенаправленно ищет процессорный модуль управления, изготовленный Profibus & Profinet International, который связывается с по меньшей мере 33 драйверами конвертера частоты, изготовленными иранской либо финской компанией. Stuxnet действует очень избирательно даже в тех случаях, когда находит тот объект, на который был нацелен. Если количество драйверов от иранской фирмы превышает то же количество от финской фирмы, то Stuxnet запускает одну последовательность событий. Если же финских драйверов больше, чем иранских, то в ход идет другая цепочка команд.

Как только Stuxnet устанавливает, что заразил систему-цель, он начинает перехватывать команды системы, подаваемые драйверам, изменяя их функционирование. Как поясняют аналитики Symantec, "Stuxnet меняет выходную частоту на краткие периоды времени, сначала задавая 1410 Гц, затем снижая ее до 2 Гц, а затем повышая до 1064 Гц... Модификация выходной частоты, по сути дела, лишает автоматическую систему управления возможностей функционировать надлежащим образом. ... [В коде программы имеется еще один признак того, что ее цель — очень конкретное реальное приложение.] Червя интересует процесс, который работает непрерывно на протяжении более месяца, поскольку лишь в этом случае код программы достигает желаемого эффекта. Процесс обогащения урана — типичный пример такого процесса, где центрифуги должны вращаться с очень точной скоростью на протяжении длительных периодов времени для того, чтобы выделить уран нужной чистоты. Если же эти центрифуги перестают вращаться с нужной высокой скоростью, то тогда процесс отделения более тяжелых изотопов урана нарушается. А итоговое качество урана на выходе будет существенно ниже, чем требуется".

Как обнаружили исследователи, в коде программы имеется длительное время выжидания между различными стадиями вредительских процессов, запускаемых червем — в некоторых случаях длительностью свыше трех недель. Это очевидным образом свидетельствует, что атакующая сторона была заинтересована в незаметном и продолжительном внедрении в работающую систему-мишень, а не во взрыве или тому подобной акции, которая сделала бы вредительство червя заметным.

Червь Stuxnet был явно разработан таким образом, чтобы как можно дольше скрываться от обнаружения. Так что даже если бы администрация зараженного объекта и обнаружила какие-то неполадки и перемены в работе оборудования на фабрике, там все равно не смогли бы увидеть, что это Stuxnet угнездился в их системе, перехватывая и изменяя команды управления. Во всяком случае, доступная ныне картина выглядит так, что о существовании столь изощренного червя практически никто не ведал до тех пор, пока информация о Stuxnet не была широко опубликована в июле нынешнего года.

С оригиналом "Досье Stuxnet" можно ознакомиться на сайте Symantec (PDF).

© ООО "Компьютерра-Онлайн", 1997-2019
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.