А в каких случаях применяется DeleteService, когда не работает ? Дело в том, что если зловред активен, он может защищать свою службу от удаления, тогда DeleteService естественно не сработает, а BC_DeleteSvc поможет.
Да это понятно. В том-то и дело, что не работает даже при удалении "пустышки" в реестре, когда файла зловреда уже не существует. А когда зловред в наличии, эта функция и не особо нужна, т.к. используется DeleteFile + ExecuteSysClean, что автоматически влечет попытку удаления сервиса и обычно срабатывает.
I am not young enough to know everything...
Будь в курсе!Будь в курсе!
Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:
Не знал, что ExecuteSysClean удаляет службу из реестра. По опыту такого не было. Может, Олег прояснит.
Удаляет ... там алгоритм такой:
1. Сканирование CLSID - поиск ссылающихся на удаленный файл и их удаление. Причем не просто удаление CLSID, но и зачистка основных мест, где он мог прописаться, например BHO
2. Чистка автозапуска
3. Чистка расширений WinLogon (по идее может почиститься на п.п. 2, но ранее в менеджере автозапуска не было списка Winlogon расширений и они убивались отдельно). Я оставил дублирование - для надежности
4. Чистка служб и драйверов. Ведется только под NT
5. Удаление SPI/LSP (естественно с переупорядочением провайдеров)
6. Расширенная чистка системы - устранение проблем типа некорректных ключей Run и Load, пресловутых безобразий с Session Manager\SubSystems, некорректным userinit и т.п. - ведется по обновляемой базе
Особенность всех пунктов только в том, что я исповедую принцип "не навреди", поэтому если нет 100% уверенности, что ключ принадлежит удаленному зловреду, то он не чистится
Да нет никаких претенций, просто этот зоопарк прекрасно уживался, а с AVZ Guard и DrWeb(Cureit) не захотел.Просто хочется понять суть происходящего, с Вашей, специалистов помощью,чтоб впредь таких проблем избегать.
Читай библию, там всё давно написано.
Когда ты строишь Вавилонскую башню, то или ты ОЧЕНЬ грамотно согласовываешь её части, или рано или поздно она рушится.
ПРИМЕРНАЯ математика этого дела такова. Если в систем 5 резидентных программ, то мы имеем 5!, то есть 5*4*3*2*1=120 взаимодействий. При 6 программах - их уж 720. При 7 - 5040.
Так что по мере добавления руткитов система разваливается очень быстро.
Тонкий вопрос - какие именно программы нужно считать резидентными (руткитами). Тут может быть много разных критериев.
Когда ты строишь Вавилонскую башню, то или ты ОЧЕНЬ грамотно согласовываешь её части, или рано или поздно она рушится.
ПРИМЕРНАЯ математика этого дела такова. Если в систем 5 резидентных программ, то мы имеем 5!, то есть 5*4*3*2*1=120 взаимодействий. При 6 программах - их уж 720. При 7 - 5040.
Так что по мере добавления руткитов система разваливается очень быстро.
Если программы "резидентные" то они между собой не связаны(Адресное пространство то у каждой разное).
Руткиты перехватывают системные функции и таким образом влияют на результат работы функций, поэтому по мере их добавления растет вероятность сбоев + уменьшается скорость работы функции которые перехватываются.
Тонкий вопрос - какие именно программы нужно считать резидентными (руткитами). Тут может быть много разных критериев.
Резидентная программа - цитата с ВП:
"В эпоху многозадачных ОС резидентными иногда называют программы, загруженные постоянно и работающие в фоновом режиме. Но применение этого термина некорректно по отношению к многозадачным ОС."
А руткиты не просто в "фоне" работают, а к примеру модифицируют память с целью вставить свой обработчик чего-то.
Если у нас стандартно драйвера без пути на сколько я помню подгружаются отсюда C:\WINDOWS\System32\Drivers\ может быть сделать так чтоб скрипт AVZ подставлял путь? (Именно для драйверов)
Если у нас стандартно драйвера без пути на сколько я помню подгружаются отсюда C:\WINDOWS\System32\Drivers\ может быть сделать так чтоб скрипт AVZ подставлял путь? (Именно для драйверов)
именно это и сделано в AVZ - но путь подставляется при условии, что в этой папке есть такой файл. А вот если его там нет - тогда путь не подставляется.
именно это и сделано в AVZ - но путь подставляется при условии, что в этой папке есть такой файл. А вот если его там нет - тогда путь не подставляется.
Или если он есть, но не обнаружен (как в случае с Сризби).
Или если он есть, но не обнаружен (как в случае с Сризби).
А вот в этом случае точно путь приписывать нельзя - так как нет гарантии, что драйвер лечит именно там, где мы думаем ... и указав в логе полный путь мы больше запутаем хелпера. Есть идея лучше - для таких файлов сделать отдельную ссылку в логе - "карантинить все возможные варианты" - ее нажатие приведет к генерации нескольких строк скрипта
Добавлено через 46 секунд
-----
Сегодня обновление баз содержит обновление эвристика - улучшен детект новых autorun зловредов
Последний раз редактировалось Зайцев Олег; 22.07.2008 в 21:40.
Причина: Добавлено
Да, в протоколе подставлять точный путь там, где он неопределен, конечно, неправильно. А сделать ссылку для того, чтобы вставить в скрипт возможные варианты - да, хорошая идея, можно добавить такие пути, где часто встречаются зловреды: %SysDisk%\ , %WinDir%\ , %system32%\ , %system32%\drivers и временные папки пользователя и системы.
Создал в IIS 6.0 FTP каталог с обновлениями AVZ, например он виден по адресу ftp://10.z.z.z/avz/
Скрипт для обновления:
begin
if ExecuteAVUpdateEx('ftp:\\10.7.1.242\avz\', 1, '','','') then
AddToLog('Обновление AV баз (прямое соединение) успешно выполнено');
end.
При попытке обновления появляется сообщение "Script executed without errors" , т.е. скрипт правильный и выполняется.
А вот в логах долгожданного 'Обновление AV баз (прямое соединение) успешно выполнено', а только то что в прикрепленном файле.
Куда копать? Что я делаю не так?
Создал в IIS 6.0 FTP каталог с обновлениями AVZ, например он виден по адресу ftp://10.z.z.z/avz/
Такое ощущение что ftp протокол как то замешан, если вы обратили внимания то все источники обновлений + примеру из справки работают именно с HTTP а не с FTP.
Скачал версию 4.3
Вместо текста в основном окне цифры и вопросы
совет с lang=en не работает
.loc файла нет
создание его в ручную используя пример из help`а не помогает
Что не так?
В теории такую проверку можно устроить в ходе эвристической проверки системы - возможности скриптов почти неограничены, почти все, что можно описать алгоритмом можно реализовать скриптом ...
Гм, не нашёл в скриптах ассоциативной памяти. А без неё - тормоза будут. Так что написал на Delphi. Если кому нужно - используйте. Лицензия - GPL v2.
Но посмотреть на перепись на скрипты - было бы любопытно.
Гм, не нашёл в скриптах ассоциативной памяти. А без неё - тормоза будут. Так что написал на Delphi. Если кому нужно - используйте. Лицензия - GPL v2.
Но посмотреть на перепись на скрипты - было бы любопытно.
А зачем скриптам ассоциативная память ... там же подерживаются TStrings - это массивы строк переменной длинны, позволяющие при желании построить что угодно. И поддерживаются массивы с динамической длинной.
Вот пример ассоциативного массива:
Код:
var
mem1, mem2 : TStringList; // Массивы - массив ключей и массив значения, "многие к одному"
// Инициализируем массив
procedure InitArray;
begin
mem1 := TStringList.Create;
mem2 := TStringList.Create;
end;
// Деинициализируем массив и освобождаем память
procedure FreeArray;
begin
mem1.Free; mem1 := nil;
mem2.Free; mem2 := nil;
end;
// Очищаем массив
procedure ClearArray;
begin
mem1.Clear;
mem2.Clear;
end;
// Добавление элемента
procedure AddItem(Val1, Val2 : string);
var
Key1Indx, Key2Indx : integer;
begin
// Поиск индексов ключа и значения
Key1Indx := mem1.IndexOf(Val1);
Key2Indx := mem2.IndexOf(Val2);
// Если значения нет, то его нужно добавить
if Key2Indx < 0 then begin
mem2.Add(Val2);
Key2Indx := mem2.Count - 1;
end;
// Такой элемент уже есть ? если да, то правим его; если нет - добавим его
if Key1Indx >= 0 then
mem1.Objects[Key1Indx] := TObject(Key2Indx)
else
mem1.AddObject(Val1, TObject(Key2Indx));
end;
// Поиск значения по ключу
function GetItemVal(Val1 : string) : string;
var
Key1Indx : integer;
X : variant;
begin
Result := '?';
// Поиск индекса ключа
Key1Indx := mem1.IndexOf(Val1);
// Ключ не найден ? Выход
if Key1Indx < 0 then exit;
// Ключ найден - возвращаем соответствующее ему значение
X := mem1.Objects[Key1Indx];
Result := mem2[ X ];
end;
// Поиск значения по ключу и его вывод в лог
procedure GetAndPrintItemVal(Val1 : string);
begin
AddToLog(Val1 + ' = ' + GetItemVal(Val1));
end;
begin
InitArray;
// Заполнение массива
AddItem('Кошка', 'Млекопитающие');
AddItem('Собака', 'Млекопитающие');
AddItem('Попугай', 'Птицы');
AddItem('Воробей', 'Птицы');
AddItem('Ворона', 'Птицы');
AddItem('Паук', 'Насекомые');
AddItem('Муравей', 'Насекомые');
AddItem('Пчела', 'Насекомые');
// Демонстрация работы поиска
GetAndPrintItemVal('Кошка');
GetAndPrintItemVal('Воробей');
GetAndPrintItemVal('Паук');
GetAndPrintItemVal('Слон');
FreeArray;
end.
А в приведенном примере на Delphi кроме комментариев напрашивается еще создание класса, реализующего ассоциативный массив. С ним исходник сократился бы в размере и разделился бы на две части - собственно класс "ассоциативный массив" и все связанное с его поддержанием, реализованное на уровне его методов + код, отвечающий за сканирование и анализ реестра.
Скачал версию 4.3
Вместо текста в основном окне цифры и вопросы
совет с lang=en не работает
.loc файла нет
создание его в ручную используя пример из help`а не помогает
Что не так?
Вопрос решился дополнительным скачиванием полной базы - странно в основной дистрибутив языковые файлы не засунули...
Вопрос решился дополнительным скачиванием полной базы - странно в основной дистрибутив языковые файлы не засунули...
В основном дистрибутиве все требуемые для работы файлы естественно есть. Но для того, чтобы все работало, нужно просто извлечь AVZ из архива, а затем его запускать. А вот если запустить его из архива не распаковывая (архиватор в этом случае за кадром извлекает AVZ.EXE в временную папку и запускает его), или вытащить не все файлы из архива - то вот тогда мы и получим описанную ситуацию ...
А зачем скриптам ассоциативная память ... там же подерживаются TStrings
"Для знатоков штучка" (с) Жванецкий
Ну под ассоциативой памятью я именно StringList и имел ввиду. Но кто же знал, что они у тебя есть???? Ты что, почти полный Object Pascal 2.0 сделал? А чей компилятор, твой собственный? А если не секрет, то какое связывание у имён методов объектов - раннее или позднее (у меня просто свой компилятор некого подмножества паскаля)?
Сообщение от Зайцев Олег
И поддерживаются массивы с динамической длинной.
А в хелпе есть про это???
Сообщение от Зайцев Олег
А в приведенном примере на Delphi кроме комментариев напрашивается еще создание класса, реализующего ассоциативный массив. С ним исходник сократился бы в размере и разделился бы на две части - собственно класс "ассоциативный массив" и все связанное с его поддержанием, реализованное на уровне его методов + код, отвечающий за сканирование и анализ реестра.
Нет, не сократился бы. Всё, связанное с ним - это процедура ReplacePath. При написании классом - она бы разбухла раза в три. Стала бы понятней, но труднее в отладке (сложнее было бы одновременно отслеживать переменные).
Ну что же, получается, чтопеределать несложно. Если нужны коммментари - отпиши, вставлю их в код.
Интересно, а зачем редактор СКРИПТА трогает драйвер?
1:03:26 Разрешить AVZ_SE.EXE Изменение критического объекта системы F:\WINNT\system32\Drivers\ujy1njmz.sys