В школах Москвы на большинстве интерактивных панелей установлен скрытый агент для аудиозаписи, получающий задания через API на school.mos.ru и загружающий аудиозаписи на сервера ДИТ Москвы

Что такое МОС и интерактивные панели?

Московские школы в последние годы активно оснащались новым оборудованием: в классах появились ноутбуки, моноблоки и интерактивные доски. Закупками занимается Департамент информационных технологий города Москвы (ДИТ), а сами школы подчиняются Департаменту образования и науки Москвы.

На компьютеры и интерактивные панели с 2022 года ставится операционная система «Московской электронной школы» (МОС) — дистрибутив Linux на пакетной базе ROSA Linux. Система включена в реестр отечественного программного обеспечения (запись № 26418 от 12.02.2025). По словам самих разработчиков, «поддержкой и развитием системы занимаются специалисты Департамента информационных технологий города Москвы», а её исходный код размещён на «Мос.Хабе» (hub.mos.ru) — публичной платформе совместной разработки ДИТ. Прежде всего МОС устанавливается на интерактивные панели, которыми заменены обычные доски в большинстве учебных классов. Новые доски поставляются с уже предустановленной МОС.

Интерактивная панель МосТех, установленная на стене школьного класса
Интерактивная панель МосТех в школьном классе. Фото — wiki «IT в школе» (it-help-school.ru), лицензия CC0.

При этом для московских школ существует особая сборка МОС. Обычный дистрибутив, который любой может скачать с сайта, разработчики сами характеризуют как версию «без телеметрии без техподдержки ДИТ», а для школ публично распространяются отдельные образы — со встроенной телеметрией и системой техподдержки ДИТ (hub.mos.ru/mos/iso). В том числе есть специальный дистрибутив для интерактивных панелей. Новое оборудование уже приходит с предустановленной МОС с телеметрией, на старое оборудование МОС должна быть установлена по распоряжению ДОНМ Москвы. Также на МОС в Москве проводится ОГЭ (государственная итоговая аттестация в 9 классе), а начиная с 2027 года будет проводиться и ЕГЭ.

Пакет телеметрии uds-system-agent есть на каждом компьютере в дистрибутиве «Для московских школ» и, как видно по истории dnf на досках, регулярно обновляется. Этот канал удалённого администрирования уже использовался для управления МОС на всех компьютерах в школах Москвы — например, на компьютерах массово меняли обои рабочего стола на рекламу московских мероприятий. Тогда вреда в этом, казалось, не было: поддержка настроила обои. В конце августа 2026 года через ту же систему удалённого администрирования на доски поставили пакет, который делает совсем другое.

mesh-agent-lesson-log

На интерактивных панелях в классах московских школ обнаружен пакет mesh-agent-lesson-log — системный демон, который записывает звук в аудитории и отправляет записи наружу. В публичном репозитории МОС такого пакета нет: он распространяется установкой локального rpm-файла, в том числе с облачного сервиса mostech-cloud.mos.ru, который принадлежит ДИТ.

Судя по истории обновлений на трёх проверенных досках, пакет ставится и обновляется массово и централизованно: на всех трёх машинах — одна и та же цепочка версий с одинаковыми датами, установка идёт скриптом через файлы в /tmp, а не вручную. Внешний вид истории (повторные install одних и тех же версий) характерен для развёртывания по всей сети школ через систему удалённого администрирования ДИТ.

У нас есть две версии пакета — ранняя, 0.1.3, которая, по-видимому, не устанавливалась массово в школах, и текущая, 1.1.0. Версия 0.1.3 подписана ключом, связанным с разработчиками МОС. В версии 1.1.0 подписи уже нет, но до 3 ноября 2026 пакет можно было скачать с сайта mostech-cloud.mos.ru.

Ниже — разбор содержимого двух версий пакета, фотографии вывода команды dnf history с трёх интерактивных досок в разных школах, скриншоты штатной процедуры регистрации доски в МОС и результаты очного осмотра одной из досок.

Коротко о главном

Файлы для проверки

ФайлSHA-256
mesh-agent-lesson-log-0.1.3-1.git84da32.2.x86_64.rpm d886675a18a5db56fcee4fdcc6535c5e91c5a0571ea7ccc0b58abb79519b0b72
mesh-agent-lesson-log-1.1.0-2.gitea3ac2.1.x86_64.rpm 3ebf32f8bd899c8da7bed3ef5fc75f0b3d2135a153397735e99dcaabf9bd91ad
RPM-GPG-KEY-MOS (ключ подписи из пакета mostech-repos-keys-2021.1-5 официального репозитория МОС) 6432d14970a71e915cf4baaff0ab272d5aa2910dbb285d3e2a0c2585275aa683

Версия 1.1.0 была доступна для скачивания из облака ДИТ, но 3 ноября после публикаций в СМИ файл был удалён.

https://mostech-cloud.mos.ru/s/jbDEPLme3QKLSfG/download/mesh-agent-lesson-log-1.1.0-2.gitea3ac2.1.x86_64.rpm

Мы сохранили версию пакета 1.1.0.

Адрес в формате /s/<token>/download — это шаринг файла в облачном сервисе mostech-cloud.mos.ru. Опубликованные здесь rpm-файлы и фотографии идентичны тому, что распространяется по ссылке: сверьте SHA-256.

Хронология: пакет ставили и обновляли с августа по октябрь

Ниже — фотографии вывода команды dnf history с интерактивных досок в трёх разных школах. Имена пользователей и точные дни скрыты на самих фотографиях. На всех трёх досках пакет устанавливался и обновлялся локальными rpm-файлами из /tmp — то есть не через штатное обновление из репозитория, а установкой файла, который закидывается на машину удалённо. Установка пакета не из репозитория, а напрямую означает, что разработчики пакета и управляющие системой uds-system-agent не хотят публиковать свой пакет (в репозитории он был бы доступен для скачивания и изучения всеми желающими). Сам файл пакета после установки удаляется из каталога /tmp.

Фотография экрана интерактивной доски в школе с выводом команды dnf history: установка и обновления пакета mesh-agent-lesson-log с августа по октябрь 2026 года
Школа № 1.
Фотография экрана интерактивной доски в другой школе с выводом команды dnf history, показывающей повторные установки пакета mesh-agent-lesson-log
Школа № 2.
Фотография экрана интерактивной доски в третьей школе: приветственный экран MOSTECH «На пакетной базе ROSA» и вывод dnf history с установками пакета mesh-agent-lesson-log
Школа № 3.

Запись фактически идёт: осмотр одной доски

Помимо разбора пакетов и фотографий, была проведена очная проверка одной интерактивной доски. В каталоге /var/lib/cloudcom/agent/jobs — том самом, что указан в конфигурации агента как recording.root-dir, — обнаружены каталоги заданий. Почти все оказались пустыми; самый старый создан 16 октября 2026 года. В последнем каталоге лежал файл аудиозаписи.

Каждая доска привязана к точному адресу

Есть ещё одна деталь, касающаяся того, насколько хорошо известно расположение каждого источника записи. При установке МОС на интерактивной панели есть приложение регистрации устройства. Технические специалисты в школах должны регистрировать всё оборудование. Скриншоты ниже сделаны на чистой установке МОС 12 в виртуальной машине.

Окно регистрации интерактивной панели в МОС: вкладка «Идентификация устройства» с полями ЕКИС организации, наименования образовательной организации и адреса корпуса
Вкладка «Идентификация устройства»: тип устройства — «Интерактивная панель», поля «ЕКИС организации», «Номер или наименование образовательной организации», «Номер или название или адрес корпуса».
Окно регистрации интерактивной панели в МОС: вкладка «Имя компьютера» с полями Школа, Корпус, Кабинет и id устройства для формирования имени компьютера
Вкладка «Имя компьютера»: имя устройства формируется из номеров школы, корпуса, кабинета и id устройства — «Введите номера или короткие названия английскими буквами школы, корпуса, кабинета и устройства, согласно правилам именования».

То есть каждая интерактивная панель при вводе в эксплуатацию получает привязку к конкретной образовательной организации, корпусу и кабинету. А работает агент mesh-agent-lesson-log именно на этих панелях и идентифицирует себя серверу (readUDSAgentID, сведения об устройстве, MAC-адрес шлюза). Выходит, для каждой доски в системе известно её точное местоположение — вплоть до номера кабинета: каждому источнику звукозаписи в школе соответствует запись в общей инвентаризационной базе с адресом.

Кто собрал пакет и как он подписан

Обе версии собраны в инфраструктуре ROSA/ABF (Vendor: ROSA), исходники — https://hub.mos.ru/mos/cloudcom/mesh-agent. «Мос.Хаб» — это публичная платформа совместной разработки ДИТ: её лендинг принадлежит Департаменту информационных технологий, проект mesh-agent по адресу размещения относится к организации mos (тот же mos, что и в ISO-образах МОС). Сборочные хосты (внутренние имена ABF): mos-hz6phq (0.1.3), mos-nd2jsf (1.1.0).

0.1.3 — подписана официальным ключом МОС

Version     : 0.1.3
Release     : 1.git84da32.2        DistTag: rosa13
Build Date  : Сб 18 июл 2026 17:56:31
Build Host  : mos-hz6phq
License     : Proprietary
Signature   : EdDSA/SHA256, Сб 18 июл 2026 17:59:03, Key ID 507eea45722f23cd
Summary     : Агент для аудиозаписи урока
Description : Автономный агент записи для MOS Panel.
              Агент записывает аудио из аудитории, сообщает о статусе
              и загружает полученный аудиофайл.

rpm -K: digests signatures ОК. Key ID 507eea45722f23cd — последние 8 байт отпечатка ключа F307F3F0F3EB3B9CA9EC4EF2507EEA45722F23CD (uid: abf@os.mos.ru).

Этот ключ официально распространяется самой МОС: пакет mostech-repos-keys-2021.1-5-rosa2021.1.noarch.rpm из официального репозитория https://os.mos.ru/repo/mos2021.1/x86_64/main/release/ содержит единственный ключевой файл /etc/pki/rpm-gpg/RPM-GPG-KEY-MOS с отпечатком F307F3F0F3EB3B9CA9EC4EF2507EEA45722F23CD (uid: abf.mos.ru <abf@os.mos.ru>). Иными словами, каждая установка МОС доверяет этому ключу по умолчанию.

Проверка подписи выполнена независимо — в чистой rpm-базе, содержащей только импортированный RPM-GPG-KEY-MOS и никаких других ключей:

mkdir /tmp/clean-rpmdb
rpm --dbpath /tmp/clean-rpmdb --import RPM-GPG-KEY-MOS
rpm --dbpath /tmp/clean-rpmdb -K mesh-agent-lesson-log-0.1.3-1.git84da32.2.x86_64.rpm
# digests signatures ОК
rpm --dbpath /tmp/clean-rpmdb -K mesh-agent-lesson-log-1.1.0-2.gitea3ac2.1.x86_64.rpm
# digests ОК  (подписи нет)

1.1.0 — подписи нет, описание заменено

Version     : 1.1.0
Release     : 2.gitea3ac2.1       DistTag: rosa2021.1
Build Date  : Пт 09 окт 2026 13:35:49
Build Host  : mos-nd2jsf
License     : Proprietary
Signature   : (none)
Summary     : Агент обеспечивает проведение урока
Description : Системный агент для МОС (Операционная система
              «Московской электронной школы»).
              Агент обеспечивает проведение урока.

rpm -K: digests ОК — криптографической подписи нет. Описание пакета — то, что видит администратор при установке, — заменено: из прямого «Агент для аудиозаписи урока / записывает аудио из аудитории» в нейтральное «Агент обеспечивает проведение урока». Пока функция записи при этом не просто сохранена, но расширена. Как же именно этот агент обеспечивает проведение урока — не уточняется.

Что изменилось между версиями пакета 0.1.3 и 1.1.0

0.1.3 (июль 2026)1.1.0 (октябрь 2026)
Криптографическая подпись есть — EdDSA, ключ abf@os.mos.ru удалена (Signature: (none))
Summary «Агент для аудиозаписи урока» «Агент обеспечивает проведение урока»
Description «Агент записывает аудио из аудитории, сообщает о статусе и загружает полученный аудиофайл» «Агент обеспечивает проведение урока» — о записи упоминаний нет
Запись звука есть есть, добавлено снятие mute (temporaryUnmute)
Уведомление на рабочий стол есть (скрипт kde-notify) удалено
Сервер заданий HTTP, IP Selectel, опрос каждые 30 с HTTPS, school.mos.ru/api/speech-analytics, опрос каждые 10 мин

Что делает пакет

Автозапуск

Файл /usr/lib/systemd/system-preset/90-mesh-agent-lesson-log.preset содержит одну строку: enable mesh-agent-lesson-log.service. Демон включается сам при установке, без действий администратора. Пользователь mesh-agent создаётся через sysusers с шеллом /sbin/nologin; группа audio даёт доступ к записывающим устройствам.

[Unit]
Description=CloudCom lesson log mesh agent   # в 1.1.0: CloudCom lesson delivery agent
After=network-online.target sound.target

[Service]
User=mesh-agent
Group=mesh-agent
SupplementaryGroups=audio
WorkingDirectory=/var/lib/cloudcom/agent
ExecStart=/usr/bin/mesh-agent-lesson-log
Restart=always
RestartSec=10
StateDirectory=cloudcom/agent
NoNewPrivileges=true

Сервер заданий

Версия 0.1.3 — опрос каждые 30 секунд по открытому HTTP:

"backend": {
  "base-url": "http://82.148.29.56:18080/cloudcom/listener-server/api/v1/agent",
  "sync-interval-seconds": 30
}

IP-адрес 82.148.29.56 по данным whois принадлежит сети SELECTEL-NET (Selectel, Санкт-Петербург).

Версия 1.1.0 — HTTPS на school.mos.ru, в URL виден сегмент speech-analytics («речевая аналитика»), интервал увеличен до 600 секунд:

"backend": {
  "base-url": "https://school.mos.ru/api/speech-analytics/internal/v1/agent",
  "sync-interval-seconds": 600
}

README версии 1.1.0 прямо называет production endpoint и встроенный API-ключ:

https://school.mos.ru/api/speech-analytics/internal/v1/agent/sync

Production API key 80f594fd-72d5-4a3a-8945-89a475d941df встроен в бинарный файл.

Этот ключ продублирован в самом пакете: он записан в файле README.md — документации, приложенной к пакету (исходник), и найден в строках бинарника (заголовок запроса x-api-key). Сам файл README.md, судя по стилю текста, сгенерирован нейросетью, использованной для разработки приложения, и является служебным техническим описанием для внутреннего пользования. Похоже, что этот файл не планировался для публикации в распространяемом пакете (например, судя по наличию в README.md упомянутого ключа для доступа к API), но оказался в нём.

Что писал разработчик в README версии 0.1.3

Агент звукозаписи для МОС (Операционная система «Московской электронной школы»).

Работает в фоне и записывает звук с входящих устройств по расписанию. Получает список сетевых устройств и их MAC адреса.

Написан на Go

Запись звука

Бинарники написаны на Go (0.1.3 — Go 1.25.11, 1.1.0 — Go 1.26.5), stripped, но таблицы символов сохранили имена функций, из которых читается поведение:

Отправка и удаление записей

Сбор сведений об устройстве

Функции collectDeviceInfo, collectNetworkInterfaces (включая GatewayMAC — MAC-адрес шлюза), collectOSInfo, readUDSAgentID, sha256File для каждой записи. README 0.1.3 сам сообщает: «Получает список сетевых устройств и их MAC адреса».

Уведомления (только 0.1.3)

В версии 0.1.3 есть скрипт kde-notify и функции notifyRecordingStart, sendDesktopNotification — демон уведомлял пользователя на рабочий стол KDE о начале записи. В версии 1.1.0 скрипт из пакета убрали.

Информирование о записи

Никакого предупреждения о произведении аудиозаписи учителям и учащимся не производилось. Но, по-видимому, администрация школ неформально предупреждена об этом. В частности, один из учителей спрашивал коллег: «Коллега из другой школы интересуется, правда ли, что новые доски мостех пишут что происходит на уроке? И второе: нас вчера директор пугала, что все доски электронные настроены на запись звука или воспроизведение в реальном времени. Неужели так?»

Что делать школам?

Если вы не хотите, чтобы на компьютерах работала запись уроков и телеметрия ДИТ, пакеты можно удалить. Нормативных документов, обязывающих устанавливать на школьные компьютеры систему удалённого управления или агент звукозаписи, нет. Удалить пакеты желательно не только с интерактивных панелей, но и со всех компьютеров.

Удаление двух основных пакетов выполняется одной командой (от имени пользователя, у которого есть права администратора):

sudo dnf -y remove mesh-agent-lesson-log uds-system-agent

где mesh-agent-lesson-log — сам агент звукозаписи, а uds-system-agent — штатный пакет телеметрии школьной сборки МОС, через который устанавливался агент звукозаписи.

Дополнительно можно удалить ещё два пакета от ДИТ:

sudo dnf -y remove mos-identify dit-support

Как проверить самостоятельно

Разбор полностью воспроизводим на чистой Linux-системе:

sha256sum *.rpm
rpm -qpi mesh-agent-lesson-log-<версия>.x86_64.rpm     # метаданные, подпись
rpm -K  mesh-agent-lesson-log-<версия>.x86_64.rpm      # проверка подписи
rpm -qpl mesh-agent-lesson-log-<версия>.x86_64.rpm     # состав

# независимая проверка подписи в чистой базе ключей:
mkdir /tmp/clean-rpmdb
rpm --dbpath /tmp/clean-rpmdb --import evidence/RPM-GPG-KEY-MOS
rpm --dbpath /tmp/clean-rpmdb -K mesh-agent-lesson-log-<версия>.x86_64.rpm

mkdir ex && cd ex
rpm2cpio ../mesh-agent-lesson-log-<версия>.x86_64.rpm | cpio -idmv

cat etc/mesh-agent/config.json                          # сервер заданий
cat usr/share/doc/mesh-agent-lesson-log/README.md       # документация
cat usr/lib/systemd/system/mesh-agent-lesson-log.service
cat usr/lib/systemd/system-preset/90-mesh-agent-lesson-log.preset

strings -n 6 usr/bin/mesh-agent-lesson-log | grep -E '^main\.[a-z]'   # символы
strings -a usr/bin/mesh-agent-lesson-log | grep -oE 'go1\.[0-9.]+'    # версия Go
whois 82.148.29.56                                     # владелец IP

Исходные текстовые файлы пакета опубликованы как есть: config.json 0.1.3 · config.json 1.1.0 · README 0.1.3 · README 1.1.0 · юнит 0.1.3 · юнит 1.1.0 · kde-notify 0.1.3.