Rescor Опубликовано 4 января, 2019 Жалоба Поделиться Опубликовано 4 января, 2019 От переводчика: я нашел на Quora вопрос: Какую программу или код можно назвать самыми сложными из когда-либо написанных? Ответ одного из учасников был настолько хорош, что вполне тянет на статью. Пристегни ремни.Самая сложная программа в истории была написана командой людей, имена которых нам неизвестны.Это программа – компьютерный червь. Червь был написан, судя по всему, между 2005 и 2010 годами. Поскольку этот червь является таким сложным, я могу дать лишь общее описание того, что он делает.Сначала червь появляется на USB диске. Кто-то мог найти диск, лежащий на земле, получить его по почте и заинтересоваться его содержанием. Как только диск вставлялся в компьютер c Windows PC, без ведома пользователя, червь автоматически запускал себя и копировал на этот компьютер. Существовало как минимум три способа, с помощью которых он мог себя запустить. Если не работал один, он пробовал другой. Как минимум два из этих методов запуска были абсолютно новыми и оба использовали две независимых, секретных ошибки в Windows о которых никто не знал до того момента, как появился этот червь.Как только червь запускается на компьютере, он пытается получить права администратора. Его не сильно беспокоит установленное антивирусное ПО – он может игнорировать большинство таких программ. Затем, в зависимости от того, на какой версии Windows он работает, червь попробует один из двух ранее неизвестных методов получения прав администратора на компьютере. Как и ранее, до появления этого червя никто не знал об этих скрытых уязвимостях.После этого червь способен скрыть следы своего присутствия в глубинах ОС, так что ни одна антивирусная программа не сможет его обнаружить. Он прячется так хорошо, что даже если будете искать на диске в то место, где этот червь должен быть, вы ничего не увидите. Этот червь прятался так хорошо, что ему удалось перемещаться по Интернету в течение года и ни одна компания, связанная с безопасностью не признала даже факта его существования.Затем червь проверяет, может ли он выйти в Интернет. Если может, он пытается посетить сайты www.mypremierfutbol.com или www.todaysfutbol.com. В то время эти серверы были Малайзии и Дании. Он открывает зашифрованный канал связи и сообщает этим серверам, что новый компьютер успешно захвачен. Зачем червь автоматически обновляет себя до самой новой версии.После этого червь копирует себя на любое другое USB устройство, которое вам пришлось вставить. Он делает это с помощью установки аккуратно разработанного ложного драйвера диска. Этот драйвер содержал цифровую подпись Realtek. Это означает, что авторы червя каким-то образом смогли пробиться в наиболее защищённое место крупной тайваньской компании и украсть самый секретный ключ компании так, что сама компания об этом не узнала.Позже, авторы этого драйвера начали подписывать его секретным ключом от JMicron, другой крупной тайваньской компании. И снова, авторы смогли прорваться в самое защищённое место в этой компании и украсть самый секретный ключ, которым владеет эта компания так, что они ничего об этом не узнали.Червь, о котором мы говорим очень сложный. И мы ещё даже не начали.После этого червь начинает использовать два недавно обнаруженных бага в Windows. Один баг связан с сетевыми принтерами, а другой – с сетевыми файлами. Червь использует эти баги, чтобы установить себя по локальной сети на все другие компьютеры в офисе.Затем червь начинает искать конкретное ПО, разработанное Siemens для автоматизации крупных промышленных машин. Как только он находит его, он (как вы уже догадались) использует ещё один ранее неизвестный баг, чтобы скопировать себя программируемую логику промышленного контроллера. Как только червь поселился в этом компьютере, он остаётся там навсегда. Никакое количество замен или «дезинфекции» компьютера не поможет избавиться от него.Червь ищет прикреплённые промышленные электрические моторы от двух конкретных компаний. Одна из этих компаний в Иране, а другая в Финляндии. Моторы, которые он ищет, называются «частотно-регулируемые приводы». Они используются для управления промышленными центрифугами. С помощью центрифуг можно очистить множество химических элементов.Например, уран. Теперь, поскольку червь получил полный контроль над центрифугами, он может сделать с ними всё, что захочет. Он может их всех отключить. Он может немедленно все их уничтожить – достаточно крутить их на максимальной скорости до тех пор, пока они не разлетятся как бомбы, убив всех, кто по случайности оказался рядом.Но нет. Это сложный червь. И у червя есть другие планы.Как только он захватил все центрифуга в твоем заводе… червь просто засыпает.Проходят дни. Или недели. Или секунды.Когда червь решает, что время пришло, то быстро просыпается. Он случайно выбирает несколько центрифуг, когда они очищают уран. Червь блокирует их так, что если кто-то заметит, что что-то странное, он не сможет отключить эти центрифуги.И затем, потихоньку, червь начинает крутить эти центрифуги… немножко неправильно. Совсем не намного. Просто, знаете, чуть-чуть слишком быстро. Или самую малость слишком медленно. Лишь немного за пределами безопасных параметров. В то же время, он увеличивает давление газа в этих центрифугах. Этот газ называется UF6. Очень вредная штука. Червь изменяет давление этого газа чуть-чуть за пределами безопасных значений. Ровно для того, чтобы при попадании газа в центрифуги во время работы появлялся небольшой шанс того, что он превратится в камни.Центрифуги не любят работать слишком быстро или слишком медленно. И камни им тоже не нравятся.Но у червя остался последний трюк. И он гениален.В дополнение ко всем своим действиям, червь начинал проигрывать запись данных за последние 21 секунду работы, которые он записал, когда центрифуги работали нормально. Червь проигрывал запись снова и снова, в цикле.В результате, данные о всех центрифугах для людей выглядели вполне нормальными. Но это были только ложные записи, созданные червем.А теперь представьте, что вы ответственны за очистку урана с помощью этого крупного промышленного завода. И вроде бы всё работает хорошо. Может двигатели звучат немного странно, но цифры на компьютере показывают, что моторы центрифуг работают так, как и положено.Затем центрифуги начинают ломаться. В случайном порядке, одна за другой. Обычно они умирают тихо. Впрочем, в некоторых случаях, они устраивают настоящее представление. А производство урана начинает резко падать. Уран должен быть чистым. Ваш уран не достаточно чистый, чтобы с ним можно было сделать что-то полезное. Что бы вы делали, если бы управляли этим заводом по обогащению урана? Вы бы проверяли всё снова и снова и снова, не понимая в чем проблема. Вы могли бы при желании поменять все компьютеры в заводе.Но центрифуги бы всё равно ломались. И у вас даже не было возможности узнать почему.Со временем, под вашим надзором, около 1000 центрифуг ломаются или отключаются. Вы сходите с ума в попытках выяснить, почему всё работает не так, как планировалось.Именно это и произошло на самом делеВы никогда не будет ожидать, что все эти проблемы были созданы компьютерным червем, самым хитрым и умным компьютерным червем в истории, написанным какой-то невероятно секретной командой с неограниченным количеством денег и времени. Червь был разработан только с одной целью: пройти через все известные способы цифровой защиты и уничтожить ядерную программу вашей страны так, чтобы его не поймали.Создать программу, которая могла бы сделать ОДНУ из этих вещей само по себе маленькое чудо. Создать программу, которая может делать ВСЁ это и много другое……для этого червю Stuxnet пришлось стать самой сложной программой из когда-либо написанных. 5irFant0ma5, surx и Lloyd3005 3 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nexos Опубликовано 6 января, 2019 Жалоба Поделиться Опубликовано 6 января, 2019 РаспространениеМеханизм размножения червя, казалось бы, не особо-то и оригинальный — через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. Перехватываемые вызовы:FindFirstFileWFindNextFileWFindFirstFileExWХуки также вешаются и на некоторые функции из ntdll.dll:NtQueryDirectoryFileZwQueryDirectoryFileВсе эти функции обрабатываются со следующей логикой — если файл начинается с"~wtr" и заканчивается на ".tmp" (или на ".lnk"), то удалить его извозвращенного оригинальной функцией значения, а затем вернуть, что осталось.Другими словами, скрыть свое присутствие на диске. Поэтому пользователь простоне увидит файлы на флешке. После этого ~wtr4141.tmp подгружает второй файл сдиска (~wtr4132.tmp). Делает он это не совсем стандартно, я бы даже сказал,извращенно — установкой хуков в ntdll.dll на вызовы:ZwMapViewOfSectionZwCreateSectionZwOpenFileZwCloseFileZwQueryAttributesFileZwQuerySectionЗатем с помощью вызова 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.comtodaysfutbol.comТуда червь и пытался достучаться и "что-то" слить в зашифрованном виде.Ребята из Symantec разобрались и с этой задачей. Оказалось, что шифрованиепредставляет собой побайтовую операцию XOR с 31-битным ключом, который былпрошит в одной из .DLL-библиотек. Ответ с сервера также приходит вXOR-виде, правда, используется уже другой ключ из той же библиотеки. Троянотсылает на сервер общую информацию о зараженной машине (версия винды, имякомпьютера, адреса сетевых интерфейсов, а также флаг наличия SCADA). В ответ откомандного центра могут приходить вызовы RPC для работы с файлами, созданияпроцессов, внедрения в процесс и загрузки новых библиотек и др. Lloyd3005 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.