У претходној епизоди, Злонамерни пакети отвореног кода: Проблем, разговарали смо о томе зашто су актери претње били толико ентузијастични око објављивања нових злонамерних компоненти или убризгавања злонамерног софтвера у најновије верзије постојећих компоненти: Инфраструктура отвореног кода омогућава било коме било где да креира ефемерни налог у регистру компоненти (као што су NPM, PyPI, Docker Hub или Visual Studio Marketplace) или платформи за колаборативни развој (као што је GitHub). Нулта цена и много могућности за искоришћавање вишка поверења које софтверски тимови традиционално имају у компоненте трећих страна.
Асиметрија између тога колико је лако нападачима да дистрибуирају малвер користећи инфраструктуру доступну за отворени код и колико је организацијама које развијају софтвер (свима?) тешко да избегну инфекцију малвером (и да испоруче малвер у софтверу који дистрибуирају за друге), довела је до тога да је прошле године скоро достигнута граница од четврт милиона злонамерних пакета.
Ово је проблем толиког обима да га ниједна организација не може решити, а заједница је у процесу ревидирања процеса отвореног кода у вези са поверењем, принципима безбедности по подразумеваним подешавањима и безбедности по дизајну, као и животним циклусом компоненти. Погледаћемо такве идеје у следећој епизоди. Заштита од злонамерних пакета отвореног кода: Шта (не) функционише.
Имајте на уму да говоримо о софтверским компонентама које најчешће одговарају софтверски пакети: компоненте за вишекратну употребу упаковане тако да се могу позивати на њих као на зависност у манифесту софтвера и инсталирати помоћу менаџера пакета или алата за изградњу. Имајте у виду да се овај случај може проширити и на јавне компоненте слике контејнера (користе га платформе за извршавање контејнера и оркестрацију попут Kubernetes-а) и проширења софтверских алата (за изградњу, аутоматизацију и имплементацију).
Овде анализирамо како се ово тактика напада заснована на злонамерним компонентама функционише, према прошлим примерима и ономе што смо видели на нашој платформи за рано упозоравање на злонамерни софтвер (MEW). Анализираћемо злонамерне компоненте у различитим димензијама:
(1) начин изабрани за дистрибуцију (коришћени регистар, у новој или постојећој компоненти и техника која се користи за заражавање објављене верзије компоненте), (2) како се злонамерни софтвер активира или покреће, (3) злонамерно понашање, тј. које штетне радње се примећују и која је мотивација нападача, (4) које су технике уобичајене за замагљивање, скривање да би остао непримећен, бочно кретање, комуникацију са хостовима команде и контроле (C2) итд.; и (5) технике за стицање довољне популарности и поверења да жртве на крају инсталирају компоненту.
Изабрани механизам дистрибуције
Посматрамо једно „позадинску буку„несофистицираних злонамерних пакета који користе типосквотинг да би фишовали неопрезне програмере са типосквотингом у називу пакета за њихову зависност. Многи популарни пакети добијају мноштво слично названих пакета са типосквотингом, са очекивањем да ће фишовати неке неопрезне програмере.
Користе ефемерни налог, објављују групу typosquat пакета, креирају још једну, па објављују још једну групу... Користећи мало аутоматизације и домишљатости могу постићи софистицираност, али су обично прилично тривијални. Интерно их називамо „анцховиес„Крађа акредитива је главни циљ, али повремено наилазимо на шпијунски софтвер који краде изворни код или осетљиве податке попут личних података (PII), снимања меморије и других сумњи.“
Изненада видимо софистицираније злонамерне компоненте, „ајкуле“. Мањина је усмерена на одређене групе или организације, обично са крипто пражњењем или веб скимерима који се активирају условно, можда пратећи приступ виђен у инцидент тока догађаја дешифровања корисног садржаја напада само када се на пакет референцира из циљног пакета.
Механизам дистрибуције је анализиран у одличном и сада класичном раду, „Колекција ножева из леђа: Преглед напада на ланац снабдевања софтвером отвореног кода„, што је обавезно штиво. Сигурно сте већ видели овај леп графикон:
Истражени су сви начини, укључујући нове и постојеће пакете; утицање на изворни код, систем за изградњу или саму пакетну компоненту; коришћење украдених акредитива или друштвеног инжењеринга; отмица напуштених налога и репозиторијума или тровање оних који се већ одржавају. Неки напади су добили имена (Типоскуаттинг, Забуна око зависности, Манифестна конфузија, Крађа репозиторијумаитд.) и већ су били разматрани на другом месту.
Шта је са изабраним регистрима?
NPM и даље предњачи по укупном броју злонамерних пакета, али смо ове године видели нагли пораст на PyPI-ју. Пајтон је популаран екосистем за науку о подацима и машинско учење. У ствари, густина злонамерног софтвера је сада већа у PyPI-ју него у NPM-у.
Како се покреће злонамерни софтвер
Злонамерни пакети се покрећу током инсталације у само 4 од 10 случајева (последњих година је то било близу 6 од 10). Остали покрећу злонамерно понашање током извршавања програма, при чему се 1 од 100 покреће током покретања тестова. Противници изгледа знају да је неконтролисано извршавање инсталационих скрипти онемогућено на многим местима.
Шта лоши момци добијају?
Навешћемо категорије злонамерног понашања, а најпопуларније ће бити прве. Имајте на уму да утицај може бити сасвим различит: a брисач је тврдоглаво деструктиван, али није чест и виђен је само у неколико случајева, повезаних са циљаним кампањама сајбер рата или бруталним хактивизмом. Следеће категорије су прилично честе:
- ИнфоСтеалер / Цредентиалс ДраинерУбедљиво најчешћи, преко 90% несофистицираних напада су једноставни крадљивци који углавном траже акредитиве попут лозинки, приступних токена, API кључева и приватних кључева (за SSH и слично). Вероватно је најједноставније написати их (заједно са брисачима?). Они набрајају познате датотеке/директоријуме и друге изворе (нпр. кључеве регистра), пакују садржај и шаљу те податке на C2 сервер. Идеја је једноставна: „Објављујем крадљивац за фишинг акредитиве, како бих касније могао да користим акредитиве за покретање усмереног напада“.
Уочено C2 умрежавање је типично јефтино и прљаво, попут Телеграм канала или алати за тунелирање слични нгроку (често у облику обрнутих проксија изложених преко VPN излазних IP адреса). Постоје стотине (!) могућности, са многим GitHub пројектима под тема о крађи лозинкиСпецијализације попут кејлогера су ретке за злонамерне пакете и слике контејнера, али су чешће у проширењима алата, где се очекује интеракција корисника.
- Програм за преузимање / испуштањеДруги по популарности, обично први код вишестепених напада. Више од једне од три злонамерне компоненте имају дропере (ако је злонамерни садржај укључен у пакет) или програме за преузимање (сајт се преузима са крајње тачке под контролом нападача). Сајт је често позната варијанта бинарног малвера и покреће се, а понекад и перзистира, за инсталирање задњих врата, шпијунског софтвера, крипто испумпавања и других случајева употребе. Преузети или распоређени сајт покреће напад друге фазе са свом снагом коју пружају постојећи бинарни фајлови малвера. Бинарни фајлови се могу дистрибуирати унутар пакета, често маскирани као слике или наводно безопасни типови датотека, како би се избегло откривање приликом повезивања са неочекиваним сајтовима.
- Крадљивци / Рудари криптовалутаФинансијски мотивисани противници су спремни да користе вашу имовину у облаку за покретање крипто-рудара (чак и детектују да ли раде у виртуелној машини у облаку). Није их брига за... низак коефицијент профита од 1 долара за сваких 53 долара наплаћених жртви за украдену клауд инфраструктуру. Жртве можда неће бити свесне овога док не добију неочекивани рачун. Срећом, то дође и прође. Цриптојацкинг кампање у злонамерним пакетима повремено се појављују, а затим нестају, фишинг за кориснике новчаника или на крају циљајући добављача новчаника, као у Напад на Леџер.
Друга понашања, попут примене закулисни за даљинско извршавање кода отварањем обрнуте шкољке је сада ређе него у прошлости. На пример, 123rf_contributor_web пакет (сада уклоњен из регистра) отвара се без икаквог замагљивања, обрнута шкољка копирана и налепљена из Читалица о обрнутој шкољци:
Поред легитимних и злонамерних компоненти, приметили смо неколико злоупотреба, укључујући:
Нежељени пакети
Постоје хиљаде малих пакета, углавном у НПМ-у, без злонамерног софтвера, али обећавају лаку зараду, „змијско уље“, линкове ка понудама Вијагре и све то. Неколико корисника објављује такав спам и заузима много пропусног опсега од регистра. Још један актер(и) вероватно из Индонезије покушао(ли) је да извуче корист тако што... злоупотреба чајаРанк намењено компензацији програмера отвореног кода, креирањем десетина хиљада међусобно повезаних NPM пакета са сродним GitHub лажним репозиторијумима. Ово је јасно кршење услова коришћења.
Преваре у вези са наградама за откривање грешака и безбедносним истраживањима
Када пакет описује себе као некога ко издаје податке у добре сврхе, као што је откривање безбедносних пропуста за програме за откривање грешака или истраживање одређених аспеката екосистема. Видели смо хиљаде пакета у овој категорији, који дохватају идентификационе, али не превише осетљиве податке, на адресу Burp Collaborator-а од PortSwigger-а (нпр. хост у домену oastify.com). Често смо приметили копије... Забуна око зависности доказ концепта од стране Алекса Бирсана, као што је aurora-webmail-pro пакет (уклоњен из регистра), који једноставно покреће овај гадан код у скрипти пре инсталације:
А такође је укључивао и „Ово је једноставан доказ концепта напада конфузије зависности„опис одрицања одговорности у пацкаге.јсонОво је јасно кршење услова коришћења услуге, чак и без злонамерне намере.
Добре вести? Још нисмо видели нападе ransomware-а који се испоручују путем злонамерних компоненти. Из непознатих разлога, сајбер криминалци изгледа преферирају традиционалније механизме за фишинг путем имејла, RDP-а и преузимање путем drive-by-а.
Додатне примећене технике
Многе технике су коришћене за истрајност, избегавање одбране, прикупљање информација, комуникацију са домаћинима команде и контроле и бекство.
Истрајност у злонамерним компонентама се добија коришћењем карактеристика перзистентности у бинарном малверу друге фазе, али понекад се понашање налази у коду пакета, при чему су најчешћи заказани задаци и промене у Windows регистру.
Обфусцатион је уобичајено, али несофистицирано. Већина пакета са типосквотирајућим грешкама (сетите се „анцховиес„?) уопште не користе обфускацију; многи користе или тривијалне (base64/hex кодирање или супституционе шифре попут rot13) или користе доступне обфускаторе кода и минификацију, што се лако може обрнути уз помоћ правих алата. Само „ајкуле“ раде праву, хардкорну обфускацију, коју је тешко реверзно инжењерисати.
Замаскирање може сакрити напад, али зашто би код у компоненти отвореног кода морао бити замаскиран? Да ли постоје докази да нешто треба сакрити од јавног погледа? Пронашли смо много примера не-злонамерних пакета који користе замаскирање да би заштитили интелектуалну својину, што је супротно појму „отворени код“. Замаскирање се може користити као доказ о злонамерном софтверу, али није коначно. Такође је тешко де-замаскирати.
избегавање од одбрамбених контрола усваја једноставне технике. Злонамерни код је често заштићен у покушај… ухвати блокови који игноришу све изузетке, тако да се абнормална активност не приказује у логовима. Верификација окружења (које ради у виртуелној машини или контејнеру) је ретка, осим у случају злонамерног софтвера који циља одређену организацију или окружење.
Маскирање бинарних датотека у сликама и PDF датотекама (врста стеганографије) била је још једна техника која се користила за избегавање откривања.
Пошто су најчешће злонамерне компоненте крадљивци информација, прикупљање података је неопходно. Тајне (лозинке, приступни токени, API кључеви, криптографски кључеви) се рутински скенирају у лог датотекама, променљивим окружења, па чак и у међуспремнику (што се види код банкарских тројанаца и крипто крадљиваца). Крађа изворног кода је такође честа, јер се инсталација пакета често врши у развојном чвору где се интерни git репозиторијуми могу клонирати. Видели смо пакете који набрајају директоријуме у потрази за git репозиторијумима. Тражење локација попут .env, private.pem, settings.py, app.js или application.properties је прилично уобичајено.
Ексфилтрација је још једна широко примењена акција. Само мањина злонамерних пакета чак покушава да сакрије одредиште екстрахованих података. Телеграм канали и тунели слични нгроковима се често користе. И постоји много домени са беле листе који се обично користе за ексфилтрацију.
Друге технике, попут ескалације привилегија или латералног кретања, биле су мање уобичајене.
Стицање популарности и поверења
Замислите технолошког преваранта са готовом злонамерном стварчицом која се пита: „Како да учиним ово срање поузданим за те неслутеће кретене?“.
То се преводи у то како направити унос за злонамерну компоненту да приказује много звездица / форкова (због популарности), плус верзије / проблеме и pull requests (за активност). Идеја је да се стекне фиктивна популарност (звезде) и издржавани чланови, и убедљив изглед у погледу релевантности и одржавања.
Регистар не проверава да ли се садржај у GitHub пројекту и садржај пакета подударајуОво је добро познати проблем у ланцу снабдевања софтвером. Јавни регистри су огромне рупе које гутају све што им се баци. Можете повезати било који репозиторијум.
Ако злонамерни пакет прави грешку у куцању популарног пакета, то је једноставно: само наведите постојећи GitHub репозиторијум у манифесту зависности који се користи за креирање пакета и његово објављивање у регистру. За нове пакете на лажном GitHub репозиторијуму, можда ће вам требати више домишљатости, можда креирање лажних... посматрање звезда/рачвање GitHub налози путем скриптовања.
А ако је садржај вашег пакета разумно сличан репозиторијуму, убаците неколико добро осмишљених измена ту и тамо… Можете убризгати свој злонамерни софтвер у нови пакет који подсећа на популарни, позивајући се на постојећи репозиторијум, и чекати на грешке у куцању. Ако се неко усуди да упореди садржај tarball-а пакета са садржајем из GitHub репозиторијума, разлике на тачкама убризгавања злонамерног софтвера би се лако могле превидети. Овај приступ смо видели много пута раније.
Механизам којим компонента може дати изјаву о пореклу, начину на који је пакет направљен, из којих извора и од кога, био би добродошао. Али то је друга прича.
Да ли је компонента X злонамерни софтвер?
Да ли постоји (свеобухватна) база података злонамерних пакета? Не. Рањивости отвореног кода имају додељен CVE ID, али само неколико злонамерних пакета (посебно они који доспевају у вести) га добија. CWE за злонамерне пакете је ЦВЕ-506 (уграђени злонамерни код).
Уобичајени алати за малвер (VirusTotal, MalwareBazaar, SOREL-20M…) не предвиђају посебне одредбе за злонамерне компоненте. То би било добродошло!
Постоје базе података и скупови података за анализу (користимо неколико њих), али се уноси ажурирају само када је злонамерни пакет познат, што је често прекасно. Ако сте заинтересовани, OpenSSF Злонамерни пакети је леп почетак.
У следећем посту ћемо разговарати о томе како да сазнамо да ли је дати пакет злонамеран. Спојлер: да, постоје начини за проверу злонамерних компоненти рано током периода изложености, пре него што регистар уклони познату злонамерну компоненту.
Даље читање
У следећој епизоди „Заштита од злонамерних пакета отвореног кода: Шта (не) функционише" Разговараћемо о томе шта треба, а шта не треба радити у вези са безбедношћу отвореног кода. Већина стручњака који су свесни безбедности имају интуицију о томе како да се носе са овом претњом, али постоје бројне заблуде.
Размотрићемо зашто су ове идеје погрешне и како такве заблуде доприносе популарности овог механизма напада и огромном ризику који организације доживљавају. Затим ћемо наставити са оним што функционише и који су напори и ресурси потребни.
Такође, објавићемо о еволуцији злонамерних пакета у смислу њихове намере, механизма убризгавања и техника напада.
Будите у току!





