Kim Zetter. Countdown to 0day. Глава 6. В поисках 0 day.

Вечер пятницы в конце августа, Лиам О`Мурчу праздновал свой 33 день рождения в шикарном лаундже на крыше в Венис(Venice), штат Калифорния. Он арендовал часть U-образного бара под открытым небом на крыше отеля Erwin с шикарным видом на Тихий океан, и угощал пивом и коктейлями свою девушку, сестру с мужем, приехавшими из Ирландии, и еще с десяток хороших друзей. Это была южная Калифорния, съемочная команда какого-то реалити-шоу снимала парочку, которая сидела неподалеку, видно, что их «личное» свидание было немного испорчено.

Вечеринка продолжалась уже как три часа, когда около девяти часов вечера к ним присоединился Эрик Чиен. Он пришел, хотя его разум был не на вечеринке. Ему не терпелось показать другу, и остальным коллегам, письмо, которое появилось в рассылке кибербезопасности днем ранее. Но он не хотел поднимать эту тему сегодня, потому что знал, что, когда О`Мурчу увидит письмо, он уже ни про что остальное думать не сможет. «Я покажу тебе одну вещь», – сказал Чиен О`Мурчу, – «Но только давай договоримся, мы не будем говорить об этом до конца ночи, хорошо?». О`Мурчу согласился.

Чиен вытащил свой BlackBerry и открыл электронное письмо – записку от другого исследователя, намекающую на то, что в Stuxnet могут быть дополнительно скрыты уязвимости нулевого дня. О`Мурчу посмотрел на Чиена. Они работали над Stuxnet уже на протяжении нескольких недель, пытаясь путем реверс-инжениринга восстановить его компоненты, и видели несколько подсказок, свидетельствующих о том, что в вирусе может быть встроена еще одна уязвимость нулевого дня, но у них до сих не было времени, чтобы исследовать это. Подсказки были в ракетной части кода, отвечающей за распространение Stuxnet, а они были сосредоточены на полезной нагрузке, той части кода, которая касалась программного обеспечения и ПЛК от Siemens.

В письме были расплывчатые детали, и не было понятно, то ли исследователь реально нашел новые уязвимости нулевого дня, то ли увидел те же самые подсказки что и О`Мурчу с Чиеном. В любом случае, в О`Мурчу зажегся огнем соревнования. «Вот оно», – сказал он Чиену, – «Я больше не пью этой ночью». На следующее утро, в субботу, О`Мурчу вернулся в лабораторию, изучать код Stuxnet.

В выходной в офисе никого не было, поэтому никто не отвлекал О`Мурчу от работы. Прежде чем перейти к полезной нагрузке, команда Symantec исследовала большую часть ракетной части кода вируса, поэтому нужно было просто еще раз тщательно пройтись по коду, и поискать намеки на эксплойт. Но на деле это оказалось не так просто. Уязвимости нулевого дня – это не то что вы найдете, просто открыв вредоносный файл. Вы должны отследить каждую ссылку кода, обратившуюся к операционной системе или к другим программным приложениям на машине, чтобы как-нибудь обнаружить один из ее способов взаимодействия с ними. Вирус заставляет делать приложение то, чего оно делать не должно? Он перескакивает через барьеры безопасности или обходит системные привилегии? Ракетная часть кода после реверс-инжениринга состоит из тысяч строк кода, каждая из которых должна быть проверена на предмет подозрительного поведения.

Структура Stuxnet была не линейной, поэтому пытаться отследить, что он делал, было вдвойне сложно. Использовалось множество команд, и О`Мурчу приходилось следить за действием каждой из них шаг за шагом.

Примерно через час работы О`Мурчу был почти уверен в том, что он нашел второй эксплойт. В архиве он искал любые признаки того, что уязвимость, на след которой он напал, уже была известна, но ничего не нашел. Затем он протестировал эксплойт на машине с установленным последним программным обеспечением Windows, чтобы убедиться, что он не ошибся. Убедившись, О`Мурчу понял, что Stuxnet использовал уязвимость нулевого дня в файле клавиатуры Windows для получения расширенных привилегий на компьютере.

Уязвимости нулевого дня – это очень ценный ресурс, и использование двух уязвимостей в одной атаке, с риском что их обеих могут раскрыть, смотрелось абсолютно неоправданно, размышлял О`Мурчу. Но не остановился, чтобы обдумать это. Он просто задокументировал свои выводы и вернулся к коду.

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

К полудню, когда Чиен явился в офис, чтобы проверить как там О`Мурчу, тот потупившись смотрел в монитор, видно, что он нуждался в отдыхе. Он в подробностях рассказал о всем, что обнаружил, Чиену, который и продолжил его работу над кодом до вечера. В таком же режиме друзья работали и в воскресенье, и к концу выходных они обнаружили три эксплойта. Эти три, плюс еще одна уже обнаруженная уязвимость .LNK, вместе составляют четыре уязвимости нулевого дня в одной атаке.1

Это было безумие. Одна уязвимость уже могла налотемать дров. Две это уже выход за рамки разумного. А четыре? Кто это сделал? И зачем? Они просто прожигали ценные нулевые дни. Хорошую ошибку или эксплойт нулевого дня на черном рынке можно продать за 50 тысяч долларов и более, и эту сумму можно удвоить, продав эту же уязвимость еще и на закрытом сером маркете, который продавал эксплойты нулевого дня правительственным кибер-армиям и шпионам. Либо у хакеров было неограниченное количество нулевых дней в их распоряжении, и им было безразлично если парочку из них они потеряют, либо они были в отчаянии и имели действительно вескую причину для того, что нашпиговать свою вредоносную программу таким количеством нулевых дней, чтобы та точно достигла своей цели. Чиен и О`Мурчу подозревали, что оба исхода могут быть правдой.

Чиен связался с Microsoft, чтобы сообщить о новых обнаруженных уязвимостях нулевого дня, но обнаружил, что «Лаборатория Касперского» в России уже опередила их. Сразу после появления новостей о Stuxnet Касперский собрал группу из десяти аналитиков, которая изучила бы ракетную часть кода. В течениие нескольких дней они обнаружили второй эксплойт нулевого дня, за которым через неделю последовали третий и четвертый. В то время как Symantec сообщили об уязвимостях в Microsoft, которая в настоящее время работала над патчами для их исправления, они не могли опубликовать их в массы, согласно правилу, пока Microsoft не пропатчит свое программное обеспечение.2

Обнаружение четырех уязвимостей нулевого дня в Stuxnet было безусловно значимым событием, но еще далеко не концом истории. Во время своего марафона в субботу и воскресенье, Чиен и О`Мурчу обнаружили еще четыре дополнительных способа распространения Stuxnet без использования уязвимостей нулевого дня. В общей сложности получалось восемь различных методов распространения. У кода атаки был виртуальный швейцарский нож, чтобы любым из способов успешно проникнуть в систему, и продолжать распространяться.

Наиболее важным из них было заражение файлов проекта Step 7, которые программисты использовали для программирования ПЛК, и перехвата имени пользователя(winccconnect) и пароля(2WSXcder), которые разработчики из Siemens жестко зашифровали в своем программном обеспечении Step 7.3 Система Step 7 использовала имя пользователя и пароль для получения автоматического доступа к бэкэнд базе данных, где они внедряли код для заражения машины, на котором была сохранена база данных. База данных является общей системой, которую могут использовать все программисты, работающие на Step 7. Затем Stuxnet заражает компьютер любого из программистов, имеющих доступ к базе данных. Оба этих метода значительно увеличивали вероятность того, что Stuxnet достигнет ПЛК, когда программист в следующий раз подключит свой ноутбук или USB-накопитель к одному из них. Хакеры использовали уязвимость в неясной функции проекта Step 7, для заражения его файлов. Это указывает на то, что они прекрасно понимали ее устройство, а таких людей вообще было немного, – еще один признак тех обширных навыков, которые использовали в атаке.4

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

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

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

Но такой путь к достижению цели был неряшливым и неточным методом атаки. Это было похоже на заражение одной из жен Усамы бен Ладена заразной болезнью, в надежде на то, что она передаст его бывшему лидеру Аль-Каиды. На своем пути вирус должен был попутно заразить и других, тем самым увеличивая вероятность его раскрытия. И в конце концов, именно это и произошло с Stuxnet. Он распространился на множество сопутствующих машин, и было лишь вопросом времени, когда что-то пойдет не так, и его обнаружат.

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

Из всех методов и эксплойтов, использованных хакерами, наиболее важными для атаки были эксплойт .LNK и заражение файлов проекта Step 7, поскольку именно они, скорее всего, продвигали Stuxnet к его конечной цели – ПЛК Siemens. Программисты ПЛК часто создают свои собственные команды на рабочих станциях, которые были подключены к интернету, но не были подключены к производственной сети или ПЛК на производственной площадке. Чтобы передать команды в ПЛК, кто-то должен загрузить их через ноутбук, напрямую подключенный к ПЛК кабелем, или загрузить их с флеш-носителя USB на специальный программируемую машину, называемую Field PG – ноутбук на базе операционной системы Windows, используемый в промышленном управлении. Field PG не подключен к интернету, но подключен к производственной сети и ПЛК. Заражая файлы проекта Step 7 и наделяя Stuxnet способностью преодолевать воздушное пространство в USB-носителе, злоумышленники по сути превращали каждого инженера в потенциального носителя своего оружия.

Задокументировав все эксплойты и уязвимости, которые Stuxnet использовал для распространения, Чиен и О`Мурчу поняли, что в них есть еще кое-что, что выделяется среди прочего. Некоторые из них уже встречались ранее. Хотя VirusBlokAda полагал, что уязвимость .LNK ранее никогда не использовалась, в Microsoft обнаружили, что в ноябре 2008 года, во время одной из атак также был задействован .LNK. Он был использован преступными хакерами для установки одного из версий трояна Zlob на машины жертв.6 И хотя различные антивирусные сканеры обнаруживали троян во время его заражения, они не смогли обнаружить эксплойт нулевого дня, который шел с ним, оставляя уязвимость открытой для атаки Stuxnet. Эксплойт спулера печати также впервые появился в польском журнале по кибребезопасности еще в апреле 2009 года. Журнал тогда опубликовал статью об уязвимости вместе с исходным кодом для эксплойта, чтобы атаковать ее.7 Новости об этой уязвимости никогда не доходили до Microsoft вовремя, так что уязвимость также оставалась незамеченной. Зашифрованный пароль Siemens также был раскрыт ранее, когда кто-то опубликовал его на форуме пользователей Siemens в апреле 2008 года.8

Чиен и О`Мурчу начали просматривать хакерские форумы и сайты, которые разработчики Stuxnet могли бы использовать для сбора информации о дырах и эксплоитах, или возможно приобрели готовые эксплоиты в интернете.

Как ни странно, из всех эксплойтов, использованных Stuxnet, в первой его версии, выпущенной в 2009 году, присутствовал лишь эксплойт спулера печати. Все остальные появились позже, в атаке в марте 2009 года, которая вышла из-под контроля.9 В версии Stuxnet 2009 года распространение вируса происходило через USB флеш-накопители, но для этого использовалась баг в автозагрузке Windows.10 Как отмечалось ранее, функцию автозапуска можно отключить, чтобы помешать вредоносной программе, попавшей на ваш компьютер. Поэтому когда в марте 2010 года вышла новая версия Stuxnet, хакеры заменили код для функции автозапуска на эксплойт нулевого дня .LNK.

Также вирусописатели добавили еще одну важную вещь в версии Stuxnet 2010 года – сертификат RealTek, используемый для подписи драйверов.11

Рассматривая изменения, сделанные хакерами в период с 2009 по 2010 годы, Чиену и О`Мурчу показалось, что атака была намеренно изменена, чтобы сделать ее более агрессивной, начиная с консервативного подхода в 2009, а затем усиливая ее в 2010, добавляя больше методов распространения – возможно, в отчаянной попытке быстрее достичь своей цели. Например, эксплойт .LNK, добавленный в 2010 году, был куда более эффективным механизмом распространения, нежели функция автозапуска, которая использовалась в 2009.12 Но с увеличением вероятности достижения Stuxnet своей цели, также увеличивалась вероятность его распространения на другие машины. Действительно, с этим и другими эскплойтами, добавленными в версии от марта 2010 года, Stuxnet распространился на более чем 100 тысяч машин внутри и за пределами Ирана.13 Ни одна из этих сопутствующих функций не помогала злоумышленникам достичь своей цели, они только увеличивали шанс быть пойманными.14 Разработчики должны были понимать риск, на который они идут, чтобы увеличить мощность распространения Stuxet. Но, видимо, это был риск, на который они были готовы пойти.

На самом деле, исследователям было легко отслеживать точные пути распространения Stuxnet. Внутри каждой копии Stuxnet специалисты обнаружили подсказку, которая и помогла им отследить курс, по которому прошел вирус, пытаясь достичь своей цели, – небольшой файл логов, содержащий данные о каждой зараженной машине. Когда червь переходил от машины к машине, он регистрировал IP-адрес и доменное имя каждой из своих жертв, а также метку времени, когда произошло заражение, на основе внутренних часов компьютера. Он сохранял эти данные в файл логов размером около 100 байт, который рос по мере количества зараженных машин. Таким образом, каждая копия Stuxnet, собранная с зараженных компьютеров, содержала в себе историю каждого зараженного перед ним компьютера до этого момента, оставляя за собой цифровой след из хлебных крошек, которые Чиен и О`Мурчу могли отследить до самых первых жертв. Лог был создан, чтобы помочь хакерам отследить путь, который пройдет Stuxnet, но они, вероятно, не рассчитывали на то, что кто-то другой будет использовать его для той же цели.15

Чиен и О`Мурчу исследовали 3280 копий Stuxnet, которые им предоставили различные антивирусные компании, и, основываясь на данных в лог-файлах, оказалось, что хакеры начали свою атаку с группы в пять компаний в Иране, выбранные, вероятно, за способность предоставить быстрый шлюз Stuxnet для достижения своей цели. Каждая из компаний пострадала от одной или нескольких версий вируса, запущенного в июне 2009 и марте-апреле 2010 годов. Symantec насчитала 12 тысяч заражений в этих пяти целях, и из этих первых жертв Stuxnet затем распространился на более чем 100 тысяч машин в 100 странах мира.

Symantec никогда публично не называет компании в связи со своей политикой не разглашать имена жертв, а в публичных документах используют маркировку Компания А, Компания Б и т.д. Но имена компаний в лог-файлах они не скрыли. Там были Foolad Technique, Behpajooh, Kala, Neda Indastrial Group и компания, обозначенная в файле как CGJ, предположительно Control Gostar Jahed. Считалось, что под Kala имеются ввиду компании Kala Electric и Kalaye Electric, о которых на конференции в 2002 году упомянула иранская оппозиционная группа NCRI, как о подставных компаниях для иранской программы по обогащению урана.

Хотя атака поразила некоторые компании несколько раз, не всегда заражались одни и те же машины, что позволяет предположить, что злоумышленники искали более выгодные машины каждый раз, когда запускали атаку, или машины, которые предлагали разные маршруты для достижения целей, чтобы увеличить вероятность успеха. Только одна из компаний, Behpajooh, пострадала во всех трех атаках, из чего можно сделать вывод, что она предлагала лучший маршрут к целевым машинам. Это была единственная цель в атаке марта 2010 года, которая вышла из-под контроля. Из 12 тысяч зараженных машин в пяти компаниях, 69 процентов из них были заражены именно в этой единственной жертве.