Сисадмин В Kernel Panic
31 subscribers
230 photos
25 videos
1 file
107 links
Небольшой канал, злого сисадмина. Личные заметки и решения, мемы, интересные утилиты.
Download Telegram
Всех с НГ :)
А я продолжу смотреть в мониторинг, и надеяться на спокойную работу, и нормальный аптайм моих серверов.

#meme
🎉4
🏴‍☠️ KMSAuto с сюрпризом

В Южной Корее приняли предпринимателя из Литвы, который преподал индустрии мастер-класс по монетизации человеческой жадности. Он умудрился заразить 2.8 миллиона компьютеров, используя самый популярный софт в мире... активатор KMSAuto. Схема атаки как эталонная социальная инженерия, помноженная на техническую безграмотность пользователей. Жертва сама находит софт, сама скачивает его и, самое главное, сама отключает Defender или добавляет файл в исключения, потому что... ну это же кряк, он всегда детектится 🤔

Софт запускается от имени Админа (иначе службу KMS и драйвер не поставить), и в этот момент вместе с ключом активации в систему залетает Клиппер. Зловред тихо висит в процессах, хукает буфер обмена через WinAPI и ждет своего часа. Как только регулярное выражение (RegEx) детектит строку, похожую на адрес криптокошелька (BTC, ETH, TRC20 и тд), скрипт на лету подменяет её на кошелек злоумышленника 🤑

Заметить подмену глазами практически нереально. Большинство людей проверяют только первые и последние 4 символа адреса, а современные генераторы позволяют хакерам создавать тысячи кошельков с похожими хвостами специально для таких атак. В итоге пользователь копирует адрес, вставляет, жмет Отправить... и деньги улетают в никуда. Таким нехитрым способом автор кряка заработал $1.2 млн, не написав ни строчки сложного эксплойта.

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

☢️ @zeroday_log
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезный Python-трюк для работы с сетями: ipaddress в стандартной библиотеке

Когда нужно быстро проверить IP-адреса, маски подсетей или принадлежность хоста сети, не обязательно тянуть внешние пакеты. Python уже содержит мощный модуль ipaddress.

Чем полезно

Проверка принадлежности адреса подсети
Удобный парсинг IPv4 и IPv6
Генерация диапазонов IP
Всё встроено в Python, сторонние зависимости не нужны

import ipaddress

# Создаем подсеть
net = ipaddress.ip_network("192.168.1.0/24")

# Проверяем, входит ли IP в подсеть
print(ipaddress.ip_address("192.168.1.42") in net) # True
print(ipaddress.ip_address("10.0.0.5") in net) # False

# Перебираем доступные адреса (без network и broadcast)
for ip in net.hosts():
print(ip)
break # выведет первый usable IP

# IPv6 работает точно так же
ipv6 = ipaddress.ip_network("2001:db8::/32")
print(ipaddress.ip_address("2001:db8::1") in ipv6) # True

Что важно понимать

ip_network создаёт объект сети, а не строку
ip_address создаёт числовое представление IP
Проверка через in идёт по диапазону адресов, а не по строковому совпадению
hosts() возвращает только usable адреса
IPv4 и IPv6 используют одинаковый API


Где применять на практике

Проверка trusted-сетей в firewall-скриптах
Фильтрация логов по подсетям
Валидация пользовательского ввода
Генерация ACL и access-листов
DevOps и CI проверки конфигов


#learn
Это лучшая заглушка на 500 ошибку, которую я только видел :)

#meme
🤡 Самый тупой взлом года. Элита даркнета не осилила chmod, админы BreachForums выложили users.sql в корень веб-сервера.

Случилось прекрасное. Главная цифровая помойка планеты, форум BreachForums, где обычно торгуют нашими с вами базами данных, сама оказалась в роли потерпевшей. В паблик выложили свежий дамп, содержащий данные 325 000 пользователей этой площадки. В утечке полный набор для деанонимизации... никнеймы, email-адреса, хеши паролей (тут хотя бы Argon2, а не MD5 😎) и, что самое неприятное (или для кого-то приятное) IP-адреса и личные сообщения. Теперь мамкины хакеры, которые вчера покупали логи с вашего взломанного RDP, сегодня ищут себя в базе Have I Been Pwned. Карма работает?

Особого внимания заслуживает причина провала. Текущий администратор форума (под ником N/A) выступил с объяснением, за которое в приличной компании увольняют одним днём. Оказывается, дамп утек еще в августе 2025 года во время миграции движка. Админы просто временно оставили таблицу пользователей в незащищенной папке на веб-сервере. 😗 Представьте уровень иронии... люди, которые называют себя элитой киберпреступности и продают доступы ко всяким Пентагонам, совершили ошибку эникея-стажера, который впервые выкладывает сайт на хостинг и забывает убрать лишнее из корня сайта.

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

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Как выяснить, какие файлы недавно изменялись в системе?

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

Показать все файлы, которые были изменены или созданы за последние 10 минут:
find /data -xdev \( -path /kernel -o -path /hardware -o -path /runtime -o -path /devices \) -prune -o \
-type f -mmin -10 -print 2>/dev/null


Проверить, что трогали в каталоге конфигураций за последние сутки:
find /config -type f -mtime -1


Определить, какие исполняемые файлы обновлялись недавно:
find /apps -type f -perm /111 -mtime -1

Флаг /111 означает поиск файлов, у которых выставлен хотя бы один бит исполнения.

Посмотреть, какие конфигурационные файлы редактировались последними с точным временем:
find /config -type f -printf '%T@ %p\n' 2>/dev/null | sort -nr | head


Для локального разбора файловых логов:
ls -lt /logs | head

Метод применим только к файловым логам - журналы journald сюда не входят.

Для анализа системного журнала:
journalctl --since "10 min ago"


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

#learn
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
🦕 Самый долгий тикет в истории закрыт. Altair 8800 включился спустя 52 года

В далеком 1974 году один энтузиаст купил себе легендарный Altair 8800 (на базе Intel 8080) в виде набора сделай сам. Отдал он за это удовольствие $439, что по тем временам было серьезной суммой. Но, как это часто бывает, мануал оказался сложным, а паяльник слишком горячим. Владелец допустил ошибки при сборке, ПК не запустился, и он отложил его до выходных

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

Чтобы отпраздновать закрытие тикета, на нем сыграли в игру (Kill the Bit), написанную в 1975г. Геймплей - чистый киберспорт 70х, тут только ты, тумблер и тайминг, чтобы физически потушить бегущий по регистрам бит 😗

Уровень прокрастинации, к которому я стремлюсь.

Типичный
🎄 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
😱3
🐸 Cloudflare молча сменил сертификаты и отключил интернеты владельцам MikroTik.

Тут cлучилась классическая драма на стыке гигантов и вендоров. Cloudflare, особо никого не предупреждая, решил сменить удостоверяющий центр для своих DoH-эндпоинтов (1.1.1.1). Они переехали с DigiCert на SSL.com

Казалось бы, рутина, но есть нюанс. Выяснилось, что в дефолтном хранилище корневых сертификатов MikroTik RouterOS (начиная с версий 7.19 и выше) доверия к SSL.com нет. Вообще. Как результат, у тысяч людей по всему миру DoH-соединения отвалились с ошибкой SSL: no trusted CA certificate found 🎩

Теперь, чтобы оживить DoH на Микротах, нужно вручную скормить ему корневой сертификат.

Временно отключаем проверку серта и ставим резерв:
ip dns set verify-doh-cert=no servers=1.1.1.1


Тянем сертификат с сайта SSL.com:
/tool fetch url="https://ssl.com/repo/certs/SSLcomRootCertificationAuthorityECC.pem"
/certificate import file-name=SSLcomRootCertificationAuthorityECC.pem


Возвращаем всё как было, но уже с рабочим трастом:
ip dns set verify-doh-cert=yes servers=""


Типичный
💊 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Как диагностировать процесс, который занимает слишком много ресурсов ЦП, памяти или I/O в Linux

Если сервер начинает тормозить, а причина неочевидна, на помощь приходят стандартные инструменты диагностики.

vmstat
Показывает общую картину состояния системы:
- количество процессов
- использование памяти
- swap
- загрузку CPU
Подходит для быстрого понимания, в каком месте возникает проблема.

iostat
Инструмент для анализа дисковой подсистемы:
- загрузка CPU
- задержки
- операции чтения и записи по устройствам
Полезен при подозрениях на проблемы с дисками или I/O.

netstat
Статистика сетевого стека:
- TCP / UDP / IP / ICMP
- активные соединения
- состояние портов
Помогает выявить сетевые узкие места.

lsof
Список открытых файлов в системе:
- файлы
- сокеты
- устройства
Незаменим, если процесс удерживает ресурс или файл.

pidstat
Детальная статистика по процессам:
- использование CPU
- память
- I/O
- контекстные переключения
Идеален для анализа конкретного процесса по PID.

#learn
⌨️ Telnet снова дарит root-права без пароля (CVE-2026-24061)

Казалось бы, в 2026 году порт 23 должен быть закрыт не просто фаерволом, а залит бетоном. Но если в вашей инфре (или на старых железках) крутится GNU InetUtils telnetd, у меня для вас плохие новости.

В демоне нашли критическую уязвимость (CVSS 9.8), которая позволяет получить root-доступ, просто грамотно попросив. Дыра жила в коде 11 лет (с 2015 года), и никто её не замечал.

Демон telnetd принимает от клиента переменную окружения USER и, не особо задумываясь, передает её как аргумент утилите /bin/login. А что будет, если хацкер передаст значение -f root? Системный компонент видит флаг принудительного входа, который исторически использовался для доверенных сессий, и решает, что этот пользователь уже аутентифицирован и впускает под рутом 🎩

ИБшные компании уже фиксируют, что с IP-адресов Китая, США и Нидерландов начали активно сканить интернет в поисках мамонтов с открытым телнетом.

Если вы используете Telnet в 2026 году... то, во-первых, зачем? 🤡 А во-вторых, обновляйте пакет inetutils или наконец-то переходите на SSH.

Типичный
🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
lnav - инструмент для просмотра логов.

Что умеет:

Слияние всех логов в один поток
Не нужно прыгать между файлами и сверять таймстемпы. Запустил lnav ./ и все логи из текущей директории сразу перед тобой, аккуратно отсортированные по времени.

Чтение сжатых логов
gzip и другие форматы lnav читает без проблем. Очень удобно, когда старые логи лежат в архиве.

Поиск ошибок и быстрый переход между ними
lnav сам распознаёт ошибки (!) и позволяет перемещаться между ними одной кнопкой e. Нажал и сразу на следующей ошибке.

Фильтрация логов, включая RegExp
Хочешь видеть только 4xx ошибки nginx?
filter-in "4\d\d"
Если нужен ещё фильтр , просто добавляешь такой же. Удалить или временно выключить фильтр? Нажал TAB - и управляешь ими прямо в интерфейсе.

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

#utility
👨‍🦳 Хроники одной моей подсети

Иногда я чувствую себя не сисадмином, а кем-то, кто проводит социальный эксперимент. Я намеренно урезаю пул DHCP до 4 адресов, запускаю в сеть 30 голодных хостов и наливаю себе кофе.

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

Четверо счастливчиков получают заветный IP. Теперь они новая элита, они мой сетевой золотой миллиард 🤴 У них есть доступ к Интернетам, к общим папкам, к жизни. Но их счастье отравлено страхом. Время аренды... их Lease Time тикает. Они помнят, что их статус временный или стоит им уйти в ребут - их место займет кто-то другой, более голодный и быстрый 🏃‍♂️

Остальные 26 маргиналов сваливаются в цифровое гетто 169.254.x.x. Они получают бесполезные APIPA-адреса. Они вроде бы существуют, лампочки мигают, но они отрезаны от большого мира. Они могут общаться только друг с другом в своей локальной безысходности, не имея возможности выйти за пределы своего болота 👹

Но самое забавное в этой трагедии то, о чем не знают ни те, ни другие. В моей сети есть Статическая Аристократия 🪄

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

Они просто молча наблюдают с высоты своих статичных IP, как динамическая биомасса внизу рвет друг другу глотки за право получить доступ к шлюзу на следующие 60 минут.

... но перед лицом обесточивания все пакеты равны. И тьма примет их всех.

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
🥸 10 миллисекунд до шелла. Черти из BSD снова показали, как надо писать код

На FOSDEM 2026 разработчики NetBSD🥸 показали, что происходит, когда инженеры с 30-летним стажем решают убрать вообще всё, что мешает процессору работать. Выкатив проект smolBSD... максимально переосмыслив то, как виртуальная машина должна общаться с гипервизором.

Инженеры пошли путем радикального минимализма. Они выкинули всю шелуху вроде GRUB и BIOS, заставив гипервизор грузить ядро напрямую, без лишних прелюдий и инициализации виртуального железа. Но этого показалось мало. Оказалось, что даже эмуляция обычного Serial-порта слишком медленная, потому что печать каждого символа вызывает VM Exit. Поэтому они выпилили эмуляцию серийника и внедрили нативный драйвер viocon (VirtIO Console). Теперь консоль работает напрямую через память, не дергая гипервизор по пустякам👍

Второй уровень оптимизации... отказ от сканирования шины PCI. Вместо того чтобы ядро при загрузке опрашивало устройства, они передают адреса VirtIO-устройств (диск, сеть, консоль) жестко через MMIO прямо в командной строке ядра. Драйверам не нужно ничего искать, они сразу знают адреса в памяти. А чтобы не ждать инициализации сети и DHCP (это же целые секунды!), они использовали механизм QEMU fw_cfg. Это интерфейс, который обычно используется для передачи конфигов в BIOS, но здесь через него пробрасывают файлы и скрипты прямо в память гостя. В демо они показали, как с хоста через обычный сокет отправляют команды внутрь микро-VM, и она отвечает мгновенно, работая по сути как обычный процесс, но с полной изоляцией ядра.

Еще они запилили сборку этих микро-образов через обычный Dockerfile. Вы пишете FROM base, добавляете пакеты через pkgin, и на выходе получаете загрузочный образ, который стартует за 10 мс. Глядя на это, хочется стереть все эти тяжелые кубернетесы и вернуться к инженерным истокам... без лишних слоев абстракции, на чистом ассемблере и Си 😎

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Шпаргалка по горячим клавишам в терминале.

Ctrl + A - переход в начало строки
Ctrl + E - переход в конец строки
Ctrl + U - удаление от курсора до начала строки
Ctrl + K - удаление от курсора до конца строки
Ctrl + W - удаление слова перед курсором
Ctrl + L - очистка экрана терминала
Ctrl + C - принудительная остановка текущего процесса или команды
Ctrl + D - завершение сессии ввода, выход из оболочки
Ctrl + Z - приостановка текущего процесса с возможностью дальнейшего продолжения
Ctrl + R - поиск по истории выполненных команд
Стрелка вверх - переход к предыдущей команде из истории
Стрелка вниз - переход к следующей команде из истории
!! - повтор последней выполненной команды
!n - повтор команды с номером n из истории
Tab - автодополнение команд, файлов и каталогов
Ctrl + Shift + C - копирование выделенного текста
Ctrl + Shift + V - вставка текста из буфера обмена
Ctrl + Shift + N - открытие нового окна терминала
Ctrl + Shift + T - открытие новой вкладки в терминале
Ctrl + Tab - переключение между вкладками терминала

Может кому-то полезно будет. Хотя многие и меняют дефолтные хоткеи.

#learn
📝Notepad++ работал на китайскую разведку.

Разраб Notepad++ официально подтвердил что инфраструктура обновлений многим любимого редактора была захвачена китайскими государственными хакерами 🐲

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

Атакующие ломанули хостинг проекта и перехватили управление механизмом апдейтов. Поскольку старый модуль обновления WinGUp проверял целостность файлов, мягко говоря, творчески (и использовал самоподписанные сертификаты), хакерам удавалось подсовывать определенным пользователям модифицированные бинарники вместо легального патча. И уже есть инфа, что есть организации, где именно процесс notepad++.exe стал точкой входа для дальнейшего ручного взлома сети 😱

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

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Как запустить процесс в Linux с подменой библиотеки без root (через namespace)

Иногда нужно проверить поведение программы или вмешаться в её работу, не меняя систему и без прав root. Типичные задачи - перехват вызовов open(), подмена getenv(), тестирование своей версии библиотеки.

Обычно для этого используют LD_PRELOAD, но это костыль с кучей ограничений. Более аккуратный вариант - mount namespace и unshare.

Суть подхода простая:
- создаём отдельный mount namespace
- подменяем каталог с библиотеками только внутри него
- запускаем процесс, который ничего не подозревает


Пример:
# Подмена библиотеки без root с помощью mount namespace

mkdir -p /tmp/nsroot/lib

# Кладём свою библиотеку
cp ./hook_lib.so /tmp/nsroot/lib/

# Запускаем процесс в новом namespace с подменённым LD_LIBRARY_PATH
unshare -m -- bash -c '
mount --bind /tmp/nsroot/lib /lib &&
LD_LIBRARY_PATH=/lib ./target_app
'

Что здесь происходит:

- unshare -m создаёт отдельный mount namespace
- mount --bind подменяет /lib только внутри этого namespace
- LD_LIBRARY_PATH указывает загрузчику брать библиотеки из подменённого каталога
- остальная система при этом не затрагивается


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

Полезно для отладки, реверса, тестов и экспериментов, где LD_PRELOAD уже не справляется.

#learn