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

Срабатывание антивирусов на механизм обновления проекта


Рекомендуемые сообщения

Доброго времени суток!
У меня появилась такая проблема:
Сделал в проекте механизм самообновления через загрузчик программы. То есть запускается RegistratorLoader.exe, который проверяет наличие обновлений и запускает потом RegistratorFOG.exe - основную программу. Так вот антивирусы на машинах клиентов (в частности Аваст, Касперский, Nod, AVG) завопили, что RegistratorLoader.exe - это вирус HEUR:Trojan-Downloader.Win32.Generic (по Касперскому)
Подскажите, пожалуйста, как можно попробовать изменить код, чтобы антивирусы перестали ругаться? С проблемами подобного типа никогда не разбирался, видимо поэтому даже не знаю в какую сторону думать...
Среда Delphi XE7
Код:

program RegistratorLoader;


uses

WinInet, shellapi, windows, sysutils;



function AppVersion: string;

var

dwHandle: THandle;

dwSize: DWORD;

lpData, lpData2: Pointer;

uiSize: UINT;

begin

Result:= '';

dwSize:= GetFileVersionInfoSize(PChar('RegistratorFOG.exe'), dwSize);

dwHandle:= 0;

if dwSize <> 0 then

begin

GetMem(lpData, dwSize);

if GetFileVersionInfo(PChar('RegistratorFOG.exe'), dwHandle, dwSize, lpData)

then

begin

uiSize:= Sizeof(TVSFixedFileInfo);

VerQueryValue(lpData, '\', lpData2, uiSize);

with PVSFixedFileInfo(lpData2)^ do

Result:= Format('%d.%02d.%02d.%02d', [HiWord(dwFileVersionMS),

LoWord(dwFileVersionMS), HiWord(dwFileVersionLS),

LoWord(dwFileVersionLS)]);

end;

FreeMem(lpData, dwSize);

end;

end;



function GetInetFile(const fileURL, FileName: String): boolean;

const

BufferSize = 1024;

var

hSession, hURL: HInternet;

Buffer: array [1 .. BufferSize] of Byte;

BufferLen: DWORD;

f: File;

sAppName: string;

function ExtractFileName(const FileName: string): string;

var

I: Integer;

begin

for I:= High(FileName) downto Low(FileName) do

if FileName[I] = '\' then

break;

Result:= Copy(FileName, I + 1, length(FileName) - I);

end;



begin

Result:= False;

sAppName:= ExtractFileName(paramstr(0));

hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,

nil, nil, 0);

try

hURL:= InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);

try

AssignFile(f, FileName);

Rewrite(f, 1);

repeat

InternetReadFile(hURL, @Buffer, Sizeof(Buffer), BufferLen);

BlockWrite(f, Buffer, BufferLen)

until BufferLen = 0;

CloseFile(f);

Result:= True;

finally

InternetCloseHandle(hURL)

end

finally

InternetCloseHandle(hSession)

end

end;



var

NewVer, isCritical, message_: string;

T: Text;

AcceptUpd: Integer;

uTyp: Cardinal;

fl: boolean;



begin

GetInetFile('https://dl.dropboxusercontent.com/###/version', 'version');

AssignFile(T, 'version');

ReSet(T);

ReadLn(T, NewVer);

ReadLn(T, isCritical);

CloseFile(T);

deletefile('version');

fl:= False;

if NewVer <> AppVersion then

begin

if isCritical = 'Critical' then

begin

uTyp:= MB_ICONWARNING + MB_YESNO;

message_:= 'Доступно критическое обновление программы. Обновить?';

fl:= True;

end

else

begin

uTyp:= MB_ICONQUESTION + MB_YESNO;

message_:= 'Доступно обновление программы. Обновить?';

fl:= True;

end;

if fl then

if messagebox(0, PChar(message_), PChar('Обновление RegistratorFOG'),

uTyp) = idYes then

begin

if GetInetFile

('https://dl.dropboxusercontent.com/###/RegistratorFOG.exe',

'RegistratorFOG.new') then

begin

deletefile('RegistratorFOG.exe');

RenameFile('RegistratorFOG.new', 'RegistratorFOG.exe');

end;

end;

end;

ShellExecute(0, 'open', 'RegistratorFOG.exe', nil, nil, 1);



end.

 

 

 

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

Скорее всего, такой механизм обновления, когда сначала запускается одна программа, что то скачивает, запускает вторую является подозрительным. 

Посмотрите, как сделано в других решениях и сделайте аналогично. Как вариант - отправить программу в ЛК, что бы там убрали детект на неё.

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

Скорее всего, такой механизм обновления, когда сначала запускается одна программа, что то скачивает, запускает вторую является подозрительным. 

Посмотрите, как сделано в других решениях и сделайте аналогично. Как вариант - отправить программу в ЛК, что бы там убрали детект на неё.

Понимаю, конечно же, что код можно как-то "перестроить", чтобы не срабатывало. А вот как реализовано в других решениях? Пробовал и "всё в одном" - тот же эффект. Как сделано в других решениях? Если брать уже готовые продукты - код все равно от пользователя скрыт, а решений в интернете не нашел, которые бы так же, как, например, обновление браузера, Team-viewer'a или флэш-плеера, срабатывали хорошо и без "алертов".

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

Выкладывайте на сервере помимо обновленного приложения текстовый файл с его md5. При проверке обновлений выкачивайте md5 и сравнивайте с файлом на компьютере. Если такой алгоритм?

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

Выкладывайте на сервере помимо обновленного приложения текстовый файл с его md5. При проверке обновлений выкачивайте md5 и сравнивайте с файлом на компьютере. Если такой алгоритм?

Уточню описание работы моего механизма обновления (хотя по коду в принципе видно). Скачивается файл с информацией о версии, и если она различается с текущей - программа обновляет основной .exe. Если я вместо скачки файла version буду скачивать файл, содержащий контрольную сумму и ее сравнивать - что изменится? Не понимаю, что от этого изменится, но.... попробую

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

 

 


Подскажите, пожалуйста, как можно попробовать изменить код, чтобы антивирусы перестали ругаться?
настроить исключения в антивирусах
Ссылка на комментарий
Поделиться на другие сайты

Уточню описание работы моего механизма обновления (хотя по коду в принципе видно). Скачивается файл с информацией о версии, и если она различается с текущей - программа обновляет основной .exe. Если я вместо скачки файла version буду скачивать файл, содержащий контрольную сумму и ее сравнивать - что изменится? Не понимаю, что от этого изменится, но.... попробую

Вы интересовались, как у других сделано обновление. Я взял пример с текстового редактора Notepad++. У них приложение запрашивает из сети файл:

http://downloads.sourceforge.net/project/npppluginmgr/xml/plugins.md5.txt

Антивирусы на это дело не ругаются  :)

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

@Daemvil,

Варианты для решения проблем с Касперским:

1. Участвовать в Whitelist: http://whitelist.kaspersky.ru/whitelist-for-partners-ru

2. Добавить на каждом ПК с антивирусом приложение в исключения.

3. Изменить механизм обновления приложения.

4. Временно отключить антивирус перед обновлением приложения.

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

Решил проблему следующим образом: программа-апдейтер в случае наличия обновлений скачивает главный .exe, изменив расширение на .update. Затем запускает основную программу, которая проверяет наличие файла с расширением .update, и в случае нахождения оного подменяет свой .exe этим обновлением и перезапускается. Антивирусы вроде теперь молчат ))
код:


program RegistratorLoader;
 
uses
  WinInet, shellapi, windows, sysutils;
 
function AppVersion: string;
var
  dwHandle: THandle;
  dwSize: DWORD;
  lpData, lpData2: Pointer;
  uiSize: UINT;
begin
  Result:= '';
  dwSize:= GetFileVersionInfoSize(PChar('RegistratorFOG.exe'), dwSize);
  dwHandle:= 0;
  if dwSize <> 0 then
  begin
    GetMem(lpData, dwSize);
    if GetFileVersionInfo(PChar('RegistratorFOG.exe'), dwHandle, dwSize, lpData)
    then
    begin
      uiSize:= Sizeof(TVSFixedFileInfo);
      VerQueryValue(lpData, '\', lpData2, uiSize);
      with PVSFixedFileInfo(lpData2)^ do
        Result:= Format('%d.%02d.%02d.%02d', [HiWord(dwFileVersionMS),
          LoWord(dwFileVersionMS), HiWord(dwFileVersionLS),
          LoWord(dwFileVersionLS)]);
    end;
    FreeMem(lpData, dwSize);
  end;
end;
 
function GetInetFile(const fileURL, FileName: String): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array [1 .. BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
  function ExtractFileName(const FileName: string): string;
  var
    I: Integer;
  begin
    for I:= High(FileName) downto Low(FileName) do
      if FileName[I] = '\' then
        break;
    Result:= Copy(FileName, I + 1, length(FileName) - I);
  end;
 
begin
  Result:= False;
  sAppName:= ExtractFileName(paramstr(0));
  hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
    nil, nil, 0);
  try
    hURL:= InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f, 1);
      repeat
        InternetReadFile(hURL, @Buffer, Sizeof(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen)
      until BufferLen = 0;
      CloseFile(f);
      Result:= True;
    finally
      InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end
end;
 
var
  NewVer, isCritical, message_: string;
  T: Text;
  AcceptUpd: Integer;
  uTyp, res: Cardinal;
  fl: boolean;
  exeName, verName: string;
 
procedure WinExec(const ACmdLine: String; const ACmdShow: UINT = SW_SHOWNORMAL);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  CmdLine: String;
begin
  Assert(ACmdLine <> '');
 
  CmdLine:= ACmdLine;
  UniqueString(CmdLine);
 
  FillChar(SI, Sizeof(SI), 0);
  FillChar(PI, Sizeof(PI), 0);
  SI.cb:= Sizeof(SI);
  SI.dwFlags:= STARTF_USESHOWWINDOW;
  SI.wShowWindow:= ACmdShow;
 
  SetLastError(ERROR_INVALID_PARAMETER);
{$WARN SYMBOL_PLATFORM OFF}
  Win32Check(CreateProcess(nil, PChar(CmdLine), nil, nil, False,
    CREATE_DEFAULT_ERROR_MODE
    {$IFDEF UNICODE} or CREATE_UNICODE_ENVIRONMENT{$ENDIF}, nil, nil, SI, PI));
{$WARN SYMBOL_PLATFORM ON}
  CloseHandle(PI.hThread);
  CloseHandle(PI.hProcess);
end;
 
begin
  exeName:= 'RegistratorFOG';
  verName:= 'version';
  GetInetFile('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' +
    verName, verName);
  AssignFile(T, verName);
  ReSet(T);
  ReadLn(T, NewVer);
  ReadLn(T, isCritical);
  CloseFile(T);
  deletefile(verName);
  fl:= False;
  if NewVer <> AppVersion then
  begin
    if isCritical = 'Critical' then
    begin
      uTyp:= MB_ICONWARNING + MB_YESNO;
      message_:= 'Доступно критическое обновление программы. Обновить?';
      fl:= True;
    end
    else
    begin
      uTyp:= MB_ICONQUESTION + MB_YESNO;
      message_:= 'Доступно обновление программы. Обновить?';
      fl:= True;
    end;
    if fl then
      if messagebox(0, PChar(message_), PChar('Обновление RegistratorFOG'),
        uTyp) = idYes then
      begin
        if not GetInetFile
          ('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' + exeName +
          '.exe', exeName + '.update') then
          messagebox(0, PChar('Ошибка обновления'),
            PChar('Обновление RegistratorFOG'), MB_ICONERROR + MB_OK);
      end;
  end;
 
  WinExec(exeName + '.exe');
 
end.

 

  • Согласен 2
Ссылка на комментарий
Поделиться на другие сайты

 

неверное решение. все решается через

 

 

исключения в антивирусах

 

Не согласен, обоснуйте, что это единственно верное решение. Каждый выбирает сам. Например:

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

2. некоторые антивирусы после добавления в исключения через некоторое время снова блокируют программу, а некоторые и вовсе не дают добавить в исключения (пример: mcAfee как-то давно взял и удалил половину моих скомпилированных программ, перенеся на карантин, сказав, что это вирусы, без возможности добавить в "исключения". Правда, потом вернул часть, но осадок остался)) )

3. согласитесь, намного приятней, когда пользователь запускает программу, и сразу все работает, без каких-либо манипуляций с антивирусом. А из-за некоторых мнительных пользователей может пострадать репутация разработчика.

  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

 

Решил проблему следующим образом: программа-апдейтер в случае наличия обновлений скачивает главный .exe, изменив расширение на .update. Затем запускает основную программу, которая проверяет наличие файла с расширением .update, и в случае нахождения оного подменяет свой .exe этим обновлением и перезапускается. Антивирусы вроде теперь молчат ))
код:

 

program RegistratorLoader;
 
uses
  WinInet, shellapi, windows, sysutils;
 
function AppVersion: string;
var
  dwHandle: THandle;
  dwSize: DWORD;
  lpData, lpData2: Pointer;
  uiSize: UINT;
begin
  Result:= '';
  dwSize:= GetFileVersionInfoSize(PChar('RegistratorFOG.exe'), dwSize);
  dwHandle:= 0;
  if dwSize <> 0 then
  begin
    GetMem(lpData, dwSize);
    if GetFileVersionInfo(PChar('RegistratorFOG.exe'), dwHandle, dwSize, lpData)
    then
    begin
      uiSize:= Sizeof(TVSFixedFileInfo);
      VerQueryValue(lpData, '\', lpData2, uiSize);
      with PVSFixedFileInfo(lpData2)^ do
        Result:= Format('%d.%02d.%02d.%02d', [HiWord(dwFileVersionMS),
          LoWord(dwFileVersionMS), HiWord(dwFileVersionLS),
          LoWord(dwFileVersionLS)]);
    end;
    FreeMem(lpData, dwSize);
  end;
end;
 
function GetInetFile(const fileURL, FileName: String): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array [1 .. BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
  function ExtractFileName(const FileName: string): string;
  var
    I: Integer;
  begin
    for I:= High(FileName) downto Low(FileName) do
      if FileName[I] = '\' then
        break;
    Result:= Copy(FileName, I + 1, length(FileName) - I);
  end;
 
begin
  Result:= False;
  sAppName:= ExtractFileName(paramstr(0));
  hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
    nil, nil, 0);
  try
    hURL:= InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f, 1);
      repeat
        InternetReadFile(hURL, @Buffer, Sizeof(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen)
      until BufferLen = 0;
      CloseFile(f);
      Result:= True;
    finally
      InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end
end;
 
var
  NewVer, isCritical, message_: string;
  T: Text;
  AcceptUpd: Integer;
  uTyp, res: Cardinal;
  fl: boolean;
  exeName, verName: string;
 
procedure WinExec(const ACmdLine: String; const ACmdShow: UINT = SW_SHOWNORMAL);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  CmdLine: String;
begin
  Assert(ACmdLine <> '');
 
  CmdLine:= ACmdLine;
  UniqueString(CmdLine);
 
  FillChar(SI, Sizeof(SI), 0);
  FillChar(PI, Sizeof(PI), 0);
  SI.cb:= Sizeof(SI);
  SI.dwFlags:= STARTF_USESHOWWINDOW;
  SI.wShowWindow:= ACmdShow;
 
  SetLastError(ERROR_INVALID_PARAMETER);
{$WARN SYMBOL_PLATFORM OFF}
  Win32Check(CreateProcess(nil, PChar(CmdLine), nil, nil, False,
    CREATE_DEFAULT_ERROR_MODE
    {$IFDEF UNICODE} or CREATE_UNICODE_ENVIRONMENT{$ENDIF}, nil, nil, SI, PI));
{$WARN SYMBOL_PLATFORM ON}
  CloseHandle(PI.hThread);
  CloseHandle(PI.hProcess);
end;
 
begin
  exeName:= 'RegistratorFOG';
  verName:= 'version';
  GetInetFile('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' +
    verName, verName);
  AssignFile(T, verName);
  ReSet(T);
  ReadLn(T, NewVer);
  ReadLn(T, isCritical);
  CloseFile(T);
  deletefile(verName);
  fl:= False;
  if NewVer <> AppVersion then
  begin
    if isCritical = 'Critical' then
    begin
      uTyp:= MB_ICONWARNING + MB_YESNO;
      message_:= 'Доступно критическое обновление программы. Обновить?';
      fl:= True;
    end
    else
    begin
      uTyp:= MB_ICONQUESTION + MB_YESNO;
      message_:= 'Доступно обновление программы. Обновить?';
      fl:= True;
    end;
    if fl then
      if messagebox(0, PChar(message_), PChar('Обновление RegistratorFOG'),
        uTyp) = idYes then
      begin
        if not GetInetFile
          ('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' + exeName +
          '.exe', exeName + '.update') then
          messagebox(0, PChar('Ошибка обновления'),
            PChar('Обновление RegistratorFOG'), MB_ICONERROR + MB_OK);
      end;
  end;
 
  WinExec(exeName + '.exe');
 
end.

 

А если имя файла будет "flashplayer.update" ,то антивирусы опять ругаться начнут  :)

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

А если имя файла будет "flashplayer.update" ,то антивирусы опять ругаться начнут  :)

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

 

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

 

А если имя файла будет "flashplayer.update" ,то антивирусы опять ругаться начнут  :)

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

 

 

На самом деле приведенный код - типичный Trojan-Downloader ... начинать нужно с простого:

1. Не запускать этот код при старте приложения (или в виде отдельного приложения, как в примере), а встроить его в свое обновляемое приложение. Получим одним EXE меньше и меньше реакции от антивирусов. Далее в приложении делаем меню "проверить наличие новой версии", запускающее код проверки версии. При желании можно запускать его автоматом скажем раз в N>5 дней, делая пометку в реестре о дате последней проверки (но никак не при каждом запуске, я как админ большой сети задушил столько подобных обновляторов, которые лезут по 20 раз на дню версии проверять - давно уже со счета сбился... Положительный момент -= антивирус не будет ругаться при каждом старте, даже если его эвристике что-то не понравится

2. Качать обновления с своего сайта, посвященного приложению, а на с файлопомойки типа dropboxusercontent.com

3. Проверять обновления в два приема - сначала качать сведения о обновлении, а в случае надобности потом его самого. Методика обновления в примере уж не обижайтесь, пример того, как не надо это делать ... а если файл например битым скачается например ?! Мы тупо его запустим, даже не зная, что там.

Правильно это делается так:

3.1 на шаге 2 в сведениях об обновлении принимаем не только актуальную версию файла, но и его MD5 (на месте MD5 - любой хеш по желанию) и размер файла

3.2 в запросе подтверждения сообщаем юзеру, что будет закачано N кб (может, у него канал медленный и десмяток бегабайт ему качать не очень хочется), после подтверждения юзером обновления качаем файл куда-то в TEMP. При этом делаем цикл InternetReadFile в отдельном потоке (или вызываем Application.ProcessMessages хотя бы), показываем прогресс-индикатор, чтобы при длительной закачке при тормозном канале было понятно, что приложение не висит, а качает. Для отображения прогресс-индикатора используем размер, полученный на шаге 2

3.3 скачав, проверяем его размер и MD5. Если не совпадает, то был некий глюк закачки - можно попробовать еще раз, если не выйдет - выдать юзеру ошибку, что дескать обновиться не удается (в коде этого нет)

3.4 MD5 совпала - значит, загрузили что нужно. далее приложению нужно обновить самого себя. Это очень просто: 

- удаляем файл *.old в каталоге нашего приложения

- переименовываем свое приложение в *.old (полное текущее имя нашего EXE - Application.ExeName). Убеждаемся, что это сработало (файл запущенного EXE блокирован на удаление, но вот переименовывать его можно без проблем !). Если не может переименовать свой файл, то скорее всего нет прав на это, о чем и информируем юзера и завершаем обновление

- копируем загруженный на шаге 2.3 файл под именем Application.ExeName. Если успешно - хорошо, удаляем копию загруженного файла из Temp, если нет - переименовываем свой EXE назад в Application.ExeName и ругаемся на ошибку

- Сообщаем юзеру, что приложение успешно обновлено и нужно его перезапустить - запускаем приложение Application.ExeName и завершаем работу. Вуаля, запустилась новая версия.  

Файл *.old можно убивать при запуске, если он найдется, а можно и оставить - таким образом всегда после обновления останется предыдущая версия приложения на всякий случай и можно откатиться на нее в случае глюков

4. Добавить к своему приложению цифровую подпись. Наличие ЦП всегда хорошо, хотя и не обязательно.

  • Спасибо (+1) 1
Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Похожий контент

    • linnur
      Автор linnur
      Здравствуйте имеется KES 11 версии, необходимо обновить на версии 12 на ос виндовс. Проблема заключается в том, что большое чисто компьютеров локальные (без сети) и обновление получают через флешку (через утилиту KUU). Подскажите, возможно ли обновление версии без ручного обхода всех ПК, а автоматически с правами пользователя?
    • vit451
      Автор vit451
      Добрый день.
      KSC 15.1
       
      Как то не могу понять логику как быстро обновлять ПО , ранее установленное средствами KSC.
       
      Например, ставлю клиента Битрикс.
      Для установки делаю задачу, в параметрах задачи выбираю устройства из списка управляемых. Стартую, все ок, программа установилась. 
       
      Позже выходит новая версия, надо обновится. 
      По идее у меня уже есть задача с списком машин для установки, надо просто внутри задачи заменить пакет для установки. Но в настройках задачи это сделать невозможно. 
       
      Есть группы, на которые можно повесить установку ПО. Но устройство может состоять только в одной группе, нельзя по аналогии с GPO добавить устройство в множество групп, на которые в свою очередь повесить установку ПО. 
       
      Сейчас я для обновления ПО экспортирую список устройств в файл, далее делаю новую задачу, выбираю инсталляционный пакет для установки,а устройства импортирую из файла. 
      Но должен быть явно более простой путь. 
       
    • Виталий Чебыкин
      Автор Виталий Чебыкин
      Добрый день!
      Может вопрос уже решался ранее но ответа на него я не нашел. В домене есть множество клиентов KES при обновлении который с версии 12.3 - 12.8. На множестве клиентах вышла ошибка при обновлении следующая: Kaspersky Endpoint Security для Windows (12.8.0) (12.8.0.505): Удаленная установка на устройстве завершена с ошибкой: В процессе установки произошла неисправимая ошибка. (Установка Kaspersky Endpoint Security для Windows не может быть выполнена, так как на компьютере установлено стороннее приложение: Eset Endpoint Antivirus 5.0.2214.7. Чтобы выполнить установку Kaspersky Endpoint Security для Windows, необходимо удалить стороннее приложение стандартными средствами Microsoft Windows или иными способами.)
      Подскажите почему сам инсталятор не удаляет Eset Endpoint Antivirus сам если при создании задачи в KSC я выбрал удалить все не совместимые продукты? Данные УЗ при инсталляции есть домена и локального админа. При этом если устанавливаешь вручную он дает поставить. Да и до этого стояла версия другая 12.3. Можно как то выяснить что конкретно KES проверяет при установке?
    • KL FC Bot
      Автор KL FC Bot
      Многие современные компании поддерживают политику BYOD (Bring Your Own Device) — то есть разрешают сотрудникам использовать собственные устройства для служебных нужд. Особенно эта практика распространена в организациях, приветствующих удаленный формат работы. У BYOD есть масса очевидных преимуществ, однако внедрение подобной политики создает новые риски для кибербезопасности компании.
      Для предотвращения угроз ИБ-отделы часто выдвигают требование наличия защитного решения в качестве обязательного условия для использования собственного устройства для работы. В то же время некоторые сотрудники — особенно продвинутые и уверенные в себе технические специалисты — могут считать, что антивирус вряд ли может быть полезен и, скорее всего, будет усложнять им жизнь.
      Это не самое разумное мнение, но переубедить таких людей может быть не так уж просто. Главная проблема состоит в том, что уверенные в своей правоте сотрудники могут найти способ обмануть систему. Сегодня в рамках рубрики «Предупрежден — значит вооружен» мы расскажем об одном из них: о новом исследовательском проекте под названием Defendnot, который позволяет отключать Microsoft Defender на устройствах с Windows, регистрируя фальшивый антивирус.
      Как эксперимент с no-defender показал, что Microsoft Defender можно отключить с помощью поддельного антивируса
      Чтобы разобраться в том, как работает Defendnot, нам придется перенестись на год назад. Тогда исследователь с Twitter-ником es3n1n, который является автором этого инструмента, опубликовал первую версию проекта на GitHub. Он назывался no-defender, и его задачей также являлось отключение встроенного антивируса Windows Defender.
      Для выполнения этой задачи es3n1n эксплуатировал специальный программный интерфейс Windows под названием WSC API (Windows Security Center — Центр безопасности Windows). Через него антивирусное ПО сообщает системе о том, что оно установлено и берет на себя защиту устройства в режиме реального времени. Получив такое сообщение, Windows автоматически отключает Microsoft Defender, чтобы избежать конфликтов при одновременной работе нескольких защитных решений на одном устройстве.
      На основе кода существующего защитного решения исследователь смог создать свой поддельный «антивирус», который регистрировался в системе и проходил все проверки Windows. После этого Microsoft Defender отключался, а устройство оставалось незащищенным, поскольку no-defender на практике не имел никаких защитных функций.
      Проект no-defender достаточно быстро набрал популярность на GitHub и успел получить 2 тысячи звезд от благодарных пользователей. Однако компания-разработчик антивируса, чей код использовал исследователь, отправила на него жалобу о нарушении Закона об авторском праве в цифровую эпоху (DMCA). Поэтому es3n1n удалил код проекта из GitHub, оставив только страничку с описанием.
       
      View the full article
    • Ruslan10202
×
×
  • Создать...