• XSS.stack #1 – первый литературный журнал от юзеров форума

Исходники UEFI-буткита BlackLotus опубликовали на GitHub

bloodmother888

RAID-массив
Пользователь
Регистрация
19.03.2022
Сообщения
50
Реакции
14
Исходный код UEFI-буткита BlackLotus, который ранее продавался в даркнете за 5000 долларов, был обнаружен аналитиками компании Binarly на GitHub. Исследователи говорят, что утекшие исходники не совсем полные и содержат в основном руткит и буткит для обхода Secure Boot.


Впервые BlackLotus был замечен в октябре 2022 года. Его продавец утверждал, что буткит имеет встроенный обход Secure Boot, встроенную защиту от удаления на уровне Ring0/Ядра, а также запускается в режиме восстановления и в безопасном режиме. Сообщалось, что малварь оснащена антивиртуализацей, антиотладкой и обфускацией, что усложняет ее обнаружение и анализ. Также, согласно заявлениям продавца, защитное ПО не может обнаружить и уничтожить буткит, так как тот запускается под учетной записью SYSTEM внутри легитимного процесса.
BlackLotus_promo-1536x604-1.jpg

Помимо этого BlackLotus способен отключать защитные механизмы на целевых машинах, включая Hypervisor-Protected Code Integrity (HVCI) и Windows Defender, а также обходить User Account Control (UAC).


BlackLotus имеет размер 80 килобайт, написан на ассемблере и C, и умеет определять геозону жертвы, чтобы избегать заражения машин в странах СНГ. В прошлом году вредонос предлагался к продаже за 5000 долларов США, а каждая новая версия оценивалась еще в 200 долларов США.


Позже угрозу удалось изучить аналитикам из компании ESET. Они подтвердили, что буткит легко обходит Secure Boot и для закрепления в системе использует уязвимость Baton Drop (CVE-2022-21894) годичной давности.


Подчеркивалось, что Microsoft устранила эту проблему еще в январе 2022 года, но злоумышленники по-прежнему могут использовать ее, так как затронутые подписанные бинарники не были добавлены в отзывной список. По словам аналитиков, BlackLotus — это первый задокументированный случай злоупотребления этой уязвимостью.


Позже эксперты Microsoft, во время анализа устройств, скомпрометированных с помощью BlackLotus, выявили ряд особенностей, которые позволяют обнаружить заражение и подробно описали возможные индикаторы компрометации.


Также им удалось обнаружить, что BlackLotus использует еще одну уязвимость, CVE-2023-24932, тоже связанную с обходом защиты Secure Boot. Хотя баг был исправлен в мае текущего года, это обновление было отключено по умолчанию, и Microsoft потребовала от пользователей Windows выполнить весьма сложную установку этого исправления вручную.
Так как в компании предупреждали, что неправильная установка исправления может привести к тому, что Windows перестанет запускаться и ее нельзя будет восстановить даже с установочного носителя, многие люди решили не устанавливать патчи, оставив устройства уязвимыми для атак.


Как теперь рассказывают специалисты Binarly, исходный код BlackLotus оказался слит на GitHub пользователем под ником Yukari. Он пишет, что исходный код был изменен и теперь не эксплуатирует уязвимость Baton Drop. Вместо этого BlackLotus использует UEFI-руткит bootlicker, который основан на руткитах CosmicStrand, MoonBounce и ESPECTRE UEFI APT.
BlackLotus.png


«Утечка исходного кода неполная и в основном содержит руткит и код буткита для обхода Secure Boot», — рассказал журналистам BleepingComputer сооснователь и глава Binarly Алекс Матросов

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


«Большинство из этих приемов и техник известны давно и не представляют существенной опасности. Однако тот факт, что их можно комбинировать с новыми эксплоитами, как это делали создатели BlackLotus, стал неожиданностью для индустрии и показал ограниченность существующих средств защиты ОС», — говорит Матросов.

Поскольку теперь исходный код буткита стал доступен для всех желающих, не исключено, что с его помощью хакеры смогут создать более мощные вредоносы, способные обойти существующие и будущие меры противодействия таким угрозам.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не хочу опять начинать холивар, но , интересное наблюдение. Слили сорцы буткита - и , о чудо, там Си (а веб часть на РНР). А где же раст? шарп? петон? и прочие убертехнологии? Где докеры, ооп, и прочие архиважные и незаменимые вещи?
Вот и разница между реальным проектом и школоподелками. Вся суть новомодных технологий - максимум закодить говностилак, и потом сраться на форумах. Не более.
 
Вся суть новомодных технологий - максимум закодить говностилак
Добавлю свои пять копеек, мне лично "старым технологиям" еще учиться и учиться - потому что пласт материала просто огромный. А изучать что то "новое", это получить кучу оберток над "старым", и так и не понять что ты делаешь. Это мое личное мнение, с тобой я согласен во всём.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
реальным проектом
Ну я бы не сказал, что в этом проекте есть хоть что-то интересное, разве что типа сорсы буткита, применение которого в реальной жизни - ну такое. Бот - тоже такой себе: функционал минимальный, все алгоритмы давно известны, как и с "говностилаками", да еще и есть моменты, где в комментах написано, что кода для реализации чего-то просто нет. В общем, не знаю, чем он реальнее других, но опять же про абстракции, был бы у человека, например, базовый RAII и деструкторы, ему бы не пришлось оборачивать код в do-while(FALSE).
 
применение которого в реальной жизни - ну такое
Хороший закреп на ПК который не хотелось бы потерять, думаю и на свою машину можно поставить что бы всегда знать - "что где когда"
: функционал минимальный, все алгоритмы давно известны, как и с "говностилаками"
Есть от чего отталкиваться новичкам
чем он реальнее других
Каких других?
ему бы не пришлось оборачивать код в do-while(FALSE)
Я не считаю do while каким то костылем, или чем то устаревшим, переубеди да
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Есть от чего отталкиваться новичкам
Такого же кода в утечках прошлых годов полно, кто тебе мешает отталкиваться от него?

Каких других?
"Говностиллаков" (с)

Я не считаю do while каким то костылем, или чем то устаревшим, переубеди да
Ну, вопрос в том, нужно ли мне всех вас в интернетах переубеждать? Кодер, написавший это поделие, использует do-while(false) для того, чтобы вывалить из блока через break в случае ошибки, при этом делает это неправильно (ну или не доделал это, как надо было). Например, ты видишь что-то плохое в этом коде:
C:
HINTERNET HttpConnect(
    LPSTR UserAgent,
    LPSTR Host,
    WORD Port,
    DWORD Flags
)
{
    HINTERNET Internet    = 0;
    HINTERNET Connect    = 0;
   
    do
    {
        Internet = API(InternetOpenW(L"NzT", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
        if (Internet == NULL)
            break;

        Connect = API(InternetConnectA(Internet, Host, 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1));
        if (Connect == NULL)
            break;
    } while (FALSE);

    return Connect;
}
Или в этом:
C:
HINTERNET HttpRequest(
    HINTERNET   Connect,
    BOOL        bPost,
    LPSTR        URI,
    LPSTR       Referrer,
    PCHAR        Data,
    DWORD       Flags
)
{
    HINTERNET Request  = 0;
    DWORD      Size     = sizeof(DWORD);
    DWORD      Status   = 0;
    BOOL      Send       = FALSE;

    static LPSTR AcceptTypes[2] = { "*/*", NULL };
    static TCHAR Header[]        = ("Content-Type: application/x-www-form-urlencoded");

    do
    {
        Request = API(HttpOpenRequestA(Connect, "POST", URI, NULL, NULL, AcceptTypes, 0, 1));
        if (Request == NULL)
            break;

        Send = API(HttpSendRequestA(Request, Header, StringLengthA(Header), Data, StringLengthA(Data)));
        if (Send == FALSE)
            break;
       
        return Request;

    } while (FALSE);

    return NULL;
}
 
А где же раст? шарп? петон? и прочие убертехнологии? Где докеры, ооп, и прочие архиважные и незаменимые вещи?
в ынтырпрайзе, а не говнобутките ;)
 
ты видишь что-то плохое в этом коде
C:
HINTERNET HttpConnect(
    LPSTR UserAgent,
    LPSTR Host,
    WORD Port,
    DWORD Flags
)
{
    HINTERNET Internet    = 0;
    HINTERNET Connect    = 0;
  
    do
    {
        Internet = API(InternetOpenW(L"NzT", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
        if (Internet == NULL)
            break;

        Connect = API(InternetConnectA(Internet, Host, 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1));
        if (Connect == NULL)
            break;
    } while (FALSE);

    return Connect;
}

Вижу что по сути do while тут вообще не нужен
 
Или в этом
C:
HINTERNET HttpRequest(
    HINTERNET   Connect,
    BOOL        bPost,
    LPSTR        URI,
    LPSTR       Referrer,
    PCHAR        Data,
    DWORD       Flags
)
{
    HINTERNET Request  = 0;
    DWORD      Size     = sizeof(DWORD);
    DWORD      Status   = 0;
    BOOL      Send       = FALSE;

    static LPSTR AcceptTypes[2] = { "*/*", NULL };
    static TCHAR Header[]        = ("Content-Type: application/x-www-form-urlencoded");

    do
    {
        Request = API(HttpOpenRequestA(Connect, "POST", URI, NULL, NULL, AcceptTypes, 0, 1));
        if (Request == NULL)
            break;

        Send = API(HttpSendRequestA(Request, Header, StringLengthA(Header), Data, StringLengthA(Data)));
        if (Send == FALSE)
            break;
      
        return Request;

    } while (FALSE);

    return NULL;
}
Тут тоже, говно какое то, do while false вообще не нужен
 
Кодер, написавший это поделие, использует do-while(false) для того, чтобы вывалить из блока через break в случае ошибки
А почему он не использовал if else это же база? Есть ли причины какие либо для этого?
 
Слили сорцы буткита - и , о чудо, там Си (а веб часть на РНР). А где же раст? шарп? петон? и прочие убертехнологии?
Ничего себе, прошивку для uefi написали на си, а не на си шарпе которому нужен CLR или питоне которому нужен интерпретатор(раст ну ладно, хотя там популярность намного меньше)
Тупые шарпопитонеры посрамлены без шанса на реабилитацию
Забудем что 99 процентов задач на шарпе делать просто удобнее и эффективнее.
(а веб часть на РНР
А там в вебчасте что-то интересное есть?Ну пхп и пхп
Где докеры, ооп, и прочие архиважные и незаменимые вещи?
Ты хейт докера взял у столярова который даже не понял что это и зачем, но решил рассказать важное мнение "ууу бля сделали чтобы зависимости в петухоне менеджить, мдаааа"
Просто к слову, что в своей жизни написал столяров кроме книг?Можно ознакомится с этими программами ?Может работал в крупном проекте каком-то, поддерживал миллионы строк кода?
Почему его мнение хоть сколько-нибудь релевантно?То что он поехавший дед с бзиком на чем-то новом уже понял

По делу, было бы прикольно увидеть обзор сорцев

Вот и разница между реальным проектом и школоподелками. Вся суть новомодных технологий - максимум закодить говностилак, и потом сраться на форумах. Не более.
"Новые технологии" используют все fortune 500 компании зарабатывающие миллиарды долларов.В том числе и технологические компании.
Наверное они просто дебилы, не знают что по столярову можно писать на си, перле и tcl.А в качестве дистрибутива использовать опенбсд, потому что даже линукс уже не ТРУЪ.
Это такой сюр, ты правда считаешь что существование одного сишного проекта в стиле "проэксплойтить известную ЦВЕ, загрузить по хттп ехешник и запустить его" опровергает ВСЕ это?
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Вижу что по сути do while тут вообще не нужен
Ну да, но не только. Он тут каждый раз создает новый хендл с помощью InternetOpenW, который успешно проёбывает (хендл должен быть закрыт после использования с помощью InternetCloseHandle). Вообще, wininet так работает, что в принципе достаточно один раз сделать InternetOpen и использовать один и тот же хендл для нескольких запросов (если параметры открытия хендла не меняются, а у него они не меняются). Поэтому вместо проебывания хендлов, он бы мог открыть хендл один раз и сохранить его в глобальной переменной, типа:
C:
static HINTERNET g_Internet = NULL;

BOOL HttpInit() {
    if(g_Internet != NULL)
    { return TRUE; }

    g_Internet = API(InternetOpenW(L"NzT", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
    if(g_Internet == NULL) { /* залогировать ошибку */ return FALSE; }

    return TRUE;
}

HINTERNET HttpConnect(
    LPSTR UserAgent,
    LPSTR Host,
    WORD Port,
    DWORD Flags
)
{
    HINTERNET result = API(InternetConnectA(g_Internet, Host, 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1));
    if(result == NULL) { /* залогировать ошибку */ return NULL; }

    return result; // Предполагается, что хендл закроет вызывающий функцию код
}

Тут тоже, говно какое то, do while false вообще не нужен
Ну да, но тут он тоже проебывает хендл, который также нужно закрывать с помощью InternetCloseHandle. Если HttpSendRequestA фейлит, то никто не закрывает хендл, открытый HttpOpenRequestA. Скорее всего, он хотел написать следующее (собственно для чего do-while(false) и нужен обычно Цэшникам, типа в случае ошибки выйти из блока раньше и подчистить за собой хендлы или память), но почему-то так не сделал:
C:
HINTERNET HttpRequest(
    HINTERNET   Connect,
    BOOL        bPost,
    LPSTR        URI,
    LPSTR       Referrer,
    PCHAR        Data,
    DWORD       Flags
)
{
    HINTERNET Request  = 0;
    DWORD      Size     = sizeof(DWORD);
    DWORD      Status   = 0;
    BOOL      Send       = FALSE;

    static LPSTR AcceptTypes[2] = { "*/*", NULL };
    static TCHAR Header[]        = ("Content-Type: application/x-www-form-urlencoded");

    do
    {
        Request = API(HttpOpenRequestA(Connect, "POST", URI, NULL, NULL, AcceptTypes, 0, 1));
        if (Request == NULL)
            break;

        Send = API(HttpSendRequestA(Request, Header, StringLengthA(Header), Data, StringLengthA(Data)));
        if (Send == FALSE)
            break;
     
        return Request;

    } while (FALSE);

    if(Request != NULL) {
        InternetCloseHandle(Request);
    }
   
    return NULL;
}

А почему он не использовал if else это же база? Есть ли причины какие либо для этого?
Это - не база, это - плохо читаемый код. Кому в целом мире охота потом копаться в большой вложенности ифов в ифах. Поэтому часто Цэшники упрощают себе жизнь с помощью do-while(false), хотя как по мне это тоже уродство: они почему-то хотят увеличивать уровень вложенности кода только из-за того, что где-то когда-то слышали, что goto - это плохо. Хотя код с goto _ERROR имхо куда понятнее читается, и на низком уровне вся эта дрочь с do-while(false) эквивалентна коду с goto.

Как бы причин, по каким это - далеко не лучший код много, вопрос в том если ты будешь "отталкиваться" от этого кода, ты поймешь, что он, например, тут проебал кучу хендлов, и сделаешь в своем коде нормально? Скорее всего нет. Но почему-то тут принято считать, что малварь на Цэ - вот это заебись, это не эти ваши Петухоны и Шарпы, тут элитой было написано и тд. Я не хочу автора этого кода унизить или еще что-то, возможно, он все это понимает, но не успел сделать нормально до слива исходников (тк в коде много недоработок, про которые даже комментарии написаны). Но хоспаде ты боже мой, если ты не умеешь или не хочешь за памятью и хендлами следить, ну сделай себе абстракцию с классом и деструктором, используй ее правильно и все будет куда проще (компилятор за тебя вставит вызов деструктора и все освободит), типа:
C++:
class HttpRequest {
    HINTERNET _internet = NULL;
    HINTERNET _connect = NULL;
    HINTERNET _request = NULL;
   
    public:
   
    // Деструктор
    ~HttpRequest() {
        if(_internet != NULL) { InternetCloseHandle(_internet); }
        if(_connect != NULL)  { InternetCloseHandle(_connect); }
        if(_request != NULL)  { InternetCloseHandle(_request); }
    }
   
    // Реализация
}
 
"Новые технологии" используют все fortune 500 компании зарабатывающие миллиарды долларов.В том числе и технологические компании.
Наверное они просто дебилы, не знают что по столярову можно писать на си, перле и tcl.А в качестве дистрибутива использовать опенбсд, потому что даже линукс уже не ТРУЪ.
Это такой сюр, ты правда считаешь что существование одного сишного проекта в стиле "проэксплойтить известную ЦВЕ, загрузить по хттп ехешник и запустить его" опровергает ВСЕ это?
Миллиарды долларов не показатель качества кода, как показывает практика такие проекты как Google Stadia,
закрываются не из за того что у них плохой код, а то что идея херня.

И другие проекты сшитые из говнокода, могут выстреливать в топы,
и зарабатывать кучи денег создателю например как Yandere Simulator, имея под капотом:

1689520659331.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А там в вебчасте что-то интересное есть?Ну пхп и пхп
Ну здесь тоже популярна тема (Haunt писал, мб кто-то еще), что пхп и жс это прошлый век, под веб надо на путоне или рельсах кодить.
А там еще, о боже, процедурный пхп ! и хтмл через print. Какого-нибудь хабражителя инсульт бы случился от такого.

Просто к слову, что в своей жизни написал столяров кроме книг?Можно ознакомится с этими программами ?
Да я не знаю, мне он интересен только как автор книг.

было бы прикольно увидеть обзор сорцев
Это к atavism , наверное, он по уефи. Ну или DildoFagins .

"Новые технологии" используют все fortune 500 компании зарабатывающие миллиарды долларов.В том числе и технологические компании.
Так а причем они к малваре? Я не спорю, мб в каком-то фейсбуке или твитторе и нужен докер и прочее. Но здесь - не нужен.

Но почему-то тут принято считать, что малварь на Цэ - вот это заебись, это не эти ваши Петухоны и Шарпы, тут элитой было написано и тд
Потому что это истина ;)
 
О, опять срач.

Ну тут как обычно. Нормальный человек покупает современный автомобиль и просто ездит.
Дед не ездит, перебирает свои жигули каждые выходные в гараже, делая кучу бесполезной обезъяньей работы, но говорит, что это лучшая машина.
Ладно хоть уже вымерли динозавры, которые говорили, что синхронизаторы в коробке - это моветон и нормальный водитель должен уметь перегазовывать на переключении.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
рельсах кодить
Рельсы уже тоже старперский отстой сейчас. В моду входят веб интерфейсы на одном языке, типа Phoenix LiveView, или Blazor. Очень удобно, пишешь на условном Петухончике или Шарпах, а на веб клиенту прилетает уже готовая библиотека, которая через WebSocket синхронизует и передает данные между клиентом и сервером. Добавь к этому готовые виджеты и вообще не паришься: я сейчас экспериментирую с H2O Wave, в Петухоне есть еще NiceGUI, или Plotly Dash и аналогичные библиотеки. В плане того, что толком не нужно трогать эти фронтэндовские хтмли, цссы и джаваскрипты с нодами и нпмами, очень приятно выходит.

динозавры
Ты только мультам RET'а не говори это, для него это триггер-слово...
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх