Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Собственно идея-то совсем другая 07.02.03 15:24 Число просмотров: 1735
Автор: amirul <Serge> Статус: The Elderman
|
> VCG.Belka тоже такими вещами занимается в меру > возможностей. ЛовИмо. Кроме эквивалентных преобразований нод я предусматривал еще и вставку новых нод (которые затем тоже участвуют в мутации) и перемещение готовых веток и оптимизацию (тоже стохастическую): несколько нод объединяются в одну или несколько других и тоже затем участвует в мутации. Кроме того, так как фактически происходит компиляция, и функциональность мутируемого алгоритма известна, то компилятор (полиморфный движок) может принимать решения о дисперсии данных (раскидать, допустим, int или массив на несколько битовых наборов и пустить их в разные ветки для обработки), причем переход в каждую конкретную ветку может быть условным: на одном этапе генерируется нода-ветвление с одной веткой - unreacheable (примерно такой какая выкидывается большинством современных компиляторов), после нескольких итераций мутаций данные для этой ноды тоже могут прийти из нескольких других ветвей. Возможно и дальнейшее развитие идеи.
Восстановление первоначальной функциональной сигнатуры по получившемуся коду будет значительно сложнее, чем восстановление первоначального C-шного кода по исполняемому, скомпилированному с -O2 хотя бы.
> если известен алгоритм, по которому строятся такие ветви, > то по нему же их можно и обнаружить. Алгоритм стохастический и одни и те же ноды могут быть получены мутацией различных начальных. Если при этом учесть внесенный "мусор" и опять таки стохастическую оптимизацию - объединение нод (при этом возможно объединение "мусорных" с валидными), то восстановление - не такая уж тривиальная задача. См по поводу восстановления исходного текста по скомпилированному с оптимизацией.
> функционально это только упрощает задачу, поскольку по > расшифровщику уже можно сказать многое. Нужно еще понять что это именно расшифровщик. И что именно он делает. Кроме того на самом деле такой метод ничего не делает с функциональностью - можно делать не ксорку со случайно сгенеренным (состоящим из команд не имеющих сигнатур) генератором гаммы, а DES, например, или любой другой алгоритм имеющий прямое и обратное преобразование (tg - arctg, разложенные в ряд или еще что-нить). Расшифровщик нужет только для эффективности (чтоб ядро работало как можно быстрее) и для сокрытия кода (по дереву, включенному в инсталлятор, восстановить первоначальный алгоритм очень легко)
> > ЗЫ: А с полиморфизмом АВ-ы так и не справились по > > человечески имхо. > ...ввиду простоты языка описания баз вирусов. Ну да. Обнаружить такой алгоритм можно, но при это программа специально заточенная для этого должна быть размером с IDA. Вирусы не обладают такими возможностями. А использование такой методики в самих вирусах тоже проблематично - движок будет на порядок больше активной части вируса и распространяться на дискетах или через инет будет им ой как неудобно. Кстати именно для защиты одного AntiSpyware от самих SpyWare я и разрабатывал данную систему (но потом из за цейтнота ограничился ксоркой по гамме, которая генерится случайным набором команд - тоже не очень легко найти: около 50 опкодов с произвольными парами регистр-регистр и регистр-константа, но можно и не слишком большими усилиями)
> ерунда. неоптимизированный полиморфик (замена операций > эквивалентными из известного набора) разбирается как > регулярное или стековое выражение. кю. Кроме замены используется добавление пустышек, объединение операций тоже по заданным критериям, перестановка информационно-независимых друг от друга (информационные потоки в компиляторе тоже отслеживаются), разбиение информационных потоков на несколько и т.д.. И все это делается в несколько десятков итераций.
> нынешние сканеры обламываются из-за несовершенства языка > описания вирусов и недостаточной длины сигнатуры > (регулярного выражения). Если нынешние сканеры обламываются даже на таких примитивных (относительно) конструкциях как в современных полиморфиках (примитивные они просто из-за ограниченности допустимого размера - несколько килобайт)
> CodeRed обращался к внешней DLL, а не к коду IIS. > полиморфизм IIS ни к чему не привел бы. Собственно статья о другом применении данного подхода. В моем случае я защищался от кода, который уже находится на машине и может исследовать, что у меня там творится, а первоначальная статья защищает от сетевых атак. И было ясно указано, что все dll-ки для данного процесса должны загружаться по новым адресам, перемещается стек и куча. Переполнение буфера все так же происходит, но при этом большинство известных методик передачи исполнения только что загруженному коду будет просто валить процесс, который только что скомпрометирован. В случае удаленных атак алгоритм перемещения опять-таки известен, но неизвестны конкретные адреса по которым произошло перемещение. Если на компьютере выполняется код, который может сообщить злоумышленнику новые адреса, то ему гораздо легче открыть реверсивную телнет сессию и не заморачиваться переполнением буферов.
|
|
|