Перейти к содержанию
49406

Самая сложная программа


Рекомендуемые сообщения

От переводчика: я нашел на Quora вопрос: Какую программу или код можно назвать самыми сложными из когда-либо написанных? Ответ одного из учасников был настолько хорош, что вполне тянет на статью. 

Пристегни ремни.

Самая сложная программа в истории была написана командой людей, имена которых нам неизвестны.

Это программа – компьютерный червь. Червь был написан, судя по всему, между 2005 и 2010 годами. Поскольку этот червь является таким сложным, я могу дать лишь общее описание того, что он делает.

Сначала червь появляется на USB диске. Кто-то мог найти диск, лежащий на земле, получить его по почте и заинтересоваться его содержанием. Как только диск вставлялся в компьютер c Windows PC, без ведома пользователя, червь автоматически запускал себя и копировал на этот компьютер. Существовало как минимум три способа, с помощью которых он мог себя запустить. Если не работал один, он пробовал другой. Как минимум два из этих методов запуска были абсолютно новыми и оба использовали две независимых, секретных ошибки в Windows о которых никто не знал до того момента, как появился этот червь.

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

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

Затем червь проверяет, может ли он выйти в Интернет. Если может, он пытается посетить сайты www.mypremierfutbol.com или www.todaysfutbol.com. В то время эти серверы были Малайзии и Дании. Он открывает зашифрованный канал связи и сообщает этим серверам, что новый компьютер успешно захвачен. Зачем червь автоматически обновляет себя до самой новой версии.

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

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

Червь, о котором мы говорим очень сложный. И мы ещё даже не начали.

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

Затем червь начинает искать конкретное ПО, разработанное Siemens для автоматизации крупных промышленных машин. Как только он находит его, он (как вы уже догадались) использует ещё один ранее неизвестный баг, чтобы скопировать себя программируемую логику промышленного контроллера. Как только червь поселился в этом компьютере, он остаётся там навсегда. Никакое количество замен или «дезинфекции» компьютера не поможет избавиться от него.

Червь ищет прикреплённые промышленные электрические моторы от двух конкретных компаний. Одна из этих компаний в Иране, а другая в Финляндии. Моторы, которые он ищет, называются «частотно-регулируемые приводы». Они используются для управления промышленными центрифугами. С помощью центрифуг можно очистить множество химических элементов.

Например, уран. 

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

Но нет. Это сложный червь. И у червя есть другие планы.

Как только он захватил все центрифуга в твоем заводе… червь просто засыпает.

Проходят дни. Или недели. Или секунды.

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

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

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

Центрифуги не любят работать слишком быстро или слишком медленно. И камни им тоже не нравятся.

Но у червя остался последний трюк. И он гениален.

В дополнение ко всем своим действиям, червь начинал проигрывать запись данных за последние 21 секунду работы, которые он записал, когда центрифуги работали нормально. 
Червь проигрывал запись снова и снова, в цикле.

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

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

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

Что бы вы делали, если бы управляли этим заводом по обогащению урана? Вы бы проверяли всё снова и снова и снова, не понимая в чем проблема. Вы могли бы при желании поменять все компьютеры в заводе.

Но центрифуги бы всё равно ломались. И у вас даже не было возможности узнать почему.

Со временем, под вашим надзором, около 1000 центрифуг ломаются или отключаются. Вы сходите с ума в попытках выяснить, почему всё работает не так, как планировалось.

Именно это и произошло на самом деле

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

…для этого червю Stuxnet пришлось стать самой сложной программой из когда-либо написанных.

Ссылка на комментарий
Поделиться на другие сайты

Распространение
Механизм размножения червя, казалось бы, не особо-то и оригинальный — через
USB-флешки. Но autorun.inf тут уже ни при чем. В дело вступает новая уязвимость,
которая позволяет загружать произвольную .DLL-библиотеку, как только флешка
будет вставлена, и пользователь откроет ее содержимое. Дело в том, что на флешке
лежит .DLL-файл с вредоносным кодом (ну, фактически расширение, в случае с
червем, — .TMP) и .LNK-файл. Файл с расширением .LNK является обычным ярлыком.
Но в нашей ситуации ярлык не совсем обычный. При отображении ярлычка в
стандартной оболочке или Total Commander автоматически выполнится лежащий рядом
.DLL-файл со всеми вытекающими отсюда последствиями! Как такое могло произойти?

Как известно, ярлык указывает на исполняемый файл и при двойном щелчке
вызывает его. Но тут все без щелчков, да и .DLL-файл так не выполнить. Если
рассмотреть ярлык в HEX-редакторе, можно увидеть, что в его середине указан путь
до нашей .DLL. Кроме того, это не обычный ярлычок, а ярлычок на элемент панели
управления! Эта-то деталь все и объясняет. Любой элемент панели управления — .CPL-
апплет. Но CPL — это, по сути, простая .DLL, поэтому ярлык для панели управления
особый, он как бы понимает, что имеет дело с .DLL. Кроме того, такой ярлык
пытается ВЫТАЩИТЬ иконку из.DLL, чтобы отобразить ее в проводнике. Но для того,
чтобы вытащить иконку, надо подгрузить библиотеку. Что, собственно, оболочка и
делает с помощью вызова LoadLibraryW().

Справедливости ради стоит отметить, что вызов этой функции автоматически
влечет за собой выполнение функции DllMain() из подгружаемой библиотеки.
Поэтому, если такой ярлычок будет указывать не на .CPL-апплет, а на злую
библиотеку со злым кодом (в функции DllMain()), то код выполнится
АВТОМАТИЧЕСКИ при просмотре иконки ярлыка. Кроме того, эту уязвимость можно
использовать и с помощью .PIF-ярлыков.


Боевая нагрузка
Кроме интересного метода распространения удивила и боевая нагрузка — никаких
ботнетов, краж банковских паролей, номеров CC. Все оказалось куда масштабнее.
Уязвимость .LNK провоцирует загрузку скрытого файла с именем ~wtr4141.tmp,
лежащего рядом с ярлыком. Файл этот исполняемый, но маленький (всего 25 Кб). Как
отметили специалисты из Symantec, очень важно на первых порах скрыть свое
присутствие, пока система еще не заражена. С учетом специфики 0day-уязвимости,
которая действует, как только пользователь увидит иконки, сработает и
~wtr4141.tmp, который в первую очередь вешает перехваты системных вызовов в
kernel32.dll. Перехватываемые вызовы:

FindFirstFileW
FindNextFileW
FindFirstFileExW
Хуки также вешаются и на некоторые функции из ntdll.dll:

NtQueryDirectoryFile
ZwQueryDirectoryFile
Все эти функции обрабатываются со следующей логикой — если файл начинается с
"~wtr" и заканчивается на ".tmp" (или на ".lnk"), то удалить его из
возвращенного оригинальной функцией значения, а затем вернуть, что осталось.
Другими словами, скрыть свое присутствие на диске. Поэтому пользователь просто
не увидит файлы на флешке. После этого ~wtr4141.tmp подгружает второй файл с
диска (~wtr4132.tmp). Делает он это не совсем стандартно, я бы даже сказал,
извращенно — установкой хуков в ntdll.dll на вызовы:

ZwMapViewOfSection
ZwCreateSection
ZwOpenFile
ZwCloseFile
ZwQueryAttributesFile
ZwQuerySection
Затем с помощью вызова LoadLibrary он пытается подгрузить несуществующий файл
со специальным именем, на это дело срабатывают ранее установленные хуки и грузят
второй файл, уже реально существующий — ~wtr4132.tmp, вернее, его
незакодированную часть, которая раскодирует вторую часть (по факту —
UPX-сжатие). Вторая часть представляет собой некие ресурсы, другие файлы,
которые вступают в дело после расшифровки и экспорта (аналогичным извращенным
методом с хуками на API функции).

Первым делом устанавливаются два драйвера — mrxcls.sys и mrxnet.sys (именно
из-за этих файлов червь получил такое название — Stuxnet). Устанавливаются они в
системную директорию, а функционал на них — руткит уровня ядра с той же логикой,
что и в первом файле. Это обеспечит защиту червя после перезагрузки и завершения
процесса ~wtr4141.tmp.

Драйвера эти, как уже было сказано, имеют легитимный сертификат Realtek,
поэтому их установка пройдет без проблем (на данный момент сертификат уже
отозван). Кроме руткита распаковываются файлы шаблона ярлыка и ~wtr4141.tmp для
организации заражения других USB-устройств. Потом экспортируется код, который
инъектится в системные процессы и добавляет в реестр вышеотмеченные .SYS-файлы
руткита (HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MRxCls). Далее
раскодируются два .DLL-файла, которые заменяют существующие файлы системы SCADA
— Siemens Step 7.

Таким образом, все вызовы из системы SCADA переходят в поддельные библиотеки.
Там происходит "нужная" обработка, после чего вызовы передаются в оригинальные .DLL
(остальную часть функций вирь и вовсе эмулирует самостоятельно). Кроме всего
перечисленного, червь блокирует процессы антивирусов и пытается найти сервера
СУБД (MSSQL). Найдя таковые, он пробует выполнить вход с учетной записью
WinCCConnect и паролем по умолчанию — 2WSXcder. Это учетная запись от БД SCADA
типа Siemens Simatic WinCC. Как видно, червь заточен именно под продукт Siemens.
Если аутентификация прошла успешно, шпион выкачивает данные о процессах и прочую
секретную инфу. Кроме того, он не гнушается поискать в локальных файлах полезную
для шпионов информацию. Если удается обнаружить выход в интернет, то червь лезет
на один из командных серверов.

 

Имена серваков такие:
mypremierfutbol.com
todaysfutbol.com

Туда червь и пытался достучаться и "что-то" слить в зашифрованном виде.
Ребята из Symantec разобрались и с этой задачей. Оказалось, что шифрование
представляет собой побайтовую операцию XOR с 31-битным ключом, который был
прошит в одной из .DLL-библиотек. Ответ с сервера также приходит в
XOR-виде, правда, используется уже другой ключ из той же библиотеки. Троян
отсылает на сервер общую информацию о зараженной машине (версия винды, имя
компьютера, адреса сетевых интерфейсов, а также флаг наличия SCADA). В ответ от
командного центра могут приходить вызовы RPC для работы с файлами, создания
процессов, внедрения в процесс и загрузки новых библиотек и др.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...