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

Антивирус NOD32 работает на хакеров

Recommended Posts

Иван

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

http://safe.cnews.ru/news/line/index.shtml?2007/05/24/251713

В антивирусе NOD32 версий до 2.70.37.0 включительно обнаружены две уязвимости, заставляющие его выполнять произвольный код при определённых условиях, сообщает Heise-security.co.uk.

Как сообщили в списке рассылки Bugtraq, две ошибки переполнения буфера срабатывают при лечении, удалении или перемещении файлов в директорию с длинным именем. Вредоносный код при этом необходимо записать как часть названия директории в формате Unicode. Уязвимость, тем не менее, довольно сложно эксплуатировать, однако специалисты утверждают, что работающий эксплоит уже создан.

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

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


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

длина пути очень многими плохо обрабатываеться, др.веб тоже падает..

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
др.веб тоже падает..

Steps to reproduce для Dr.Web можно? Например, для eicar.com .

Какая версия падает? Релизная, бета? Что падает - спайдер роняет систему в BSOD при проверке или же сканер падает?

Спасибо.

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


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

на rootkits.ru было написано..

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
на rootkits.ru было написано..

Погуглил

site:rootkits.ru - 853 результата

site:rootkits.ru Dr.Web - ничего не найдено

Давно было?

Просто насколько я помню, давеча правили что-то похожее. И вроде как исправляли. Поэтому нужно бы поточнее. Если точнее нет, то даже баг не завести.

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


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

Спасибо, буду смотреть.

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


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

Создал путь длиннее MAX_PATH (260 символов).

Dr.Web не сканирует, но и не падает.

Пишет:

[scan path] E:Longlonglonglonglonglonglonglong

И всё.

Хотя настоящий путь там E:LonglonglonglonglonglonglonglongLonglonglonglonglonglonglonglong... и т.д.

А NOD после исправления уязвимости стал именно сканировать (лечить, перемещать) такие пути или же просто не падает?

Да, ещё вопрос.

Как создать 1024 вложенных папки, если общий путь не превышает 260 символов. Ограничение на 260 символов можно обмануть в Windows, т.е. сделать путь длиннее (что я и сделал). А вот 1024 вложенные папки как сделать, пока не придумал.

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


Ссылка на сообщение
Поделиться на другие сайты
EP_X0FF
Какая версия падает? Релизная, бета?

любая из существующих.

при просмотре списка дисков и директорий происходит buffer overrun

drwebre5.gif

касперски 7 тоже не блещет, он просто висит на сканировании подобного каталога.

другие не лучше - они либо пропускают либо начиная раскручивать каталог выпадают. аффтарам нод32 надо меньше курить их программа не лучше.

повторить это можно простым кодом в несколько строк.

 strcpyW(buf, '?J:fdir');  CreateDirectoryW(buf, nil);  for i := 0 to 1023 do  begin    strcatW(buf, 'fdir');    CreateDirectoryW(buf, nil);  end;

можно расширить код и запихать в директорию бинарник + стартовать его оттуда.

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


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

EP_X0FF, спасибо за подробную информацию.

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


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

EP_X0FF, проверил сегодня по Вашему методу. 4.44 не падает, но и, опять же, не проверяет.

Вот что у меня на VC++ 2005 получилось:

void CMy1024Dlg::OnBnClickedOk(){    CString buf, buf1;    buf = "?C:long";    buf1 = "C:Hello.exe";    ::CreateDirectoryW(buf,NULL);    for (int i=0; i<1030; i++)    {        buf += "long";        ::CreateDirectoryW(buf,NULL);    }    ::CopyFileW(buf1, buf, NULL);    buf += "Hello.exe";    ::ShellExecuteW(0,L"",buf,L"",L"",0);    OnOK();}

Так вот либо CopyFileW не работает, либо ShellExecuteW.

Может, Вы ошибку подскажете?

Или же запустить всё же невозможно?

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


Ссылка на сообщение
Поделиться на другие сайты
EP_X0FF
4.44 не падает, но и, опять же, не проверяет.

А если раскрыть список директорий в его интерфейсе? :) Вышеприведенный скриншот как раз получен при этом.

Сработал или нет CopyFileW легко проверить, наверняка сработал.

А вот чтобы запустить с такого пути что-либо обычное API неприменимо.

Нужно полностью повторить процесс загрузки и запуска процесса.

1. создать секцию из файла ZwOpenFile, ZwCreateSection

2. создать оболочку - процесс ZwCreateProcess, ZwQuerySection

3. создать стек и первичный поток ZwCreateThread

4. создать и инициализировать структуры процесса RtlCreateProcessParameters

5. уведомить сервер процессов о создании нового процесса

CsrClientCallServer

6. поставить маркер доступа к новому процессу RtlAdjustPrivilege ZwSetInformationThread

По всему этому есть полагающаяся инфа и даже примеры готового кода.

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
А если раскрыть список директорий в его интерфейсе? Smile Вышеприведенный скриншот как раз получен при этом.

Да, при планомерном раскрытии таких поддиректорий на определённом моменте получаем вышеопубликованный скриншот, но это менее критично, чем падение на сканировании таких папок. Хотя, конечно, тоже заслуживает внимания.

А вот чтобы запустить с такого пути что-либо обычное API неприменимо.

Нужно полностью повторить процесс загрузки и запуска процесса.

Опять же спасибо за информацию. Буду подумать :)

Добавлено спустя 33 минуты 20 секунд:

Нужно полностью повторить процесс загрузки и запуска процесса.

1. создать секцию из файла ZwOpenFile, ZwCreateSection

2. создать оболочку - процесс ZwCreateProcess, ZwQuerySection

3. создать стек и первичный поток ZwCreateThread

4. создать и инициализировать структуры процесса RtlCreateProcessParameters

5. уведомить сервер процессов о создании нового процесса

CsrClientCallServer

6. поставить маркер доступа к новому процессу RtlAdjustPrivilege ZwSetInformationThread

Кажется, тут схема дописана не до конца :) Или на 6-ом пункте программа уже запустится?

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


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

Вообще на сколько на ваш взгляд реально использование подобной уязвимости вирусописателями?

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

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
Вообще на сколько на ваш взгляд реально использование подобной уязвимости вирусописателями?

А что мешает? Схема указана. Дело за реализацией.

Да и причём тут НОД? Проблема есть у всех, и не думаю, что её так уж легко исправить.

Запустится вирусок из %WINDIR%system32system32system32... (и так 1024 раза), и никто о нём и не узнает, хотя антивирус и не упадёт.

Ы?

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
Нету возможности детекта просто длинных путей?

Есть, конечно. Dr.Web такие пути, например, игнорирует, не сканирует.

Утверждается, что КАВ 7.0 на их скане зависает, но, думаю, там это легко поправят.

Скажем,более 50 вложенных папок уже можно предлагать стирать.

Стирать - не очень правильное решение, даже если спрашивать. А вдруг там что-нибудь нужное? Всегда найдётся пользователь, который не сможет ответить на вопрос - нужно оно ему или нет.

Добавлено спустя 52 секунды:

Да ещё нужно и уметь удалить такой путь.

Проводник и всё на нём основанное, например, не может удалить такие папки.

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


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

Я цифру 50 наугад взял.А есть ли такие длинные пути вообще,кроме вирусных?То есть,как с неизвестными пакерами,кто-то пользуется дырой.Я бы стирал.Можно цифру и повысить.

Я не программист.Удалить нельзя путём,обратным созданию?Команде,которую выполнила ОС по созданию папки/папки...,должна быть и обратная.Через ответ "стереть" в АВ.

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
Удалить нельзя путём,обратным созданию?

Да, видимо, можно. Сейчас с этим играюсь. Функцию нашёл соответствующую готовую.

Именно обратным путём:

1. удалением файлов в самой "дальней" папке;

2. удалением самой "дальней" папки;

3. переход на уровень выше

4. Переход на п.1, пока не достигнем корня.

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


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

Насколько загружает анализировать в реальном времени команды в кодах,направленные на создание,скажем,>50 вложенных папок?На крайний случай только в небольших файлах.

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


Ссылка на сообщение
Поделиться на другие сайты
Valery Ledovskoy
Насколько загружает анализировать в реальном времени команды в кодах,направленные на создание,скажем,>50 вложенных папок?На крайний случай только в небольших файлах.

Не понял вопроса.

1024 поддиректории у меня создались где-то за минуту. В это время остальные программы нормально продолжали работать.

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


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

Имел ввиду,если АВ это в порядке своей деятельности при доступе к файлам делает.Возможно вообще такую команду отловить,если в файле узнана не была?

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


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

Сокращать пути до меньших MAX_PATH не так накладно по ресурсам, как оказалось.

Удаляется всё это гораздо быстрее. Если создаётся около минуты, то удаляется несколько секунд.

Можно такие пути "укорачивать" (спрашивая у пользователя) до MAX_PATH, в принципе.

Правда, для удаления я использовал "заточенный" под свой случай код:

void CRemoverDlg::OnBnClickedOk(){    int i,j;    CString path;    for(i=1032;i>=0;i--)    {        path = L"?C:long";        for(j=0;j<i;j++)        {            path += L"long";        }        ::DeleteFileW(path + L"Hello.exe");        ::RemoveDirectoryW(path);    }    OnOK();}

Сделал так, потому что забыл, на каких уровнях оставил файлы Hello.exe :)

Зато теперь можно смело экспериментировать с запуском оттуда.

Думаю, не так сложно сделать удаление всех подкаталогов определённого "длинного" каталога, не зная заранее структуры его подкаталогов, если использовать FindNextFileW и пр.

Добавлено спустя 6 минут 32 секунды:

Возможно вообще такую команду отловить,если в файле узнана не была?

Т.е. детектировать эвристиком/проактивкой создание пути, состоящего из символов, бОльших MAX_PATH?

Не знаю. Наверное, это будет сложнее, чем удалить уже созданный длинный путь при сканировании :)

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


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

Да,так как до того,как пройдут недели для очередного скана по требованию,успешно спрятанный какой-нибудь даже "знакомец" успешно запустится.Детектировать возможно на стадии создания/превышения пути.Заодно может быть и с новым инициатором.

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


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

Интересное предложение - удалять такие пути или резать их. FYI Виста может на вполне законных основаниях забабахать путь > MAX_PATH и такие вот резанья ни к чему хорошему не приведут.

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

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


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

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

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×