Надо создавать именно раздел(дирректорию), чтобы перенести туда другие темы(и эту). В этом есть зс(здравый смысл). Обсуждение нс(неровных сетей) среди системного погромирования помеха/проблема/информационный шум/etc.
Эту тему можно прикрепить, чтобы она не терялась, в A&O. Ну почему шум? Пользователь Intro обсуждает здесь баллистику в играх, какое системное программирование? А иначе придется сильно структуру разделов менять, хотя это на усмотрение модераторов, конечно.
Ну, окей. Чтобы ближе к тематике форума было, никто не смотрел, какие сейчас модные проекты по поиску уязвимостей с помощью БЯМов? На базе чего такие решения эффективно строить? На исходниках, или на выхлопе дизасма, или еще как?
За модные не скажу, но вот https://cyberleninka.ru/article/n/m...tekstnoy-adaptatsii-bolshih-yazykovyh-modeley (список используемой литературы аж в 40+ публикаций) БЯМы чем хороши могут быть - Google AI Studio (который упрощенный Gemini) так и сказал в ответ на "ты мне растрового человека-гриба сделал в виде линий и кружков, векторизовал конечно так себе, но я понимаю, что ты не искусный трассировщик растровых изображений" - оно не оперирует, если в контексте битмапов, точками-пикселями, оно знает, где у существа нога, где голова, поняло, что голова является шляпкой гриба, на основе этого создала страшное слово "эмбеддинги", и оперирует уже этими объектами. Эмбеддинги (от англ. embedding — «вложение») — это способ представления слов, фраз, изображений, пользователей или других объектов в виде числовых векторов в многомерном пространстве. Эти векторы сохраняют смысловые связи, что позволяет алгоритмам машинного обучения и ИИ анализировать данные, находить сходства, делать выводы и решать сложные задачи. Перекладывая на секурити - это получается, как если мы (авер) перехучиваем все вызовы в ОС, и как бы малварь себя не криптовала и обфусцировала, она все равно придет к вызовам АПИ ОС, где у нас уже все схвачено. То есть нужно ввести понятие "уязвимость" (эмбеддинг объекта уязвимости). Если в момент работы ОС внезапно из ниоткуда возник привелегированный режим, это эмбеддинг. Окей, Гугл, Сейчас бы эксплоиты на автопилоте писать. "Вы их еще и есть за меня будете? Агааа!" По сути вопроса - оно ничего толком не рассказало. Наверное вопрос был задан неверно. Спойлер: спрошу иначе "Что есть эмбеддинг, и как это понятие увязать с поиском уязвимостей?" Что такое эмбеддинг простыми словами? Эмбеддинг (embedding / векторное представление) — это способ перевода сложного объекта (слова, текста, картинки или фрагмента исходного кода) в набор чисел (вектор), который отражает его смысл. Если обычный поиск ищет точные совпадения букв, то эмбеддинги позволяют компьютеру сравнивать «смысловое расстояние». Пример из жизни: Слова «собака» и «пёс» пишутся по-разному, но их векторы в многомерном пространстве будут находиться очень близко друг к другу, потому что они означают одно и то же. Пример из программирования: Код x = x + 1 и код counter++ выглядят по-разному, но делают одно и то же. Хорошая модель эмбеддингов выдаст для них очень похожие числовые векторы. Как связать эмбеддинги с поиском уязвимостей? В сфере кибербезопасности эмбеддинги совершили революцию, заменив старый поиск по регулярным выражениям (Grep) на семантический поиск уязвимостей. Вот 4 основных сценария, как это работает на практике: 1. Поиск уязвимостей по аналогии (Code Similarity Search) Допустим, в одной из библиотек GitHub нашли критическую уязвимость (например, выход за пределы буфера). Разработчики её исправили. Как помогают эмбеддинги: Мы берем уязвимый кусок кода, превращаем его в вектор и прогоняем через базу данных векторов всего остального кода нашей компании. Результат: ИИ найдет все места, где программисты скопировали этот код или написали логически точно такой же (даже если они изменили названия переменных, функций и добавили комментарии). 2. Обнаружение "странного" кода (Anomaly Detection) Безопасный код обычно пишется по определенным стандартам. Векторы безопасных функций в трехмерном пространстве сбивались бы в плотные «облака» (кластеры). Как помогают эмбеддинги: Если программист случайно (или умышленно — бэкдор) внедряет опасную логику, вектор этой функции резко улетает в сторону от общего облака нормального кода. Результат: Система безопасности сразу подсвечивает этот фрагмент как аномалию, требующую ручной проверки. 3. Семантический поиск по базам CVE и Bug Bounty Раньше, чтобы найти уязвимость в документации или отчетах, нужно было точно угадать ключевые слова. Как помогают эмбеддинги: Вы можете написать системе на человеческом языке: «Найди мне отчеты, где злоумышленник подменял ID пользователя в запросе, чтобы прочитать чужие сообщения». Результат: База данных векторов поймет, что вы имеете в виду уязвимость класса IDOR, и выдаст все релевантные отчеты, даже если в них не было слов «подменял» или «сообщения». 4. Эффективная "память" для БЯМ-агентов (RAG в ИБ) Большие языковые модели (LLM) имеют ограничение на размер контекста — в них нельзя загрузить сразу весь исходный код огромного банковского приложения. Как помогают эмбеддинги: Весь код приложения режется на куски, превращается в векторы и кладется в векторную базу данных (например, ChromaDB или Pinecone). Когда ИИ-агент ищет уязвимость SQL-инъекции, он делает запрос к базе, векторная база выдает только те 5-10 кусков кода, которые смыслово связаны с обработкой баз данных, и именно их передает в модель для анализа. Популярные инструменты, где это используется CodeQL / Semgrep (с ИИ-плагинами) — современные сканеры кода используют эмбеддинги, чтобы понимать абстрактное синтаксическое дерево (AST) кода. OpenAI text-embedding-3 / Voyage-code — специализированные коммерческие модели для превращения кода в векторы. StarCoder / CodeLlama — open-source модели, на базе которых ИБ-специалисты строят локальные системы поиска плагиата уязвимого кода.
То есть, такое себе. По подобию-похожести УЖЕ ИМЕЮЩИХСЯ дырявых кодов ищет. Думал, оно мудрее. А оно просто смысловой поиск производит. По сути, мало чем отличается от PVS-studio? По уму, нужно состояние уязвимой системы - например упомянутое состояние привилегированного режима. Далее, если ОС в нем оказалось, то ищутся причины попадания в него. Либо делаются попытки уронить систему в это состояние (условный фаззинг). Application не малварь, уязвимости. Что есть уязвимость? Чтобы находить уязвимости, нужна классификация, что можно называть уязвимостью, а что нет. Но видимо падение системы в синьку или во внезапный ring0 это не эмбеддинг, это что-то другое. Эмбеддингом можно видимо назвать схожесть действий вредоносного ПО, которое определенными операциями старается вызвать эти состояния ОС. Спойлер: таки вот "Падение ОС в BSOD - это эмбеддинг? Или получение ring0 режима? Или сам факт того, что cpu оказался в ring0, это не эмбеддинг, а последовательность вариантов действий, чтобы вызвать это событие = это уже эмбеддинг?" Нет, ни падение в BSOD, ни получение режима Ring 0, ни сама последовательность действий не являются эмбеддингом. Здесь происходит путаница между реальным физическим событием (в мире операционных систем) и числовым описанием этого события (в мире ИИ). Давайте разберем все ваши примеры по полочкам, чтобы окончательно разделить эти понятия. 1. Падение в BSOD или получение Ring 0 — это НЕ эмбеддинг Что это на самом деле: Это технические состояния (события) операционной системы и процессора. BSOD (Синий экран смерти) — это паническое состояние ядра ОС, когда произошла неустранимая ошибка. Ring 0 (ядро) — это наивысший уровень привилегий процессора, на котором выполняется код ОС. Почему это не эмбеддинг: Эмбеддинг — это всегда массив чисел (вектор). BSOD и Ring 0 — это не числа, это физическая реальность работы компьютера. 2. Последовательность действий для вызова события — это тоже НЕ эмбеддинг Что это на самом деле: Последовательность действий (например: открыть файл -> выделить буфер -> переполнить его -> подменить адрес возврата -> передать управление в Ring 0) — это алгоритм, эксплойт или трейс (лог) выполнения. Так где же здесь эмбеддинг? (Увязываем понятия) Эмбеддингом во всей этой истории будет цифровой «отпечаток смысла», который ИИ создает для анализа этих событий. Вот как ИИ-система безопасности (например, антивирус нового поколения) использует эмбеддинги применительно к вашим примерам: Вариант А: Эмбеддинг кода эксплойта У вас есть текст хакерского скрипта, который переводит процессор в Ring 0. Вы пропускаете этот текст через нейросеть. Нейросеть выдает вектор: [0.12, -0.89, 0.45, ... 0.01]. Это и есть эмбеддинг. Для ИИ этот набор чисел означает: «Код с вероятностью 95% пытается эксплуатировать уязвимость ядра для повышения привилегий». Если хакер изменит названия переменных в скрипте, эмбеддинг (числа) почти не изменится, и ИИ все равно поймает атаку. Вариант Б: Эмбеддинг поведения (Behavioral Embedding) Антивирус следит за системными вызовами (API calls) запущенной программы. Программа совершает последовательность действий, чтобы вызвать BSOD или прорваться в Ring 0. Антивирус записывает эту цепочку шагов как текст или граф. Переводит эту цепочку в вектор чисел (эмбеддинг поведения). Сравнивает этот вектор с базой векторов «нормального поведения Windows» и «поведения вирусов». Вектор атаки окажется в многомерном пространстве очень близко к кластеру «Вредоносное ПО». Вариант В: Эмбеддинг дампа памяти BSOD Когда система падает в BSOD, Windows создает дамп памяти (Crash Dump) — лог того, что пошло не так. Исследователи безопасности переводят логи тысяч BSOD-ов в эмбеддинги. Если ИИ видит, что эмбеддинг нового BSOD'а подозрительно похож на эмбеддинг падения от известной хакерской атаки Wannacry, он бьет тревогу. Резюме для закрепления: Ring 0 / BSOD — это то, ЧТО произошло в железе и ОС. Последовательность действий — это то, КАК это произошло (инструкция/код). Эмбеддинг — это то, как ИИ ЗАПИСАЛ СМЫСЛ этой инструкции или этого события в виде строчки чисел, чтобы быстро сравнивать его с другими событиями. О, становлюсь умнее день ото дня.
Уязвимость - это когда хэккер находит способ выполнить системный вызов с некорректными параметрами так, что ядро ОС падает в синий экран.
Application, не совсем. Чем уязвимость отличается от угрозы и эксплойта Важно разделять эти понятия: Уязвимость — это пассивный недостаток, «дыра» в системе. Угроза — это реальная возможность нанесения вреда, которая возникает, когда кто-то решает воспользоваться уязвимостью. Эксплойт — это уже инструмент, код или программа, созданная специально для того, чтобы эксплуатировать конкретную уязвимость и проникнуть в систему. Проще говоря, уязвимость — это открытая дверь, эксплойт — ключ, а сама кража — инцидент. В Вашем примере "способ выполнить системный вызов" это инструмент, эксплоит. А сама уязвимость - это возникшее нестандартное поведение системы. Т.о. если обратиться к вопросу Rel, если мы ищем уязвимости, мы ищем финальное состояние ОС, к которому мы будем добираться с помощью эксплоитов. То есть если применить фантазию, нужно что-то вроде back trace от состояния, в котором оказалась ОС.
https://wasm.in/threads/gemini.36696/page-6#post-448888 "Подробно нет ресурсов, прошу прощения, только кратко: Взаимосвязь - это информация...". https://wasm.in/threads/gemini.36696/page-6#post-448889 "R81..., если нет моста к проверяемым предсказаниям или к новой технологии - это чистая игра ума/воображения." ~"Действия и поступки-одно и тоже!...Асман (с)Мюллер"
_edge, В чем проблема отдать на реверс модуль ? Для бесплатных бям в контекстном окне, можно конечно вручную диз обработать, выделив нужные входы/ветви. Пример с кл, нуби собирает драйвер бямом(очевидно) и элементарные проверки безопасности не нужны.
Application, я тоже познаю мир. Гляньте книжки, может что заинтересует, https://cracklab.team/index.php?forums/53/ - тут есть книги по ML Ahimov гляньте форум, вдруг что полезное найдете, https://yougame.biz/forums/908/ - тут есть разное по ядерным вещам
_edge, Сразу понятен их уровень - смотрим раздел по реверсу, ручные разборы крэкми. Норм делается через DBI+taint(буфер с ключами наследуется и выходит прямо на проверки). Хотя на крэклабе тоже не смогли
GRAFik отвечу по поводу упомянутого в теме, на которую дал ссылку R81, "пусть НС даст компилируемый исходник", поделюсь своим опытом. Думаю, будет небесполезно. Асм или нет, не важно на самом деле. Я использовал PureBasic в 2 случаях (это симулятор рынка/биржи, и игра наподобие Heroes3) и TinyC в случае эмулятора всея виРуси (для начала, 8086 с досовским окружением). Нельзя сразу сказать "дай мне прогу с мессаджбоксом", по 2 причинам (и это отсылка к тому, что Экспертную Систему, которой является БЯМ, пытаются использовать не совсем по назначению): 1. Скорее всего сходу появятся ошибки компиляции (называю их "детскими ошибками", потому что после этапа исправления они не появляются, а если и появляются, то легко могут быть исправлены, т.к. они достаточно серийны, и это из-за разницы синтаксиса версий ЯП); 2. "А поговорить?" (как в том анекдоте про 2 мужиков, которые искали третьего, чтобы выпить; выпили, разошлись, а он за ними идет и идет; мужик, что тебе надо от нас? - а поговорить?) Нужна прелюдия к тому, что НС будет генерить код. Так и пишите ей, "хочу обсудить программу с мессаджбоксом, не генерируй пока код, скажи, какие мессаджбоксы бывают, yes-no, или yes-no-cancel?") То есть проговариваете "скелет" программы (для проги с выводом мессажда это избыточно, но если в будущем начнете навешивать на программу дополнительные элементы, это очень поможет) и занимаетесь сбором шишек обо все острые углы ЯП, а также говорите НС, что неплохо было бы включить нумерацию версий, чтобы каждый новый исходник был не только с комментариями об произведенных изменениях в заголовке (НС любит этим гордиться), а имел собственную версию, чтобы можно было всегда откатиться на нее. Если проект начал разрастаться, так и говорите НС - "давай разобъем проект на подмодули, чтобы он не был монолитным 1 исходником". Если НС при обсуждении отвечает Вам "замени вот этот код функции", так и велите ей "дай мне полный исходник с этими изменениями", пусть раздует диалог лишним кодом, но это убережет от ошибок копипаста вручную из-за замыленности взгляда. НС понимает скриншоты. Если при работе программы получается не то, что задумано, иногда достаточно дать НС часть скриншота, это может быть более информативно, чем описывать проблему. Если проект модульный, важно держать в уме, что в уме в свою очередь держит НС ) Периодически навожу справки, как выглядят текущие/актуальные модули, чтобы быть с НС на одной волне. "Дай мне все файлы проекта" - обычное дело. Это все - про чатботов. На комп себе ничего не ставил, достаточно веб-версии, которая не требует заморочек с ВПН и космических мощностей ПК. Плюс - я могу логиниться в свои проекты что из дома, что с работы.
_edge, простите, не смог удержаться Братец Кролик разбирается с потрохами MessageBox без всякого ИИ. Но, по-моему,GRAFik это уже читал, а если нет ― пусть попробует прочитать
Совет от Ahimov, как можно заставить Deepseek прочесть PDF: Кстати есть варианты просто накормить НС скриншотами текста. На этом даже "выехал" один молодец, таким образом сэкономив на стоимости токенов, получилось что дешевле вместо текста в платной нейронке ее забросать скриншотами текстовых запросов.