Две недели назад мы наблюдали атаку шифровальщика на сервер, принадлежащий одной французской компании. Это был один из вариантов семейства шифровальщиков Crysis. Ежедневно мы видим тысячи попыток заражения со стороны шифровальщиков, но этот случай привлек наше внимание, т.к. файл, каким-то образом, появившийся на компьютере, предположительно никем не использовался и не должен был использоваться, при этом на компьютере не был запущен ни один почтовый агент или Интернет-браузер.
Как он попал на компьютер?
Почему средства безопасности на сервере позволили этому файлу попасть туда? Мы решили найти ответ именно на этот вопрос, а потому начали свое исследование. Оказывается, на этом сервере работает протокол удаленного рабочего стола Remote Desktop Protocol (RDP), и кибер-преступники использовали атаку типа brute force attack, благодаря которой смогли подобрать регистрационные данные и получить удаленный доступ к серверу.
Немного истории: т.к. большинство пользователей не включают двухфакторную авторизацию, а их пароли не являются такими сложными или случайными, то достаточно просто проникнуть на сервер, используя такой тип атаки методом перебора с помощью хорошего словаря или проверяя наиболее часто используемые комбинации. Такая техника не нова. Я помню, больше года назад на испанские компании обрушилась одна волна шифровальщиков, использующих точно такую же технику. Как правило, кибер-преступники осуществляют такие атаки ночью или в течение выходных дней, когда в офисах мало народу или вообще никого нет.
Кибер-преступники проникли на сервер, используя атаку типа brute force, перебирая пароли с помощью хорошего словаря или проверяя наиболее часто используемые комбинации.
В данном случае атака на сервер началась 16 мая, когда они осуществили 700 попыток подключения. Они осуществлялись автоматически, примерно в течение двух часов. Большинство подобных атак осуществлялось в период с 1 до 3 часов или с 3 до 5 часов ночи. Каждый день. Количество попыток подключения менялось: например, 18 мая их было 1976, а 1 июля — 1342.
Спустя почти четыре месяца и выполнив свыше 100 000 попыток подключения, хакеры все же сумели проникнуть на сервер и запустить шифровальщика Crysis.
Это всемирный Crysis
На этой неделе наши коллеги из Trend Micro опубликовали статью, в которой предупредили о подобных атаках, произошедших в Австралии и Новой Зеландии, когда также использовали варианты Crysis. К сожалению, мы можем сказать, что они были не только в этих странах – данные атаки осуществляются во всем мире (по крайней мере, с мая).
Предположим, что Вам необходимо иметь протокол RDP, запущенный и подключенный к Интернету, а потому, помимо мониторинга попыток подключения, который позволит Вам узнать о том, что Вы подвергаетесь атаке, Вам следует также использовать сложные пароли. Самый лучший вариант – это внедрить двухфакторную авторизацию, например, с паролем через SMS, в результате чего подбор паролей станет бесполезным занятием.
Автор статьи: Луис Корронс
Комментарии (32)
acyp
23.09.2016 12:53+1… или простой скрипт на powershell, который сообщает о всех фактах авторизации и попытках авторизации. эт в отсутствии централизованной системы контроля доступа.
Alex_2016
23.09.2016 12:57… или простой скрипт на powershell, который сообщает о всех фактах авторизации и попытках авторизации. эт в отсутствии централизованной системы контроля доступа.
Спасибо. И это, как вариант, тоже решит проблему.
ARad
23.09.2016 13:01Если у вас на сервере есть что то к чему можно подключиться используя пароль, значит вам НАДО иметь стойкий пароль и еще желательно другие способы защиты. А их много начиная от ограничения неверных попыток, ограничения IP и т. д.
AcidVenom
23.09.2016 13:02… или поднять домен и настроить блокировку учетки на произвольное время при 5+ неверных вводах пароля.
dmitry_dvm
23.09.2016 13:20+3Тот же RDP можно настроить на таймауты между попытками и блокировать на час после нескольких неудачных. И никакой брутфорс будет не страшен. Как всегда паника вместо изучения вопроса.
fpir
23.09.2016 14:4110 минут, думаю, достаточно. При 7-значном пароле с буквами и цифрами и сроком жизни.
ideatum
23.09.2016 16:18Мне интересно, как самому подключиться по RDP, если брутфорсят непрерывно? При таком подходе, учетка постоянно в локауте.
pwrlnd
23.09.2016 16:26Как минимум будет известно, что происходит брутфорс — можно принимать дальнейшие меры.
fpir
26.09.2016 15:22Так если брутфорсят, то на сервере RDP(в смысле, только на декстопных win-ах ограничение в одну rdp-сессию) учётки доступны, недоступны они станут, когда под ними залогинятся. Ну а после этого уже и брутфорс прекратится.
flyme
23.09.2016 18:22А не подскажете, в деталях, как средствами самой винды задать тайм-аут при N-кратном неверном вводе пароля?
senator14
23.09.2016 20:53+1В политике компьютера (локального или через Group Policy Management Console, если в домене):
Computer Configuration -> Windows Settings -> Security Settings -> Account Policies -> Account Lockout Policies.
Всего три простые политики: кол-во неудачных входов, после которых аккаунт блокируется, продолжительность блокировки плюс время сброса счетчика неудачных входов в систему.
uniqm
23.09.2016 13:29Имел опыт борьбы с подобными ботами (одна атака была успешной, но вместо крипто запустили скрипт майнинга биткойнов на половину ядер сервера ^^), для начала лечилось банальной сменой порта RDP из вне (3389 на любой другой) и переименованием учеток типа Администратор, admin, user, user1 и тд. на более несловарные.
Daar
23.09.2016 15:20+2Ну пароли ладно брутят, а как с логинами? или там все под Administrator или Guest работают? И права смотрю у RDP пользователей широкие. Да и можно ограничить по количеству неверных попыток, а потом блочить учетку. Если юзер звонит админу что учетка заблочена а он все выходные бухал, то тут уже есть над чем задуматься админу.
Думаю RDP не стоит ругать, вина не в протоколе. Это как поставить бронированную дверь в квартиру, а ключ класть под коврик.uniqm
23.09.2016 15:57Блочить учетку не особо вариант. Когда шла непрерывная атака, реальные юзеры не могли войти, не успевали. Или админ был не всегда доступен для помощи (разлочить учетку), например при работе вечером.
DayLike
23.09.2016 16:18порты смените просто) Я фронт энд но пришлось заниматься сервером, в итоге обнаружил что ломились на ssh, ftp на wordpress сайты, перебирали пароли, один раз проворонил сделал плагин для wordpress который пишет 3 лога подряд при ошибочной авторизации в wordpress первый в стандартный sitename.access.log второй в лог fail_ip.sitename.log в папочку logs на ftp можно если что смотреть ситуацию) а потом в syslog но он похоже дублируется ы messages лог и там по мне нужному алгоритму пишется лог (дата, адресс сайта, ip кто авторизовывался, логин с которым авторизовывались и useragent) этого достаточно в принципе, это помогло мне выявить что с 3х ночи до 7 утра сделали 10000 подборов с одного ip на одном из сайтов который на нашем сервере. когда я показал fail2ban общий лог и настроил параметры защиты и подкорректировал поисковик по messages log сразу ситуация изменилась, нагрузка на сервер упала, но второй лог мне помог выявить сверх низкие переборы) примерно с интервалом в 30-45 минут по 2-3 раза с одного ip в итоге настроил fail2ban на 9 одинаковых ip в логе за 5 часов и нормально) Плюс ещё начал собирать уникальные ip так проверить сколько у нас гостей чтоб их потом разом всех в банлист) в итоге ну уже 178 ip адресов есть в базе, сделал после добавления в базу запрос на geoip сервис какой то, чтоб знать из какой страны была авторизация, для того чтоб сразу легитимных отсеять. Мало ли) причём скрипт принимает ip не только с нашего сервера но и второго сервера где так же стоит мой плагин и при брутфосе шлёт мне этот ip на наш сервер. а теперь надо wordpress защищать, пытаюсь это сделать через ngnix потому что htaccess перезаписывается всякими плагинами защиты и кэша и они иногда перетирают друг друга) там есть модуль для ngnix который блокирует такие запросы но я вроде уже конвертирую htaccess параметры в ngnix для всех сайтов разом. Ну что поделать учусь)
Daar
23.09.2016 16:30Это понятно, но ты говоришь по линуха, а он про remote desktop, у мелкомягких там толком нет никакой защиты, кроме как блочить по количеству попыток, ну или привязка к IP.
А так да, я с наружи никогда RDP не делаю на 3389, переставляю на другие порты всегда.DayLike
23.09.2016 16:50Я тоже поставил на сервер rdp но там какой то интерфейс вроде gnome и я похоже его сломал) что то ткнул на панели сверху в итоге у меня там при логине пишется «Oops… » ну упс а что дальше делать))) не инструкций ни советов, я вобще поставил его для того чтоб зайти и файл в zip заархивировать там 6 гигабайт примерно было isp manager 5 мне отказался этим заниматься, супер технологии такие) Хочешь не хочешь а из фронт энд я уже похоже в системного администратора превращаюсь а потом что бэк энд? Оптимизация баз данных облачное распределение, разгон хэширования паролей с помощью видео карт на серверах, вот веселуха)
Кстати а почему от брут форса не использовать связку ( ( login || email ) && (pass_1 && pass_2) ) это же будет бессмысленно перебирать пароли когда 2 поля для разных паролей, причём это более секьюрно: ( pass_1 + salt_1 && pass_2 + salt_2 ) = pass hash; я думаю замучаются перебирать если конечно не такая связка (login: admin, pass_1: qwerty, pass_2:123456) а так перебрать варианты будет наверно по труднее.
avelor
23.09.2016 18:21имя пользователя текущее можно вытащить.
а так эффективный метод защиты рдп — помимо двухфакторной аутентификации, RDS Gateway на сертификатах, VPN и блокирования учётки — fail2ban. есть платные решения, есть бесплатный ts_block и evlwatcher. так же скрипт, блокирующий по айпи на основании аудита отказа пишется на коленке за полчаса-счас.
Impet
23.09.2016 18:21Разве грамотно настроенные Application Control Policies не предотвратят запуск стороннего программного обеспечения? (в случае, если взломанная учетная запись не обладает правами Администратора)
msosov
23.09.2016 18:21На PS решается подобная проблема в несколько строк.
Создаем правило в брандмауере для блокировки по порту RDP
И прикручиваем скрипт на выполнение при возникновении события 4625
$min = 30 #Проверка за последние 30 минут
$c= 10 #Количество неудачных попыток
$nameRules=«BlockIp» #Имя блокирующего правила брандмауера Windows
$time = (get-date) — (new-timespan -min $min)
$l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $time | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$Ip = $l | group-object -property IpAddress | where {$_.Count -gt $c} | Select -property Name, count
$ip % {[string]$z=$z+$_.name+","}
$firewall = New-Object -ComObject hnetcfg.fwpolicy2
$y = $firewall.Rules.Item($nameRules).RemoteAddresses
$z=$z+$y
$firewall.Rules.Item($nameRules).RemoteAddresses = $z
varnav
23.09.2016 18:22Доступный из интернета RDP считается дурным тоном последние 20 лет. Именно поэтому.
LoadRunner
Alex_2016
Скорее всего должно решать.
acyp
Не всегда применимо. У меня, например, шеф любит путешествовать, но при этом систематически работает в той же 1сАвтоматизации 1.1, у которой веб-морды нормальной нету.
К нему не прикрутишь ИП-блокировку. ВПН — это двойное шифрование, что не руль если канал худой. Ибо RDP 7 и выше на худых каналах относительно нормально живут, а вот ВПН — не очень.
Блокировку по ошибкам тоже опасаюсь, ибо кричит шибко громко :), а ошибаться бывает.
Скрипт объективно спасает.
Habezza
в Вашем случае самым адекватным решением будет port knocking (можно сделать один батник, который будет стучаться и запускать рдп-клиент)
The_Kf
Прикрутите аутентификацию по сертификатам. Сам сертификат выдайте на смарт-карте.
Vinchi
вот самый правильный вариант. именно так все правили Шипова ныне пользователи у нас работают
Vinchi
вот самый правильный вариант. именно так все правили Шипова ныне пользователи у нас работают
SAMbI4
внедрите RemoteApp и забудьте про VPN/RDP/etc.
ну и после 5 неправильных вводов доменного пароля — поставьте блокировку «пока админ не разбанит», очень помогает :)