Pull to refresh
28
0.4
Даниил Солопов @dan_sw

Software Engineer, Bachelor of Computer Science

Send message

Безопасная очистка приватных данных

Reading time6 min
Views19K

Часто в программе необходимо хранить приватные данные. Например: пароли, ключи и их производные. Очень часто после использования этих данных, необходимо очистить оперативную память от их следов, чтобы злоумышленник не мог получить доступ к ним доступ. В этой заметке пойдет речь о том, почему для этих целей нельзя пользоваться функцией memset().
Читать дальше →

AI Labyrinth от Cloudflare: как генеративный ИИ стал оружием против ботов-скрейперов

Level of difficultyEasy
Reading time6 min
Views2.2K

С развитием генеративного ИИ боты-скрейперы стали умнее и настойчивее. Они обходят традиционные методы защиты и массово сканируют сайты, собирая данные для обучения своих моделей. Ежедневно в сети Cloudflare фиксируется более 50 миллиардов запросов от ИИ-краулеров — это почти 1% всего интернет-трафика.

Компания предложила новое решение проблемы — AI Labyrinth. Вместо прямого блокирования инструмент дезориентирует ботов, заставляя их тратить время и ресурсы на обработку бесполезного контента.

Читать далее

Учимся разрабатывать для GPU на примере операции GEMM

Level of difficultyMedium
Reading time18 min
Views13K

Привет, Хабр! Сегодня я расскажу про реализацию матричного умножения и особенности разработки для GPU. Познакомлю вас с устройством GPU, объясню, чем отличается программирование от привычного для CPU, какие нюансы нужно учитывать для эффективной реализации операций GEMM. А затем сравним производительность разных подходов к реализации.

Читать далее

Чем дешевые роутеры отличаются от дорогих и что нужно знать перед покупкой

Reading time10 min
Views61K

Существует негласное мнение, что роутер — это нечто, по своей ценности не превосходящее домашние тапочки. Поэтому многие свято верят в то, что устройство для раздачи интернета должно стоить максимально дёшево. Да и можно ли считать иначе, если задача роутеров не меняется в зависимости от цены? Сложный вопрос. Поэтому сегодня попробуем разобраться, когда сэкономить ещё можно, а когда — уже нельзя.

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

Читать далее

Головоломка на 1000 BTC

Level of difficultyMedium
Reading time14 min
Views74K

Мало кто знает, но есть ряд биткойн-кошельков с ослабленной защитой. Их владелец хочет, чтобы вы их взломали и взяли деньги себе. Общая сумма ~1000 BTC. Это удивительная история началась в 2015 году....

Читать далее

Как мы заставили LLM понимать юридические документы лучше юристов: история создания универсального промта

Reading time6 min
Views8.7K

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

Узнать подробности

Finetuning Qwen 3 на RTX4090: полный гайд обучения LLM c помощью Unsloth

Level of difficultyMedium
Reading time23 min
Views6.6K

💡 О чём эта статья: В этой статье я разбираю, как с помощью библиотеки Unsloth обучить LLM и ускорить её обучение с LoRA/DoRA-адаптерами. Я также провёл серию экспериментов на данных по МКБ-10, сравнил качество моделей и описал тонкости экспорта в GGUF.

Читать далее

Про свёрла

Level of difficultyEasy
Reading time10 min
Views73K

Очень плохая реклама от одного красного магазина инструментов спровоцировала меня сделать свой ликбез по свёрлам. Предлагаю расширить кругозор в слесарном деле — разобраться во всём зоопарке свёрл, доступных и недоступных в ближайшем строительном магазине. Мы не будем углубляться в тонкости обработки материалов резанием — просто расширим кругозор, чтобы, когда жизнь заставит «проковырять дырочку», вы использовали подходящий инструмент.

Читать далее

Всё про std::search и где его применять

Level of difficultyMedium
Reading time6 min
Views5.9K

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

Сегодня мы рассмотрим без преувеличений один из самых недооценённых алгоритмов стандартной библиотеки — std::search. Разберёмся, как он устроен, где реально экономит процессорные тики, а где лучше заменить его на что-то иное.

Читать далее

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

Level of difficultyMedium
Reading time16 min
Views7.3K

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

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

Читать далее

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

Reading time4 min
Views2.8K

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

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

Читать далее

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

Level of difficultyMedium
Reading time12 min
Views3.4K

Представьте: пользователь открывает совершенно легитимную программу — скажем, видеоплеер, корпоративный мессенджер или даже встроенный в 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-подобных системах

Reading time7 min
Views45K

Введение


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

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

Reading time13 min
Views46K

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

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

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

Level of difficultyHard
Reading time9 min
Views14K

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

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

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

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

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

Читать далее

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

Level of difficultyMedium
Reading time14 min
Views44K

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

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

Читать далее

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

Reading time11 min
Views2.7K

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

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

Читать далее

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

Level of difficultyEasy
Reading time4 min
Views6K

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

Читать далее

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

Level of difficultyEasy
Reading time12 min
Views17K

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

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

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

Читать далее

Information

Rating
2,150-th
Location
Иркутск, Иркутская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Engineer, ML Engineer
Middle
C++
Python
TENSORFLOW
Pytorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras