Поиск следов взлома сервера
Администрирование - Информационная безопасность

О себе кратко
15 лет в разработке 1С. На днях я рассказывал, как хакеры за ночь зашифровали наши базы вместе с бэкапами. Под той статьёй больше всего спрашивали одно: как они зашли. Я тогда честно ответил, что не знаю, расследование не моя зона.
В этот раз пришлось разобраться.
Ко мне пришли старые клиенты, их сервер тоже был атакован.
Сервер 1С зашифрован. Базы данных зашифрованы. Рядом с файлами лежит записка с требованием выкупа.
Вымогателям заплатили 1500 долларов. Платил администратор, из своего кармана. Прислали дешифратор, файлы расшифровали, работа пошла.
А дальше владелец сервера задал три вопроса, на которые деньги не отвечают:
- когда зашли;
- как зашли;
- не остались ли они внутри.
Записка

Контакты я закрыл. Первые две строки по-русски, дальше английский шаблон: файлы зашифрованы и украдены, не заплатите, опубликуем или продадим.
Самое интересное в конце. Вымогатели советуют не платить, пока не пришлют пробно расшифрованные файлы, и предупреждают о посредниках, которые накрутят свою комиссию. То есть заботятся о клиенте. Это поставленный бизнес, и сервер 1С небольшой компании для него обычный клиент.
Дата взлома оказалась не той
Владелец назвал дату: понедельник, 9 ноября. В этот день я нашёл только действия самих админов: перезагрузки, смену паролей, скачанные бесплатные дешифраторы.
Первая записка создана в субботу, 7 ноября, в 05:37. Сервер двое суток стоял зашифрованный, пока это не заметили. "Дату со слов" я с тех пор не спрашиваю: время шифрования видно по первой записке.
Пароль у них был с июля
Это главная находка, и в первый раз я её пропустил.
В журнале сеансов удалённого рабочего стола видно, кто, когда и с какого адреса входил. Под рабочей учёткой до атаки входили с четырёх внешних адресов. Три оказались местными провайдерами. Четвёртый я тоже записал в "свои": с него входили в июле и в сентябре, задолго до атаки.
На второй проход посмотрел внимательнее. Адрес принадлежит хостингу в Болгарии. И оба раза сеанс длился ровно 15 секунд: вошёл, увидел рабочий стол, вышел.
Люди так не работают. Так проверяют, что украденный пароль ещё действует.
| Когда | Что произошло |
| 26 июля, 12:44 | Вход с хостинга в Болгарии, через 15 секунд выход |
| 24 сентября, 13:31 | Тот же адрес, снова 15 секунд |
| 6 ноября, 21:45 | Вход с хостинга в Германии, через 10 минут отключение без выхода |
| 7 ноября, 05:30 | Вернулся в тот же сеанс |
| 05:35 | За 19 секунд выложил на рабочий стол сканер сети, набор для кражи паролей и шифровальщик |
| 05:36 | Остановлен SQL Server, чтобы освободить файлы баз |
| 05:37:34 | Запущен шифровальщик, через секунду отключён Защитник Windows |
| 05:37:46 | Первая записка о выкупе, к 05:44 их 87 по всем папкам |
| 06:09 | Отключился |
Вся активная часть заняла 39 минут. Пароль в ту ночь не подбирали: вход с первой попытки.
Как зашли
Никакой хитрой уязвимости. Пять настроек, каждая по отдельности встречается на серверах 1С, настроенных "чтобы работало":
- удалённый рабочий стол открыт в интернет для любого адреса;
- проверка подлинности на уровне сети (NLA) выключена;
- блокировки учётки после неверных паролей нет, подбирай сколько хочешь;
- минимальная длина пароля в политике ноль;
- рабочая учётка, под которой заходили в 1С, состоит в администраторах сервера.
Последний пункт и сделал из украденного пароля ключ от всего сервера. Остановить SQL Server, выключить антивирус и зашифровать диски может только администратор. Пользователю 1С эти права не нужны.
Откуда взялся сам пароль, узнать не удалось. Подобрали раньше, утёк с компьютера сотрудника или его купили. Проверить нечем, и вот почему.
Журнал Security ничего не помнит
Журнал, куда Windows пишет каждый вход и каждую неудачную попытку, был стандартного размера, 20 МБ. К моменту, когда я его открыл, самая старая запись в нём была десятичасовой давности.
За эти десять часов там набралось 32 749 неудачных входов. Пароли к серверу перебирают круглосуточно, примерно раз в секунду, и этот поток сам затирает журнал. День атаки из него давно вытерт.
Выручили места, про которые обычно не вспоминают:
- журнал сеансов удалённого рабочего стола: весит 1 МБ, пишет только входы и выходы с адресом и поэтому хранит полгода истории. Июльские входы нашлись в нём;
- Amcache: Windows сама ведёт список программ, которые видела, с датой появления. Время запуска шифровальщика взято оттуда;
- время изменения ключей реестра: ключ Защитника изменён через секунду после запуска шифровальщика;
- даты создания файлов: инструменты на рабочем столе и записки.
Чего не узнать уже никак. Аудит запуска процессов был выключен, поэтому команд взломщика нет. Журнал брандмауэра не вёлся, поэтому нельзя сказать, сколько данных ушло. В наборе лежали программы для вытаскивания паролей из браузеров, почты и RDP-подключений, следов их запуска нет. Но "нет следов" при выключенном аудите значит "не знаем". Поэтому сменили все пароли, которые хоть раз вводились на этом сервере, включая СУБД и пользователей 1С.
Что делала нейросеть
Первый сбор дал текстовый отчёт на 1,5 МБ. Глазами это читать долго, в чат целиком не влезает. Хронологию я собирал вместе с нейросетью и понял две вещи.
Ей нужен отчёт, а не сырые журналы. Когда события уже отобраны, стоят по времени и у каждого назван источник, на вопрос "когда был первый чужой вход" она отвечает строкой с датой и разделом, и это проверяется за минуту.
И в чат нельзя нести имя сервера, домен, логины сотрудников и внутренние адреса. Перед отправкой я заменял их метками, а внешние адреса и хеши файлов оставлял: без них разбирать нечего.
Скрипт, который собирает это за несколько минут
Два разовых скрипта, которыми я собирал этот случай, я переписал в один, без привязки к учётке и дате. Он запускается на сервере, только читает и за несколько минут собирает хронологию и обезличенную копию для нейросети. К нему обработка 1С: тот же результат открывается в базе отчётом, где входы сгруппированы по адресам и учёткам, а хронология по дням.
Набор выложен отдельно: Следы взлома сервера 1С: скрипт сбора и обработка с отчётом.
Запускать его стоит не только после беды. Здесь чужой вход висел в журнале с июля, и три месяца его никто не видел, потому что никто не смотрел.
Что проверить у себя
- Открыт ли RDP в интернет. Если да, вход только через VPN или хотя бы с перечисленных адресов.
- Включена ли NLA и блокировка учётки после нескольких неверных паролей.
- У кого права администратора сервера. Учёткам для работы в 1С они не нужны.
- Размер журнала Security. 20 МБ на сервере с открытым RDP живут часы, ставьте 1-2 ГБ.
- Где лежит бэкап. Если до него дотягивается учётка с сервера, его зашифруют вместе с базой.
- Кто входил последние полгода и с каких адресов. Каждый адрес, который никто не признал, чужой.
Если материал был полезен, поддержите комментарием или плюсом.
Другие наши инструменты:
- Экспресс-аудит безопасности сервера 1С - закрывает двери, через которые зашли в этой истории: RDP и подбор паролей, учётки Windows, порты, папки с бэкапами, SQL Server. По каждой из 34 проверок вердикт и скрипт исправления с пробным режимом и откатом.
- Экспресс-аудит безопасности базы 1С - пользователи без пароля, политика паролей, внешние обработки без предупреждения, входы в ночные часы и пароли открытым текстом в данных. Одна кнопка, 21 проверка с вердиктом, только чтение.
- Аудит паролей СУБД - показывает, у каких баз кластера пароль пользователя СУБД можно достать из файла кластера, помечает слабые пароли и выдаёт план защиты. К СУБД не подключается, только читает файл.
- Журнал регистрации для нейросети - задаёт журналу регистрации тринадцать вопросов: кто заходил, кто удалял, какая ошибка повторяется. Ответы с вердиктами и обезличенный снимок для нейросети.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.