Просто на заметку. Никакого решения нет!
Если во встроенном Firewall включить по умолчанию запрещающую политику (как того требует стандарт безопасности), то в журнал будут попадать записи о заблокированных попытках выхода в интернет для всех приложений, которые не разрешены явно. Для многих это не проблема, т.к. можно создать правило, которое будет прекрасно работать. Но, в нашем мире есть два вида пришельцев, которые усложняю нам (админам) жизнь.
Первый вид — это разработчики инсталлятора Squirrel. Кому-то покажется, что они его не знают, но это не так. Взять хотя бы Яндекс-диск и Дискорд, как наиболее известные приложения, использующие его. Его можно «увидеть» в структуре папок, например:
C:\Users\Denis\AppData\Local\Discord\app-1.0.9010
или
C:\Users\Denis\AppData\Roaming\Yandex\YandexDisk2\3.2.24.4790
Думаю, общие черты уже видно. Проблема в папке, в названии которой есть номер версии. Если я использую SRP (Software Restriction Policies), я могу создать разрешающее правило такого вида:
%USERPROFILE%\AppData\Local\GitHubDesktop\app-1.0.*\GitHubDesktop.exe
Или даже такого:
%USERPROFILE%\AppData\Local\Discord\app-1.0.????\Discord.exe
В этом случае, если сменится номер версии, то программа запустится и не будет заблокирована.
Но в случае с брандмауэром (Windows Defender Firewall with Advanced Security) на сцену выходит второй вид людей, портящих нам жизнь — это его разработчики. Наверное во времена Windows XP SP2 действительно было необходимо экономить ресурсы компьютера, поэтому о маске пути думали лишь как о роскоши, но прошло почти 18 лет, а ничего не изменилось! Мы всё также не можем добавить правило с маской! Я подумал, что может просто уже давно всё сделали, но почему-то забыли снять это ограничение для графического интерфейса настроек файрвола и изменил правило через реестр (наивно конечно, но вдруг…):
Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules
В этом разделе были ключи примерно с таким содержанием:
v2.30|Action=Allow|Active=TRUE|Dir=Out|Protocol=6|RPort=443|App=C:\Users\Denis\AppData\Local\Discord\app-1.0.9010\Discord.exe|Name=Discord(2)|Desc=C:\Users\Denis\AppData\Local\Discord\app-1.0.9010\Discord.exe|EmbedCtxt=_USER|
Я попытался добавить сюда маску типа такой:
App=C:\Users\Denis\AppData\Local\Discord\app-1.0.????\Discord.exe
Или такой
App=C:\Users\Denis\AppData\Local\Discord\app-1.0.*\Discord.exe
Но увы, ничего не сработало.
Планировщик задач
Теперь мы уже ближе к теме заметки. Поскольку я сильно обломался с файрволом, то решил пойти обходным путём. В принципе я мог написать скрипт, который меняет путь для правила файрвол. Поскольку я уже хотел если не идеального решения, то хотя бы удобного для пользователя, то мне недостаточно было сменить путь к заблокированному файлу в правиле, я хотел, чтобы скрипт запускался автоматически. Примерно так:
1. Пользователь запускает приложение (к примеру Discord)
2. Приложение не может выйти в интернет, о чём пишет в журнал (вообще лог в журнал пишет не приложение, а сам файрвол, если включить соответствующую настройку)
3. Отловив это событие, мы запускаем скрипт, который меняет путь.
Вроде как «Бинго», но нет, т.к. тут тоже есть свои ограничения!
В Планировщике можно создать задачу, которая будет запускать файл/скрипт, при появлении в Журнале событий определённого события. При создании триггера из выпадающих меню можно выбрать «On an event», после чего выбрать тип события и даже номера ошибок. Но нам-то нужны не все события о блокировке, а только те, которые будут содержать определённый путь к файлу. В принципе, это тоже можно сделать!
▶ ▶
Здесь можно сформировать запрос уже гораздо более сложный:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(Level=1 or Level=2 or Level=3 or Level=4 or Level=0 or Level=5) and (EventID=5152 or EventID=5157)]]
and
*[EventData[Data[@Name='Application'] = '\device\harddiskvolume8\program files (x86)\microsoft\edge\application\msedge.exe']]
</Select>
</Query>
</QueryList>
Это всё круто, только у нас проблема связана с тем, что упоротые разработчики инсталлятора Squirrel меняют путь при обновлении. А значит мы не знаем, какой путь будет у заблокированного приложения. Маски? Надежда была, но тут без сюрпризов — маски не поддерживаются, поскольку здесь так и остались в 2004 году. До сих пор в Планировщике для обработки XML используется XPath 1.0, а работа с масками есть только с версии XPath 2.0…
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024