1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

Автоматический подбор сигнатур

Тема в разделе "Чистка Stub", создана пользователем vasenka444, 21 апр 2015.

  1. TopicStarter Overlay
    vasenka444

    vasenka444

    Регистрация:
    19 апр 2014
    Сообщения:
    299
    Симпатии:
    202
    Доброе здрасте!

    Речь в статье пойдёт о необычных антивирусных сигнатурах для PE-файлов.

    Например, такие продукты как Avira, Emsisoft, Avast могут назвать файл вредоносным, даже если в коде нет ничего, кроме MessageBoxA и ExitProcess. На лицо ложное срабатывание!

    Логично предположить, что такой вердикт не зависит от эмулятора программного кода. Ответ кроется в структуре файла, таким образом, ложный детект выдаётся без глубокой проверки. Есть множество способов обойти эмулятор и скрыть попавшие в сигнатуру байты. Но данная ситуация более фундаментальна, детект выдаётся без анализа содержимого.

    Я говорю именно про такую ситуацию, когда содержимое pe-файла сомнений не вызывает: легальный импорт, код, данные etc. У каждого антивируса своя система проверок, импорт может входить в ту сигнатуру, о которой пойдёт речь. Из всего этого мы делаем вывод, что в описываемой ситуации бесполезно искать сигнатуру, затирая отдельные части исходного файла.

    Итак, под структурой файла я буду иметь в виду:

    • структуру секций: имена, размер\соотношение размеров, порядок;
    • энтропию секций.
    Сигнатуры - вещь крайне текучая, если не сказать однодневная. Дабы не быть голословным, я покажу несколько файлов.

    Тот самый файл, отображающий сообщение, рассмотрим на примерах.

    1) имена
    - 3 секции: .text .rdata .data.
    - При проверке - (Avira)TRCrypt.XPACK.Gen.
    - Изменим имя секции .rdata (например, на .sdata) - (Avira)
    OK.

    2) порядок
    - 3 секции .data .sdata .text.
    - При проверке - (Avira
    )TRCrypt.XPACK.Gen.
    - Переставим секции местами: .text .data .sdata - (Avira) OK.
    - Последняя исполняемая секция может намекать на заражение файла.

    3) размеры
    - 3 секции .text (Raw Size = 00000600) .sdata (Raw Size = 00000200) .data (Raw Size = 00006600).
    - При проверке - (Avira)
    TRDropper.Gen.
    - 3 секции: .text (Raw Size = 00003400) .sdata (Raw Size = 00000200) .data (Raw Size = 00006600) - (Avira) OK.
    - Нормальное соотношение размеров убирает детект.

    4) энтропия
    - 3 секции .text (entropy = 3.79) .sdata (entropy = 1.12) .data (entropy = 7.79).
    - При проверке - (emsisoft)
    Gen.Trojan.Heur.FU.
    - разбавим энтропию последней секции.
    - .text (entropy = 3.79) .sdata (entropy = 1.12) .data (entropy = 3.77) - (emsisoft)
    OK.

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

    Я пробовал разные варианты, искал универсальное решение. В итоге я пришёл к тому, что удобнее всего искать подходящую структуру файла аналитически. Подбор всех возможных вариантов (размер\энтропия) на заданном интервале, с последующей проверкой антивирусом, дал огромный отчёт из повторяющихся значений. Анализировать его вручную затруднительно, общие закономерности искались на графиках. Именно тогда я понял, на сколько важен размер секции. К сожалению, полный перебор файлов для поиска сигнатур бесперспективен. Но можно понять общие принципы, и находить подходящую структуру станет проще.

    Для иллюстрации идеи я написал fasm-based генератор. Сам по себе он ничего полезного не делает. Но в руках аналитика может стать инструментом для быстрой чистки. Всё просто: мы задаём значение энтропии, и генератор создаёт блок данных с приблизительно такой же энтропией. Данные вставляются в файл, выравнивая (через повторения) секцию до нужного размера. В итоге, получаем файл с заданными размером секций и энтропией. Код файла и структуру секций можно менять, для этого и используется компилятор fasm.

    Генератор принимает 4 параметра через командную строку, первые два параметра - размеры секций в хексе, и вторые два - их энтропия. В названии выходного файла будет фактический размер двух секций и их энтропия. Запусти "gen.exe 1000 1000 1 1" - создаёт файл с заданным размером секций и энтропией. На маленьких файлах будут отклонения из-за размера\энтропия данных стаба, также, принимай во внимание выравнивание секций. Подробности смотри в masm исходнике. Ок, я прикладываю этот файл чисто как пример, буду рад, если ты решишь развить эту тему в нечто более серьёзное.

    Поиграем с параметрами:

    >1000 1000 0 8
    code(00001200 0.4879)data(00001200 7.6350)
    (BitDefender)
    Trojan.CryptRedol.Gen.5
    ..
    code(00001200 0.4879)data(00001200 6.5290)
    (BitDefender)
    Trojan.CryptRedol.Gen.5
    ..
    code(00001200 0.4879)data(00001200 5.6044)
    (BitDefender)
    OK

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

    >29000 C00 6 6
    code(00029200 5.9925)data(00000E00 5.4932)
    (BitDefender)
    Gen:Variant.Zusy.66894

    code(00029200 3.9720)data(00000E00 3.6716)
    (BitDefender)
    Gen:Variant.Symmi.657

    уберем секцию ресурсов из stub.asm
    code(00029200 3.9721)data(00000E00 3.6740)
    (BitDefender)
    ОК

    такие дела.
     
    • Like Like x 4
    Метки:
  2. Apple96

    Apple96

    Регистрация:
    13 апр 2013
    Сообщения:
    416
    Симпатии:
    667
    Копирайты не забудь
     
    • Agree Agree x 2
  3. K_NoW

    K_NoW HackMe Please

    Регистрация:
    16 мар 2014
    Сообщения:
    464
    Симпатии:
    222
    Если ты писал это сам, я вырву себе зуб.
     

Поделиться этой страницей

Загрузка...