Перейти к содержанию
Shell

#1 Используем SEP для борьбы с локальными администраторами

Recommended Posts

Shell

У меня часто спрашивают - а что НЕ умеет твой SEP? Часто этот вопрос вводит в ступор, потому как по сути SEP дает мне довольно таки огромный потенциал разрешения моих задач и целей.

Итак, ближе к сути: Нужно вылавливать не лигитимных пользователей, которым не разрешено быть в группе локальных администраторов.

Для этого мной решено использовать:

1) vbscript который будет запускаться в политике Host Integrity по расписанию и записывать данные в БД на SQL в центральном офисе.

2) собственно, саму отдельную БД на SQL 2008

3) обрабатывающие процедуры.

В скрипте сразу закладывается логика - какие пользователи разрешены (экономлю трафик), на каких компьютерах (по MAC, ибо много у которых меняется IP) не запускать скрипт.

Итак, делаем новую политику в Host Integrity, выбираем Custom Requirements. Все далее как на скриншоте ниже (в окне имени файла вводим любое имя.vbs, ставим удаление скрипта после его исполнения (скрипт будет во временной директории ОС), в строке выполнения команды пишем cscript %F%)

2f258c21605f.jpg

Теперь редактируем под себя и вставляем сам скрипт:

'НЕ ЗАПУСКАТЬ НА СЕРВЕРАХ И КОНТРОЛЛЕРАХ ДОМЕНА!'или убрать сначала блокировку учеток в группе админов...'On  Error Resume  Nexterrors = 0 'выставляем счетчик для результата в host integritySet objRun = CreateObject("wscript.Shell")strUserName = objRun.ExpandEnvironmentStrings("%USERNAME%")Dim strComputer, member, strUsername, IsMemberDim grp, obj, objRunstrComputer = "."'объявляем массив разрешенных имен пользователейdim AllowUsersAllowUsers = "Administrator,Администратор,shell,Boss"AllowUsers = Split(AllowUsers,",")'объявляем массив разрешенных локальных пользователейdim LocalAccountsLocalAccounts = "Administrator,Администратор"LocalAccounts = Split(LocalAccounts,",")'объявляем массив mac-адресов не подлежащих проверке.dim MacAddressesMacAddresses = "00:21:9b:e5:76:f8,00:26:2d:81:70:70,00:0e:a6:f5:41:fb"'00:23:54:BD:F3:08 MyMacAddresses = Split(MacAddresses,",")'задаем параиетры соединения с БДSet objConn = CreateObject("ADODB.Connection")Set objRecordset = CreateObject("ADODB.Recordset")Set objRecordsetLast = CreateObject("ADODB.Recordset")Set objRecordsetChange = CreateObject("ADODB.Recordset")ServerName = "10.0.0.2" 'имя или IP-адрес сервераDSN = "LocalAdmins" 'имя базы данныхUID = "vbs" 'логин пользователя SQL-сервераPWD = "Sfgs%4F#D" 'пароль пользователя SQL-сервераConnectString = "Provider=SQLOLEDB;" & _                "Data Source=" & ServerName & _                ";Initial Catalog=" & DSN & _                ";UID=" & UID & ";PWD=" & PWDobjConn.ConnectionString = ConnectStringobjConn.ConnectionTimeOut = 15objConn.CommandTimeout = 30'получаем имя компаSet WshNetwork = WScript.CreateObject("WScript.Network")'WScript.Echo " " &WshNetwork.ComputerName CompName = LCase(WshNetwork.ComputerName)'получаем полное имя доменаSet objSystemInfo = CreateObject("ADSystemInfo") 'wscript.echo objSystemInfo.DomainDNSNameDomainName = LCase(objSystemInfo.DomainDNSName)'получаем IP и MACSet objWMIService = GetObject( _     "winmgmts:\\" & strComputer & "\root\cimv2")Set IPConfigSet = objWMIService.ExecQuery _("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")For Each IPConfig in IPConfigSet    If Not IsNull(IPConfig.IPAddress) Then         For i=LBound(IPConfig.IPAddress) _            to UBound(IPConfig.IPAddress)                If Not (IPConfig.IPAddress(i)="0.0.0.0") Then            IPAddress = IPAddr + IPConfig.IPAddress(i)            MACAddress = IPConfig.MACAddress            'Wscript.Echo "IP Address: " & IPAddress & " MACAddress: " & IPConfig.MACAddress                End if        Nextend ifnext'проверяем mac-адреса на исключенияFor Each address in MacAddresses    If LCase(address) = LCase(MACAddress) then    'Wscript.echo "Этот компьютер находится в исключениях проверки по критерию MAC"    Wscript.quit(0) 'и завершаем скрипт если MAC перечислен    Exit for    End ifNext'проверяем не заблокирован ли пользовательFunction dis(Username)    Set Accounts = GetObject("WinNT://" & strComputer & "")    Accounts.Filter = Array("user")        For each user in Accounts            If LCase(user.Name) = LCase(Username) then                If user.AccountDisabled = False then                dis = 0                'wscript.echo "Пользователь " & Username & " Не заблокирован"                Else                dis = 1                'wscript.echo "Пользователь " & Username & " Уже блокирован"                exit for                end if            end if        nextEnd function'ищем группу администраторов и проверяем её членовSet colGroups = GetObject("WinNT://" & strComputer & "") 'UPcolGroups.Filter = Array("group")Dim Result ()ReDim Result(1)For Each objGroup In colGroups    If  objGroup.Name = "Administrators" or objGroup.Name ="Администраторы" Then          i=0        For Each objUser in objGroup.Members                'проверяем языковое соответствие учетных записей администраторов                   if LCase(objUser.Name) = "administrators" and LCase(objGroup.Name) = "администраторы" or LCase(objUser.Name) = "администратор" and LCase(objGroup.Name) = "administrators" then                    Set ExistLocalAccounts = GetObject("WinNT://" & strComputer & "")                    ExistLocalAccounts.Filter = Array("user")                        For Each user In ExistLocalAccounts                            For Each allowuser In LocalAccounts                            c = 0                                If LCase(user.Name) = LCase(allowuser) then exit for                                    If user.AccountDisabled = False then                                    notallowaccs = user.Name                            c = 1                                    end if                        next                            if c = 1 then                            'wscript.Echo "Итог: НЕТ В БАЗЕ ЛОКАЛЬНОГО ПОЛЬЗОВАТЕЛЯ " & notallowaccs & " <--- Незаблокирован"                            'user.AccountDisabled = True                            'user.SetInfo                            errors = 1                            end if                                    Next                    Disabled = dis(objUser.Name)                    'wscript.echo "Обнаружено языковое несоответствие учетной записи администраторов"                    objConn.Open                    Set objRecordset = objConn.Execute("insert into CommonAdmins (CompName,DomainName,IPAddress,MacAddress,UserName,Disabled,GroupName,date) values ('" & CompName &"','"& DomainName &"','"& IPAddress &"','"& MACAddress &"','" & objUser.Name & "','"& Disabled &"','"& objGroup.Name &"', getdate())")                    objConn.Close                 end if         GroupName = objGroup.Name         IsMember = objUser.Name         Result(i)=IsMember         i=i+1         ReDim Preserve Result(i)         Next     End IfNextReDim Preserve Result(i-1)'сравниваем полученный массив пользователей-админов с разрешенными локальными админами.for each adminuser in Result    for each admins in AllowUsers     x = 0     if LCase(adminuser) = LCase(admins) then exit for    x = 1    next        if x = 1 then        isMember = adminuser        'WScript.Echo "Итог: НЕТ В БАЗЕ " & IsMember        errors = 1        Disabled = dis(IsMember)        objConn.Open        Set objRecordset = objConn.Execute("insert into CommonAdmins (CompName,DomainName,IPAddress,MACAddress,UserName,Disabled,GroupName,date) values ('" & CompName &"','"& DomainName &"','"& IPAddress &"','"& MACAddress &"','" & IsMember & "','"& Disabled &"','"& GroupName &"', getdate())")        objConn.Close         end ifnextIf errors = 1 Then   'WScript.echo "Выходим с кодом 1 для Host Integrity"        WScript.Quit(1) ' --- Quit with errorsElse    WScript.Quit(0) ' --- Quit with not errorsEnd If

Теперь готовим саму БД.

Делаем отдельную БД (или изменяем в параметрах скрипта ниже и выше на свои) с именем LocalAdmins. В ней создадим маленькую табличку

USE [LocalAdmins]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[CommonAdmins](    [iPAddress] [varchar](15) NULL,    [MACAddress] [varchar](17) NULL,    [userName] [varchar](128) NULL,    [Disabled] [nchar](10) NULL,    [GroupName] [varchar](50) NULL,    [Date] [datetime] NULL,    [incRegister] [int] NOT NULL,    [DomainName] [varchar](128) NULL,    [CompName] [varchar](128) NULL) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[CommonAdmins] ADD  CONSTRAINT [DF_CommonAdmins_UserName]  DEFAULT (NULL) FOR [userName]GOALTER TABLE [dbo].[CommonAdmins] ADD  CONSTRAINT [DF_CommonAdmins_Disabled]  DEFAULT (NULL) FOR [Disabled]GOALTER TABLE [dbo].[CommonAdmins] ADD  CONSTRAINT [DF_CommonAdmins_IncRegister]  DEFAULT ((0)) FOR [incRegister]GO

Теперь создадим 2 процедуры. Как и в предыдущей теме, я использую две процедуры. Первая будет работать по таблице, вторая - отсылать письма по подготовленным критериям и уже отфильтрованной таблице первой процедурой.

Первая процедура :

Use LocalAdmins;GOAlter PROCEDURE Clean_LocalAdminsASBEGINDECLARE @comp varchar(128), @domain varchar(128), @ip varchar(15), @users varchar(128),@group varchar(50), @date datetime, @inc int;DECLARE LACursor0 CURSOR LOCAL FOR SELECT DISTINCT CompName,DomainName,convert(varchar(15),IPAddress),UserName,GroupName,Date,IncRegister  FROM CommonAdminsorder by dateDECLARE @count int--Заменяем IP в случае выдачи скриптом из диапазона Reserved\BcastUpdate CommonAdminsSet IPAddress = 'APIPA'Where IPAddress like '%169.254.%'--меняем домен для корректной регистрации объекта инцидентаUpdate CommonAdminsSet DomainName = 'sk.domain.gk'where IPAddress like '%10.1.2.%' or IPAddress like '%10.1.1.%' or IPAddress like '%10.1.3.%'Update CommonAdminsSet DomainName = 'office.domain.gk'where IPAddress like '%10.0.17.%' or IPAddress like '%10.0.18.%'--иногда, увы скрипт не отрабатывает из за выключения питания или потери канала. Удаляем неполные данныеDELETE from CommonAdminswhere (IPAddress is NULL and MACAddress is NULL) or UserName is NULL and (GroupName is NULL)    OPEN LACursor0    FETCH NEXT FROM LACursor0 INTO @comp,@domain,@ip,@users,@group,@date,@incWHILE @@FETCH_STATUS = 0    BEGIN--считаем количество новых записей - если есть новые, делаем их актуальными, увеличиваем инкремент (IncRegister) чтобы потом контролировать--отсылку письма    Select @count = COUNT(*) from CommonAdminsWhere CompName = @comp and DomainName = @domain and convert(varchar(15),IPAddress) = @ip and UserName = @users and GroupName = @group        if @count > 1 --or @count =  0        BEGIN        Update CommonAdmins        SET IncRegister = + @count        WHERE CompName = @comp and DomainName = @domain and convert(varchar(15),IPAddress) = @ip and UserName = @users and GroupName = @group        Delete from CommonAdmins where CompName = @comp and DomainName = @domain and UserName = @users and GroupName = @group and Date < @date        END            FETCH NEXT FROM LACursor0 INTO @comp,@domain,@ip,@users,@group,@date,@inc    END;        CLOSE LACursor0;    DEALLOCATE LACursor0;--удаляем неактуальные данные, старее 120 часов :)Delete from CommonAdmins where Date < DATEADD (HOUR, -120, getdate())ENDGO

Вторая процедура, которая будет отсылать письмо

-- ================================================Use LocalAdmins;GOAlter PROCEDURE IncMailASBEGINDECLARE @comp varchar(128), @domain varchar(128), @ip varchar(15), @users varchar(128),@group varchar(50), @date datetime, @inc intDECLARE LACursor1 CURSOR LOCAL FOR SELECT CompName,DomainName,IPAddress,UserName,GroupName,Date,IncRegister FROM CommonAdmins ORDER by UserNameDECLARE @xml NVARCHAR(MAX)DECLARE @body NVARCHAR(MAX)DECLARE @dopsubj varchar(10)--создаем отчеты    OPEN LACursor1    FETCH NEXT FROM LACursor1 INTO @comp,@domain,@ip,@users,@group,@date,@incWHILE @@FETCH_STATUS = 0    BEGIN        --PRINT @comp + @domain + @ip + @users + @group + CONVERT(VARCHAR, @date, 104)    --SELECT @comp + ', '+ @domain + ', '+ @ip + ', ' + @users + ', ' + @group + ', ' + CONVERT(VARCHAR, @date, 102)+ ', '+ CONVERT(VARCHAR, @date, 8) + ', ' + @inc                IF (@inc = 0 or @inc > 120)    and @users not like 'S-1-5-21%'        BEGIN     -- готовим письмо и отсылаем            if @inc >= 120            BEGIN            SET @dopsubj = ' ПОВТОРНО '            END            ELSE            SET @dopsubj = ' '                        --Оформляем и пишем письмо        SET @body ='Инцидент ' + @dopsubj + ' по классу информационная безопасность по объекту ' + @domain + ' "Пользователь - локальный администратор".        Пользователь ' + @users + ' на АРМ ' + @comp + ' с IP адресом ' + @ip +'  - локальный администратор ' + ' (Обнаружено событие ' + convert(varchar(24),@date) + ' по Мск).        Необходимо:1) В аттаче к инциденту прикрепить письменную объяснительную ИТ специалиста по факту инцидента.2) Обеспечить функционирование ПО без повышенных привилегий.3) Удалить пользователя из локальных администраторов.                            Письмо создано автоматически.                В группе локальных администраторов должны быть только следующие учетные записи:1)    2)3)'DECLARE @subj varchar(128)= 'Локальный администратор ' + ' Пользователь - локальный администратор. '+ ' Object: ' + @domain + ' '        EXEC msdb.dbo.sp_send_dbmail        @recipients=N'helpdesk@company.ru',        @copy_recipients =N'ваш_емайл@company.ru',        @body = @body,        @body_format = 'TEXT',        @subject =@subj,        @profile_name = 'Database Mail'        END--обновляем данные о том что инцидент выслан по данному пользователю        Update CommonAdmins        Set IncRegister = @inc + 1        Where CompName = @comp and UserName = @users and GroupName = @group        FETCH NEXT FROM LACursor1 INTO @comp,@domain,@ip,@users,@group,@date,@inc    END;        CLOSE LACursor1;    DEALLOCATE LACursor1;ENDGO

Ставим шедуллер в SQL Agent на вызов этих процедур

Use LocalAdmins;GOexec Clean_LocalAdminsexec IncMail

Выше описанный метод оттестирован (в настоящее время маленькие доработки) и работоспособен.

Минусы? Конечно есть что я просто физически не успеваю реализовать. Например, то что скрипт получает имя пользователей в несовсем удобном формате (нет приставки Domain\User или Computer\User - есть возможность обдурить скрипт :) , не отмечаются группа или пользователь ну и так, по мелочи)

В скриптах есть заремаренные дополнительные функции которые вы можете открыть если нужно (например, автоматическая блокировка учетной записи - аккуратнее с этим на серверах, т.к. блокируются и IIS_\IWAM_ - внесите сначала все то что нужно).

На вопросы отвечу позже, через пару неделек ;)

P.S. не забудьте создать пользователя vbs с паролем указанным в скрипте. Только дайте ему права минимальные на БД.

  • Upvote 15

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deviss

Я в восхищении. Теоретически, конечно, это можно решить другими средствами, но интеграция в SEP - это замечательно.

Сами выработали практику? Читая документацию как-то не доводилось сталкиваться с подобными решениями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Shell
Я в восхищении. Теоретически, конечно, это можно решить другими средствами, но интеграция в SEP - это замечательно.

Сами выработали практику? Читая документацию как-то не доводилось сталкиваться с подобными решениями.

Да, приходится вырабатывать коленочные решения :) На групповые политики не приходится рассчитывать так как поддоменов море и нужно учитывать человеческий фактор :)

В планах потом скрипт перегнать на c++\c# и доработать немного. В данное время не успеваю - нужно было что то временное но работающее сделать.

Еще один вопрос не решенным остался - не получилось вернуть из скрипта код ошибки для host integrity. К примеру, если локальные админы найдены - вернуть host complince error...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  • Сообщения

    • Ego Dekker
    • demkd
      а внутри локалки и не получится, белые ip нужны только при подключении через интернет.
    • santy
      Проверил на двух домашних ПК в локальной сети с роутером. Схема с серым IP работает отлично. Передача файлов гениальна! Вот просто как будто дополнительное зрение появилось :). Через белый IP  пока не удалось подключиться. Пришлось еще фаерволлы включить в интерактивный режим. (На автомате еще не проверял, возможно надо сохранить некоторые правила.)
    • demkd
      ---------------------------------------------------------
       4.99.4
      ---------------------------------------------------------
       o Исправлена функция автоматического переключения удаленных рабочих столов.
         Проблема проявлялась при работе с удаленной системой через локальную сеть, при запуске приложения
         от имени администратора не происходило автоматическое переключение на защищенный рабочий стол.
         (не касается полной версии разового доступа к рабочему столу, в этом режиме проблемы не было).

       o Проведено сравнительное тестирование системного удаленного рабочего стола и uVS.
         Передача файлов через системный удаленный рабочий стол идет почти в 20 раз медленней чем через через uVS.
         Максимальный fps в 32-х битном цвете почти в 3 раза ниже чем у uVS в FHD.
         (!) Выявлена проблема совместного использования uVS и системного рабочего стола.
         (!) Если системный рабочий стол был закрыт БЕЗ выхода из пользователя, то uVS не сможет
         (!) отбразить рабочий стол логона пользователя (Winlogon).
         (!) Единственное решение проблемы: подключиться заново через системный рабочий стол и выйти из пользователя.
       
    • demkd
      ---------------------------------------------------------
       4.99.3
      ---------------------------------------------------------
       o Это обновление повышает качество работы с удаленной системой и добавляет новый режим работы.
         (!) Новая функция не совместима со старыми версиями uVS, если у вас в настройках установлен флаг bReUseRemote = 1,
         (!) то перед обновлением необходимо закрыть все серверные части uVS на удаленных компьютерах с помощью
         (!) старой версии uVS.

       o Добавлен новый режим работы: Разовый доступ к удаленному компьютеру.
         (!) Доступно начиная с Vista, подключение к рабочему столу устаревших систем возможно лишь прежним способом.
         Ранее просмотр и управление рабочим столом удаленного компьютера было вспомогательной функцией при работе с удаленной системой.
         Для подключения требовались полномочия администратора или знание логина и пароля администратора удаленного компьютера и
         физическая возможность подключения к удаленному компьютеру.
         Новый режим работы похож на то, что предлагают всевозможные поделки для удаленного администрирования.
         o В этом режиме доступно: управление и просмотр рабочего стола, а также быстрый и надежный обмен файлами на пределе пропускной
           способности канала. (для сравнения RAdmin в гигабитной сети передает файлы более чем в 15 раз медленней чем uVS).
         o Передаваемые кадры теперь не только сжимаются, но и шифруются,  целостность передаваемых файлов защищена
           проверочным хэшем и шифрованием.
         o Подключение осуществляется без использования промежуточного сервера, т.е. это чистый P2P.
         o Подключение возможно к компьютеру за NAT при включенной у роутера опции uPNP.
         o Подключение возможно к компьютеру, где активирован VPN.
           (!) Подключение производится к реальному адресу роутера или адаптера компьютера с VPN, VPN канал полностью игнорируется.
         o Подключение возможно в обе стороны, т.е. из пары компьютеров требуется лишь 1 белый IP, направление подключения выбирается
           при начальной настройке.

         При запуске start.exe теперь вам доступны три новые кнопки:
         o Управление удаленным компьютером и обмен файлами.
           Эту кнопку нажимает тот кто хочет получить доступ к удаленному компьютеру, в открывшемся окне можно выбрать
           вариант подключения (см. ниже) и ввести код доступа полученный от того кто предоставляет доступ к компьютеру.
           Варианты подключения:
             o Соединение примет мой компьютер - в этом случае необходимо выбрать IP к которому будет подключаться другая
               сторона. При подключении через интернет следует выбирать белый IP адрес, если ваш компьютер за роутером
               и на нем активен NAT, то выбрать нужно именно его IP адрес. (адрес с пометкой [router]).
               Если роутер поддерживает uPNP, то этот адрес будет выбран по умолчанию.
               Если же в списке нет белых IP то вам следует выбрать другую опцию подключения.
               После выбора IP просто нажмите кнопку Старт и передайте одноразовый код доступа другой стороне.
               При подключении по локальной сети вы можете нажать кнопку "Все IP" и выбрать любой серый адрес для подключения.
               Поддерживается и IPv4 и IPv6.
               (!) Код доступа автоматически копируется в буфер обмена при нажатии кнопки "Старт".

             o Соединение установит мой компьютер - просто скопируйте код доступа в поле ввода или код там появится автоматически
               если вы его скопировали из мессенджера. После чего нажмите кнопку Старт и ожидайте подключения.

         o Разовый удаленный доступ к моему компьютеру [админ]
           (!)Пользователь должен обладать правами администратора или правами по запуску и установке служб.
           Эту кнопку нажимает тот кто хочет предоставить доступ к своему компьютеру, в открывшемся окне можно выбрать
           разрешения для другой стороны.
           Доступны 3 варианта:
             o  Управление     - доступно: мышь, клавиатура, просмотр экрана и обмен файлами.
             o  Просмотр       - доступно: просмотр экрана и обмен файлами.
             o  Обмен файлами  - доступно: обмен файлами.
           Это полнофункциональная версия удаленного рабочего стола uVS, с возможностью удаленного подтверждения
           запуска приложений от имени администратора и эмуляции нажатия Ctrl+Alt+Del.

         o Разовый удаленный доступ к моему компьютеру [не админ]
           Все тоже самое что и во 2-м случае, кроме удаленного подтверждения запуска приложений от имени администратора
           и эмуляции нажатия Ctrl+Alt+Del, дополнительно есть ограничение по использованию защищенных рабочих столов.

       o При работе с удаленным рабочим столом теперь доступна передача файлов и каталогов из буфера обмена в обе стороны.
         Что бы передать файлы или целые каталоги на удаленный компьютер, просто скопируйте их в буфер обмена и в окне
         удаленного рабочего стола нажмите кнопку со стрелкой вверх.
         Передача изображения автоматически отключится и откроется окно с логом передачи файлов.
         В заголовке окна лога вы увидите объем переданных данных и среднюю скорость передачи (с учетом чтения их с диска).
         По окончании передачи  файлов в лог будет выведена информации о времени передачи, количестве успешно переданных файлов и
         средней скорости передачи.
         Переданные файлы будут помещены в буфер обмена удаленной системы и вы сможете  вставить их из буфера
         в любой каталог или прямо на рабочий стол. При этом файлы переносятся из временного каталога.
         Если же вы не вставили файлы из буфера обмена то они останутся во временном каталоге C:\uVS_copyfiles\*
         точный путь до которого выводится в лог на удаленном компьютере.
         Что бы получить файлы проделайте обратную операцию: скопируйте файлы в буфер обмена на удаленном компьютере
         и нажмите кнопку со стрелкой вниз, по завершению передачи файлы будут помещены в буфер обмена вашего компьютера
         и вы можете перенести их в любую нужную папку.
         Таким образом обе стороны видят какие файлы и куда копируются и при этом максимально упрощается процесс копирования.
         (!) При закрытии окна лога передача файлов будет остановлена.
         (!) При разрыве соединения передача файлов будет автоматически продолжена после восстановления соединения,
         (!) при этом работает функция докачки, т.е. если ошибка произошла при передаче большого файла, то передача его
         (!) продолжится с последнего успешно полученного блока, т.е. блок будет заново.
         (!) Каждая передача файлов является независимой, т.е. нельзя прервать передачу и воспользоваться функцией докачки.
         (!) Проверка целостности файлов производится на лету вместе с его расшифровкой, таким образом достигается
         (!) максимально возможная скорость передачи примерно равная скорости копирования файлов по локальной сети системой.
         (!) При необходимости передачи большого количества мелких файлов рекомендуется поместить их в архив, это серьезно
         (!) сократит время передачи.
         (!) Состоянии кнопки CS никак не влияет на данный функционал.

       o Изменен приоритет протоколов: IPv4 теперь является приоритетным, как показали замеры в гигабитной локальной сети
         IPv4 позволяет достичь более высокой скорости передачи данных.

       o Добавлено шифрование сжатых кадров удаленного рабочего стола для повышения защиты передаваемой по сети информации.

       o В случае разрыва соединения повторное подключение происходит автоматически без запроса.

       o Снижен инпут лаг при работе с удаленным рабочим столом.

       o Обновлена функция синхронизации буфера обмена с удаленной системой: теперь поддерживается передача скриншотов
         в обе стороны.

       o Обновлена функция передачи движений мыши в удаленную систему.
         Теперь доступно управление с помощью движений мыши, которое используется в некоторых приложениях и играх. (если нажата кнопка MM)
         Если указатель мыши видим в удаленной системе то управление производится позиционированием указателя по расчетным координатам (как и раньше),
         в противном случае указатель скрывается в клиентской системе и передаются лишь движения мыши.
         При возникновении проблем с восстановлением видимости указателя вы всегда можете переключиться из окна удаленной рабочего стола по горячей
         клавише RWin.

       o uVS теперь при старте добавляется в исключения Ф и брандмауэра до выхода из uVS.

       o Теперь запоминаются размеры и режим отображения удаленного рабочего стола для каждого активного монитора.
         Кнопка 1:1 применяется автоматически при первом выборе монитора.
         Обработчик кнопки 1:1 обновлен, теперь размер окна рассчитывается с высокой точностью для новых систем,
         где размер окна включает в себя тень.

       o Добавлен выбор метода захвата экрана, доступно 3 варианта:
         o GDI -  медленный метод захвата экрана, но работает в любой удаленной системе, постоянный fps.
                  (единственный доступный метод для Win2k-Win7)

         o DDA1 - быстрый, работает начиная с Windows 8, максимальный коэффициент сжатия,
                  переменный fps в зависимости от экранной активности.
                  (!) рекомендуется использовать при ширине канала ниже 100Mbit, вместо DDA2.

         o DDA2 - очень быстрый метод сравнимый с захватом экрана с помощью mirror драйвера, но без использования драйвера,
                  работает начиная с Windows 8, низкий коэффициент сжатия, переменный fps в зависимости от экранной активности.
                  Способен захватывать видео с высоким fps (до 60) за счет упрощенного метода сжатия и обработки потока кадров.
                  (метод по умолчанию для Win8+, рекомендуется при значительной экранной активности).
                  (!) рекомендуется использовать при ширине канала не менее 100Mbit, при высоких разрешениях 1Gbit и выше
                  (!) из-за низкого коэффициента сжатия.
                  (!) При низкой экранной активности трафик до 10 раз больше чем у DDA1, при высокой - в 2 раза больше.
          
       o В окно удаленной рабочего стола добавлена кнопка "SYN" она замещает собой ручной выбора задержки захвата кадров.
         (отжатая кнопка соответствует нулевой задержке)
         Если кнопка нажата то задержка, а значит и максимальный fps ограничивается автоматически в соответствии
         с пропускной способностью канала, к сожалению это понижает максимальный fps и увеличивает инпут лаг,
         однако это полностью решает проблему, которой страдают даже лучшие программы удаленного управления
         при недостаточной ширине канала. Если канал слишком узок (10Mbit и менее) то при значительной
         экранной активности (оконное видео или анимация) происходит потеря управления удаленным рабочим столом
         из-за того что новые кадры отправляются в буфер значительно быстрее, чем клиентская машина успевает их получить и отобразить,
         в результате чего даже нажатия кнопок отображаются с задержкой в несколько секунд.
         Тоже самое будет наблюдаться в uVS в сходных условиях если кнопка SYN не нажата.
         Поэтому SYN не рекомендуется отключать при значительной активности в кадре и узком канале.
         Если канал 100Mbit и выше (локальная сеть), используется DDA2 то можно выключить SYN и это сильно поднимет fps и значительно уменьшит инпут лаг.
         Кнопка SYN по умолчанию нажата, состояние кнопки сохраняется при выходе из uVS.
         Выбранная цветовая битность теперь тоже сохраняется.

       o В окно удаленной рабочего стола добавлена кнопка "MR" она позволяет управлять указателем мыши из удаленной системы,
         Функция работает ЕСЛИ кнопка нажата И курсор находится в пределах окна удаленного рабочего стола И это окно активно.
         Функция предназначена для тех случаев когда человеку на том конце проще показать проблему чем описать ее словами.

       o Теперь клиентская часть uVS автоматически завершается если удаленная система перезагружается, выключается или завершается сеанс пользователя.
         (только если открыто окно удаленного рабочего стола)

       o Значительно увеличена скорость переключения мониторов, рабочих столов и смены разрешения монитора в DDA режиме.
         (!) Однако есть побочный эффект: если новый монитор будет подключен к удаленной системе пока открыто окно рабочего стола,
         (!) то для отображения картинки с этого монитора необходимо будет закрыть/открыть окно или повторно выбрать метод захвата экрана.

       o Добавлена поддержка браузера Microsoft Edge.

       o Обновлена функция чтения и удаления расширений браузеров: Chrome, Yandex, Edge.
         Добавлены сайты с включенными уведомлениями с указанием времени активации уведомлений.
         Из окна информации о расширении удалено поле Extension_homepageURL за бесполезностью.
         Мусор оставшийся от старых расширений помечается как "файл не найден" и будет удален при вызове функции удаления ссылок на
         отсутствующие файлы.

       o Контекстное меню в окне редактирования критериев теперь тоже использует выбранный размер шрифта.

       o Улучшена совместимость с системами с малым количеством оперативной памяти.

       o Исправлена функция захвата экрана в GDI режиме.

       o Исправлена ошибка в функции чтения защищенных файлов, в некоторых случаях функция не могла получить доступ к файлу.

       o Исправлена ошибка в функции смены рабочего стола

       o Исправлены ошибки инициализации COM.

       o Исправлена ошибка из-за которой из списка проверки выпало 2 ключа автозапуска.

       o Исправлена ошибка в функции отката изменений (Ctrl+Z) при работе с образом.

       o Исправлена ошибка повторной инициализации захвата экрана в случае если рабочий стол был переключен пользователем или системой
         до повторного открытия окна удаленного рабочего стола.

       o Исправлена ошибка при открытии окна информации о компьютере.
         Добавлена дата релиза биоса, исправлено отображение объема физической памяти, добавлена расшифровка типа памяти и условное обозначение
         ее производительности.

       o Добавлена возможность открывать ключ реестра в regedit-е двойным щелчком по строке в логе или
         через контекстное меню.
         (!) Недоступно при работе с образом автозапуска.
       
×