Et tu, Brute? Что хотят от нас брутфорсеры?
Каждый владелец сервера с «белым» IP-адресом наблюдал в логах бесчисленные попытки подключиться к серверу по SSH с разных точек мира. Администраторы ставят средства противодействия, такие как fail2ban, переносят SSH на другие порты и всячески пытаются защититься от брутфорсеров. Но чего же хотят эти замечательные люди от наших серверов?
Поверхностный ответ, конечно, прост: наживы на бесплатных вычислительных ресурсах и полученных чувствительных данных. Но этот ответ недостаточно подробный. Давайте разложим виртуальные «приманки» и проследим, что происходит, когда автоматический брутфорс оказывается успешным.
В данной статье мы рассматриваем только случаи попадания под «автоматический» перебор и исключаем целенаправленные атаки на наш сервер.
Не пытайтесь повторить описанное в статье, если у вас нет должной подготовки. Ни в коем случае не повторяйте на продакшн-серверах!
Сперва узнаем «врага» в лицо.
Пассивно-агрессивное наблюдение
У нас есть сервер, который уже пару недель стоит с открытым 22 портом. Этого достаточно, чтобы его заметили и начали атаковать.
Для начала узнаем, откуда к нам приходят, как часто и с какими данными. Не будем изобретать велосипед и просто (это действительно просто!) модернизируем исходный код OpenSSH. Ставим необходимые зависимости.
Команда для Ubuntu:
Получаем самую свежую версию с GitHub:
Проводим этап конфигурации перед сборкой. Здесь и далее мы проводим все операции от имени суперпользователя. Чтобы не сломать оригинальный SSH-сервер, указываем префикс для установки патченной версии.
Если все прошло без ошибок, то можно приступать к изменению исходного кода OpenSSH. Брутфорс организуется по методу аутентификации password. Заглядываем в файл auth-passwd.c. В этом файле интересна функция auth_password(), вернее ее начало.
Этот метод вызывается всякий раз, когда кто-нибудь пытается пройти аутентификацию по паролю. Контекст аутентификации (Authctxt) и структура ssh содержат все полезные нам поля:
Конечно, это не самый потокобезопасный код. Но так как мы пишем всего одну строку и нам не критичен порядок записей, то буферы ОС сами разберутся. Собираем и устанавливаем. Установка необходима для генерации ключей хоста.
Правим конфиг /root/ssh/etc/sshd_config, добавляем следующую строчку.
Если не разрешить вход для суперпользователя, то метод auth_password не будет вызываться. Уносим свой рабочий локальный SSH на другой порт и запускаем нашу ловушку.
За 10 дней наблюдений было предпринято 74 865 попытки зайти c 1 131 IP-адресов. В среднем в секунду было от одной до двух попыток аутентификации. Максимально зафиксированное число — 10 попыток за секунду. Примечательно, что все они были совершены с одного IP-адреса.
В этой статье не будет указания точных IP-адресов, так как это очень непостоянная информация. А вот статистика по странам и автономным системам (AS) будет весьма полезна.
Легко заметить, что Китай преобладает по количеству брутфорса.
Вот так выглядит топ самых настырных адресов из следующих AS:
В этом топе отображаются самые активные брутфорсеры, но если взглянуть на весь список адресов, то обнаружится еще одна интересная закономерность: почти половина останавливается на 50 или 70 попытках.
По источникам брутфорса посмотрели, перейдем к топу паролей. Нам удалось собрать словарь на 2 018 пользователей и 32 238 паролей. Вот топ паролей:
Вот он: ababablkljkjhghfgdfdgjhkfdgfhghfgfgqqqqqqwwwwwwgqqqqqqababab.
Примечательно, что это не попытка ручного подбора методом соприкосновения головы и клавиатуры, а вполне себе словарный пароль, который засветился шесть раз с разных мест.
Также один адрес перебирал пароль по датам, а еще несколько десятков адресов как будто бы плохо сконфигурированы: они всегда приходили с паролем root, а в имени пользователя был просто набор символов, например, 1!2@3#4$5%6^7&8*9(0)-_=+.
Из полученной информации следуют такие выводы:
Карт-бланш
Сперва необходимо выяснить, как действует атакующий. Единственное, в чем мы можем быть уверены, так это в том, что на сервер зайдут через ssh. Сперва пропатчим метод аутентификации, чтобы пропускать всех, кто к нам пришел.
Далее изучаем документацию и находим три полезных ключа для sshd.
Запуск программ в *NIX-подобных системах сопряжен с двумя системными вызовами: fork(2) и execve(2). Первый просто дублирует текущий процесс и не несет никакой полезной информации, а вот второй содержит путь и аргументы новой программы.
Воспользуемся удобным инструментом для трассировки системных вызовов в программах — strace. Настраиваем фильтр по execve, разрешаем трассировать потомков и снимаем ограничения на длину выводимой строки. Итоговая команда для трассировки выглядит так:
На выходе получается несколько перегруженный лог, так как атакующий запускает команды, содержащие конвейеры. Тем не менее, извлечь из лога итоговый скрипт несложно.
К слову, именно этот публичный ключ уже фигурировал на Хабре, но при других обстоятельствах, а автор не потерял доступ к собственному оборудованию. Потенциально имя ключа может пролить свет на назначение этого ботнета, так как во второй части имени ключа, fckr, легко восстановить недостающие гласные. А вот что такое mdr, автору понять не удалось.
На первый взгляд кажется, что атакующий бот проверяет наличие сессий на сервере (команда w) и стесняется что-либо загружать. Возможно, конечно, владелец ботнета остерегается администраторов, которые внимательно относятся к своим серверам, и выжидает некоторое время перед загрузкой зловредных бинарников.
Сделаем вид, что мы безответственные администраторы, и составим следующий shell-скрипт, который запустим через nohup:
Так, первая попытка позволит нападающему пройти в ОС сервера и изменить данные для подключения на свои, а после отключения SSH-сервер перезапустится на обычный, который примет теперь уже подходящие доступы.
Единственный минус данного метода — необходимо несколько раз перезапустить скрипт, прежде чем брутфорсер придет с логином root. Но нам повезло — первый же встречный пришел с логином root.
Но отдаваться первому встречному было плохой идеей. Атакующий собрал информацию о виртуальной машине, сменил пароль и ключ, и в течение следующих двух дней никто по новому ключу не пришел.
Пришлось откатить виртуальную машину на момент до атаки. Из этой попытки был сделан вывод, что ловить хороших людей по одному нецелесообразно: их намерения неясны и тратят много времени.
Решение простое: раз уж мы разрешили заходить каждому встречному, а каждый встречный выполняет отдельные команды в неинтерактивном режиме, так давайте будем записывать приходящие команды вместо исполнения. Находим метод do_child() в session.c.
Можно просто записывать все команды и ничего не выводить, но, кажется, атакующий принимает решения на основе полученной информации. По крайней мере при отсутствии вывода атакующий отключился после первой команды.
Пришлось придумать способ «отсеять» атакующих, которые выполняют простой сбор информации о машине, и запретить деструктивные действия. Также я попытался сделать сервер более привлекательным для атакующих и сделал обманывающие заглушки, которые «говорят», что в сервере 72 ядра, а процессор — Intel® Xeon® Gold 6354.
При этом запуск интерактивной сессии не будет логироваться, но это, на мой взгляд, было не так важно, так как нас атакуют боты. Это предположение, конечно, оказалось неверным, но процесс ssh трассируется на системный вызов execve, поэтому команды мы все равно узнаем.
Колизей
Первое время приходили только атакующие с ключом mdrfckr. Заглушки в сервере SSH не давали им испортить мой ключ, а больше вреда от них и не было. В первый час к нам заглянули 12 серверов, которые суммарно выполнили этот скрипт 79 раз. Кажется, что этот ботнет очень простой и его единственная цель — заставить администратора понервничать и вспомнить, как сбросить пароль в Linux. Дело было под вечер, поэтому виртуальная машина была оставлена в покое в надежде утром найти следы более «серьезных» атакующих.
Утром я вернулся к гипервизору и увидел, что vCPU трудятся на 100%. Заглянул внутрь сервера, проверил логи strace и понял, что ночью мой сервер был полем жарких битв.
Первым пришел любопытствующий скрипт из Испании (Мадрид, AS12479 Orange Espagne SA).
Следом пришел майнер из Америки (Невада, AS53667 FranTech Solutions). В отличие от всех предыдущих, майнер максимально непривередлив. Как-нибудь прокатит. При этом IP-адрес нападавшего и IP-адрес сервера с архивом (Нью-Йорк, AS53667 FranTech Solutions) не совпадают.
Кстати, именно этот майнер дожил до встречи со мной. У него два исполняемых файла krn и krane, а также текстовый файл config.json, это конфиг XMRIG. Тем не менее, майнер непрост: он подчищает за собой историю в .bash_history, удаляет конфиг и исходный архив, а также чистит за собой логи.
Далее были попытки протолкнуть исполняемый файл 8nlh4fpijnyueflljkd2bi9f69 через scp по путям:
На этом моменте место для логирования закончилось, и выяснить IP-адрес атакующего теперь не представляется возможным, так как strace сохраняет только pid. Недостаток места повлиял и на crontab.
Успех был достигнут только по последнему пути, но исходный файл тут же был стерт, а его место занял dhpcd. Этот сервис тоже дожил до встречи со мной, но оригинальный файл уже отсутствовал. К счастью, procfs позволяет вытащить файл даже после его удаления.
Следующий зашедший пытался сменить пароли для пользователей ubuntu, test, oracle, admin, test1, после чего проверил authorized_keys на предмет ключа mdrfckr и заменил ключи на собственный безымянный.
Далее был загружен исполняемый файл r в /dev/shm. Похоже, что данный исполняемый файл избавляется от конкурентов. Он проверяет наличие aliyun.one и скачивающихся скриптов в cron, а затем удаляет множество файлов и грубо завершает другие вредоносные процессы.
/bin, а также по файлам запущенных процессов (/proc/$PID/exe) и применил следующий фильтр:
Назначение этой проверки осталось неизвестным.
Затем в логах появились вторые попытки перечисленных атакующих, а потом — рассвет и прекращение эксперимента. Казалось, что можно очистить сервер от лишнего ПО, заменить команду rm пустышкой и попытаться еще раз.
В идеале, конечно, нужно подменить или запретить системный вызов unlink(2), чтобы вообще ничего не удалялось, но этот трюк достаточно сложный. И может скорее навредить, чем помочь.
Вторая попытка
Теперь первым пришел невиданный ранее посетитель. Он работал через интерактивную оболочку и интересовался наличием masscan на моем сервере. Затем он собрал подробную информацию по процессору и памяти. После — собрал информацию об IP, запустил тесты дисковой подсистемы и проверил скорость доступа к сети Интернет.
Интересно, что скрипт тестирования скачивался с передачей адреса и через stdin: это помогло скрыть источник скрипта от логов трассировки.
Однако большая часть скрипта легко восстанавливается по логу трассировки.
Затем пришел эксперт по смене паролей. Его единственная цель — сменить пароль. И он не справился! Ни одна из перечисленных команд не выполнилась успешно на моем сервере.
А вот и «зашифрованные» в base64 скрипты пошли:
При этом в скрипте используется dota3.tar.gz, но этот файл, увы, не был загружен на сервер. 🙁
Последним на сервер зашел уже известный нам krane, он же продолжил трудиться до рассвета.
Выводы
Мы предложили Интернету беззащитную виртуалку и посмотрели, что произойдет. Все в рамках наших ожиданий, но давайте подведем итог.
IPs by Service
The percentage of FranTech Solutions IP addresses which point to servers hosting high risk services:
| Anonymizing VPN | 87% |
|---|---|
| Tor Exit Node | 4% |
| Server | 6% |
| Public Proxy | 3% |
| Web Proxy | 0% |
Percentage IPs by Country
The percentage of FranTech Solutions IP addresses which fall under each country:
| United States | 80% |
|---|---|
| Luxembourg | 16% |
| Canada | 3% |
| Poland | 1% |
| Egypt | 1% |
| United Kingdom | 1% |
| India | 1% |
| Puerto Rico | 1% |
| Russia | 1% |
| N/A | 1% |
| Brazil | 1% |
| Central African Republic | 1% |
| Iceland | 1% |
| Palau | 1% |
Percentage IPs by Organisation
The percentage of FranTech Solutions IP addresses which fall under each organization for whom they manage IPs:
| BuyVM | 14% |
|---|---|
| BuyVM Services | 3% |
| QuickPacket, LLC | 2% |
| LETBOX | 1% |
| ASSERTIVENET | 1% |
| HostFlyte Server Solutions | 1% |
| Kodo Technologies | 1% |
| Private Customer | 1% |
| VirtusHost | 1% |
| Accelerate Hosting & Network Solutions | 1% |
| Boomer LTD | 1% |
| Router Hosting | 1% |
| XXOR AB | 1% |
| Pump Networks Ltd | 1% |
| Fedorait Networks | 1% |
| UK7 | 1% |
| Central Server Solutions, Aquatic Tech LLC | 1% |
| Robert Rademacher | 1% |
| SkypeProtector | 1% |
| GuruTechie LLC | 1% |
| The SixXS Project | 1% |
| Thinkpenguin Inc | 1% |
| Neko LLC | 1% |
| FREEMESH | 1% |
| EURL DZSecurity | 1% |
| EricGillette.com, Inc | 1% |
| Anti-DDoS.PRO | 1% |
| Achieve Wireless Inc | 1% |
| AACS, Inc | 1% |
IPs by Fraud Score
The highest risk FranTech Solutions IP addresses based on our fraud score:
FranTech Solutions
FranTech Solutions insights
Lost to
Total lost 22,905,603 to:
Gained from
Total Gained 23,674,539 from:
Lost to
Total lost 22,905,603 to:
Gained from
Total Gained 23,674,539 from:
FranTech Solutions TLDs
FranTech Solutions customer reviews (9)
Provider with good price to value ratio. I like fast support. (Thank you for help guys.) Clients can not expect miracles from the support for rather low price they are paying. They support DirectAdmin. Uptime is very good so far.
Amateurs. I’m on vacation, and my order is being rejected. Even after a verified payment. Customer service is pretty stupid. They refer to the TOS. But I do not read there that it is forbidden to go on holiday.
Karen S delayed my services from being provisioned and roughly 48 hours later, kept stalling and was responding 3 to 6 hours in between each response. I’ll never be using these people.
I’ve been using a VPS from Frantech for over 3 years now. Overall, the service is great, but the support has always been excellent. They are open about any downtime, and quick to respond to any issues, which btw have been few and far between. Happy with them!!
Claudio Luiz Ferreira
Frantech Solutions
760 Mission Ct, Fremont (CA), 94530, United States

Продвинуть
Как только мы заметим, что появились первые посетители из Facebook, то Ваша страница получит бесплатное продвижение на 3 месяца!
Похожие места поблизости
Hurricane Electric
760 Mission Ct, Fremont (CA), 94539, United States
AVer USA
668 Mission Ct, Fremont (CA), 94539, United States
FM Industries, Inc
221 E Warren Ave, Fremont (CA), 94539, United States
Acme Pacific Repairs
1347 Fulton Pl, Fremont (CA), 94539-7075, United States
Arrow Recovery Group
46025 Warm Springs Blvd, Fremont (CA), 94539-7013, United States
Hotelsoft Inc.
47102 Mission Falls Ct, Fremont (CA), 94539, United States
EITAGlobal
161 Mission Falls Ln, Ste 216, Fremont (CA), 94539, United States
LED One Distribution
45885 Hotchkiss St Fremont, CA, United States
LED One
45885 Hotchkiss St, Fremont (CA), 94539, United States
Pape’ Material Handling
47132 Kato Rd, Fremont (CA), 94538, United States
Breedu Inc.
2090 Warm Springs Ct, # 100, Fremont (CA), 94539, United States
HandScape Inc
939 Corporate Way, Fremont (CA), 94539, United States
ChannelShark
877 Corporate Way, Fremont (CA), 94539-6115, United States
J C Paper
47422 Kato Rd, Fremont (CA), 94538-7319, United States
San Francisco Herb & Natural Food Company
47444 Kato Rd, Fremont (CA), 94538-7319, United States
BIG Design
46808 Lakeview Blvd, Fremont (CA), 94538, United States
Corsair
47100 Bayside Pkwy, Fremont (CA), 94538, United States
Opnext
46555 Landing Pkwy, Fremont (CA), 94538-6496, United States
Solyndra
47488 Kato Rd, Fremont (CA), 94538, United States
Attivo Networks
47697 Westinghouse Dr, Fremont (CA), 94539, United States
Help Us Protect Glassdoor
Please wait while we verify that you’re a real person. Your content will appear shortly. If you continue to see this message, please email to let us know you’re having trouble.
Nous aider à garder Glassdoor sécurisée
Nous avons reçu des activités suspectes venant de quelqu’un utilisant votre réseau internet. Veuillez patienter pendant que nous vérifions que vous êtes une vraie personne. Votre contenu apparaîtra bientôt. Si vous continuez à voir ce message, veuillez envoyer un email à pour nous informer du désagrément.
Unterstützen Sie uns beim Schutz von Glassdoor
Help ons Glassdoor veilig te houden
We hebben verdachte activiteiten waargenomen op Glassdoor van iemand of iemand die uw internet netwerk deelt. Een momentje geduld totdat we hebben bevestigd dat u daadwerkelijk een persoon bent. Uw bijdrage zal spoedig te zien zijn. Als u deze melding blijft zien, e-mail ons: om ons te laten weten dat uw probleem zich nog steeds voordoet.
Ayúdanos a mantener la seguridad de Glassdoor
Hemos estado detectando actividad sospechosa tuya o de alguien con quien compartes tu red de Internet. Espera mientras verificamos que eres una persona real. Tu contenido se mostrará en breve. Si continúas recibiendo este mensaje, envía un correo electrónico a para informarnos de que tienes problemas.
Ayúdanos a mantener a Glassdoor seguro
Hemos estado percibiendo actividad sospechosa de ti o de alguien con quien compartes tu red de Internet. Espera mientras verificamos que eres una persona real. Tu contenido se mostrará en breve. Si continúas recibiendo este mensaje, envía un correo electrónico a para hacernos saber que estás teniendo problemas.
Ajude-nos a manter o Glassdoor seguro
Temos recebido algumas atividades suspeitas de você ou de alguém que esteja usando a mesma rede. Aguarde enquanto confirmamos que você é uma pessoa de verdade. Seu conteúdo aparecerá em breve. Caso continue recebendo esta mensagem, envie um email para para nos informar sobre o problema.
Aiutaci a mantenere sicuro Glassdoor
Abbiamo notato alcune attività sospette da parte tua o di una persona che condivide la tua rete Internet. Attendi mentre verifichiamo che sei una persona reale. Il tuo contenuto verrà visualizzato a breve. Se continui a visualizzare questo messaggio, invia un’e-mail all’indirizzo per informarci del problema.










