Антивирус McAfee парализовал десятки тысяч компьютеров...

Тема в разделе "WASM.HEAP", создана пользователем dermatolog, 22 апр 2010.

  1. reversecode

    reversecode Guest

    Публикаций:
    0
    dermatolog
    если ПК за которым работаю только я, то уверен
    если за него садился еще кто-то, то уже нет

    r90
    отнюдь
    лиш констатация факта

    Booster
    даже не думал

    r90
    наверное смысл топика посмотреть как реагирует человек который там работает

    если бы на форуме присутсвовал другой представитель авера
    и к нему бы тоже были подобные топики применены
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Данилов смотрит на русток как на сигнатуру:
    Код (Text):
    1. 1C AE 00 00
    2. 00 40 9F C5
    3. D2 9A 80 B0
    4. 41 DE 22 01
    5. 00 E8 53 01
    6. 00 00 07 11
    7. 32 4A E9
    &
    Код (Text):
    1. DW "ZM"
    2. DB 58 DUP (0)
    3. DD 80H  ; e_lfanew
    4. DB 64 DUP (0)
    5. DD "EP"
    6. DW 14CH ; Machine
    7. DW 01H  ; NumberOfSections
    8. DD 0ECH ; TimeDataStamp
    9. DB 8 DUP (0)
    10. DW 0E0H ; SizeOfOptionalHeader
    11. DW 0EH  ; Characteristics
    12. DB 243 dup (90H)
    13. DB 000H, 000H, 002H, 000H, 000H
    14. DB 880 DUP (90H)
    15. DB 03EH, 013H, 075H, 031H, 0A2H, 088H, 0B0H
    16. DB 1193 DUP (90H)
    17. DB 0EAH, 0EAH, 061H, 043H, 043H, 0A8H, 009H, 0C5H, 0F2H, 0FDH, 002H, 09CH, 004H, 0C8H, 089H, 0D8H
    18. DB 0F2H, 016H, 013H, 0F7H, 0DEH, 00AH, 06CH, 0B7H, 04EH, 032H, 000H, 0CEH, 04BH, 0F5H, 02CH, 0D1H
    19. DB 06CH, 04AH, 025H, 048H, 036H, 0EAH, 02FH, 09AH, 0B2H, 075H, 06AH, 09BH, 0ECH, 0E6H, 09DH, 02DH
    20. DB 090H, 082H, 01DH, 0A1H, 03EH, 0F7H, 0BFH, 001H, 088H, 0A1H, 054H, 0A1H, 06DH, 00BH, 0E9H, 0B5H
    21. DB 1104 DUP (90H)
    http://www.virustotal.com/analisis/...94a02cec5ccc97803cdfefe543220099b0-1272306352
    Как на это смотрит макафи ?
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Clerk
    > Как на это смотрит макафи ?
    ну, судя по вашей ссылке -- никак не смотрит. в вирус-тотале пусто как в брюхе у церковной крысы.

    если же говорить за McAfee NTR (TM) -- то там действует тормозной, но довольно могучий двиг у которого в арсенале есть control flow map и рудиментный транслятор x86 инструкций в абстрактный код, избавляющийся от незначимых команд, имен регистров и прочей хрени.

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

    прошу не забывать, что NTR ловит рустока по любой (ну почти любой) его части размером порядка 1 кб, потому как работает на проводе и хавает отдельные сетевые пакеты. всего файла в его распряжении нет.
     
  4. dfrsa

    dfrsa New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2010
    Сообщения:
    88
    А как с мутацией локальных переменных?(смещение в стеке; замусоривание значения с последующей чисткой) это осилит?
     
  5. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    dfrsa
    > А как с мутацией локальных переменных?
    > (смещение в стеке; замусоривание значения с последующей чисткой) это осилит?
    понимаете, регистров общего назначения всего семь и потому у меня идет очччень быстрый дизасм и разбор депетностей потому как заюзана двойная индексация по регистровому полю и по положению в дереве депетностей. если такое применить к ячейкам памяти, то... ничего не получится. в планах поддержка плавучих и мультимедийных регистров.

    так же очень ограничено поддерживается эмуляция самомодификации. типа если заpushить константу на стек (или mov r32, imm32/push r32) то это я его осилю, ну или xor [r32], key. остальное - в планах, которым сбыться скорее всего не суждено, т.к. kiss принцип рулит. опять-таки, у нас проверка идет в реал-тайме. и потому даже дизассемблер выглядит совсем не так как в том же хью, ольге или еще где. он вообще по другому написан. вместо пошагово разбора инструкций идет мультипаттерн матчинг. грубо говоря -- выборка по словарю. то есть мы не берем первый попавшийся байт и не делаем switch/case, а наоборот, извлекаем самые популяный паттер из словаря и ищем его во входном потоке. если находим, то делаем предположение, что мы нашли границы комманд (а предположение может быть и ложным, т.к. мы могли угодить и на середину). потом выбирем следующий паттерн из словаря и ищем все его вхождения. и так до тех пор, пока не наберется достаточно распознанных команд по которым можно почекать сигнатуру. ну тут даже сигнатура чекается уже на стадии поиска: какие паттерны есть (и скока их), и каких нет. отрицательный результат это тоже результат. так что финальный шаг - валидация. оно кстати и параллелиться изумительно. щас гонял на 8ми ядрах. к концу месяца будет экспериментальный кластер который дизасмит код на куче машин по сетке. типа одна машина получила один пакет, друга другой, они нашли паттерны, обменялись инфорй и сделали вывод о том вирь это или нет.

    и такой подход замечательно работает когда на вход поступает кусок чего-то, типа сетевой пакет, в котром обрывок инструкции и дальше. я уже до того оборзел, что base64 не декодирую, а матчу по заранее подготовленному словарю. то есть дизассмеблирую _прямо_ в base64. очччень ускоряет разбор. с zlib сложнее, тут уже такой финт ушами не получится сделать, но можно начать распаковывать окно и там уже видно - совсем не то или быть может... ну типа встретилось то, чего в данном вире отсутствует. вопрос: ну и фига нам распаковывать дальше? выигрыш в скорости коллосальный.


    у меня основной упор сделан на распознавание новых атак (и потому сигнатуры лишь довесок). вот могу попиарить наших конкурентов (хотя они нам и не конкуренты): http://www.joedoc.org/index.php -- а мы такое делаем в жестком реал-тайме.


    ЗЫ. кстати, все эти алгосы поиска давно описаны на сайтах того же мита и даже на вики можно найти примеры реализации на си. так что это как бы и не секрет. в принципе, у продвинутых аверов движки так и устроены. в той или иной степени.
     
  6. dfrsa

    dfrsa New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2010
    Сообщения:
    88
    Как тогда с такими инструкциями: db 0E8h, 0FFh, 0FFh, 0FFh, 0FFh, 0C0h ; call$+4 inc eax
    Чувствую что ваш алгоритм дизасма обломается на них, при соблюдении некоторых условий в коде программы.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    kaspersky
    Это его дроппера сигна была, разумеется она только для веба, просто пример привёл раз заговорили про рутсока.
    Не понятно ничего из этого. Это как не последовательно, последующие инструкции зависят от текущей, каким вы образом к примеру определите значение регистра после исполнения какойлибо инструкции ?
    Или там детект по трекам, типо сохранили в стеке какоето значение, потом поксорили.. тогда это таже эмуляция потока инструкций.
    dfrsa
    Ситуация когда новая инструкция является частью иной иснструкции может вызвать проблемы только у дизассемблеров, так как на данном коде построение графа будет прервано. Эмуляция выполянется последовательно, подобно трассировке, это никакие проблемы не вызовет.
     
  8. dfrsa

    dfrsa New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2010
    Сообщения:
    88
    Да, в том-то и дело, что это специально подобранная последовательность для их дизассемблера использующего "мультипаттерн матчинг", эмулятор не учитывается.
     
  9. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > Не понятно ничего из этого. Это как не последовательно,
    > последующие инструкции зависят от текущей,
    _разбор_ инструкций не зависит. допустим у нас есть команды A B C D E, очень может быть, что распознаются они в таком порядке E, (C B), A, где (C B) - паттерн для двух комманд (test r32, r32/jx), а D вообще не распозналась, что не "сломало" разбор E и последующих за ней команд.

    > каким вы образом к примеру определите значение регистра
    > после исполнения какойлибо инструкции ?
    если это xor ecx, ecx то сразу и определяем. если это inc ecx - то это уже депентность. и нужно искать где ecx иницилизируется при условии, что он дальше вообще используется

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

    > Или там детект по трекам, типо сохранили в стеке какоето значение,
    > потом поксорили.. тогда это таже эмуляция потока инструкций.
    "крей выполняет бесконечный цикл за..." (с) эмулиция как-бы есть, но проход только один. со всеми вытекающими отсюда ограничениями.

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

    > Эмуляция выполянется последовательно, подобно трассировке, это никакие проблемы не
    а если команда неизвестна?
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    kaspersky
    Код (Text):
    1.     [Не известная инструкция или блок кода.]
    2.     jmp eax
    Как это будет обработано ?
     
  11. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Clerk
    > # [Не известная инструкция или блок кода.]
    > # jmp eax
    > Как это будет обработано ?
    jmp eax - два байта, которые часто встречаются в потоке данных, так что сами по себе они распознаны не будут, а только в составе более сложного шаблона, например, mov eax, r32/mem; jmp eax или pop eax/jmp eax.

    pop eax / неизвестная ком. или несколько инстр. / jmp eax - делается спекулятивное предположение, что неизвестная команда не меняет eax и туда и совершается прыжок. так же делается предположение, что eax таки изменяется и потому поток управления в этом месте рвется. с другой строны, если при составлении шаблона указать, что jmp eax указывает например на xor r1_32, r1_32/mov r2_32, fs:[r1_32], то нам не нужно знать eax, чтобы "соединить" два этих блока.

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

    а вообще, jmp eax в нашем случае обработать просто невозможно, т.к. у нас текущий размер буфера около килобаба. это столько кода доступно в распоряжении. а jmp eax с высокой степенью вероятности "вылетает" за этот килобаб.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    kaspersky
    Еслибы это писали не вы, тоесть не Крис, то я бы заценил как бред сумашедшего, ну либо какойто прикол или троллинг, не поймите не правильно :)
     
  13. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Clerk
    > Еслибы это писали не вы, тоесть не Крис, то я бы заценил
    > как бред сумашедшего, ну либо какойто прикол или троллинг,
    значит, я неправильно объяснил. попробую объяснить иначе. у нас есть СЛОВАРЬ шаблонов и входной ПОТОКЕ данных, о котором мы не знаем ничего. возможно это кусок mp3, а может jpg, закодированный в base64. и мы начинаем искать в этом потоке шаблоны из словаря. каждое совпадение с шаблоном определяет границы команд. ну вот возьмем такой популярный шаблон как CALL/TEST EAX, EAX/Jz. допустим, он встретился несколько раз, чем и задал границы команд.

    дальше мы берем другой шаблон. например, MOV r32, [EBP-XX] и так же ищем все вхождения. ищем, кстати, очень бысто. т.к. поток данных уже проиндексирован при первом проходе, а алфавит словаря известен заранее.

    собственно, на этой стадии мы эмуляцией ни в каком виде не занимаемся, а просто распознаем шаблоны и отмечаем каждое соотвествие. шаблоны освобождают нас от явного указания регистров и даже машинных команд. т.е. MOV EAX, [ESI]/[ADD ESI, 4] и LODSD будут омечаны как синонимы и у писателя сигнатур за это не будет болеть голова. это, кстати, и MOV EBX, [EDX] может быть. какая нам разница? "найдется все" (с)

    ес-но, при поиске по шаблонам учитывается зависимость по регистрам. это _не_ эмуляция, но она хорошо ловит регистровые переброски, то есть как бы прослеживает перемещения значения по цепочке регистров.

    на втором уровне - распознанные шаблоны первого уровня опознаются как один шаблон. именно он описывает сигнатуру вируса.

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

    скажем, если в рустоке не встречается 3x(PUSH r32 | PUSH [EBP+/-XX]) / CALL / TEST EAX, EAX / Jx, то обнаружение такой конструкции во входном потке уже укажет, что это не русток ;)

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

    кстати, для большинства корпоративных пользователей детекции такого уровня вполне достаточно, т.к. они не юзают легальных программ запротекченных vmprotом и другими ;)
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    kaspersky
    Если например каждый новый вирь, пусть простой полиморфный с простым декриптором каждый раз изменять, тоесть криптовать тело и изменять ключь, то если эмуляции нет, не получится распознать в нём виря. Эмулятор например может вызывать сигнатурный сканер при эмуляции, когда встречается безусловное ветвление(напримре неар джамп). Тогда тело будет распаковано и можно найти в нём сигнатуру(распиаренный Fly так и делает). В противном случае обнаружить ничего нельзя, ибо шаблонов нет по вашему, а просто в цикле ксорящий к примеру код нельзя признать декриптором и по нему выполнять детект, тогда простой софт будет палиться с большёй вероятностью.
     
  15. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    kaspersky
    Гдето в глубине я таки понял о чем идет речь, даже очень интересно просто на предоставленном варианте с несколькими шаблонами вся картина в целом не собирается.

    Когда идет детекция? При наличии распознаных шаблонов + местами нераспознаных которе подходят под сигнатуру?

    В кратце как я понял.
    Пришел на проверку буфер данных. Проверили на наличие шаблонов кода, если нашли то код щитается как процессорный (ну типа не мп3 не данные не ресурсы не пакованые) дальше уже проверка на сигнатуры.

    Но действительно как быть в таком случае если к нам пришел буфер ПЕ заголовка мы ниче там не нашли, а потом пришел код в 10 строк который является декриптом остальноего кода, притом код из 10 строк не шаблонный. В принципе любая доступная эвристика любого говноав которая почекает хидер на наличие флага записи в секцию кода и еще пару признаков уже пощитают файл подозрительным. А что получит на выходе приведенная выше методика?
     
  16. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Или тут все построено на шаблонах, может быть шаблон ПЕ шаблон данных и.т.д.?
     
  17. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    оффтоп попёр...
     
  18. Enterado

    Enterado New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    99
    Реальный случай из реальной жизни, произошёл 2 дня назад. На с-нуля ноуте предустановлен маккофе, причем еще не активирован, т.к. нэт я тогда еще не подключал. Ставлю демон тулз лайт, демон говорит, что всё ок, но тут же маккофи мочит экзешник демона ни о чем не спрашивая и помещая его на карантин, ессно демон в ауте, хотя дрова его стоят уже. Где у маккофи карантин я искать не захотел, напр в каспере и дрвебе этот интерфейс тривиален и понятен. Снёл маккофи нафиг, переставил дэмон, но это еще не все. Деинсталляция у маккофи некорректна и я так понял остались еще его какие то дрова, вин-7 ругается как на неопределенное устройство. При всём почтении к Крису, спрашивается нах такое тупое и непредсказуемое поведение для антивиря, тем более для предустановленного. Ноут асер 5739g.
     
  19. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Enterado
    > При всём почтении к Крису, спрашивается нах такое тупое и непредсказуемое
    > поведение для антивиря, тем более для предустановленного. Ноут асер 5739g.
    при всем моем почтении к вам - асер это редкостная гадость. у меня он чисто для отображения world clock на весь экран. сейчас юзаю делл. ну никаких претензий к предустановленному софту у меня нет. разве что не мигает идикатор сети, пока не обновишь драйвер, но это мелочи.

    а на счет антивируса - так это не ко мне, а в техподдержку.

    ЗЫ. я был не прав, когда говорил, что не имею к антивирусу от McAfee никакого отношения. оказалось, что имею. "куда дальше жить?" (с) ...задумчиво так.
     
  20. Enterado

    Enterado New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    99
    Никоим образом не ассоциирую Криса с МакАффи, интересно просто по каким таким критериям антивирь определил, причём автоматом, довольно очень распространённого Дэмон тулза как малварь. А оставлять после деисталляции дровины свои в системе, по-моему, вообще моветон для любого приложения.