Израильские исследователи изучили безопасность Visual Studio Code и в рамках эксперимента сумели «заразить» более 100 организаций, создав клона популярной темы Dracula Official с вредоносным кодом. Дальнейший анализ VSCode Marketplace и вовсе выявил тысячи опасных расширений с миллионами установок.
Visual Studio Code (VSCode) — редактор исходного кода, выпускаемый компанией Microsoft, который используется разработчиками по всему миру. Также Microsoft управляет магазином Visual Studio Code Marketplace, в котором предлагаются расширения, увеличивающие функциональность приложения и предоставляющие больше возможностей для кастомизации.
В ходе эксперимента ИБ-исследователи Амит Ассараф (Amit Assaraf), Итай Крук (Itay Kruk) и Идан Дардикман (Idan Dardikman) создали расширение, имитирующее Dracula Official — популярную тему, насчитывающую более 7 млн установок в VSCode Marketplace.
Фальшивое расширение использовало тайпсквоттинг и называлось «Darcula», и исследователи зарегистрировали соответствующий домен по адресу darculatheme.com. Этот домен позволил им получить статус проверенного издателя на VSCode Marketplace, что придало подделке убедительности.
Расширение использовало код легитимной темы Darcula, но также содержало дополнительный скрипт, который собирал информацию о системе, включая имя хоста, количество установленных расширений, доменное имя устройства и информацию об ОС, а затем передавал все это на удаленный сервер через HTTPS POST-запрос.
Поскольку эксперимент не преследовал вредоносных целей, аналитики собрали только опознавательную информацию, а также включили соответствующее предупреждение в Read Me, лицензию и код расширения.
Исследователи отмечают, что вредоносный код не обнаруживается EDR-решениями, поскольку к VSCode зачастую относятся снисходительно.
«К сожалению, традиционные средства защиты конечных точек (EDR) не обнаруживают эту активность. VSCode создан для чтения большого количества файлов, выполнения множества команд и создания дочерних процессов, поэтому EDR не могут определить, является ли эта активность VSCode легитимной деятельностью разработчика или признаком вредоносного расширения», — пишет Амит Ассараф.
В итоге фальшивое расширение быстро набрало популярность: по ошибке его установили множество крупных организаций, включая неназванную компанию с рыночной стоимостью 483 млрд долларов, ряд крупных охранных компаний и национальную судебную сеть. Исследователи не стали раскрывать названия пострадавших организаций.
Уже после проведения эксперимента эксперты решили изучить другие угрозы в VSCode Marketplace, используя разработанный ими инструмент ExtensionTotal, предназначенный для поиска потенциально опасных расширений, их распаковки и тщательного изучения подозрительных фрагментов кода. В итоге они выявили:
- 1283 расширения с известным вредоносным кодом (суммарно 229 млн установок);
- 8161 расширение, связывающееся с жестко закодированными IP-адресами;
- 1452 запущенных неизвестных исполняемых файла;
- 2304 расширения, использующие GitHub-репозитории других издателей, что свидетельствует о том, что это лишь подражатели.
Эксперты предупреждают, что из-за отсутствия строгих механизмов контроля и проверки кода в VSCode Marketplace злоумышленники могут беспрепятственно злоупотреблять платформой, причем ситуация ухудшается по мере роста ее популярности.
«Цифры говорят о том, что в магазине Visual Studio Code существует огромное количество расширений, представляющих опасность для организаций, — предупреждают исследователи. — Расширения для VSCode — это вектор атак с нулевой видимостью, которым злоупотребляют и который может иметь серьезные последствия и нести серьезные риски. Эта проблема представляет прямую угрозу для организаций и заслуживает внимания ИБ-сообщества».
Информация обо всех вредоносных расширениях, обнаруженных исследователями, была передана специалистам Microsoft. Однако пока подавляющее большинство из них все еще доступно в VSCode Marketplace.
В ближайшие дни исследователи планируют бесплатно опубликовать ExtensionTotal, вместе с подробным описанием его рабочих возможностей. Инструмент должен помочь разработчикам проверить свои среды на наличие потенциальных угроз.