Что случилось?
7 августа в 9:15 (мск) в Telegram-канале сервиса электронного документооборота «Диадок» было опубликовано сообщение о том, злоумышленники рассылают вирус от имени взломанных пользователей Диадока».
Злоумышленники заразили компьютер одного из пользователей и начали рассылку вредоносных zip-архивов через Диадок. Архивы автоматически отправлялись контрагентам — вирус распространялся по цепочке.
При этом компания СКБ Контур, которая разработала сервис ЭДО «Диадок», заявляла, что:
Сам Диадок не взломали. Он продолжает работать, все данные наших клиентов находятся в безопасности.
Дополнительно Диадок указал, что:
На момент атаки вирус не распознавался стандартными антивирусами.
Спустя 11 часов, в 20:03 СКБ Контур заявил, что:
6 августа с зараженного компьютера пользователя Контур.Диадока разослали zip-архивы с вредоносным программным обеспечением. Решение «Лаборатории Касперского» детектирует это вредоносное ПО как HEUR:Trojan.Win32.Agentb.gen.
В сообщении был указан вредонос — Buhtrap, а также дана ссылка на анализ, проведенный в сервисе VirusTotal. Повторив, что Диадок не был взломан, компания написала:
Для вредоносной рассылки использовали стандартную возможность продукта — отправку документов из веб-приложения.
Это ключевые факты, которые вызывают у меня ряд вопросов. Сразу скажу, что я не большой знаток ЭДО и весь мой опыт ограничивается либо 18 годами работы с электронными документами в Cisco, где не было заморочек с криптопровайдерами, КЭПами и УКЭПами, либо эпизодическим подписанием договоров в Контур.Сайн.
Ситуация с VirusTotal
СКБ Контур в первых часах после обнаружения заявил, что вирус «не распознавался стандартными антивирусами». Однако данные VirusTotal показывают, что на момент загрузки образцов (7 августа днем) вредонос определялся большинством антивирусов, включая Касперский и Dr.Web. Причем детекты были не на единичные эвристики, а по довольно уверенным сигнатурным срабатываниям (Trojan-Spy.Win32.Agent.gen, GenKryptik, Wacatac и т.п.), что значит, что сигнатуры на этот билд Buhtrap уже у многих вендоров были.
Почему в первичном сообщении не указаны индикаторы компрометации? Там даже названия зараженного архива нет. Компания не имела на руках вредоноса, но предупреждала о нем? Имела копию вредоноса, но не сняла с него хэши? Сняла, но не сообщила своим клиентам? Все эти данные появляются только во втором сообщении, что уменьшает ценность первичного уведомления и не дает возможности быстро отреагировать SOCам и ИБ-службам заказчиков.
Еще одна странность – в сообщении Диадок дана ссылка только на одну страницу VirusTotal, в то время как в сообщении оператора ЭДО на сайте были указаны хэши 4 файлов, часть которых появилась даже раньше чем тот, на который дана ссылка. И на момент первого сообщения 2 из 4 файлов уже были загружены в VirusTotal. Кто это мог сделать? Первые жертвы или СКБ Контур? Если оператор ЭДО, то почему он не приложил индикаторы к первичному сообщению? Сам файл, ссылка на который дано во втором сообщении Диадока, был загружен в VT 13:49. Но о хешах компания сообщила спустя только 6 часов. Почему?
Странная какая-то позиция. Раз уже признал факт распространения вредоноса через свою систему, то почему не выдать всю имеющуюся информацию сразу?
Очередное перекладывание ответственности — «Это не мы, это антивирусы ничего не детектировали». Нуу, такое себе… Скорее всего, проблема была не в сигнатурах как таковых, а в том, как вредонос оказался в Диадоке и как был распространен.
Дата и время начала атаки
6 августа в 20.23 в независимом канале «Об ЭП и УЦ» было опубликован текст о заражении Диадока (без названия самой ЭДО), который базировался на сообщении «одного оператора ЭДО» своим клиентам. Но такое сообщение получили явно не все. 7-го августа я был на мероприятии по кибербезопасности под Казанью и упомянул о ситуации в разговоре с парой коллег, которые являются пользователями Диадок. Они были не в курсе инцидента.
В первом посте самого Диадока в Telegram время начала атаки не указано. Во втором сообщении (7 августа 20:03) утверждается, что рассылка началась 6 августа. При этом 7 августа в 10:51 Диадок в комментариях к своему первому посту в Telegram рекомендовал проверить все документы, поступившие с 5 августа. Почему?
Возможно СКБ Контур видел признаки вредоносной рассылки или нетипичных исходящих сообщений еще 5 августа (возможно, с другими, ранними билд-версиями Buhtrap), а попавшие в VirusTotal файлы – лишь несколько экземпляров цепочки, созданные на следующий день. Возможно и иная версия – на момент 7 августа 10:51 у СКБ Контур могли быть только фрагментарные данные: жалобы от клиентов, первые детекты от антивируса, неполные логи (хотя за ночь всю эту информацию можно было и собрать, имея доступ к серверам Диадока, где все эти вредоносы и хранились). Возможно, что в условиях неопределенности было проще дать «широкую» рекомендацию: проверяйте с 5 августа.
Один из 4-х файлов, чьи хэши указаны на сайте Диадока, имеет значение поля «Earliest/Latest Contents Modification» «05 августа 15:48:46–15:48:48» (мск). Но связана ли рекомендация проверять все с 5 августа с этим фактом, не известно.
В любом случае – между началом атаки и публичным уведомлением с деталями, помогающими клиентам хоть как-то подготовиться, прошли почти сутки.

Как распространялся вредонос через ЭДО?
Диадок утверждает, что сервис не взламывался и использовалась «стандартная возможность продукта – отправка документов из веб-приложения». Но не объяснено, как троян получил возможность подписывать и отправлять файлы от имени легитимных пользователей. Варианты, которые обсуждают эксперты (ключи в реестре, использование API, отправка без подписи или с помощью пользователя), Диадок официально не подтверждает и не опровергает.
Это оставляет существенный пробел в технической картине инцидента и до сих пор ответа на вопрос «КАК это произошло» нет.
Представители СКБ Контур высказывают в комментариях в Telegram версию, что так как троян Buhtrap раньше был замечен за кражей денег через ДБО, он умеет через CryptoAPI пользоваться установленным в системе криптопровайдером. Если носитель ЭП не защищен PINом, это происходит без интерактива в десктопе. Представители СКБ Контур также пишут, что можно проставить отсоединенную подпись через интерфейсе командной строки. Но в официальных ответах Диадок так и не написано, как вредоносный файл попал в ЭДО, что заставляет фантазировать и предполагать худшее.
Хуже некуда, когда людей заставляют додумывать!
Нет прямого доказательства, что именно этот билд Buhtrap содержит функционал отправки через Диадок, а не был «склеен» с отдельным модулем рассылки. Я просмотрел логи VT, включая все песочницы, по всем 4-м файлам, которые упоминает Диадок, и не нашел ни в одном вызова отечественных криптопровайдеров, которые и должен был использовать вредонос для подписания файла и отправки его через ЭДО. Допускаю, что модуль рассылки не был встроен в сам Buhtrap, а это был отдельный модуль, интегрированный в его сборку, который не отправляли в VT для анализа или осознанно не дали ссылок на результаты анализа.
Возможно и другое. В поведении одного из файлов фиксируется работа с библиотеками CRYPTBASE.dll и CRYPTSP.dll, которые являются штатной точкой входа для работы с CryptoAPI. С их помощью вредонос может:
- Найти доступные сертификаты и ключи в профиле пользователя.
- Запросить подпись данных/файла через доступный CSP (КриптоПро должен быть установлен как CSP по умолчанию).
- Сделать все это без отображения интерфейса пользователю, если ключ не защищен интерактивным вводом PIN, что не соответствует требованиям эксплуатации СКЗИ, но является очень удобным для пользователей.
По сути, если ключ электронной подписи и права на него есть, через CRYPTSP.dll и CRYPTBASE.dll вредонос может полностью повторить процесс легитимной подписи. Но опять же, это мое предположение. Похоже, семплы, отправленные в VT, запускались в песочнице без логирования API-вызовов, которые бы позволили понять используемый криптопровайдер, аргументы его вызова, тип ключевого контейнера и путь к нему.
Диадок также нигде не уточнил, можно ли отправить документ без подписи или с отсоединенной подписью, что могло бы объяснить автоматическую рассылку… и поставить кучу новых вопросов к архитектуре безопасности ЭДО.
Как мог работать механизм распространения?
Это мое предположение в отсутствие четкого ответа от СКБ Контур по поводу всей цепочки атаки.
-
ПК пользователя Диадока заражается трояном Buhtrap (вероятно, через фишинговое письмо или вредоносный сайт). У пользователя нет EDR и пропущенный вредонос закрепляется на хосте.
Если пользователь работает с Диадоком с мобильного устройства, то тут вообще непонятно, как детектить такое заражение.
-
Троян получает доступ к ключам электронной подписи (КЭП), хранящимся в реестре или доступным через CryptoAPI без ввода PIN (или с PIN, сохраненным в ПО).
Да, это нарушает правила пользования СКЗИ, но зато удобно. И не совсем понятно, должен ли Диадок этот момент закрывать или ФСБ надо свои требования актуализировать.
-
С помощью API Диадока или веб-интерфейса (через захваченный сеанс) троян автоматически формирует исходящие документы с вложенным ZIP-архивом, подписывает их и отправляет контрагентам. Это самая непонятная часть всей цепочки, так как все молчат про способ формирования исходящего документа и его отправку через Диадок.
-
Контрагенты открывают архив, запускают EXE, и процесс повторяется.
Да, видимо, у них тоже не EDR или они работают на мобильной версии Диадока.
-
За счет роуминга ЭДО вредонос может распространяться и на пользователей других операторов. Но пока про других ничего не слышно.
Пока основная версия звучит как «Мы не виноваты — все пользователи, так как это их компьютеры были скомпрометированы, а Диадок просто использовали как транспорт». Ну такое себе, если честно… Как по мне, так проблема не в устаревших базах антивируса, а в векторе атаки и точке, где антивирус просто не был задействован или вообще предусмотрен.
Использует ли Диадок антивирус или иные средства защиты?
В описании системы кибербезопасности на сайте Диадок нет ни слова об использовании антивируса для защиты передаваемых и хранимых на серверах ЭДО файлов. Но во втором сообщении Диадока говорится, что средства и системы обнаружения вредоносного ПО были актуализированы.
Что это за средства? И значит ли фраза «актуализированы», что они не обновлялись?
Если почитать описание системы ИБ Диадока, то она вся строится на входе в систему по сертификату, использовании КриптоПро, резервировании документов (не регулярное), контроль доступа посторонних в ЦОДы, и разнесении серверов Диадока по разным ЦОДам по стране. В 2014, 2017 и 2022 годах Диадог пентестила «Информзащита» и оценила уровень ИБ как высокий. Также упоминаются межсетевые экраны и парольная политика, системы обнаружения вторжения и сканеры безопасности для веб-приложения, а также защита от DDoS и система видеонаблюдения.
Вообще, средства борьбы с вредоносным кодом в описании системы кибербезопасности Диадока не упомянуты в принципе!
Распространение остановлено?
В первом сообщении утверждается, что «распространение вируса остановлено, отправленные файлы удалены». Во втором сообщении говорится о продолжающемся «непрерывном контроле» и «выборочном ограничении функциональности», что может означать, что блокировки и пресечение атаки заняли больше времени, чем сообщалось утром.
Об ограничении какой функциональности идет речь? В условиях неописанного способа заражения ЭДО и распространения через него, это вызывает вопросы.
Хронология событий (время московское)
05 авг 15:48:46–15:48:48 — Самая ранняя модификация одного из семплов, позже загруженного в VT (но не того, ссылку на который указывает СКБ Контур).
06 авг 12:09:42 — Creation Time основного исполняемого файла EXE по данным VT.
06 авг 20:28:00 — Первая загрузка одного из семплов, загруженного в VT (но не того, ссылку на который указывает СКБ Контур).
06 авг 20:59:25 — Первая загрузка еще одного семпла, загруженного в VT (но не того, ссылку на который указывает СКБ Контур).
06 авг 23:23 — Первое публичное упоминание атаки («Об ЭП и УЦ»).
07 авг 09:15 — Первый пост Диадока с предупреждением.
07 авг 10:51 — Рекомендация проверять документы с 5 августа.
07 авг 13:49:13 — Первая загрузка исходного семпла, упомянутого во втором сообщении Диадока, в VT.
07 авг 20:03 — Второй пост Диадока с деталями и упоминанием Buhtrap.
Возможно, что атака все-таки началась 5 августа, а вот массовая история стартовала уже 6-го.
Если честно, то после анализа имеющейся информации, вопросов у меня стало еще больше. И какие-то выводы делать сложно, так как молчание СКБ Контур или умалчивание может говорить как о желании скрыть что-то, так и о том, что компания оказалась не готова к такому повороту событий. Ее застали врасплох, опыта построения антикризисного PR при работе с комьюнити, клиентами и СМИ нет… Отсюда и такие прорехи в информации, которая на первый взгляд кажется исчерпывающей, но на самом деле…
Этот инцидент показал, что даже закрытые бизнес-системы с авторизацией и электронной подписью могут стать каналом массового распространения вредоносного ПО, если злоумышленник получает доступ к рабочей станции пользователя, а сама система не имеет достаточных механизмов защиты от такой угрозы.
Но может СКБ Контур еще раскроет детали инцидента. Все-таки неделя только началась…
Про сохраненные пин-коды. С диадоком не работал, но в одной компании работал с другим ЭДО. Компания заключала в год тысяч 5 договоров и доп. соглашений к ним, и сколько-то там еще первичных документов к ним шло. Работникам были выданы доверенности, и каждый ходил в ЭДО и подписывал «свои» документы. Но! При каждом входе любой такой работник с доверенностью получал уведомления о поступлении ВСЕХ новых документов на подписание. Кто зашел с утра первым, тот получал основной вал уведомлений. И на каждое нужно нажать окей, и ввести свой сложный пин-код. Несколько десятков раз. Пропустить нельзя, пока все не отожмешь, ничего в ЭДО больше не сделаешь. А если запомнить пин-код, то оно прощелкивалось «само» автоматически. Ясно, что в таких условиях пин-код был запомнен примерно у всех. Не от хорошей жизни, так сказать. Подозреваю, что это везде так.
Увы, все так