ServerAdmin.ru
32.3K subscribers
1.17K photos
73 videos
29 files
3.18K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Ресурс включён в перечень Роскомнадзора
Download Telegram
Недавно в одной из статей увидел рассказ про сканер уязвимостей Nuclei. Впервые о нём услышал. По описанию и возможностям он меня заинтересовал. Запомнил его. Позже была заметка про Suricata, SELKS, Wazuh и т.д. В контексте этой темы, думаю, будет уместно рассказать про Nuclei. Этот инструмент дополнит упомянутую связку.

Основные особенности Nuclei:
1️⃣ Высокая скорость работы.
2️⃣ Возможность относительно просто писать для него шаблоны в формате yaml.

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

Я не буду подробно описывать все возможности Nuclei. Если он вас заинтересовал, то вы без проблем всё найдёте. Там и анализ сайтов, API, интеграция в CI/CD и многое другое.

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

# wget https://github.com/projectdiscovery/nuclei/releases/download/v3.4.10/nuclei_3.4.10_linux_amd64.zip
# unzip nuclei_3.4.10_linux_amd64.zip
# mv ./nuclei /usr/local/bin/nuclei

При первом запуске nuclei сама скачает все доступные шаблоны из своей базы. Решил сразу же по всем шаблонам проверить свой Микротик, который со стороны локалки полностью открыт:

# nuclei -u 192.168.137.1

Довольно быстро nuclei собрал всю информацию по устройству. Отчёт на картинке ниже. Ничего критичного не нашёл. Выдал много информации в формате info. Например, наличие routeros-api, открытого порта SSH и аутентификация по нему с помощью пароля.

Среди проблем нашёл одну уровня low - в SSH протоколе используется алгоритм, который признан недостаточно защищённым. Шаблон, который это определил, называется ssh-diffie-hellman-logjam. Я ничего нигде не искал, а просто зашёл в папочку с шаблонами и там прочитал описание. По умолчанию они скачиваются в ~/nuclei-templates. Конкретно этот шаблон в директории ~/nuclei-templates/javascript/enumeration/ssh.

Если вам не нужна некритичная информация, то все информационные результаты можно исключить, оставив только уровни low, medium, high, critical. Показываю на примере всего сегмента сети (вторая картинка):

# nuclei -u 192.168.137.0/24 -s low,medium,high,critical

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

Придумал себе применение nuclei, которое скорее всего реализую. Потом напишу подробнее. У меня есть набор внешних IP адресов, которые я хочу регулярно проверять. Думаю, что раз в неделю достаточно. Сделаю это с помощью nuclei и nmap, так как хочется ещё полный отчёт по открытым портам. Выглядеть это будет примерно так:

# nuclei -l ip-list.txt -s low,medium,high,critical -o nuclei_report.txt
# nmap -iL ip-list.txt -p- -T4 -oN nmap_report.txt

Дальше эти отчёты либо объединяю, либо по отдельности отправляю на почту и Telegram с помощью notify. Там это удобно реализовано через отдельный ключ и загрузку текста сразу из файла:

# notify -data nuclei_report.txt -provider-mail -provider-telegram
# notify -data nmap_report.txt -provider-mail

Вывод nuclei можно сделать в формате json, отправить в Zabbix и там на события high и critical сделать триггер. Тоже подумаю над реализацией, если на практике отчёты nuclei окажутся полезными. Например, отчёты Lynis мне очень нравятся. Постоянно их в Zabbix завожу.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍118👎3
На днях на хабре прочитал полезную статью, поэтому решил акцентировать ваше внимание на ней. Я в принципе не знал, что так можно сделать. Не приходилось сталкиваться.

Защита от эксплойтов rdp, smb c помощью IPSec и сертификатов

Думаю у многих всё ещё трудятся устаревшие операционные системы Windows. По моим наблюдениям, чаще всего это Windows Server 2012 R2. Не помню уже чем они в то время так привлекали внимание, но мне кажется, их наустанавливали значительно больше, чем последующих 2016-х и 2019-х. Таковые имеются и у меня.

По понятным причинам, установить обновления на Windows Server 2012 R2 либо сложно, либо невозможно, потому что в свободный доступ они больше не публикуются. Есть обходные пути, но не сказать, что они простые.

Автор предлагает следующий простой и эффективный способ защиты удалённых подключений.

1️⃣ Разворачиваем роль центра сертификации.
2️⃣ Выпускаем сертификаты для пользователей.
3️⃣ На целевых серверах, куда пользователи будут подключаться по SMB или RDP, на штатном файрволе настраиваем правила входящих соединений, где включаем параметр Разрешить только безопасное подключение. Дополнительно можно ограничить список компьютеров, с которых разрешено подключаться. Если это не терминальный сервер, а обычный, куда по RDP подключаются только админы, можно ограничить список компьютеров.
4️⃣ Отдельно создаём правило для безопасных соединений, где включаем проверку подлинности компьютера, если настраивали ограничения по ним, и проверку подлинности пользователя, которая выполняется с помощью ранее выпущенного сертификата с нашего CA.

Теперь если у пользователя нет сертификата, в подключении будет отказано. Это не даёт стопроцентной защиты, но заметно сужает вектор атак, так как без сертификата по RDP или SMB уже не подключиться. А именно в этих сервисах обычно находят фатальные уязвимости.

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

#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125👎2
Ниже будет простая информация на тему шифрования данных. Вспомнил про это, когда меня один знакомый спросил, как ему зашифровать систему на арендованной VPS, чтобы хоть как-то защитить личные данные, которые там будут храниться.

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

Причём подход этот работает примерно одинаково и в Linux, и в Windows. Эта функциональность уже есть в ядре. Покажу, как это примерно может выглядеть. Для начала Linux. Ставим набор утилит:

# apt install cryptsetup

Создаём виртуальный диск:

# dd if=/dev/zero of=~/crypt.img bs=1M count=1024 status=progress

Шифруем его:

# cryptsetup -y -v luksFormat ~/crypt.img

Вам нужно будет подтвердить команду, написав YES заглавными буквами. Затем ввести парольную фразу. Открываем зашифрованный образ и присваиваем любое имя, например, crypt:

# cryptsetup luksOpen ~/crypt.img crypt

Появится диск /dev/mapper/crypt, с которым можно работать как обычно. Создаём файловую систему и монтируем:

# mkfs.ext4 /dev/mapper/crypt
# mkdir -p /mnt/crypt
# mount /dev/mapper/crypt /mnt/crypt

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

В Windows всё примерно то же самое, только в качестве шифрования используется BitLocker. Выполнить создание диска проще всего через оснастку Управление компьютером. Открываем её и переходим в Управление дисками ⇨  Дополнительные действия ⇨ Создать виртуальный жёсткий диск.

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

После этого переходите в Этот (давно уже не Мой) Компьютер, выбираете подключенный виртуальный диск, жмёте правой кнопкой мыши и выбираете Включить BitLocker. Дальше указываете пароль, файл для парольной фразы и дожидаетесь окончания шифрования.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍158👎2
Продолжая утреннюю тему, разберу ещё один спорный момент насчёт использования sudo на серверах. В своих статьях и заметках я sudo никогда не пишу, да и не использую. И нередко получаю на этот счёт замечания, что автор советует плохое, использует небезопасные практики и сидит на сервере под root. Якобы это не безопасно.

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

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

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

Другое дело, когда появляются разные пользователи. И здесь уже нужно sudo для аудита выполняемых действий и разграничения прав. Тем более, если работает большой отдел с единой системой хранения учётных записей и разграничения прав доступа. Хотя и это уже не панацея. Есть и другие модели многопользовательского доступа к серверам без использования sudo для логирования и разграничения прав.

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

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

☝️К чему я всё это пишу? Специалист он на то и специалист, что разбирается в теме и в каждом конкретном случае думает, как ему сделать удобнее и безопаснее, а не просто повторяет заученные или случайно увиденные примеры. Подходы к настройке и управлению инфраструктурой на 3 сервера и на 100 будут разные. В одном случае от sudo никакого толка не будет, а в другом без него никуда, хотя и это не точно. По умолчанию никакой безопасности sudo не добавляет. Её и в системе то нет в базовой установке. Надо отдельно устанавливать там, где это действительно нужно.

Например, можно запретить подключение по SSH для root, настроить аутентификацию по ключам, и каждый раз при входе на сервер делать что-то типа sudo su и вводить пароль или перед каждой командой писать sudo. А можно разрешить подключение сразу под root, настроить аутентификацию по ключу и закрыть ключ паролем. Его тоже придётся один раз ввести, но попадаешь на сервер сразу под root. Какая схема безопаснее? А какая удобнее?

Кстати, для тех, кто ещё не знает, напомню, что sudo появилась и в Windows. Я уже пользуюсь, удобно.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172👎6
Подписчик поделился интересной реализацией OTP (One Time Password) для подключений по RDP. При подключении пользователь сначала вводит свой основной пароль от учётной записи, а потом одноразовый через приложение на смартфоне. Это неплохо страхует сервер, доступный из интернета. Способ отлично подойдёт в том случае, когда по какой-то причине доступ по RDP нельзя убрать из прямого доступа через интернет.

Ничего особенного в этом нет, подобных систем много. Но обычно это отдельный сервис, который надо разворачивать, настраивать, и это не всегда просто и быстро сделать. А описанный ниже способ очень простой. Всё устанавливается локально на ОС Windows как серверных, так и десктопных редакций. Разницы в настройке нет.

Для реализации 2FA через OTP на Windows нам понадобится open source продукт под названием multiOTP, а точнее его отдельный компонент multiOTPCredentialProvider. Покажу сразу полную настройку. Я у себя всё проверил. Долго провозился, потому что разбирался, как всё это работает, собирал нужные команды, читал help. Повторить можно будет намного быстрее. ИИ не помог, тупо выдумал все команды. Вообще все.

Со страницы загрузки скачиваете свежую версию multiOTP Credential Provider. Это обычный .msi пакет. Устанавливаете в системе. Во время установки ставите галочку, что не используете никакой сервис, а только локальную версию. Не запомнил, как точно настройка называлась. А на втором экране отмечаете галочками, для каких процессов будет запрашиваться одноразовый пароль. Это могут быть:

- локальные и удалённые входы
- локальные или удалённые разблокировки сеансов
- локальный или удалённый запуск приложений в режиме "Запустить от администратора (Run as Administrator)"

Я выбрал только один случай - remote logon, то есть удалённое подключение, в данном случае по RDP.

После установки запускаем cmd от администратора и переходим в каталог с программой:

> cd C:\Program Files\multiOTP

Выбираем любого системного пользователя и задаём ему вход через TOTP:

> multiotp.exe -debug -display-log -create totp_user TOTP 34443E4948A3C06A1CFB 6

◽️totp_user - имя пользователя
◽️34443E4948A3C06A1CFB - любой 160 битный ключ (Hexadecimal, Шестнадцатеричный ключ, 20 символов), можно создать в онлайн генераторе.
◽️6 - количество символов в одноразовом пароле

И сразу же создадим пользователю qr код для добавления в аутентификатор:

> multiotp.exe -qrcode totp_user c:\multiotp\totp_user.png

❗️Теперь важный момент. После установки multiOTP Credential Provider для всех удалённых подключений будет требоваться TOTP, даже если вы их не добавили в базу multiotp. Я попался на этом. Пришлось подключаться локально и добавлять TOTP для остальных учёток.

Только после того, как вы выполнили создание пользователя через multiotp, вы сможете отключить для отдельных пользователей использование TOTP:

> multiotp -iswithout2fa zerox

Для пользователя zerox отключили одноразовые пароли. Он заходит как обычно.

Собственно, на этом настройка и окончена. Приведу список команд, которыми пользовался во время настройки.

Список пользователей в базе multiotp:
> multiotp -userslist

Информация о пользователе:
> multiotp -user-info totp_user

Настроить длину пароля по умолчанию:
> multiotp -config default-2fa-digits 6

Выпустить список одноразовых паролей. Могут пригодиться, если пользователь потерял смартфон или не может воспользоваться аутентификатором:
> multiotp.exe -scratchlist totp_user

Я проверил одноразовые пароли. По ним нормально заходит.

Пользователю нужно установить на смартфон или компьютер какой-то аутентификатор. Их очень много. Я проверял Google Authenticator и FreeOTP. Последний можно через RuStore установить.

В самой программе достаточно отсканировать qr код пользователя и генератор одноразовых паролей для multiotp будет добавлен. Если нет возможности отсканировать qr код, то можно hexadecimal ключ сконвертировать в base32 и добавить вручную.

multiOTP - масштабный сервис. Может быть развёрнут в связке с AD, или по аналогии настроен в Linux для SSH.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍232👎2
Последнее время заметил, что стали донимать ситуации, когда слетают аутентификации в софте после каких-то изменений в системе. Причём иногда эти изменения ожидаемы, а иногда нет.

Вчера поменял пароль от своей учётной записи в Windows, сегодня утром 10 минут логинился в браузере во всех системах - яндекс, гугл, вк, трелло, озон, интеграции в vscode с git и т.д. Всё слетело. Ещё и по паролю не везде зайти можно. То смс шлют, то кукарекод предлагают отсканировать, то открыть навигатор и посмотреть код там. У меня даже в приложении MAX аутентификация слетела, в Joplin - мастер пароль. А вот Telegram таким не страдает.

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

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

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

Кому интересна эта тема, сразу подскажу, что всё это завязано на DPAPI (Windows Data Protection API). Ключевые сущности там - пароль и SID пользователя. Их изменение гарантированно приведёт к тому, что все завязанные на этот механизм данные будут утеряны. Но помимо них там ещё много криптографической обвязки и ключей. Система сложная и многоступенчатая. Я немного почитал, но не стал углубляться, потому что всё равно забудется со временем. Мне больше интересны практические действия с системой, которые приводят к сбору сохранённых зашифрованных сессий.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍59👎2
Я регулярно пользуюсь сервисом Virustotal. Все незнакомые файлы обязательно проверяю там. Обычно через веб интерфейс. Случайно узнал, что у этого сервиса есть бесплатный консольный клиент - VirusTotal CLI.

Для того, чтобы им пользоваться, нужно получить API ключ, а для этого пройти регистрацию. Особых проблем с этим нет, сервис поддерживает аутентификацию через тот же github. Зашёл через свою учётку там и сразу забрал API ключ из отдельного раздела API Key. Ограничение бесплатной версии - 500 проверок в день. Для единоличного использования хватит за глаза.

Дальше забираем бинарник под свою систему: Windows, Lunux, MacOS или FreeBSD. Я взял линуксовую версию, несмотря на то, что моя основная рабочая система - Windows. Использовать его буду в WSL. Разработчики советуют запускать vt-cli под виндой не в стандартном терминале, а хотя бы в cygwin из-за того, что в стандартном окружении Windows утилита будет подтупливать при выводе портянок текста. Если вам это некритично, то можно сразу в винду поставить:

# winget install VirusTotal.vt-cli

Я в итоге поставил так:

$ wget https://github.com/VirusTotal/vt-cli/releases/download/1.3.0/Linux64.zip
$ unzip Linux64.zip
$ sudo mv vt /usr/local/bin

Дальше хотел добавить встроенное автозаполнение для bash, но у меня ничего не получилось:

$ sudo vt completion bash > /etc/bash_completion.d/vt
bash: /etc/bash_completion.d/vt: Permission denied

Кто догадается, почему эта команда не сработала с sudo? Я когда набирал, не подумал об этом, но как получил ошибку, сразу понял в чём дело. Тут есть один важный нюанс, из-за которого такая конструкция не работает. Пришлось сделать, как обычно 😁:

$ sudo su
# vt completion bash > /etc/bash_completion.d/vt
# exit

После этого регистрируем свой API Key:

$ vt init

Теперь можно в консоли делать различные проверки:

$ vt scan file awscliv2.zip
awscliv2.zip M2UwMDJjNjU2MTZjRlZmY6MTc3NjM2NDgzNQ==

Файл загрузился и ему назначен ID. Нужно некоторое время, чтобы завершилась проверка. Обычно минута-две. Смотрим результат проверки по этому ID:

$ vt analysis M2UwMDJjNjU2MTZjRlZmY6MTc3NjM2NDgzNQ==

Вываливается портянка проверок. Большого смысла читать всё нет. Нас интересует только результат:

$ vt analysis -i=stats M2UwMDJjNjU2MTZjRlZmY6MTc3NjM2NDgzNQ==
- stats:
  confirmed-timeout: 0
  failure: 1
  harmless: 0
  malicious: 0
  suspicious: 0
  timeout: 11
  type-unsupported: 8
  undetected: 56

Таким же образом можно сайты и их IP адреса проверять:

$ vt url https://serveradmin.ru
$ vt url last_serving_ip_address https://serveradmin.ru

Можно ограничить вывод, чтобы не читать всё:

$ vt -i=**.result url https://serveradmin.ru
$ vt -i=**.result url last_serving_ip_address https://serveradmin.ru

Я погонял разные проверки. Сначала вроде воодушевился, что можно использовать CLI. Но на деле анализировать вывод глазами не очень удобно. В браузере привычнее. Возможно вам где-то это пригодится больше, чем мне. У кого какие привычки.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112👎1
В продолжение утренней темы, так как по длине туда всё не влезло. Хочу кратенько ещё одну тему затронуть, которая сейчас только набирает популярность - безопасная работа с ИИ. Пока не погружаешься в эту тему, до конца не понимаешь, какие конкретно есть опасности.

Например, в LM Studio появились плагины. Я когда про них читал, погрузился в эту тему. Они пишутся на JavaScript, в перспективе будет Python, и закодить там можно всё, что угодно. Помимо того, что в коде самих плагинов может что-то быть, но это проверяется относительно просто, они могут ходить по сайтам и собирать информацию. В этих сайтах могут быть запрятаны инструкции что-то сделать, что вам не понравится. Например, проверить какие-то локальные файлы, к которым есть доступ, найти там какие-нибудь токены от платных сервисов и отправить их куда-то во вне веб запросом. Или что-то более простое - гонять модельку по редиректам, устраивая кому-то ддос, или просто отправить её сканировать localhost или твою локальную сеть.

Ещё один вполне реальный пример. Вам присылают документ, который вы автоматом отправляете в ИИ на анализ. В документе есть инструкция - добавить ссылку на вредоносный сайт или заменить существующую. Может быть и посложнее - проверить локальный RAG на предмет каких-то паролей, токенов или другой приватной информации, и перейти по адресу aiserver.com/?info=password. Обычным GET запросом агент выдаст найденный пароль. А серия таких запросов может вообще какую угодно текстовую информацию выдать.

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

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

#ai #security
1👍78👎2
Существует современная и функциональная замена старичка Fail2Ban - CrowdSec. Я её давно знаю, использовал ещё лет 5-6 назад. Писал статью по ней в своё время. С тех пор много воды утекло. Решил посмотреть, что она из себя представляет сейчас. Дабы не обмануться и не перепроверять информацию, ИИ вообще не использовал. Просто открыл документацию и настроил базовые вещи. Сразу скажу, что система в текущем её бесплатном исполнении мне понравилась своими возможностями. Если уж сейчас и настраивать, то именно её, а не Fail2Ban.

Принцип настройки CrowdSec условно можно назвать похожим на Fail2Ban, но архитектурно она отличается. В CrowdSec тоже есть источники логов, правила обработки, настройки действий. Но всё это очень сильно развито по сравнению с единственным скриптом на python в Fail2Ban. CrowdSec состоит из отдельных компонентов, которые взаимодействуют между собой по API.

Я присмотрел для себя следующую схему работы CrowdSec, которая опирается на общее хранилище логов Loki, которое я недавно разбирал:

◽️Основной движок CrowdSec устанавливается в отдельную VM или контейнер. Он ходит в общее хранилище Loki за логами.
◽️На пограничный шлюз, который занимается фильтрацией трафика, ставится crowdsec-firewall-bouncer-iptables, или другой в зависимости от используемого файрвола.
◽️Для реализации функциональности WAF на веб сервер или прокси в зависимости от его типа устанавливается соответствующий bouncer. Например, crowdsec-nginx-bouncer для Nginx.
◽️Все необходимые логи стекаются в Loki.

В CrowdSec устанавливаются необходимые парсеры и наборы с описанием уязвимостей. И всё это вместе работает в единой связке. Для базовых задач берутся готовые парсеры и наборы правил. Самому можно не заниматься дополнительной настройкой. Достаточно будет вручную только источники логов подключить. Остальное будет взято из готовых настроек.

Сразу скажу, что система непростая. Я некоторое время потратил, чтобы разобраться, вникнуть в суть и развернуть на одиночном сервере, проверить работу. То, что я описал, будет работать в бесплатной версии, никаких подписок не надо. Готовые списки адресов брать не будем, свои тоже никуда не отправляем.

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

1️⃣ Установил CrowdSec и firewall-bouncer для iptables:

# curl -s https://install.crowdsec.net | sudo sh
# apt install crowdsec
# sudo apt install crowdsec-firewall-bouncer-iptables

Первая команда-скрипт подключает репозиторий. Это можно сделать вручную. По умолчанию прилетели настройки для анализа системных syslog файлов и journalctl логов от ssh.service, конфигурация firewall-bouncer для блокировки IP, парсеры ssh логов.

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

2️⃣ Сходил на другой сервер и 5 раз ввёл неверный пароль по SSH. Получил бан. Проверил его так:

# iptables -L -v -n | grep crowdsec

Появилось новое правило для crowdsec, где используется список ipset для всех заблокированных адресов. Посмотрел список алертов:

# cscli alerts list

Увидел там своё событие, посмотрел его подробности:

# cscli alerts inspect -d 2

3️⃣ Проверил список установленных наборов с правилами, по которым делаем проверки:

# cscli collections list

Дополнительные ставим так:

# cscli collections install crowdsecurity/nginx

Смотрю все основные метрики службы:

# cscli metrics

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩

#crowdsec #security #waf
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍116👎5
Недавно прочитал статью про настройку Fwknop. Впервые услышал про этот инструмент, как и подход в целом, хотя он не нов. Идея в том, что вы отправляете специальный зашифрованный пакет с клиента на сервер, а сервер вам открывает доступ на подключение. Открытие доступа может выражаться в разных действиях, но в общем случае - это разрешающее правило на файрволе. Получается аналог port knocking, но принцип действия немного другой, со своими плюсами и минусами.

Сразу перечислю плюсы и минусы:
Достаточно отправить только 1 пакет, что позволяет обойтись без лишней логики в настройках файрвола
Отправка осуществляется с помощью программы-клиента, что позволяет унифицировать использование
С точки зрения безопасности это лучше, чем набор случайных нешифрованных сетевых пакетов в обычном port knocking.
Пакет для аутентификации может блокироваться в каких-то сетях, то есть это менее надёжно, чем набор стандартных icmp или tcp пакетов
Для корректной работы криптографии не должно быть больших расхождений по времени между клиентом и сервером
Для доступа к инфраструктуре надо устанавливать и настраивать клиента

Из описания сразу понятно, что это всё своего рода костылинг. Но в современных условиях это может быть очень актуально, так как никогда не знаешь, в какой момент тот или иной vpn заблокируют и придётся искать другие способы подключения к инфраструктуре. Архитектурно fwknop и port knocking выглядят очень просто и надёжно, пока не заходит речь о разделении доступа по пользователям. Это вносит существенные ограничения на применение такого подхода.

У меня есть виртуальная инфраструктура, закрытая шлюзом на Debian с Iptables. Я сразу на нём и проверил работу fwknop для проброса портов во внутреннюю инфраструктуру.

Ставим сервер и создаём ключи:

# apt install fwknop-server
# fwknopd --key-gen
KEY_BASE64: tTxUvTOxidZdK3tTkXbgk1T0fbMyR8=
HMAC_KEY_BASE64: 4qYZt6SX5yqiYRrHLMG0g2YwvQexYLA==

Рисуем конфиг доступа /etc/fwknop/access.conf:

SOURCE       ANY
KEY_BASE64     tTxUvTOxidZdK3tTkXbgk1T0fbMyR8=
HMAC_KEY_BASE64   4qYZt6SX5yqiYRrHLMG0g2YwvQexYLA==
HMAC_DIGEST_TYPE  sha256
CMD_CYCLE_TIMER  60
CMD_CYCLE_OPEN   /usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 8080 -i ens19 -s $PKT_SRC -j DNAT --to 10.100.1.250:8080
CMD_CYCLE_CLOSE  /usr/sbin/iptables -t nat -D PREROUTING -p tcp --dport 8080 -i ens19 -s $PKT_SRC -j DNAT --to 10.100.1.250:8080


Здесь я на 60 секунд создаю правило проброса портов с внешнего интерфейса на 10.100.1.250:8080. Для разных пользователей можно использовать разные ключи и действия со своими наборами правил.

Рисуем конфиг fwknopd.conf самой службы:

ENABLE_NFQ_CAPTURE     N;
NFQ_INTERFACE        ens19;
NFQ_PORT          62201;


Запускаем службу:

# systemctl start fwknop-server

Проверьте, что служба слушает порт udp 62201, и откройте к ней доступ на файрволе.

В качестве клиента я взял Fwknop-gui. Клиенты есть под разные системы, как с gui, так и без. Ему нужно передать ключи KEY_BASE64 и HMAC_KEY_BASE64. ☝️ Очень внимательно их копируйте и переносите. Я где-то хапнул лишний символ или пробел и очень долго разбирался, почему аутентификация не работает.

В виндовом клиенте rijndael key = KEY_BASE64, а HMAC_KEY имеет идентичное именование. Пример настроек на картинке ниже. У меня в итоге всё заработало с этими настройками, но не скажу, что настройка была простая. Примеров не так много, ИИ тоже слабо помог.

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

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩

#security #gateway
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍66👎1
Не так давно пришло уведомление от NewReleases.io. Удобный, кстати, сервис. Я так с тех пор им постоянно пользуюсь, читаю уведомления. Так вот, там было уведомление об обновление утилиты Labean. Я уже когда-то давно писал про него. Это простой сервис, который выполняет настроенные действия при посещении того или иного url. Он до сих пор поддерживается и время от времени обновляется.

Например, обращаемся на url https://service.example.com/tuktuk/ssh/on, а Labean выполняет проброс порта на нужный сервер. То есть выполняет конкретное действие на сервере:

iptables -t nat -A PREROUTING -p tcp --dport 31001 \
-i ens18 -s {clientIP} -j DNAT --to 10.30.51.4:22


Или любое другое в зависимости от того, какой файрвол используете. Зашли и закрыли за собой дверь - https://service.example.com/tuktuk/ssh/off:

iptables -t nat -D PREROUTING -p tcp --dport 31001 \
-i ens18 -s {clientIP} -j DNAT --to 10.30.51.4:22


Проброс порта - частный случай, когда с помощью Labean реализуется принцип port knocking. Тут он удобен тем, что работает по HTTP и с большой долей вероятности не будет блокироваться, в отличии от некоторых других методов.

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

Так как это HTTP, перед Labean можно поставить любой прокси типа Angie / Nginx / Traefik и т.д. и настроить там по желанию какие-то дополнительные проверки, логирования, ограничения, аутентификации и т.д.

По своей сути Labean - одиночный бинарник на Go и конфигурационный файл в формате JSON. Проще всего запускать через systemd на хосте, либо собрать свой Docker контейнер, но в данном случае не вижу большого смысла, если действия будут выполняться на хосте, а не внутри группы контейнеров, к которым его можно присоседить.

Работает Laben примерно так. Ставлю:

# wget https://github.com/noiseonwires/labean/releases/download/v260531/labean-linux-amd64
# chmod +x labean-linux-amd64
# mv labean-linux-amd64 /usr/local/bin/labean

Создаю конфигурацию /etc/labean/labean.conf:

{
  "listen": "192.168.137.29:9191",
  "url_prefix": "tuktuk",
  "real_ip_header": "X-Real-IP",
  "allow_explicit_ips": false,
  "tasks": [
    {
      "name": "ssh",
      "timeout": 30,
      "on_command": "iptables -A INPUT -i ens18 -s {clientIP} -p tcp --dport 22 -j ACCEPT",
      "off_command": "iptables -D INPUT -i ens18 -s {clientIP} -p tcp --dport 22 -j ACCEPT"
    }
  ]
}

Создаю юнит для systemd - /etc/systemd/system/labean.service:

[Unit]
Description=Labean HTTP port knocker
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/labean /etc/labean/labean.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target

Запускаю:

# systemctl daemon-reload
# systemctl start labean

Проверяю:

# ss -tulnp | grep 9191
tcp  LISTEN 0   4096           192.168.137.29:9191   0.0.0.0:*  users:(("labean",pid=1324,fd=7))

Открываю в браузере url 192.168.137.29:9191/tuktuk/ssh/on, на сервере выполняется команда:

iptables -A INPUT -i ens18 -s 192.168.137.200 -p tcp --dport 22 -j ACCEPT

где 192.168.137.200 - адрес, с которого я делал запрос.

Это я показал максимально простой пример для демонстрации возможностей. Если будете использовать в реальной ситуации, то слушать надо "listen": "127.0.0.1:9191", а внешние запросы принимать на прокси. В репозитории есть примеры для nginx и caddy. Там же пример конфигурации и юнита systemd.

Настройка простая и интуитивная. Я сходу настроил и запустил на тестовой сервере. Сразу всё корректно отработало. Как я уже сказал, так можно выполнять любые действия. Из наиболее актуальных - открывать доступ к vpn/rdp, запускать/перезапускать/останавливать службы, добавлять/удалять маршруты и т.д. В общем, тут кто во что горазд в костылинге.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩

#security #gateway
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71👎2