
Тем временем на конференции CancSecWest Гаэль Делалло из Beijaflore представил фундаментальный доклад об уязвимостях системы управления памятью в разнообразных NIX-ах, и проиллюстрировал свои находки эксплойтами для Apache. Все запатчились. Прошло несколько лет.
2010 год. Рафаль Войтчук эксплуатацию уязвимости того же класса в сервере Xorg. В том же году Йон Оберайде опубликовал пару о своих невинных играх с никсовым стеком ядра. Все снова запатчились.
2017 год. Никогда такого не было, . Qualys научилась мухлевать со стеком юзермода в любых никсах, согласно идеям Делалло.
Эксплойты стека юзермода основаны на простом вопросе – если динамическая область (heap) и стек будут расти навстречу друг другу, то что будет, когда они встретятся? Однако не надо думать, что ядра никсов разрабатывают дураки! Они, конечно же, подумали о таком развитии событий (ну, к нашему времени точно уже додумались). И во всех современных юниксоподобных операционках стек юзермода огорожен специальной страницей памяти, попытка доступа к которой вызывает исключение или завершение процесса.
Но вот что странно. Внезапно оказалось, что эту сторожевую страницу можно успешно обойти, для чего есть много способов. И об этом рассказывал еще Делалло в 2005 году. Все опять патчатся, весело и с песней.
Принцип эксплуатации этого бородатого бага основан на увеличении объема стека без записи в него. Это делается по-разному в разных ОС, например, с помощью рекурсивного вызова процедуры, или многомегабайтными аргументами командной строки. Указатель стека перемещается на его начало (нижний адрес), стек резко наращивается, и – хоп, – указатель стека оказывается уже за сторожевой страницей. Доступа к самой сторожевой странице не происходит, ошибки нет. Получается, что область стека перекрывается с динамической областью.

Это позволяет подменить в стеке адрес возврата из функции и таким образом запустить произвольный код с повышенными правами.
Qualys испытали эту методику лишь локально, но теоретически подобный трюк можно провернуть удаленно, ну или, как минимум, это будет полезно троянцам для повышения собственных привилегий. Исследователи видят два пути исправления этой уязвимости: фантастический и реалистический. Фантастический заключается в раздувании сторожевой страницы как минимум до 1 Мб, а лучше больше. А реалистический – это всего-то перекомпилировать весь код пространства пользователя с опцией -fstack-check в GCC, после чего указатель стека уже не сможет перепрыгивать сторожевую страницу без записи в нее. А в FreeBSD еще стоит хотя бы включить эту самую сторожевую страницу – по умолчанию она там не задействуется.
Исследователь предположил преждевременные роды WannaCry
Роковой для многих троянец WannaCry то ли сделан кривыми руками, то ли вырвался на волю до того, как его доделали. Такую любопытную теорию Джейк Вильямс из Rendition InfoSec, после глубокого анализа ̶н̶о̶в̶о̶с̶т̶е̶й̶ кода EternalBlue и WannaCry. По его мнению, создатели рансомвары допустили несколько «ошеломляющих ошибок».
Для начала, очень странным выглядит хардкодинг биткойн-адреса для выплаты выкупа. Мало того, что это позволило кому-то предприимчивому урвать себе малую толику, перебив в хекс-редакторе адрес, так еще и контролировать выплату становится невозможно – как справедливо подметил Вильямс, попробуй разберись, кому именно из жертв принадлежат падающие в кошелек транзакции. И еще, проследить дальнейшую судьбу денег с одного адреса не так уж сложно (миксеры не всегда спасают), то есть проблемы с выводом суммы обеспечены.
Гораздо практичнее генерить собственный адрес для каждого заражения, или хотя бы для нескольких заражений, это сразу сняло бы большинство проблем. Собственно, опытные рансомварщики так и делают. Но не авторы WannaCry. Всего в пойманных семплах насчитывается три варианта адреса, и вполне вероятно, что изначальным злоумышленникам принадлежит лишь один из них.
Туда же, в копилку ляпов – знаменитый «рубильник» WannaCry, домен, при обнаружении которого в Сети троянец прекращает работу. Само по себе это вполне общепринятая практика, но, помилуйте, что мешало сделать чуть более сложную проверку, чем код состояния 200? В случае многих других ботов обмен с сервером управления шифруется и троянец выключается только по команде.
С гипотезой, что вонакрай – детище криворуких «скрипт-киддис», не вяжется ряд признаков, указывающих на северокорейское происхождение этой эпидемии. Группа Lazarus, которую подозревают в связи с WannaCry, не давала повода обвинить ее в непрофессионализме. Поэтому Вильямс предложил другое объяснение. По его мнению, недоделанный WannaCry попросту случайно вырвался из тестовой среды и дальше пошел распространяться неконтролируемо.
Это чертовски похоже на правду, хотя не очень понятно, что помешало создателям вовремя дернуть за рубильник, зарегав стоп-домен, пока распространение троянца не успело принять характер эпидемии. И еще – забавно будет, если окажется, что захардкоденный биткойн-адрес представляет собой лишь плейсхолдер, и не соответствует никакому реальному кошельку. По крайней мере, списаний с известных кошельков WannaCry пока не было.
ЦРУ годами следит за нашими роутерами


Древности
![]() | «Justice» Очень опасен, поражает COM-файлы при обращении к ним функциями DOS 43h, 4Bh, 3Dh, 56h. Записывается в конец файлов и изменяет 5 байт их начала (NOP; NOP; JMP Loc_Virus). COMMAND.COM заражается по алгоритму вируса «Lehigh». Периодически направляет записываемую на диск информацию в сектор с другим номером. Содержит текст «AND JUSTICE FOR ALL». Перехватывает int 13h и int 21h. Цитата по книге «Компьютерные вирусы в MS-DOS» Евгения Касперского. 1992 год. Страницa 72. |
