18.12.2012

Динамическое обнаружение шелл-кода в электронных документах

image

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

Автор: Агиевич Игорь aka shanker (http://habrahabr.ru/users/shanker/)

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

Предпосылки создания

Идея динамического обнаружения шелл-кода в электронных документах возникла после участия в расследовании нескольких компьютерных инцидентов. Их краткая история следующая. Происходила серия однотипных атак. Каждая атака производилась следующим образом: на почтовый ящик пришли письма от известных отправителей с понятной получателю темой и содержанием. Как позже выяснилось, данная информация злоумышленниками была получена в результате предыдущей атаки. Также письмо содержало вложение – .doc документ.

На рассылку обратили внимание только когда узнали от якобы отправителя, что он ничего не рассылал! К моменту реакции на инцидент были заражены рабочие станции сотрудников, работающих с документацией. Т.е. тех, через которых проходит вся чувствительная информация!

При расследовании инцидента было выяснено:

  • Связка эксплоит – троян заточена под WinXP (хотя на дворе уже 2012 год!!)
  • Эксплоит – немного модифицированный пример из metasploit’a.
  • Троян примитивен – исходные фрагменты которого даже не продаются, а доступны бесплатно в интернете! Отсутствовали крипторы, обфускаторы, что сыграло роль (скорее всего) в потери бдительности антивирусов.
  • Данная атака совершалась на организацию и ранее. Более старые эксплоиты (актуальные на тот момент), немного более простое тело трояна. И даже при таком примитивном подходе по ее итогам у атакующих появились настоящие документы организации (что показала последняя рассылка).

Результаты предварительного анализа

Сначала мы попытались разобраться, почему антивирусы не среагировали на эксплоит. Взяли вложение (которое уже детектируется) и проверили на связке антивирусов.

 Рисунок 1.

Лидеры антивирусного рынка подтвердили, что не даром едят свой хлеб. 15 из 44 поймали эксплоит. А теперь поставим себя на место злоумышленников и подготовим еще одну рассылку с этим же эксплоитом. После ряда небольших преобразований исходный документ с работоспособным эксплоитом еще раз проверим на связке АВ:

Рисунок 2.

Всего 4 из 44 детектов. Какой же вывод напрашивается? Вывод достаточно очевидный: «наличие АВ необходимое, но не достаточное условие компьютерной безопасности в организации!». Варианты решения проблемы:

1. Отключить интернет.

-Не подходит т.к. разработчикам надо читать rsdn, habr и т.д. закупщикам надо общаться с поставщиками, руководству с заказчиками и т.д.

2. Организовать курсы повышения ИБ-грамотности сотрудников.

-Дорого (сотрудников порядка 1000). Сложно (разнесены географически).

3. Навести порядок на рабочих станциях сотрудников, и запретить устанавливать стороннее ПО.

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

Динамическое обнаружения шелл-кода. Теоретическая часть.

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

Задача шелл кода - сформировать (скачать или распаковать из себя и сбросить на диск) и запустить стороннее приложение на системе пользователя. Как показал инцидент АВ-решениям достаточно сложно (и бессмысленно) своевременно угнаться за разновидностями шелл-кодов и детектировать их по сигнатуре. Сигнатуру самой уязвимость тоже можно модифицировать.

Был проведен эксперимент суть которого в следующем. Открывались документы (безвредные) различными программами (Office, Adobe Reader и т.д.) под отладчиком и было обнаружено, что в процессе открытия у них не принято качать и запускать какие-либо исполняемые файлы. А при открытии документов с эксплоитами (в качестве набора данных были взяты примеры из metasploita) процессы Winword, Acrord32 вызывают такие Api-функции как UrlDownloadToFile + WinExec. Есть и другие нехарактерные функции, но перечислять здесь их не будем.

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

Требования:

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

Отладчик использует системный IDebugClient, что, как показала практика, быстрее и гибче, чем стандартные Debug API. Код приложения планируется опубликовать в ближайшее время.

Практические испытания

Настало время перейти от теории к практике. Устроим небольшое испытание, суть которого в следующем. Откроем чистый .doc документ (т.е. без эксплоита) с включенным мониторингом Api-функции WinExec, затем документ с эксплоитом.

На рисунке 3 показан запуск сначала обычного doc-файла, а потом файла с эксплоитом.

Рисунок 3.

Видно различие: во втором случае вызывается функция WinExec. Причём вызывается 2 раза т.к. после запуска тела вируса происходит открытие WinWord с каким-то реальным документом. Это связано с тем, что при эксплуатации уязвимости приложение WinWord аварийно завершает работу, что выглядит подозрительно. Поэтому после этого вирусописатели решили заново запускать WinWord, передав ему вполне нормальный документ. Это уменьшает подозрительность происходящих на компьютере действий: ну, мелькнуло окошко ворда. Но потом же документ открылся! Как показывает практика, это действительно сильно уменьшает подозрения пользователя и осложняет своевременное реагирование на инцидент.

Ниже представлено видео, где демонстрируется процесс детекта конкретного трояна.

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

Данное решение позволяет своевременно оповещать об инциденте и имеет потенциал по развитию недопустимости исполнения шелл-кода.

Также мы реализовали комплекс exploit-hunting в котором клиентское ПО открывает из общего диска документы и проверяет их на содержание шелл-кода.

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

или введите имя

CAPTCHA
Страницы: 1  2  3  
ivan
18-12-2012 19:44:07
интересное решение.
0 |
rav
19-12-2012 18:50:40
Мдя, на дворе 2012 год, а люди придумали решение образца 2002 года. Хотя- конкурент у вас уже есть, ZeroVulnerabilityLabs ExploitShield. Только вот одно непонятно- зачем изобретать решение, которое работает в ограниченном количестве случаев, когда есть антивирусные системы контроля приложений типа "песочницы", которые работает во всех случаях с практически 100% эффективностью?
0 |
Ivan
20-12-2012 11:15:47
По вашей логике когда появился первый антивирус остальные должны были прекратить разработку типа "уже все придумали"?
0 |
люди придумали решение образца 2002 года Это Вы о чём? Спасибо за сообщение насчёт ZeroVulnerabilityLabs ExploitShield. Не знал об этом. Насчёт конкуренции - мы пока не планируем на рынок выходить. Кстати, у этого конкурента, судя по описанию, сейчас тоже закрытое тестирование проходит и сложно пока сравнивать нашу разработку с их детищем. А Вы сами эти "песочницы" антивирусов пробовали? В основном песочницы затрагивают выполнение неизвестных программ или браузер в песочнице запускается. Мне ещё не попадались пользователи которые в песочнице запускали ворд или акробат. Планируется, что наше приложение будет оповещать службу ИБ в реальном времени, что серьёзно уменьшит время реакции на инцидент. И этим будет отличаться и от антивирусов и от возможных конкурентов.
0 |
rav
20-12-2012 15:43:40
"Это Вы о чём? " Я о том, что примерно в это время были очень популярны подобного типа решения, правда, направленные на борьбу с атаками на переполнение буфера, но сильно разницы не вижу. " Кстати, у этого конкурента, судя по описанию, сейчас тоже закрытое тестирование проходит и сложно пока сравнивать нашу разработку с их детищем". Ну, идейно и по базовым функциям, практически один в один. У них, правда, побольше дополнительного функционала будет на нынешний момент. http://blog.trailofbits.com/2012/10/29/ending-the-love-affair-with-exploitshield/ "А Вы сами эти "песочницы" антивирусов пробовали?" Песочницы в антивирусах и антивирусные песочницы- это две большие разницы. Одно к другому вообще мало какого отношения имеет. Песочницы в антивирусах- нет, не пробовал, ибо сам сижу на самописной антивирусной песочнице, которая гораздо лучше поделий антивирусных компаний. "Мне ещё не попадались пользователи которые в песочнице запускали ворд или акробат" Я знаю как минимум пару тысяч таких, тех, кто пользуется моей песочницей (а ещё в ней могут работать поуерпойнт, ексель, оперофис, фоксит и всё такое прочее). Жалоб ещё не было ни одной. "Планируется, что наше приложение будет оповещать службу ИБ в реальном времени" Ровно до того момента, как злоумышленники не узнают о вашем решении защиты. После этого просто добавят для обхода хуков несколько строк кода и плакала ваша система оповещения.
0 |
Ровно до того момента, как злоумышленники не узнают о вашем решении защиты. После этого просто добавят для обхода хуков несколько строк кода и плакала ваша система оповещенияНа самом деле, этого сообщения уже более чем достаточно чтоб сделать простой и очевидный вывод. К моему глубокому сожалению, Вы просто не владеете темой разговора. Может, я ошибаюсь? Тогда будьте любезны, поведайте нам о своём опыте противостояния эксплоитам и расследовании таргетированных атак. Если речь идёт о шелл-коде, то злоумышленник сильно ограничен особенностями дыры и не может кучу кода упрятать в шелл-код. Не говоря уж о том, что чем больше код в шелл-коде - тем сложнее его создавать и делать стабильным на куче систем. Так что злоумышленнику гораздо легче найти систему где такого решения нет или пойти другим путём. Песочницы в антивирусах и антивирусные песочницы- это две большие разницы. Одно к другому вообще мало какого отношения имеет.Тогда поясните, плиз, чем они отличаются. Желательно с указанием ссылок, чтобы была ясность что это устоявшиеся термины, а не ваши придуманные трактовки. Я знаю как минимум пару тысяч таких, тех, кто пользуется моей песочницейОна доступна для пользования? Можно ссылку на неё? А то сложно говорить о чём-то эфемерном, что даже не видел.
0 |
rav
20-12-2012 23:09:37
"Тогда будьте любезны, поведайте нам о своём опыте противостояния эксплоитам и расследовании таргетированных атак" Вы сами можете найти всё в Интернете, при желании. В своё время, я писал систему защиты от атак на переполнение буфера в эпоху "до NX-бита". "тем сложнее его создавать и делать стабильным на куче систем" С одной стороны- да, так и есть. Но с другой стороны, если мы говорим о таргетированных атаках, то злоумышленники смогут с большой долей вероятности узнать о профиле защиты конкретно атакуемого компьютера и вбросить экплойт, ориентированный на пробив конкретной версии Виндоус и того ПО, на уязвимости которого оно ориентировано и того зашитного ПО, что там работает, это резко удешевляет стоимость разработки и уменьшает время на оную. Против массовых атак метод вполне себе рабочий, пока не получит сколь-нибудь массовое распространение, это повлечёт то, что злоумышленники будут использовать шеллы с встроенными мерами обхода. "Так что злоумышленнику гораздо легче найти систему где такого решения нет или пойти другим путём". На это, так или иначе, ориентировано все ПО для предотвращения атак либо их последствий. Вопрос лишь в том, что имея на руках дистрибутив вашего решения, на разработку средств обхода уйдёт не столь уж много времени и денег. Примерно сопоставимо с разработкой либо модификацией загружаемого бинарного модуля для дальнейшей атаки. Если вы сможете сделать своё средство таким, что оно на порядок поднимет стоимость обхода при неопределённом времени на исследование возможностей пробива, то тогда да, есть о чём говорить. "Она доступна для пользования? Можно ссылку на неё?" Да, разумеется. http://www.softsphere.com/rus/ "Тогда поясните, плиз, чем они отличаются" Читайте мою статью, которую я писал на Хабре ещё два года назад. Вопросы должны отпасть сами собой. http://habrahabr.ru/post/105581/
0 |
Сережа
20-12-2012 23:49:54
Люди поделились интересной реальной проблемой и тем как она была решена. Вроде бы про "инновации" и "прорыв" никто не заикался. И кстати ваш супер сайт через раз 502 Bad Gateway выдает. Видать программка то не так хорошо продается, что сайтик нормальный не потянуть даже?
0 |
Знайка
21-12-2012 16:17:58
Судя по всему, товарищ rav решил затоптать на корню ещё не ставших ему конкурентов, ибо он-то свой продукт продаёт. Как в анекдоте про чукчу, который разрубил кипящий чайник пока тот не стал поездом, который мог его задавить. Вот и огрызается на всех так или иначе похожих на конкурентов.
0 |
rav
21-12-2012 17:45:37
"Судя по всему, товарищ" Извините, но я вам совершенно точно не товарищ.
0 |
Знайка
27-12-2012 13:26:53
Вам больше нравится когда к вам обращаются "Ваше Сиятельство"?
0 |
20-12-2012 04:40:28
Лучше бы разработчики операционной системы сделали контроль вызовов приложений, а разработчики приложений предоставляли профили допустимых вызовов. Как это сделано в SELinux, AppArmor, Tomoyo ..
0 |
Вася
20-12-2012 13:38:24
а что для того чтобы выполнить код, надо обязательно вызвать urldownload и winexec???? )) ну тогода да;)
0 |
ivan
20-12-2012 23:37:54
Я не автор статьи,но фраза "Есть и другие нехарактерные функции, но перечислять здесь их не будем." как бы намекает что есть еще варианты, но сути это не меняте
0 |
Страницы: 1  2  3