В Go есть теги на полях структур, это те же аннотации по сути
И в C# кроме рефлексии есть кодогенерация, управляемая теми же атрибутами. Кстати, активно работать над этой кодогенерацией начали как раз когда стали развивать AoT-компиляцию.
Аннотации именно тем и отличаются от декораторов, что сами ничего не знают. Dart - не единственный язык, который использует аннотации, точно так же они работают как минимум в Java, C# и Go.
В Dart part ‘file.g.dart’ прописывается в исходнике до генерации. Без запуска генератора - файл невалидный, IDE ругается, компилятор не запустится.
Значит, надо запустить генератор, чтобы файл появился.
Да, генератор может сам добавить part ‘file.g.dart’ - но тогда либо коммитишь сгенерированный код в репозиторий (PR выглядит как простыня автогенерации), либо гоняешь генератор на каждом пайплайне как первый шаг перед компиляцией.
Очевидно, part ‘file.g.dart’ не является сгенерированным кодом, даже если он был добавлен генератором. Относиться к этой сторочке как к сгенерированному коду - всё равно что отказываться добавлять в репозиторий package.json на том основании, что он был создан командой npm init.
Кроме того, повторюсь: “нет ничего плохого в том, чтобы гонять генератор на каждый пайплайн”.
Все что вы пишете в коде .c - это “рекомендации” компилятору, а он у нас по условиям вредный. Ну напишете вы строчку с текстом “syscall()” в тексте, а что вместо нее будет - уже решит компилятор.
В тексте я соберу в памяти массив байт, скастую его к указателю на функцию, и вызову её. При необходимости - разбавив всё это обсфуцирующшим кодом. Удачи компилятору понять, что это именно системный вызов, особенно учитывая что он всё ещё должен оставаться компилятором.
умен, как могли быть умны вирусы времен 2000-ых, но не сейчас, когда есть GPT
Неа, никакой GPT не поможет написать вирус, решающий проблему останова (а детекция системных вызовов легко сводится именно к ней, методом “представим что системный вызов останаливает программу”)
Всё ещё не вижу проблем. Ссылка на сгенерированный код в программе будет в любом случае (зачем-то же его генерировали!), чем же ссылка в форме имени файла фундаментально отличается от ссылки в форме имени функции?
Первый закон Ньютона: “Всякое тело продолжает удерживаться в своём состоянии покоя или равномерного и прямолинейного движения, пока и поскольку оно не понуждается приложенными силами изменить это состояние”. Поскольку в евклидовом пространстве-времени геодезическими являются прямые линии, “состояние покоя или равномерного и прямолинейного движения” тут можно заменить на движение по геодезической без изменения смысла.
Это всё не спасает от вируса, который просто дописывает свой код к любому файлу, открытому на запись и имеющему нужный заголовок.
Сложные схемы бутстрапа делаются больше для того, чтобы пользователь компилятора не оказался в ситуации, когда его компилятор не может быть скомпилирован из-за отсутствия поддержки нужного диалекта в текущем компиляторе.
GCC-вирус не может перехватить прямые системные вызовы если не проник в ядро (а если это руткит, то зачем ему ещё и компилятор заражать?)
Вырезание же кода вируса из файла при его открытии - приём мощный, но он делает антивирус даже слишком простым (читаем файл через стандартную библиотеку, пишем прямым системным вызовом - и всё).
Ну, это у вас просто злоумышленник был того уровня, когда нужен ручной доступ. Скрипт в планировщике или там расширение в браузере - и никаких RDP для управления облаком не потребуется вообще.
2FA защищает от кражи пароля, а не от доступа с подконтрольной злоумышленнику машины.
Что-то ваше описание атаки оставляет одни вопросы без ответов…
Shadow RDP что, вообще никаких паролей для входа не просит? Не верю…
Откуда у атакующего взялся доступ чтобы настраивать реестр? Для этого же права администратора нужны? И если они права администратора у него уже были, зачем вообще понадобилось воровать сеанс?
Судя по описанию, mstsc был запущен на вашем сервере. Почему именно так? И откуда у злоумыгленника взялась учётная запись чтобы запускать mstsc на сервере?
Насколько я помню, для коаксиального кабеля существует решение волнового уравнения, в котором волна остаётся полностью внутри кабеля. Разумеется, это работает только для идеального случая, но витая-то пара излучает помехи даже в идеальном случае.
Так что шум в эфире от коаксиала должен быть намного ниже чем от витых пар, не просто так коаксиальные кабели до сих пор применяют в условиях сильных помех (например, для передачи сигнала передающей антенне).
Скажите, а вас не смущает, что в классической кинематике Ньютона точно так же “создаётся” новая “геодезическая” линия для каждой скорости?
Если смущает, то предлагаю сначала разобрать более простой случай. А если нет - то попробуйте подставить классическую кинематику в свои рассуждения выше, и тогда увидите как странно они звучат.
Ну, всё-таки основная проблема тут - обнаружить само существование вируса, не на компьютере, а вообще. Всё-таки надо быть совсем уж параноиком чтобы регулярно проверять компилятор вручную, а автоматические тесты автор вируса может обойти.
Однако, когда вирус выявлен и проанализирован, сделать антивирус против него не так сложно. Проблема останова же не позволит вирусу понять что он собирает именно антивирус, а не что-то ещё, а дальше сколько бы закладок в GCC не было - в какой-то момент вирус будет вынужден передать управление написанному коду. Ну и написать код таким образом, чтобы не вызвать ни одну закладку снова - тоже не то чтобы нерешаемая задача.
Интернет “по коаксиалу” - это и правда была роскошь. Но вот в локальных сетях (притом реально локальных, а не городских) это было не такое и редкое явление.
А у этого EventLoop какие-нибудь наблюдаемые следствия есть, или тут важно просто поспорить?
В Go есть теги на полях структур, это те же аннотации по сути
И в C# кроме рефлексии есть кодогенерация, управляемая теми же атрибутами. Кстати, активно работать над этой кодогенерацией начали как раз когда стали развивать AoT-компиляцию.
Если там JIT - это VM, если запускается заранее скомпилированный код - рантайм.
Аннотации именно тем и отличаются от декораторов, что сами ничего не знают. Dart - не единственный язык, который использует аннотации, точно так же они работают как минимум в Java, C# и Go.
Значит, надо запустить генератор, чтобы файл появился.
Очевидно, part ‘file.g.dart’ не является сгенерированным кодом, даже если он был добавлен генератором. Относиться к этой сторочке как к сгенерированному коду - всё равно что отказываться добавлять в репозиторий package.json на том основании, что он был создан командой
npm init.Кроме того, повторюсь: “нет ничего плохого в том, чтобы гонять генератор на каждый пайплайн”.
В тексте я соберу в памяти массив байт, скастую его к указателю на функцию, и вызову её. При необходимости - разбавив всё это обсфуцирующшим кодом. Удачи компилятору понять, что это именно системный вызов, особенно учитывая что он всё ещё должен оставаться компилятором.
Неа, никакой GPT не поможет написать вирус, решающий проблему останова (а детекция системных вызовов легко сводится именно к ней, методом “представим что системный вызов останаливает программу”)
Всё ещё не вижу проблем. Ссылка на сгенерированный код в программе будет в любом случае (зачем-то же его генерировали!), чем же ссылка в форме имени файла фундаментально отличается от ссылки в форме имени функции?
Если что, у нас в C# кодогенераторы работают точно так же, единственное отлчие - имя файла со сгенерированным кодом вручную писать не надо.
И нет ничего плохого в том, чтобы гонять генератор на каждый пайплайн.
Первый закон Ньютона: “Всякое тело продолжает удерживаться в своём состоянии покоя или равномерного и прямолинейного движения, пока и поскольку оно не понуждается приложенными силами изменить это состояние”. Поскольку в евклидовом пространстве-времени геодезическими являются прямые линии, “состояние покоя или равномерного и прямолинейного движения” тут можно заменить на движение по геодезической без изменения смысла.
Это всё не спасает от вируса, который просто дописывает свой код к любому файлу, открытому на запись и имеющему нужный заголовок.
Сложные схемы бутстрапа делаются больше для того, чтобы пользователь компилятора не оказался в ситуации, когда его компилятор не может быть скомпилирован из-за отсутствия поддержки нужного диалекта в текущем компиляторе.
GCC-вирус не может перехватить прямые системные вызовы если не проник в ядро (а если это руткит, то зачем ему ещё и компилятор заражать?)
Вырезание же кода вируса из файла при его открытии - приём мощный, но он делает антивирус даже слишком простым (читаем файл через стандартную библиотеку, пишем прямым системным вызовом - и всё).
Тут вся статья про то, как правильно сделать limit 1000 от последней обновленной записи.
Ну, это у вас просто злоумышленник был того уровня, когда нужен ручной доступ. Скрипт в планировщике или там расширение в браузере - и никаких RDP для управления облаком не потребуется вообще.
2FA защищает от кражи пароля, а не от доступа с подконтрольной злоумышленнику машины.
Что-то ваше описание атаки оставляет одни вопросы без ответов…
Shadow RDP что, вообще никаких паролей для входа не просит? Не верю…
Откуда у атакующего взялся доступ чтобы настраивать реестр? Для этого же права администратора нужны? И если они права администратора у него уже были, зачем вообще понадобилось воровать сеанс?
Судя по описанию, mstsc был запущен на вашем сервере. Почему именно так? И откуда у злоумыгленника взялась учётная запись чтобы запускать mstsc на сервере?
Не так давно топология “шина” возродилась в виде 10BASE-T1S. До восьми хостов на одной паре проводов.
Насколько я помню, для коаксиального кабеля существует решение волнового уравнения, в котором волна остаётся полностью внутри кабеля. Разумеется, это работает только для идеального случая, но витая-то пара излучает помехи даже в идеальном случае.
Так что шум в эфире от коаксиала должен быть намного ниже чем от витых пар, не просто так коаксиальные кабели до сих пор применяют в условиях сильных помех (например, для передачи сигнала передающей антенне).
Скажите, а вас не смущает, что в классической кинематике Ньютона точно так же “создаётся” новая “геодезическая” линия для каждой скорости?
Если смущает, то предлагаю сначала разобрать более простой случай. А если нет - то попробуйте подставить классическую кинематику в свои рассуждения выше, и тогда увидите как странно они звучат.
Ну, всё-таки основная проблема тут - обнаружить само существование вируса, не на компьютере, а вообще. Всё-таки надо быть совсем уж параноиком чтобы регулярно проверять компилятор вручную, а автоматические тесты автор вируса может обойти.
Однако, когда вирус выявлен и проанализирован, сделать антивирус против него не так сложно. Проблема останова же не позволит вирусу понять что он собирает именно антивирус, а не что-то ещё, а дальше сколько бы закладок в GCC не было - в какой-то момент вирус будет вынужден передать управление написанному коду. Ну и написать код таким образом, чтобы не вызвать ни одну закладку снова - тоже не то чтобы нерешаемая задача.
Интернет “по коаксиалу” - это и правда была роскошь. Но вот в локальных сетях (притом реально локальных, а не городских) это было не такое и редкое явление.
Рекомендуют кому?
А, наверное это рекомендация для веб-мастеров или сисадминов.
Стоп, что? А у них-то откуда этот трафик возьмётся?
В итоге я так и не понял кто именно должен следовать этим рекомендациям.