Кивино гнездо: Боевой червь Stuxnet
АрхивКивино гнездоВполне рядовая, на первый взгляд, компьютерная инфекция, обнаруженная прошедшим летом, оказалась опаснейшим кибероружием, способным на уничтожение целей в физическом мире.
В последних числах сентября канадский Ванкувер принимает у себя конференцию по компьютерной безопасности Virus Bulletin, ежегодно кочующую по разным городам Северной Америки и Западной Европы. Среди докладов нынешней конференции, вне всяких сомнений, самый большой интерес привлекают два независимых выступления от Kaspersky Lab и Symantec, посвященные одной и той же теме: беспрецедентно изощренному компьютерному "гипер-червю" Stuxnet.
Если обрисовать предмет в нескольких словах, то Stuxnet представляет собой прежде неведомый публике класс программного обеспечения, уже разработанного на государственном уровне для военных наступательных кибератак. Эта программа использовала для невидимого внедрения одновременно четыре разных и еще непропатченных дыры в защите систем (zero-day exploits), два похищенных у известных изготовителей подлинных сертификата для легального встраивания своих кодов в операционную систему и действительно очень умный механизм самостоятельного многоэтапного распространения. Механизм, который начинается с заражения обычных Windows-ПК инфицированной USB-флешкой, а заканчивается встраиванием собственного смертоносного кода в ПО Siemens S7 SPS для промышленных систем управления предприятиями. Программа Stuxnet проникла в десятки тысяч промышленных компьютерных систем по всему миру, но, к великому счастью, практически ни одной из них это ничем не грозит. Эксперты по кибербезопасности убеждены, что Stuxnet — это высокоточное, сугубо избирательное оружие, остро заточенное под поиск и уничтожение одной-единственной конкретной цели.
В принципе, у специалистов к настоящему времени даже есть общее понимание, что именно это была за цель. Но поскольку никаких официальных заявлений на данный счет ни одним государством не сделано (да и вряд ли они вообще появятся), имеет смысл поподробнее разобраться с деталями и логикой всей этой захватывающей истории.
Впервые Stuxnet попал в поле зрения антивирусных фирм в середине июня 2010, когда не самая известная фирма компьютерной безопасности VirusBlokAda из Беларуси обнаружила этого червя в компьютерах, принадлежащих одному их иранскому клиенту. Названием для вредоносной программы послужило имя одного из файлов, обнаруженных в теле червя, а всемирную известность Stuxnet обрел примерно месяц спустя. Потому что в июле корпорация Microsoft подтвердила, что данный червь активно заражает компьютеры под ОС Windows, работающие в составе крупномасштабных систем управления промышленными предприятиями.
Такого рода системы управления часто обозначают акронимом SCADA - англоязычным сокращением от словосочетания "supervisory control and data acquisition", т.е. "диспетчерское управление и сбор данных". SCADA-системы ныне управляют в индустрии работой чего угодно - от электростанций и заводского производства до нефтепроводов и военных объектов.
С этого момента червь Stuxnet стал объектом обширных и пристальных исследований специалистов по компьютерной безопасности. Которые довольно скоро и вполне единодушно были вынуждены признать, что ничего подобного им в своей практике видеть прежде не доводилось. Тогда же в июле Stuxnet был классифицирован как гиперусложненная вредоносная программа, созданная, вероятнее всего, целой командой опытных разработчиков по заказу какого-то государства.
Оценка одного из пораженных инженеров, занимавшегося "препарированием" червя, звучала примерно так: "После десяти лет ежедневных занятий обратной инженерной разработкой кодов, я еще никогда не встречался ни с чем, что хотя бы близко было похоже на ЭТО". Небывало огромный для подобного типа программ (размер исполняемого кода составляет порядка полумегабайта), обильно зашифрованный и слишком сложный для быстрого понимания его назначения, этот червь чрезвычайно удивил специалистов. По словам другого антивирусного эксперта, в сравнении с червем Stuxnet все прочие примечательные атаки последнего времени, вроде приснопамятной Aurora, в ходе которой были хакнуты сети Google и десятков других ведущих компаний, выглядят просто детскими игрушками.
При всей своей перегруженности программа Stuxnet написана чрезвычайно хорошо и грамотно. Она очень, очень тщательно заточена под то, чтобы ничего не поломать и не нарушить в заражаемых ею системах, чтобы не было видно абсолютно никаких внешних признаков инфицирования, а самое главное, она делает все для гарантирования того, чтобы ее окончательная миссия, которая манипулирует параметрами и кодами в управляющем компьютере SPS, была запущена и выполнена лишь в том случае, когда имеется полная уверенность, что это именно та самая система, на которую программа изначально была нацелена.
Однако понимание всех этих нюансов пришло, конечно же, далеко не сразу. Поначалу специалисты фирм Symantec и Kaspersky Lab, примерно одновременно и всерьез взявшихся за борьбу с червем, обнаружили лишь один опасный zero-day-баг. Это была дыра в защите от подсоединяемых к ПК USB-устройств, получившая название LNK, и срабатывала она для инфицирования почти любых компьютеров — в независимости от версии операционной системы Windows, начиная с ископаемой Win 2000 и до наиболее современной, предположительно весьма безопасной Windows 7.
Еще через несколько недель исследований специалисты обеих антивирусных фирм независимо друг от друга обнаружили, что Stuxnet в действительности использует для внедрения далеко не одну, а четыре прежде неизвестных zero-day-уязвимостей (баг спулера печати и два EoP-бага, повышающих привилегии). Одновременное использование сразу четырех zero-day-багов - это очень и очень необычное свойство вредоносной программы, никогда прежде не наблюдавшееся специалистами ни в Symantec, ни у Касперского.
Соответственно, не доводилось им видеть и поведение столь продвинутого червя в работе. Попадая в корпоративную сеть — на первом этапе через зараженное USB-устройство — Stuxnet использовал баги, повышающие его привилегии (EoP), чтобы получить доступ администратора к другим ПК, разыскивал системы, в которых работают программы управления WinCC и PCS 7 SCADA, захватывал эти системы, используя баг спулера печати, а затем пытался применять принятый по умолчанию фабричный пароль Siemens для захвата управления программным обеспечением SCADA.
После чего червь получал возможность перепрограммировать так называемую программу PLC (programmable logic control — программируемый логический контроллер), чтобы диктовать всем управляемым системой механизмам новые команды и инструкции. Попутно следует подчеркнуть, что опаснейшие коды атакующего червя для всякой зараженной системы выглядели совершенно легитимными, поскольку люди, стоявшие за созданием Stuxnet, предварительно похитили по крайней мере два цифровых сертификата, принадлежащие компаниям Realtek Semiconductor и JMicron Technology. Драйверы и программы этих фирм давно и прочно прописаны в операционных системах компьютеров, поэтому действия правильно подписанных кодов Stuxnet не вызывали абсолютно никаких сигналов тревоги.
Еще один интересный нюанс - это один из способов, которым атакующая сторона минимизировала риски обнаружения своей программы. В каждом USB-устройстве, куда подсаживался Stuxnet, работал счетчик, который контролировал число заражаемых устройством машин и не позволял инфицировать больше трех компьютеров. Другими словами, атакующие, судя по всему, таким образом пытались ограничить масштабы распространение червя, дабы он оставался как можно ближе к объекту, против которого был направлен.
Функционирование червя Stuxnet рассчитано на полностью автономную работу программы и не требует ни подключений к интернету для получения дополнительных инструкций, ни управления со стороны человека вообще. В программе выявлено настолько много разных типов выполняемых функций, что для экспертов очевидно - созданием этого продукта занималась команда людей с богатым опытом в самых разных областях: от конструирования невидимых руткитов и эксплуатации багов проникновения до работы с базами данных.
Вредоносное ПО написано на множестве разных языков. С одной стороны, это C, C++ и другие объектно-ориентированные языки высокого уровня. А с другой — коды STL (Statement List), низкоуровневый язык типа ассемблера, используемый в системах управления промышленными процессами. Плюс вообще впервые наблюдаемый специалистами руткит PLC, скрывающий вредоносный STL-код. Если же говорить о работе червя со SCADA-системами вообще, то в первую очередь следует подчеркнуть, что эта область приложения компьютеров отличается очень высоким уровнем специализации. Иначе говоря, по свидетельству специалистов, разработчики Stuxnet в своем распоряжении непременно должны были иметь для тестирования именно то реально применяемое аппаратное обеспечение, под которое затачивалось их кибероружие. Ибо все признаки свидетельствуют, что они в точности и в деталях знали нюансы работы техники на том конкретном объекте, который был избран целью атаки.
Начиная с этого момента разбора представляется наиболее логичным от наблюдений и свидетельств антивирусных экспертов из Symantec и Kaspersky Lab перейти к результатам анализа, выполненного специалистом по безопасности компьютерных промышленных систем из фирмы Siemens. Ибо Stuxnet был несомненно заточен против ПО именно этой компании, уверенно доминирующей на рынке SCADA-систем, а весьма уважаемый германский специалист по безопасности промышленных систем Ральф Лангнер (Ralph Langner), работающий в Siemens, недавно опубликовал в Сети результаты своих исследований, посвященных интересным свойствам невиданного прежде гипер-червя из киберпространства.
Поначалу, как и у экспертов из антивирусных фирм, первой идеей Лангнера было то, что Stuxnet написали для похищения промышленных секретов - каких-нибудь фирменных формул, рецептов или схем, которые могут быть использованы конкурентами для производства контрафактной продукции. Однако, углубившись в анализ свойств червя, обнаружил Лангнер нечто существенно иное.
Червь Stuxnet действительно занят непрерывными поисками, однако разыскивает он очень специфические установочные параметры системы, нечто вроде ее "отпечатков пальцев", которые говорят, что именно работает под управлением PLC или программируемого логического контроллера. Как уже говорилось, промышленные SCADA-системы весьма специфичны для каждой конкретной фабрики. Они состоят из множества небольших узлов, измеряющих температуру, давление, потоки жидкостей и газов, они управляют вентилями, моторами, и всем прочим хозяйством, необходимым для поддержания нередко опасных промышленных процессов в рамках их норм безопасности и в пределах эффективности. Таким образом, оба компонента систем - аппаратные модули конфигурации и программное обеспечение - являются специфическим набором, изготовляемым для каждой конкретной фабрики. Ну а с точки зрения червя Stuxnet все эти вещи выглядят как "отпечаток пальцев". И лишь только в том случае, если идентифицирована надлежащая конфигурация, он начинает делать больше, много больше, нежели просто тихо распространять себя в поисках цели.
(Именно эта особенность программы свидетельствует об одной принципиально важной вещи: атакующая сторона очень точно знала конфигурацию выбранной цели. Она наверняка должна была иметь поддержку инсайдера или группы инсайдеров внутри фабрики, либо какой-то еще способ доступа к программной части и аппаратной конфигурации избранного для атаки объекта.)
Среди шагов, которые, как обнаружил Лангнер, делает Stuxnet при обнаружении искомой цели, оказались изменения в фрагментах программного кода Siemens, известного как "оперативный Блок 35". Этот важный компонент программы Siemens занимается мониторингом критических производственных операций — вещей, которые требуют срочной реакции в пределах 100 миллисекунд. Вмешиваясь в работу Блока 35, Stuxnet может, к примеру, легко вызвать аварийный сбой в работе, ведущий к саморазрушению промышленного процесса. Так, во всяком случае, это видит Лангнер.
В частности, в его аналитической работе пошагово демонстрируется, что именно происходит с системой, когда Stuxnet находит свою цель по ее "отпечаткам". Как только Stuxnet выявляет критически существенную функцию, срабатывающую в модуле PLC, вредоносная программа берет управление системой на себя. Один из самых последних кодов, который Stuxnet отправляет в обреченную систему, носит выразительное название “DEADF007”. Ну а затем очевидно начинается фейерверк, хотя точное назначение захваченных программой функций остается неизвестным, говорит Лангнер. Это может быть и перевод скорости вращения турбины на максимально возможные обороты, и отключение системы смазки, или еще какие-то жизненно важные для нормальной работы функции системы (конкретная природа повреждений, вызываемых червем, просто неизвестна, потому что со стороны по коду SPS нельзя увидеть, что именно делают задаваемые параметры, не видя схему той конкретной фабрики, которой управляет система). Что бы это ни было, говорит Лангнер, анализ показывает, что Stuxnet отменяет защитные функции и подает в систему свои, фатальные команды: "Как только исходный код PLC перестает выполняться, можно ожидать, что вскоре какая-то вещь взорвется. И скорее всего, это окажется что-то крупное".
По свидетельству Лангнера, "Stuxnet — это стопроцентно целенаправленная кибератака, нацеленная на уничтожение некоего промышленного процесса в физическом мире. Это явно не имеет отношения к шпионажу и похищениям информации, как полагали некоторые. Это абсолютно диверсионная атака".
Поскольку ныне практически все исследователи, изучающие червя, вполне единодушны в выводах о том, что Stuxnet был сконструирован чрезвычайно изощренным и умелым мастером — скорее всего, специалистами государственной спецслужбы — и был создан для разрушения чего-то большого и важного, то теперь остается выяснить лишь два "простых" вопроса: (а) что за государство стоит за Stuxnet и (б) против какого объекта была направлена диверсия?
На сегодняшний день имеется достаточное количество фактов и доводов для того, чтобы (не наверняка, конечно, но) с высокой степенью достоверности ответить на оба этих вопроса.