Comments 15
А где тут, собственно, описание как эта дичь вообще работает?
Если почитать текст, то создаётся впечатление, что оно работает через создание фигуры с именем VBASampleRect, хотя на самом деле эта фигура не более чем место, куда макрос при запуске пишет свой "Hello, world!". С тем же успехов можно было этот текст в ячейку A1 писать.
Реальный код, который добавляет "скрытый" макрос можно увидеть только на замыленной картинке:
ExcelPackage package = …;
package.Workbook.CodeModule.Code = …;
Очень хотелось бы объяснений, как такой простой способ может хоть что-то скрыть.
Смысл в том что при сохранении VBA проекта он компилируется и хранится в скомпилированном виде (наряду с исходником). Антивирусы проверяют именно скомпилированный кусок. Исходник нет. Вирусописатели вместо того чтобы написать вирус прямо на VBA и сохранить в документе, взяли его исходный код как строку, зашифровали и в сам макрос запихали только безобидный с виду код, который берет эту строку, расшифровывает, добавляет новый модуль в VBA проект заполняет его этим вирусным кодом и запускает. Таким образом, антивирусы, которые реагируют только на открытие документа и не ловят код скомпилированный уже в самом Excel, это пропускают.
EPPlus тут высосана из пальца — это точно также можно сделать просто руками. Рисование Shape — похоже просто из какого-то примера по EPPlus. Файл должен быть также с расширением xlsm, с вытекающим отсюда вопросом на запуск макросов.
Неужели для MS так сложно прикрутить к VBA песочницу? В конце концов, не так многим макросам нужен вообще доступ за пределы Excel...
Это откуда такая статистика?
Да, а в Word — тоже запретим? А в Outlook? А в интернет, извините? Ну вот я лично писал мелкую фигню, которая брала в ячейке адрес, отсылала его в сервис геокодирования google, или там Яндекса, и возвращала в соседнюю ячейку координаты. Строк 20 кода получается
+ готовый компонент. И VBA любят именно за это — что можно взять готовый компонент, и сделать интеграцию с гуглем за полчаса. Давайте им REST тоже запретим?
Это я уже не говорю о реальных приложениях, которые читали и писали сотни CSV файлов, общались через шину, читали данные из Блумберга, и т.д. и т.п. (лично видел 120к строк кода на VBA). Чтобы сделать такую песочницу, нужно будет реализовать механизм привилегий, а-ля скажем андроид. И после этого давать макросам кучу непонятных разрешений, про которые уже все равно не будет понятно, безопасны они или нет в сочетании. Я подозреваю, что это будет сделать не сложно, а чрезвычайно сложно.
И главное, кому будет нужна та фигня, которая получится в итоге?
Механизм привелегий, да, но сильно проще, чем Андроид. И мы говорим про Excel сейчас, но подозреваю, что в Word и Outlook ситуация не будет отличаться кардинально.
Привилегии:
- запись на диск
- запись на диск за пределами директорий файла и пользовательской
- доступ в Интернет
- отправка почты.
Что я забыл?
Вам нужен готовый компонент и интеграция с Гугл? Отлично, один раз поставить галочку "да, ему можно в Интернет". И весь REST ваш!
Вашему приложению нужны все 4 привилегии? Отлично, наверное, вы не пересылаете его по e-mail, и, наверное, можете потратить минуту на его настройку в 4 галочки.
Ну правда, это безобразие для 2021 года, что любой присланный по почте файл имеет доступ ко всей системе и интернету или полностью отказывается работать! Flash похоронили за меньшее.
Это же все идет через произвольный COM или произвольный DLL. Ну т.е. права — они не у макроса, VBA сам не лезет в интернет, туда лезет вот та фигня, бинарник на C++. А что она еще делает — мы не знаем, ибо это же не байткод Java, и даже не .swf от Flash. Это еще хуже.
Я думаю этого хватит чтобы сломать систему прав, и это реально бывает нужно.
Но в целом да, я согласен с идеей, это было бы клево — но я просто боюсь что это не так просто, как кажется, совсем не так.
Но это же макросы, то есть исходный код всегда приложен… Причем обфускации через указатели на функции, аналоги eval() и base64 encode/decode я не видел — там это технически вообще возможно? Или все равно в коде будут упоминаться "опасные" вызовы?
Созданные с помощью библиотеки .NET документы Excel обходят проверки безопасности