Pull to refresh

Comments 15

Сработает ли вредонос, если через групповые политики запрещены макросы?
видимо нет. в документе нет макросов

А где тут, собственно, описание как эта дичь вообще работает?


Если почитать текст, то создаётся впечатление, что оно работает через создание фигуры с именем VBASampleRect, хотя на самом деле эта фигура не более чем место, куда макрос при запуске пишет свой "Hello, world!". С тем же успехов можно было этот текст в ячейку A1 писать.


Реальный код, который добавляет "скрытый" макрос можно увидеть только на замыленной картинке:


ExcelPackage package = …;
package.Workbook.CodeModule.Code = …;

Очень хотелось бы объяснений, как такой простой способ может хоть что-то скрыть.

Если пойти по второму источнику под статьей, то там примерно объясняется.
Смысл в том что при сохранении VBA проекта он компилируется и хранится в скомпилированном виде (наряду с исходником). Антивирусы проверяют именно скомпилированный кусок. Исходник нет. Вирусописатели вместо того чтобы написать вирус прямо на VBA и сохранить в документе, взяли его исходный код как строку, зашифровали и в сам макрос запихали только безобидный с виду код, который берет эту строку, расшифровывает, добавляет новый модуль в VBA проект заполняет его этим вирусным кодом и запускает. Таким образом, антивирусы, которые реагируют только на открытие документа и не ловят код скомпилированный уже в самом Excel, это пропускают.

EPPlus тут высосана из пальца — это точно также можно сделать просто руками. Рисование Shape — похоже просто из какого-то примера по EPPlus. Файл должен быть также с расширением xlsm, с вытекающим отсюда вопросом на запуск макросов.

Неужели для MS так сложно прикрутить к VBA песочницу? В конце концов, не так многим макросам нужен вообще доступ за пределы Excel...

>не так многим макросам нужен вообще доступ за пределы Excel…
Это откуда такая статистика?

Да, а в Word — тоже запретим? А в Outlook? А в интернет, извините? Ну вот я лично писал мелкую фигню, которая брала в ячейке адрес, отсылала его в сервис геокодирования google, или там Яндекса, и возвращала в соседнюю ячейку координаты. Строк 20 кода получается
+ готовый компонент. И VBA любят именно за это — что можно взять готовый компонент, и сделать интеграцию с гуглем за полчаса. Давайте им REST тоже запретим?

Это я уже не говорю о реальных приложениях, которые читали и писали сотни CSV файлов, общались через шину, читали данные из Блумберга, и т.д. и т.п. (лично видел 120к строк кода на VBA). Чтобы сделать такую песочницу, нужно будет реализовать механизм привилегий, а-ля скажем андроид. И после этого давать макросам кучу непонятных разрешений, про которые уже все равно не будет понятно, безопасны они или нет в сочетании. Я подозреваю, что это будет сделать не сложно, а чрезвычайно сложно.

И главное, кому будет нужна та фигня, которая получится в итоге?

Механизм привелегий, да, но сильно проще, чем Андроид. И мы говорим про Excel сейчас, но подозреваю, что в Word и Outlook ситуация не будет отличаться кардинально.


Привилегии:


  1. запись на диск
  2. запись на диск за пределами директорий файла и пользовательской
  3. доступ в Интернет
  4. отправка почты.

Что я забыл?


Вам нужен готовый компонент и интеграция с Гугл? Отлично, один раз поставить галочку "да, ему можно в Интернет". И весь REST ваш!


Вашему приложению нужны все 4 привилегии? Отлично, наверное, вы не пересылаете его по e-mail, и, наверное, можете потратить минуту на его настройку в 4 галочки.


Ну правда, это безобразие для 2021 года, что любой присланный по почте файл имеет доступ ко всей системе и интернету или полностью отказывается работать! Flash похоронили за меньшее.

UFO just landed and posted this here
>Что я забыл?
Это же все идет через произвольный COM или произвольный DLL. Ну т.е. права — они не у макроса, VBA сам не лезет в интернет, туда лезет вот та фигня, бинарник на C++. А что она еще делает — мы не знаем, ибо это же не байткод Java, и даже не .swf от Flash. Это еще хуже.

Я думаю этого хватит чтобы сломать систему прав, и это реально бывает нужно.

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

Но это же макросы, то есть исходный код всегда приложен… Причем обфускации через указатели на функции, аналоги eval() и base64 encode/decode я не видел — там это технически вообще возможно? Или все равно в коде будут упоминаться "опасные" вызовы?

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

Он может вызывать код из произвольной DLL? Я думал, только из установленных надстроек, которые надо отдельно включать галочками в настройках..

Он может создать любой зарегистрированный в реестре COM-класс, поддерживающий интерфейс IDispatch.

значит, нужен ещё и permission на это… иначе получается, что это практически exe-шник!

Ну, не совсем произвольный вроде…
Sign up to leave a comment.