Обновить
32
0.5
Даниил Солопов@dan_sw

Software Engineer, Bachelor of Computer Science

Отправить сообщение

Барьеры памяти «Golang»

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели9.3K

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

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

Читать далее

Как я превратил простую HTML-инъекцию в SSRF с помощью рендеринга PDF

Время на прочтение4 мин
Охват и читатели2K

Сегодня я расскажу вам об интересной уязвимости, которую я нашёл в одном закрытом баг-баунти проекте: простая HTML-инъекция превратилась в полноценную SSRF с утечкой учетных данных AWS.

Заварите себе кофе, и давайте начнем! 😉

Читать далее

Защита от тёмных искусств: DLL-Hijacking

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели1.8K

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

Один из возможных вариантов — использование атакующими техники DLL-Hijacking (Mitre T1574.001). Я встречал мнение, что техника (а если быть точным, то это подтехника для T1574: Hijack Execution Flow) DLL Hijacking — баян десятилетней давности и не может считаться актуальной угрозой для корпоративных Windows-сред. Затрудняюсь определить причину такого мнения, потому что атаки с использованием DLL-библиотек явно не ушли в прошлое — их по-прежнему упоминают в уважаемых отчетах по кибербезу — к примеру, здесь (Mandiant M-Trends 2024, стр.50) и здесь (Лаборатория Касперского, «Азиатские APT-группировки: тактики, техники и процедуры»). 

Причин широкого распространения таких атак несколько. В первую очередь, это скрытность, так как вредоносное ПО выполняется в контексте легитимного процесса, обходя сигнатурные проверки антивирусов, а для обнаружения требуется EDR и навыки работы с ним. 

Во-вторых, простота, так как для успеха часто достаточно лишь правильно названного файла .dll, помещенного в «нужную» папку, куда пользователь или приложение его случайно положат или откуда запустят уязвимую программу. 

В-третьих, техника работает на всех актуальных версиях Windows, поскольку уязвимы не столько сами ОС, сколько миллионы приложений, полагающихся на стандартный (и небезопасный по умолчанию) механизм поиска библиотек.

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

В этой статье мы: 

За 90 секунд освежим в памяти, что такое DLL, как работает, в чем фундаментальная уязвимость механизма загрузки. 

Осветим примеры атак с подменой DLL согласно их классификации.

Расскажем о защитных мерах для предотвращения атак этого типа.

Приведем рекомендации для SOC по обнаружению атаки (и объясним, почему цифровая подпись — не гарантия легитимности библиотеки). 

Итак, добро пожаловать под кат!

Читать далее

Разбор опций командной строки в UNIX-подобных системах

Время на прочтение7 мин
Охват и читатели49K

Введение


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

Эволюция системных вызовов архитектуры x86

Время на прочтение13 мин
Охват и читатели49K

Про системные вызовы уже много было сказано, например здесь или здесь. Наверняка вам уже известно, что системный вызов — это способ вызова функции ядра ОС. Мне же захотелось копнуть глубже и узнать, что особенного в этом системном вызове, какие существуют реализации и какова их производительность на примере архитектуры x86-64. Если вам также интересны ответы на данные вопросы, добро пожаловать под кат.

Читать дальше →

T-Pro 2.0 — открытая гибридно-ризонинговая русскоязычная LLM

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели10K

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

Мы уже делились большими языковыми моделями T-lite 0.1, T-lite 1.0 и T-pro 1.0. Модели завоевали популярность и скачиваются суммарно более 15к раз в месяц. 

Сегодня делимся новой моделью T-pro 2.0, обученной на основе модели Qwen3 32B, но с более плотной токенизацией на русском языке. Модель поддерживает гибридный ризонинг и позволяет сгенерировать рассуждение перед тем как отвечать. Это помогает в сложных задачах, где требуется несколько последовательных выводов, таких как математика. 

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

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

Читать далее

Разработка высоконагруженных API: проблемы, решения, практические рекомендации

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели26K

Ваш проект взлетел. Первые пользователи превратились в тысячи. Тысячи стали десятками тысяч. Метрики в дашбордах рисуют красивую кривую, устремленную вверх. Но есть и другие кривые, которые ползут вверх с не меньшей скоростью. Время ответа сервера. Количество ошибок 502 и 504.

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

Читать далее

Галлюцинации и многообразия. Зачем искусственному интеллекту многомерные миры

Время на прочтение11 мин
Охват и читатели1.8K

Сейчас на Хабре много пишут о галлюцинировании нейронных сетей и больших языковых моделей в частности. Хорошим введением в эту тему, написанным с философских позиций, мне представляется текст уважаемого Дэна Рычковского @DZRobo «Когда ИИ закрывает глаза: путешествие между воображением и галлюцинациями». Базовое техническое погружение в тему вы найдёте в статье уважаемой @toppal «Причины возникновения галлюцинаций LLM», это перевод академической статьи специалистов Харбинского технологического института, опубликованной в конце 2024 года. Действительно, в большинстве источников галлюцинации ИИ рассматривают либо в негативном ключе, либо как неизбежный побочный эффект, связанный с попытками «вшить» синтетический аналог воображения в вычислительную сеть.

Я же хочу остановиться на менее известном аспекте работы нейронок, в котором галлюцинации могут восприниматься как положительная и даже необходимая часть работы алгоритма. Речь пойдёт об искусственном повышении размерности данных, подаваемых на вход в нейросеть, и о том, к чему такая практика может приводить. Наиболее известное проявление такого эффекта известно в англоязычных источниках под названием «проклятие размерности» (curse of dimensionality).

Читать далее

Мониторинг CPU и RAM на панели задач C++

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели4.3K

Приветствую читателя этой статьи. Я студент, учусь по направлению «Приборостроение», но большую часть времени занимаюсь программированием. Все таки это меня привлекает больше. Задумывался по поводу смены ОС на Arch Linux, но пока отложил эту затею в долгий ящик. Смотрел различные ролики на YouTube и заметил, что многие пользователи ставят себе Polybar, в котором можно легко настраивать информацию, выводимую на нечто похожее на Панель задач в Windows. Тогда я подумал «А почему бы не сделать такое в винде?!» и сразу начал гуглить что к чему. Попытался найти готовые аналоги, но ничего не впечатлило, поэтому решил написать свою программу на C++.

Читать далее

Пишем простой драйвер Linux для устройства, ничего не зная о драйверах и о USB

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели10K

Пару месяцев назад я купил Nanoleaf Pegboard Desk Dock — последнее слово в технологиях USB-хабов с RGB-светодиодами и крючками для устройств. К сожалению, это чудо инженерной мысли поддерживает только гейминговые операционные системы — Windows и macOS, поэтому возникла необходимость в драйвере для Linux.

В своих постах я уже настраивал Windows VM с пробросом USB и пытался выполнить реверс-инжиниринг официальных драйверов. При этом я задумался, а нельзя ли написать производителю и попросить у него спецификации или документацию его протокола. К моему удивлению, техподдержка Nanoleaf ответила мне всего через четыре часа, предоставив полное описание протокола, используемого Desk Dock, а также полосами RGB-светодиодов. Документация по большей мере подтвердила то, что я обнаружил самостоятельно, но также я нашёл в ней пару других мелких подробностей (например, управление питанием и яркостью), которые были мне неизвестны.

Сегодня мы попробуем написать драйвер на основании протокола (который я изучил реверс-инжинирингом), параллельно сверяясь с официальной документацией. Однако здесь есть одна небольшая проблема: раньше я ни разу не писал драйверов для устройств под Linux, а с USB-устройствами взаимодействовал только как пользователь.

Читать далее

BirdCLEF+ 2025: обзор соревнования и ключевые решения топ-5 команд

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели1.1K

BirdCLEF+ 2025 — очередная часть ежегодного соревнования от Cornell Lab of Ornithology по распознаванию звуков дикой природы. В этом году участникам предстало предсказывать целевое животное на коротких фрагментах записи, балансируя между качеством моделей и жёсткими ограничениями железа.

Разобраться в псевдолейблинге...

Знакомство с межпроцессным взаимодействием на Linux

Время на прочтение11 мин
Охват и читатели239K
Межпроцессное взаимодействие (Inter-process communication (IPC)) — это набор методов для обмена данными между потоками процессов. Процессы могут быть запущены как на одном и том же компьютере, так и на разных, соединенных сетью. IPC бывают нескольких типов: «сигнал», «сокет», «семафор», «файл», «сообщение»…

В данной статье я хочу рассмотреть всего 3 типа IPC:
  1. именованный канал
  2. разделенная память
  3. семафор
Отступление: данная статья является учебной и расчитана на людей, только еще вступающих на путь системного программирования. Ее главный замысел — познакомиться с различными способами взаимодействия между процессами на POSIX-совместимой ОС.
Читать дальше →

Фундаментальные вопросы по ML/DL, часть 1: Вопрос → Краткий ответ → Разбор → Пример кода. Линейки. Байес. Регуляризация

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели3.8K

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

Времени мало, объема много, цели амбициозные - нужно научиться легко и быстро объяснять, но так же не лишая полноты!

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

Будет здорово получить ваши задачи и разобрать в следующих выпусках!

Как только разберетесь приступайте к части 2!

Взглянуть на старое под новым углом →

Готовимся к собесу: positional encodings в 2025 году

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели4.1K

Если вы до сих пор считаете, что positional encoding в трансформерах — это знаменитые sin/cos из статьи 2017 года, то боюсь, что собеседование для вас закончится автоматическим реджектом.

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

Читать далее

Как работает база данных Firebird, часть 1

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели1.8K

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

Читать далее

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

Время на прочтение8 мин
Охват и читатели2.4K

Хабр, привет!

Меня зовут Алиса, и я руковожу командой разработки контейнерной платформы «Штурвал». В последнее время мы с командой много работали над реализацией мультитенантности и перепробовали множество разных вариантов. Ниже я расскажу, как тенанты помогают закрыть «боли» при работе с K8s на примере трех проблем и поделюсь полезными инструментами.

Эта статья будет интересна тем, кто:

👉 «с ноги» врывается в свой первый кубер;
👉 самостоятельно строит Kubernetes-платформу;
👉 управляет одним или множеством кластеров K8s.

P. S. 31 июля в Москве состоится первая независимая конфа Kubernetes Community Day. Два пространства с хардкорными докладами и воркшопами от крутых экспертов из VK, МКБ, Yandex Cloud, «Лаборатории Числитель», ecom.tеch, Cloud ru, Luntry, FUN&SUN, Lamoda Tech и др. Участие бесплатное. Регистрация тут.

Читать далее

Ходим в Интернет с отключённым IPv4

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели58K

Несколько дней назад в маршрутизаторе моего провайдера после отключения электричества поломался IPv4. К счастью, подключение по IPv6 продолжало работать, но доступна была только малая часть веб-сайтов.

В этом посте я расскажу, как на помощь мне пришли Linux, WireGuard и Hetzner, благодаря которым я смог получить доступ ко всему Интернету через одно лишь соединение IPv6.

Читать далее

Я построил Vision Transformer с нуля — и научил его обращать внимание

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели4.2K

В этой статье я не просто объясню, что такое ViT — я покажу вам, как создать эту магию своими руками, шаг за шагом, даже если вы никогда раньше не работали с трансформерами для задач с изображениями.

Читать далее

Telegram-бот, который умеет слушать: разработка на grammY

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели3.7K

Представьте: собеседник отправляет голосовое сообщение на пять минут, а вы не можете отвлечься и прослушать все от начала до конца? Что делать? Максим, ведущий канала RED Group, подошел к вопросу творчески и показал, как на базе grammY и SpeechService в NestJS разработать бота, который будет слушать и структурировать по таймкодам голосовые сообщения.

Инструкция будет полезна новичкам, которые только погружаются в работу с Telegram Bot API с помощью JavaScript. Кроме того, в конце материала мы разберем, как задеплоить готового бота на сервер, чтобы он работал вне зависимости от локальной машины. Подробности под катом!
Читать дальше →

Как работает Node.js

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели11K



После прочтения этой статьи вы хорошо поймете следующее:


  • как работает цикл событий (event loop) в Node.js, включая все его фазы
  • как Node.js выполняет JavaScript в одном потоке (single thread)
  • как Node.js использует библиотеку libuv и внутренние API для обработки асинхронных операций
  • почему знание работы цикла событий так важно для написания эффективного серверного кода

Понять, как JS работает "под капотом" в браузере (см. эту короткую 15-минутную статью), проще, чем понять устройство Node.js. В браузере нет сложных фаз и многослойных механизмов, как в Node.js.


Но почему в Node.js все устроено сложнее? Зачем столько фаз, которые так непросто понять?

Читать дальше →

Информация

В рейтинге
2 141-й
Откуда
Иркутск, Иркутская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Software Engineer, ML разработчик
Средний
C++
Python
TensorFlow
PyTorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras