1.2.5
текущаяЧто изменилось для администратора
Обновление поверх установки без пути к политике теперь отказывает. Пакеты до 1.2.1
пропускали тихую установку без POLICYPATH, и на таких машинах вместо пути записана
заглушка: служба там ничего не запрещает. Обновление без параметра прежде проходило
на них молча. Теперь оно отказывает с тем же текстом, что и первая установка: передайте
путь к политике в команде обновления, и он запишется вместо заглушки. На машинах
с настоящим путём обновление без параметра проходит, как и раньше.
«Только чтение» на занятом томе – честное уведомление. Признак «только чтение» на диск
ставится, но том, на котором открыты файлы, не перемонтируется, и запись на носитель
продолжает идти. Так ведут себя загрузочные флешки и носители с открытыми файлами
на NTFS. Служба и прежде писала об этом apply_failed, а пользователь видел «Носитель
запрещён, но заблокировать его не удалось» – о носителе, который никто не запрещал.
Теперь уведомление говорит, что запись идёт, и просит закрыть файлы и переподключить
носитель. Там, где запись недопустима совсем, нужен запрет, а не «только чтение».
Исправления
Каталоги внутри каталога данных могли остаться под контролем пользователя. Установщик
закрывал только сам каталог %ProgramData%\LaPorta USB. Подкаталог, заведённый обычным
пользователем до установки, оставался его, а в подкаталоге updates лежит пакет, который
служба ставит от имени системы. Теперь права и владелец выставляются и на logs,
updates и registry-backup, а служба при старте проверяет и их.
Скачивание обновления по мёртвому соединению ждало полчаса. Отказ узнавался только в конце тридцатиминутного срока, даже если связь пропала в первую минуту. Теперь скачивание обрывается после двух минут без единого байта, и в журнале сказано, что оборвалась связь.
Метка «только чтение» снималась при перезапуске службы после сбоя. Служба снимала оставшиеся метки до того, как осматривала подключённые носители, и носитель принимал запись до конца осмотра. Теперь метку, которую политика по-прежнему требует, служба оставляет на месте. На приёмке зонд пытался писать на флешку каждые 200 мс, пока служба была убита и поднималась заново: 235 попыток, ни одна не прошла.
Уведомления переставали доходить до новых пользователей. Служба держала канал уведомлений за каждым агентом, пока не пыталась ему написать, – то есть до ближайшего события с носителем. На терминальном сервере тридцать два входа и выхода без таких событий исчерпывали канал, и агент нового сеанса к нему не подключался. Теперь отключившиеся агенты убираются сами за полминуты. Там же исправлена потеря уведомления, пришедшего в ту же секунду, когда агент подключался.
Вкладка «Носители» показывала устаревшее состояние. Запрет, применённый позже подключения, и ограничение, снятое смягчённой политикой, в ней не учитывались: окно показывало «только чтение» у флешки, которая уже принимает запись.
Правило по модели могло не подействовать на выбранный носитель. Если у носителя было своё правило по серийнику, оно старше правила по модели – так задумано. Окно обещало «запретить для всех носителей модели», а этот носитель оставался разрешённым. Теперь окно предупреждает об этом до сохранения и называет правило, которое останется в силе.
Сохранение политики из окна стирало незнакомые поля. Поле, заведённое для более новой версии программы, исчезало из файла при любом сохранении из окна старой версии. Теперь такие поля остаются на месте. Комментарии по-прежнему не сохраняются.
Смена карты в картридере в момент смены политики. Журнал мог записать решение к карте, которую уже вынули, а подключение новой терял.
Проверено на живой машине: отказ и проход обновления, права на каталоги, канал уведомлений, метка «только чтение» при сбое службы и вкладка «Носители». Остальное – тестами: картридера и занятого носителя на приёмке не было.
Запреты и формат политики не менялись. Обновление ставится поверх 1.2.4 без переустановки и без правки политики.
1.2.4
Исправления
Телефон и токен, оставленные в разъёме к запуску службы, оставались ей неизвестны. Система сообщает о подключении только в сам момент подключения. Осмотр, который служба делает при старте, перечислял одни накопители, а телефон и токен накопителями не являются – и телефон, воткнутый до включения машины, продолжал работать даже под правилом «прочее: запретить». То есть перезагрузка снимала с него запрет молча, до следующего переподключения.
Теперь при старте служба спрашивает у системы и переносимые устройства, и считыватели смарт-карт. На приёмке телефон, оставленный в разъёме, найден через 6,4 секунды после старта службы и отключён через 103 миллисекунды после перечитывания политики.
Неудачная установка обновления выглядела в журнале удачной. Служба считала установкой сам запуск установщика. Если установщик отказывал – занят чужой установкой, откатился, не хватило места, – в журнале всё равно оставалась запись «ставится версия такая-то», а повтора не было. Машина оставалась на прежней версии, и по журналу это было не видно.
Теперь служба дожидается ответа установщика. Отказ попадает в журнал отдельным событием и повторяется после паузы. Установка, требующая перезагрузки, по-прежнему считается удачной.
Смена политики в момент применения запрета могла разойтись с самим запретом. Правка политики, пришедшая ровно тогда, когда служба применяла прежнее решение, давала два исхода, и оба неверные: носитель оставался ограниченным по уже отменённой политике до переподключения, либо узел устройства оставался отключённым, а запись о нём была уже снята – и включить его было некому ни при следующей правке политики, ни при остановке службы. Теперь применение решения и пересмотр политики не пересекаются.
Метка «только чтение» могла лечь на чужой диск. Если носитель извлекали в те секунды, пока служба повторяла неудавшуюся попытку выставить метку, освободившийся номер диска успевала получить другая флешка – и следующая попытка ставила метку ей. Теперь каждая попытка заново находит нужный носитель, а исчезнувший считается извлечённым.
Разрешающее правило по модели телефона не действовало при смене политики. Запрещённый телефон, которому политику смягчили правилом по его модели, оставался отключённым: при пересмотре служба сверяла с правилом не сам телефон, а концентратор, в который он воткнут. Телефон оживал только после переподключения.
Первое исправление проверено на живой машине, остальные четыре – только тестами: оборудования и условий для них на приёмке нет.
Запреты, политика и журнал не менялись. Обновление ставится поверх 1.2.3 без переустановки и без правки политики.
1.2.3
Одно исправление
Телефон и токен могли пройти мимо запрета молча. Телефон в режиме MTP объявляет о себе системе дважды – и как устройство на шине USB, и как переносимое устройство. Служба принимала второе сообщение за повтор первого, а какое из двух придёт раньше, система не определяет: разрыв между ними – единицы миллисекунд, и порядок меняется от подключения к подключению.
Когда первым оказывалось сообщение об устройстве на шине, служба принималась искать у телефона диск, которого у него нет, и к моменту, когда сдавалась, сообщение о переносимом устройстве уже было отброшено. Телефон не попадал ни в журнал событий, ни в список известных устройств, а значит и под правила политики: под «прочее: запретить» он продолжал работать, и ни записи о нём, ни отказа применения в журнале не появлялось. На приёмке из четырнадцати подключений телефона учтено три.
Теперь служба спрашивает само устройство, что оно собой представляет, и на порядок сообщений больше не полагается. После правки десять подключений подряд дали десять записей. Запрет отключает телефон, как и любой другой носитель, а режим «только чтение» к нему по-прежнему неприменим и честно отказывает.
То же касается токенов: считыватель смарт-карт объявляется системе тем же способом. Живого токена на приёмке нет, и эта половина правки проверена только тестами.
Дефект был во всех выпусках, начиная с 1.0.0. Запреты, политика и журнал не менялись: обновление ставится поверх 1.2.2 без переустановки и без правки политики.
1.2.2
Одно исправление
Повторное подключение запрещённого носителя учитывалось через раз. Запрещённая
флешка, воткнутая снова, должна попадать в журнал событием attach_blocked и давать
уведомление в области уведомлений. Служба узнаёт о таком подключении по USB-узлу
носителя, а узел его диска система заводит чуть позже, чем сообщает об USB-узле.
Служба спрашивала дерево устройств сразу и заставала USB-узел без детей: на приёмке
из трёх подключений одной флешки учтено два, третье прошло без записи и без уведомления.
Теперь служба переспрашивает дерево устройств в течение двух секунд, как уже делает с системными сведениями о диске при обычном подключении. После правки четыре подключения подряд дали четыре записи и четыре уведомления.
Запреты, политика и журнал в остальном не менялись. Обновление ставится поверх 1.2.1 без переустановки и без правки политики.
1.2.1
Исправления по итогам обзора безопасности и ревью
Нового программа не делает ничего – закрывает дыры и неточности, найденные двумя обзорами кода. Формат политики и журнала не менялся: обновление ставится поверх, без переустановки и без правки политики.
Носитель, который запретили, разрешили и запретили снова. Если флешку запретили, потом разрешили, она ожила в разъёме, а потом класс запретили опять, служба считала запрет уже наложенным и не делала ничего: флешка работала до извлечения. Теперь запрет ложится при перечитывании политики – на приёмке за 58 мс.
Повторное подключение запрещённого носителя. Воткнутая снова запрещённая флешка не появлялась в проводнике, а значок в области уведомлений молчал. Теперь он показывает «заблокирован» и держит носитель в списке.
Токен. Одного VID производителя токенов для освобождения от правил больше не хватает: устройство должно объявить интерфейс чип-карты, а узел с интерфейсом накопителя освобождения не получает ни при каком VID. Перепрошитая флешка, назвавшаяся токеном, раньше обходила весь контроль. Настоящий токен не задет: его flash-раздел подчиняется правилам как обычная флешка, а вход в систему и подпись живут на соседнем узле.
Телефон в режиме MTP. Решение по нему только записывалось: под other: block
телефон работал, а журнал показывал «запрещён». Теперь узел отключается, как у любого
другого носителя. Режим «только чтение» к телефону неприменим и честно отказывает.
Канал уведомлений. Агент проверяет, что канал завела служба, а не чужой процесс, занявший имя, пока служба перезапускалась. Читать канал могут только вошедшие за машиной, а не любой пользователь домена по сети.
Установка без пути к политике. Тихая установка без POLICYPATH больше не проходит:
раньше она молча оставляла в реестре заглушку, и служба ходила по ней в сеть
за несуществующим сервером. Смена версии и восстановление без параметра проходят
по записанному пути. Если заглушка всё же осталась от прежней установки, служба по ней
в сеть не ходит и пишет в журнал, что путь не задан.
Запасной режим. Когда политика недоступна и кэша нет, служба больше не обращается к сайту за обновлениями: выбора администратора не видно, и делать его за него нельзя.
Окно администратора. Носитель с неприменённым запретом больше не показывается как «запрещён» – рядом стоит «не применено». Правило, заведённое кнопкой на носитель, у которого уже есть правило с условием по интерфейсам, заменяет его, а не дописывается рядом. Перед установкой обновления окно спрашивает о несохранённых правках политики. Знак в окне «О программе» на экранах с масштабом больше 100% больше не размыт.
Каталог данных. Служба предупреждает в журнале событий, если у каталога данных появилось право записи не только у системы и администраторов или он оказался точкой повторного разбора: из журнала строится белый список строгого режима.
Мелочи. Остановка службы дожидается своей уборки и на медленной машине. Смена
карты в картридере не записывается дважды. Выпуск, отозванный с сайта до окна
установки, не ставится. Программы reg.exe и msiexec зовутся полным путём.
Манифест и подпись при выкладке встают на место одним переименованием.
Документация. В описании строгого режима оговорено, что внешние диски с мостом UASP превентивный слой не закрывает – их держит реактивный.
1.2.0
Окно администратора и агент стали понятнее
Служба, политика и порядок применения решений не изменились ни в чём: обновление меняет только то, что человек видит и чем он пользуется руками.
Журнал. Столбцов было двенадцать, и заданные ширины давали больше, чем окно, – столбцу «Сообщение» не оставалось ничего, и увидеть его было нельзя никогда. Теперь восемь: класс, серийник, VID/PID и модель сведены в один столбец «Носитель», а «Применено» ушло в название события. События и решения показываются по-русски – «подключён», «не применено», «применено позже», «только чтение». Серийник и идентификатор экземпляра выделенной строки показываются под таблицей: для носителя без серийника экземпляр – единственное, чем его можно опознать, и подсказкой, которую надо ждать с мышью, это быть перестало.
Носители. Фильтры были только по датам; на парке в сотни носителей список нечем было сузить. Появились поиск по серийнику, модели и владельцу, отбор по классу и по тому, заведено ли на носитель правило. Столбец «Доверен» из одного слова заменён красной пометкой на месте серийника: по недоверенному серийнику правило не совпадёт никогда, и видно это теперь прямо в таблице, а не после выделения строки.
Политика. Режим, флажки, часы установки и срок хранения лежали одной лентой и переносились как придётся – теперь это три группы, которые не переносятся. Подсказка строгого режима на пять предложений заменена двумя строками на месте и ссылкой в справочник: решение о парковом запрете принимают по тексту, который виден, а не по всплывающему. Действия над правилом переехали от нижнего края окна к самой таблице правил, и слева написано, над каким правилом они сработают.
Пустая таблица объясняет себя. Раньше при пустой выборке человек видел шапку столбцов и решал сам, сломалось что-то или событий правда нет. Теперь причина названа: фильтры ничего не нашли, за период событий не было или журнал не прочитался. Во втором случае программа считает соседнюю неделю и предлагает показать её.
Клавиши. F5 – обновить, Ctrl+F – в поиск, Ctrl+E – выгрузить в CSV, Ctrl+S – сохранить политику. У кнопок появились подчёркнутые буквы для Alt.
Обновления. Окно отвечает на вопрос, с которым его открыли: «Доступна версия…» крупно, подробности серой строкой под ней. Появилось предупреждение о том, что установка остановит службу и на это время машина останется без запретов, – раньше это было сказано только в документации, а решение человек принимает здесь.
Агент в области уведомлений. Подсказка при наведении показывает подключённые носители и их состояние, а не одно название программы. На значке зажигается красная метка, когда решение принято, а применить его не удалось: уведомление об этом гаснет через семь секунд, а носитель остаётся доступным. Пункт «Открыть журнал» назван честно – «Открыть папку журнала»: он открывает каталог, а не документ.
Значок. Один синий на программу и сайт. Мелкий и крупный рисунки были построены по разным числам, и при переходе с 24 точек на 32 силуэт заметно менялся – теперь доли одни на все размеры.
1.1.1
Исправления
Нового программа не делает ничего – делает надёжнее то, что уже умела.
Внешние диски в коробках USB 3.x. Часть таких дисков Windows перечисляет не как USB-накопитель, а как диск за мостом SCSI, и программа их не узнавала: они не попадали ни под правила, ни в журнал. Теперь узнаёт – и при подключении, и при осмотре носителей, оставшихся в разъёмах с прошлого включения. Внутренних дисков это не касается: они опознаются по предку в дереве устройств, а у системного диска такого предка нет.
Остановка службы. При остановке и при удалении программы служба снимает наложенные запреты. Носитель, подключённый ровно в эту минуту, мог получить запрет уже после снятия и остаться отключённым – включать его приходилось руками через диспетчер устройств. Теперь остановка сначала запрещает накладывать новое, а потом снимает наложенное. Попутно она стала быстрее: прежде служба могла досиживать до десяти секунд повторов, нужных уже только ей самой.
Метка «только чтение». Если метка легла на диск с первой попытки, а следующая попытка не удалась, программа теряла её из виду: диск оставался недоступным для записи, а снять метку было уже некому – ни при смягчении политики, ни при остановке службы. Теперь не теряет.
Обновления. Выключенные обновления (check_updates: false или UPDATECHECK=0) теперь
запрещают и установку выпуска, найденного до того, как их выключили, – прежде такой
выпуск мог установиться в ближайшее окно. И неудачная установка больше не повторяется
каждые полминуты до конца окна: следующая попытка – не раньше чем через час.
1.1.0
Проверка обновлений
Программа узнаёт о новых версиях сама: служба раз в сутки берёт с сайта подписанный манифест выпуска, сверяет версию с установленной и при более новой пишет об этом в журнал. Пакет она не скачивает и не ставит – установка останавливает службу, и минуту без запретов выбирает человек.
Ставит администратор: в окне управления «Справка» – «Обновления…». Кнопка скачивает пакет, сверяет его размер и контрольную сумму с подписанным манифестом и запускает установщик Windows; путь к файлу политики при этом сохраняется.
Проверку можно выключить – полем check_updates в политике сразу на весь парк либо
параметром установки UPDATECHECK=0 на отдельной машине. Первый выключает только
автоматическую проверку, второй – и её, и кнопку. Прокси программа не настраивает
и берёт у Windows: служба – машинный, окно – настройки учётной записи. Подробности –
в установке на одну машину.
1.0.0
Первый выпуск
Журнал подключений, правила доступа к носителям, два режима работы (наблюдение и применение), реактивный и превентивный слои запрета, окно администратора, агент в трее, установка пакетом MSI.