Print This Post Прибыльный DLL Hijacking

Воскресенье, 29. Август 2010
Раздел: $$$, Assembler, C/C++, Социальные сети, автор:

Ни для кого не секрет, что за последнее время уязвимость типа DLL Hijacking была найдена в довольно большом количестве популярных приложений (например, Winamp, uTorrent, FireFox, Opera и др.). Суть уязвимости сводится к возможности подгрузки сторонней DLL при открытии некоторых типов файлов этими приложениями.
Решил провести оценку потенциальных возможностей от данного наплыва. Так как специфика уязвимости состоит в том, что зачастую требуется, чтобы инстанс приложения не был запущен до попытки открытия файла, то наиболее актуальными показались следующие уязвимости: уязвимость в Winamp и уязвимость в Daemon tools lite.
Идея использования состоит в следующем: берутся свежие релизы с зарубежных музыкальных и игровых трекеров (например, sceneaccess, waffles, what.cd, blackcats-games), комплектуются dll'кой и перезаливаются на популярные российские трекеры (rutracker, торренты на ВКонтакте и т.д.). Подбирая актуальные новинки, можно получить приличное количество скачиваний в короткие сроки или можно выкладывать фейки альбомов/игр/фильмов.
С помощью фейков удается привлечь большее количество скачиваний в сутки, особенно если следить за раздачами и пересоздавать их в случае разоблачения, реальные раздачи обладают большей стабильностью.

Для тестирования данной идеи была написана DLL, которая обладает следующим функционалом:
1. Ищет процесс FireFox
2. Сплайсит функцию send
3. Добавляет дополнительный текст при отправке личного сообщения на ВКонтакте

Конечно, можно было бы сделать более широкий функционал, например: отправка аккаунтов от различных сервисов на гейт, инжект во все популярные браузеры, а не только в FireFox, инжект в всевозможные icq клиенты, подмена выдачи поисковиков, прописывание себя в реестр в AppInit_DLLs, скачивание и запуск чего-либо из интернета, да, в конце концов, закрепление в системе.
Но целью было исследование эффективности, а не получение прибыли с этого. DLL состоит из двух частей: одна часть на С, другая - на masm. Первая часть хранит в себе вторую и осуществляет поиск процесса и инжект в него второй части. Вторая часть осуществляет сплайсинг функции send и подмену содержимого сообщений. Да, реализация так себе, но, кому надо - тот перепишет под себя.

Код первой части:

Пример использования функции RtlCompressBuffer для сжатия файла можно посмотреть тут.
Преобразовать сжатый файл в hex можно следующим скриптом на Perl:

Код второй части:

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

Если у Вас возникают проблемы с пониманием кода, то советую обратиться к следующим статьям: раз, два, три. Необходимые инструменты для компиляции второй части можно найти тут.

Результат работы выглядит следующим образом:
1. Пользователь пишет сообщение, нажимает отправить

2. В исходящих оказывается сообщение с пользовательским текстом и добавкой из библиотеки

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

Знакомый человек протестировал данную систему, и вот что у него получилось.
1. Было создано 10 разных раздач на нескольких трекерах.
2. В качестве контента использовались новинки из области музыки, игр и фильмов (т.к. mpc тоже уязвим).
3. Одна удачная раздача набрала ~8900 скачиваний всего за несколько дней.

4. Суммарно 10 раздач были скачаны ~50000 раз

О проценте сработавших инжектов судить можно только косвенно, но по информации знакомого ему удалось заработать ~150$ за 7 дней на этом деле. Для многих это, наверное, не слишком большая сумма, однако тут многое зависит от качества реализации и оригинальности идеи.
Более качественный и функциональный код + несколько удачных раздач + правильный подход смогут дать многократное увеличение прибыли.

Исходные коды: скачать
Программа для сжатия с помощью RtlCompress из комментариев: скачать

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 73 к “Прибыльный DLL Hijacking”


  1. Arck :

    а как можно трайсить ( TRACE ) асмовский код , я к примеру хочу свою либу написать , как мне ее проверить на работоспособность , не запускать же мне ее каждый раз из инжекта , чтобы видеть ошибку и не знать что делать
    заранее спасибо
    для быстрого обмена предлагаю аськами обменяться , надоедать сильно не буду
    обещаю
    391 569 069

    [Ответить]

    Kaimi:

    Например, OllyDbg

    [Ответить]


  2. Arck :

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

    [Ответить]


  3. Arck :

    сегодня наткнулся на проблему , сообщение добавляет , а если хочешь удалить любое другое сообщение , то ФФ умирает

    [Ответить]

    Kaimi:

    Я с таким не сталкивался на XP, может косяк в коде, может от версии фф или ос зависит. Вообще можно просто detours воспользоваться и переписать на си, чтобы более менее исключить возможность косяков кода.

    [Ответить]


  4. Arck :

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

    [Ответить]

    Kaimi:

    Для этого multiupload есть или фрихосты типа народа.

    [Ответить]

    Arck:

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

    [Ответить]

    Arck:

    http://rghost.ru/3685768 - profit free ref

    [Ответить]


  5. Arck :

    блин вообще ничего не понимаю
    1) написал свой асмовский код
    2) скомпресил его
    3) перевёл в hex с помошью Perl-a
    4) заменил tempbuf тем , что получилось в 3-ем пункте
    5) запустил 1-ую часть С++ dll inject
    6) ответ положительный, либа загружена , НО Process Explorer НЕ отображает либу в рабочем пространстве FireFox-a

    Все имена совпадают , все сходиться .
    Каими , не подскажешь ?
    Зарание спс . Извени чувак что задалбливаю

    [Ответить]

    Kaimi:

    Ответ положительный от чего?

    [Ответить]

    Arck:

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

    MyFunc:
    push ebp
    mov ebp,esp

    ;__in SOCKET s, __in const char *buf, __in int len, __in int flags
    HOOK_ORIGINAL_CALL send,4

    pop ebp
    retn 4*4

    [Ответить]

    Kaimi:

    Фиг с функцией, ты же говоришь, что в списке модулей процесса её нет. Мб какие то косяки в libmain?


  6. Arck :

    уже пробовал и LibMain пустой сделать
    .if reason == DLL_PROCESS_ATTACH
    mov eax,1
    .endif
    ret

    [Ответить]

    Arck:

    а вот твою либу пробую ,все нормально

    [Ответить]


  7. Arck :

    ведь можно взять и присоединить ну ВООБЩЕ пустую либу , ведь так ?
    пускай она просто весит в памяти ничего не делает , главное , что можно , но у меня вот и не получается
    П.С. извини Каими , я полный идиот , но писать просто больше некому (((

    [Ответить]

    Kaimi:

    Можно. Тогда трассируй и смотри в чем дело

    [Ответить]


  8. Arck :

    да я понимаю , что трэйсить надо , только никак же не посмотришь .
    в OllyDBg ? там чёрт ногу сломает ((
    ладно буду пробовать
    больше доставать не буду , ... сегодня ))
    Спс чувак , мало кто откликается .

    [Ответить]

    Kaimi:

    В чем проблема то с ollydbg? Атачнись к фф, подгрузи длл, например, с помощью плагина strongod и посмотри что происходит

    [Ответить]

    Arck:

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

    [Ответить]


  9. 123 :

    А где собсно код и описание эксплойта который позволяет дллку свою подгрузить?

    [Ответить]

    Kaimi:

    В смысле? Почитай описание что собой представляет dll hijacking, дллку загрузит программа, подверженная данной уязвимости

    [Ответить]


  10. Max :

    Очень интересная тема, но к сожалению не владею С++, пишу немного на java. После долгих попыток никак не получатся скомипилировать первую библиотеку. Вижуал Студио 2010 выдает следующие ошибки при компиляции (нумерация строк совпадает с приатаченным к статье main.cpp):

    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(12): error C2059: синтаксическая ошибка: __stdcall
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(174): error C2065: fpRtlDecompressBuffer: необъявленный идентификатор
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(174): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "RtlDecompressBuffer"
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(174): error C2065: RtlDecompressBuffer: необъявленный идентификатор
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(174): error C2065: fpRtlDecompressBuffer: необъявленный идентификатор
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(174): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "GetProcAddress"
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(179): error C2065: NTSTATUS: необъявленный идентификатор
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(179): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "status"
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(179): error C2065: status: необъявленный идентификатор
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(180): error C3861: RtlDecompressBuffer: идентификатор не найден
    c:\documents and settings\admin\мои документы\visual studio 2010\projects\kaimi\kaimi\dllmain.cpp(191): error C2065: status: необъявленный идентификатор

    [Ответить]

    Kaimi:

    Я в DevCpp компилировал

    [Ответить]

    Max:

    Скомпилировать удалось, но появилась другая проблема. Твоя сишная библиотека работает нормально, но вот если заменить внедренную в нее асмовскую библиотеку то rtlCompressBuffer возвращает ошибку. При чем я пытаюсь вставить твою же mem.asm
    Конкретнее:
    1. Компилирую mem.asm в mem.dll
    2. Сжимаю mem.dll (пробовал сжимать и прогой Arcka и этим кодом http://www.rohitab.com/discuss/index.php?showtopic=35293)
    3. Полученный бинарный файл конвертирую в hex твоим перл-скриптом
    4. Полученный hex вставляю вместо tempbuf
    5. rtlCompressBuffer возвращает "0xC0000242
    STATUS_BAD_COMPRESSION_BUFFER"
    Если вернуть исходный hex то все ок. В чем может быть проблема? Может какие-то специфические параметры сжатия?

    [Ответить]

    Kaimi:

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


  11. GrAY :

    Подскажите пожалуйста первую часть кода нужно собирать в .exe

    [Ответить]

    GrAY:

    или в dll :??

    [Ответить]

    Kaimi:

    В dll

    [Ответить]


  12. GrAY :

    теперь не компилируется asm в Dll

    [Ответить]


  13. GrAY :

    файл mem ложу в туже папку с батниками cmd

    [Ответить]


  14. GrAY :

    Если оставляю как есть то вот такая вот ошибка
    http://i002.radikal.ru/1107/a2/8e9dbdec606a.jpg

    [Ответить]

    Kaimi:

    У меня без проблем компилируется, а так видимо какие-то косяки с путями у тебя.

    [Ответить]


  15. zloid :

    Я фанат твоего блога.

    [Ответить]


  16. Yalm :

    У меня такая же проблемма как вы говорите с путями видемо как её исправить подскажите пожалуйста

    [Ответить]

  17. [...] Microsoft Security Advisory (2269637) Insecure Library Loading Could Allow Remote Code Execution (спасибі ComodoHacker ) [...]


Оставьте ваш комментарий