Útgáfufesting vegna ósjálfstæðis

Skortur á útgáfufestingu og ruglingur um ósjálfstæði

Í hugbúnaðarþróun reiðum við okkur bæði á eigin íhluti eða artifacts og íhluti frá þriðja aðila. Sveigjanleg ósjálfstæðisstjórnun er nauðsynleg fyrir nútíma hugbúnað. Pakkastjórar eins og NPM, MavenPip or NuGet eru oft notuð til að tilgreina hugbúnaðarháðleika. Þessi verkfæri voru hönnuð með þægindi og auðvelda notkun í huga, ekki öryggi.

 

Vandamálið

Vandamálið er að sveigjanleiki og auðveld notkun fyrir forritara kallar á illmennin, sem sjá hugbúnaðarháðni sem ómótstæðilegan sjarma fyrir fyrirtæki sitt. Niðurstaðan: Svikararnir fylgdu öllum mögulegum árásarleiðum sem sýndar eru hér. Heimild: „Backstabber's Knife Collection: A Review of Open Source Software Supply Chain Attacks“

Í þessari færslu munum við einbeita okkur að notkun á opnum útgáfuyfirlýsingum, í þeim skilningi að niðurhalaða útgáfan er ekki föst heldur verður hún að tilheyra ákveðnu úrvali. Við smíði er hæsta núverandi útgáfa sem er samhæf við tilgreint útgáfusvið valin og sótt/uppsett af pakkastjóranum.

Við skulum útskýra opnar yfirlýsingar í ósjálfstæðisyfirlýsingum fyrir mismunandi pakkastjóra:

      • NPM: pakki.json

    {

     

       ...

       „háð tengsl“: {
          ...
          „samþykkir“: „>=1.3.8“,
          „lodash“: „~4.16.0“
          ...
       },
       ...
    }

    Stærsta útgáfan sem fyrir er, ekki eldri en 1.3.8, fyrir accepts pakkann verður sett upp, sem og stærsta „patch“ uppfærslan fyrir lodash í 4.16.x sviðinu.

        • Maven: pom.xml

      ...

      ...

           commons-io
           commons-io
           ÚTGÁFA

      ...

      ...

      Síðasta tiltæka útgáfan fyrir commons-io (jar skrá) verður bætt við sem ósjálfstæð skrá.

          • Pípa: setup.py

        ...
        uppsetning (
            ...
            install_requires=['peppercorn', 'launchpadlib'],
            ...
        )
        ...

        Slíkar opnar útgáfukerfi hafa bæði góða og slæma hliðar. Það góða er að nýrri útgáfur venjulega innihalda virkni- og gæðabætur, villuleiðréttingar og öryggisuppfærslur, sem eru sjálfkrafa uppfærðar. Athugið að fyrir flest raunveruleg verkefni eru lagfæringar ekki færðar aftur í fyrri minni útgáfur, nema kannski fyrir stórfelldar öryggisbresti. Opnar útgáfur eru einnig góðar til notkunar í bókasöfnum til að draga úr fjölda útgáfa sem þarf að setja upp þegar öllum ósjálfstæði hefur verið leyst.

        En opnar útgáfur hafa sína galla. Þú veist ekki nákvæmlega hvaða útgáfur verða settar upp við smíði og smíðar eru ekki endurtakanlegar. Og það er líka til... dökk með opnum útgáfum. Ef ólöglegur aðili tekst að birta skaðlegan íhlut í opinberu geymslunni með hærri útgáfu sem er samhæf við opna sviðið þitt, þá mun næsta útgáfa þín innihalda skaðlega íhlutinn, jafnvel keyra skaðlegan hugbúnað í uppsetningarforskriftum sem gætu verið keyrðir sjálfkrafa. Að fela árásarfarminn er nokkuð listfeng.

        Þetta er þekkt sem Skortur á útgáfufestingu mál.

        Illgjarnir aðilar eru alltaf að reyna að setja illgjarnar útgáfur af vinsælum opnum hugbúnaðarpökkum. Þeir gætu fengið aðgang að lyklum pakkageymslna í leynilegu leka; þeir nota oft félagsverkfræði eða fela innbyggða illgjarna ósjálfstæði í sýnilega gagnlegu umhverfi. pull requestJafnvel nokkrir höfundar ákveða einn daginn að heimurinn sé ekki sanngjarn og bita viðskiptavini sína með ... mótmælavörur í sínum eigin pakkningum!

        Ímyndaðu þér nú að þú sért að vinna fyrir fyrirtæki sem notar innri íhluti auk opins hugbúnaðar.
        Ef ólöglegur aðili þekkir nafn slíkra innri íhluta getur hann/hún tekist að birta íhlut með sama nafni í almenna geymslunni. Margir pakkastjórar fá fyrst almennu íhlutina, og ef útgáfan er rétt valin og útgáfan í skilgreindu ósjálfstæði þínu er opin, þá búmm! Þetta vandamál heitir ... Ruglingur um ósjálfstæði.

        Við skulum sýna dæmi. Segjum sem svo að í NPM verkefninu okkar höfum við tengsl við einkahluta:

            • NPM: pakki.json

          {
            "nafn": "verkefnið-mitt",

           

            ...
            „háð tengsl“: {

              ...
              „mín-einka-deild“: „>=1.0.0“,

              ...

             }

             ...

          }

           

          Árásarmaðurinn gæti búið til hærri útgáfu af my-private-dep (eins og 99.0.0) og birt hana í opinberu npm geymslunni, með eigin falsa aðgangi (árásarmaðurinn þarf ekki að gera neitt við fyrirtækið mitt). Pakkastjórinn NPM mun setja upp illgjarna ósjálfstæðið, oft með hörmulegum afleiðingum.

          Lausnin

          Til að forðast þessi vandamál í hugbúnaðarsmíði okkar ættum við að fylgja ströngum reglum um hvernig á að skilgreina útgáfur af íhlutum, sem eru háðar þeirri tækni sem notuð er. Það mikilvæga er að tiltekin útgáfa af pakka, þegar hún hefur verið birt í geymslu, ætti að vera óbreytanleg (til að forðast að rofna háðar íhlutir, ekki aðeins af öryggisástæðum).

          Almenna hugmyndin er að festa sig (pinna) útgáfur, alltaf að athuga hvort fastar útgáfur íhlutanna (þar með taldar ÖLL tímabundin ósjálfstæði) séu lausar við spilliforrit, og þetta er mögulegt þökk sé læsingarskrár sem margir pakkastjórar bjóða upp á. Við skulum sjá hvernig útgáfufesting virkar fyrir mismunandi pakkastjóra. Það er viðkvæm málamiðlun á milli tíðar útgáfuuppfærslur til að laga þekktar veikleika og útgáfufesting til að forðast óákveðnar byggingar og hugsanlegar árásir á framboðskeðjuna.

              • NPM:
                Pakkastjórarnir npm eða yarn nota mismunandi læsingarskrár (npm-shrinkwrap.json / package-lock.json eða yarn.lock, talið í sömu röð) sem lista fastar útgáfur fyrir allar ósjálfstæðir þættir, bæði beinir og óbeinir. Læsingarskrárnar ættu að vera undir útgáfustýringu, annars gætu aðrir forritarar / byggingarhnútar endað með aðrar útgáfur. Forðist npm uppsetningu nema þú þurfir að uppfæra ósjálfstæðinga þættina á meðan þróun stendur yfir (t.d. til að setja upp öryggisleiðréttingar). Notaðu almennt ákvarðanlegri npm ci (Clean Install), þannig að pakkastjórinn muni nota læsingarskrána eða hætta með villu ef engin læsingarskrá er til staðar, eða hún passar ekki við package.json. Ef útgáfurnar sem eru taldar upp voru athugaðar fyrir spilliforrit, tryggir læsingarskráin að ekkert slæmt gerist á byggingartíma.

                Fyrir innri íhluti er mælt með því að búa til NPM umfang stjórnað af stofnuninni (eins og @myorg), og nota það gildissvið í tengslunum (eins og @myorg/my-private-dep), sem gætu aðeins haft einkasýnileika. Þetta blokkar ruglingur í tengslum við ósjálfstæði árásir, þar sem aðeins meðlimir stofnunarinnar með skrifaðgang geta birt pakka undir slíku umfangi.

              • Maven:
                Maven / Gradle eru ekki með læsingarskrár (en sjá þessi StackOverflow grein).

                Útgáfusvið eru ekki eins mikið notuð með Maven/Gradle og með öðrum vistkerfum. Forðastu bara útgáfusvið og NÝJUSTU eða ÚTGÁFU metaútgáfur. Einnig ætti að athuga óbeinar útgáfur. Útgáfur Maven viðbót er fínt tól til útgáfustjórnunar.

                Vinsamlegast athugið að Maven hafði alltaf hugtakið um umfang skipulags (groupId hluti af ósjálfstæðinu) og ruglingur varðandi ósjálfstæði virðist alls ekki vera vandamál fyrir það vistkerfi.

              • pip:
                Í Python eru til mismunandi verkfæri til að meðhöndla læsingarskrár:

                pípulagnir, sem býr til Pipfile.lock læsingarskrá.
                ljóð, sem býr til poetry.lock.
                pip frysta, skipun sem býr til requirements.txt sem virkar sem læsiskrá. Athugaðu hvort allar ósjálfstæðir noti fastar útgáfur með == virkjanum. Þá notar pip install -r requirements.txt föstu ósjálfstæðin.

            Minnið á að læsingarskrárnar hér að ofan ættu að vera undir útgáfustýringu og að byggingarskipunin sem valin er ætti að nota læsingarskrána.

            Venjulega pakkageymslan sem notuð er með pip (PyPI) hefur ekki nafngiftarsvið og hún er viðkvæm fyrir ruglingsárásum vegna ósjálfstæðis. Að forðast rugling um tengsl í vistkerfi Python er ekki auðvelt, og sumir höfundar mæla með því að nota innra geymslurými sem staðgengil fyrir opinberar ósjálfstæðir tengingar sem sóttar eru úr PyPI, en að taka fyrst einkaóháðu tengingarnar úr innra geymslurýminu (-index-url ætti að vísa á innra geymslurýmið, ekki PyPI, og –extra-index- url ætti að vera fjarlægt).

            Nokkrar raunverulegar árásir

            Getcookies árásAðgerðamaðurinn dustin87 bætti óbeinum tengslum við vinsæla npm mailparser pakkann við illgjarnan pakka með RCE bakdyr (gCOMMANDhDATAi):

            JSON.stringify(req.headers).replace(/g([a-f0-9]{4})h((?:[a-f0-9]{2})+)i/gi, (o, p, v) => {})

            Þrátt fyrir að vera úrelt (engir gagnrýnendur!), fékk mailparser samt sem áður um 64,000 vikulegar niðurhalanir. Þetta var næstum því óvænt árás, þar sem RCE var í raun ekki notað.cisútg.

            NPM birt þessa færslu með upplýsingum um getcookies árásina.

            Ruglingur um ósjálfstæði:

            Alex Birsan uppgötvaði árið 2021 ruglingsvandamálið varðandi ósjálfstæði og birti færslu sem bar heitið „Hvernig ég brjótist inn í Apple, Microsoft og tugi annarra fyrirtækja".

            Mundu að fyrir npm ætti að frátaka skipulagssvið eins og @myorg og breyta ætti innri pakka til að nota gildissviðið.

            Með pip hefur sameiginlega opinbera skráningarpakkinn PyPI ekki gildissvið/nafnrými. Hver einkapakki gæti haft opinberan pakka með sama nafni og innri pakkinn, en tóman, og hugsanlega myndað villu þegar hann er notaður, svo hægt sé að bera kennsl á hann ef hann er sóttur óvart.

            Hnútur-ipc:

            Þegar stríðið milli Rússa og Úkraínu hófst, sprautaði eigandi pakkans inn skaðlegum kóða til að fjarlægja handahófskenndar skrár, þegar það var sett upp á rússneskum og hvítrússneskum vefþjónum. Skráin ssl-geospec.js gerði slíka landfræðilega greiningu:

            Athyglisvert er að aðrir pakkar notuðu opnar útgáfur fyrir node-ipc tengslin, eins og vinsæla Vue.js rammann, og viðhaldsaðilar þess fengu... brýn áfrýjun til að festa node-ipc háðin á örugga útgáfu.

            Þetta færslan inniheldur frekari upplýsingar um þetta skemmdarverk, sem fer skref lengra en önnur Mótmælavörur vandamál.

             

            Lokandi athugasemdir

            Opnar útgáfur ættu að aldrei vera notað í sameinuðum hugbúnaðarverkefnum. Þær gera byggingar óendurtakanlegar og árásarmenn geta nýtt sér þær og tekist að sprauta inn spilliforritum með árásum á tengslatrén eins og áðurnefnd tengslaruglingur.

            Rangstillingar eins og opnar útgáfur, skortur á útgáfufestingu eða ótengdir innri íhlutir ætti að forðast. Fyrsta skrefið er að greina slík vandamál, jafnvel stöðva bygginguna þegar þau finnast, og hafa staðlað viðbragðsreglur.

            Sjálfvirk uppgötvun galla og rangra stillinga í ósjálfstæði, tilkynning um grunsamleg ósjálfstæði sem gætu verið viðkvæm fyrir ákveðnum árásum á framboðskeðjuna eins og ruglingur í tengslum við ósjálfstæði, allt með aðgerðarhæfum lagfæringartólum, er eitt af aðalmarkmiðum Xygeni pallur.

            Til að lesa meira
            Ohm M., Plate H., Sykosch A., Meier M.: „Safn hnífa bakstungunnar: Yfirlit yfir árásir á framboðskeðjur í opnum hugbúnaði“. DIMVA 2020. Fyrirlestrarglósur í tölvunarfræði, bindi 12223. Springer – 2020 (heimild myndarinnar um árásartréð).
            @adam-npm: „Tilkynnt um skaðlegan eining: getcookies„. npm Blogg (geymt) – 2. maí 2018.“
            Alex Birsan: „Hvernig ég brjótist inn í Apple, Microsoft og tugi annarra fyrirtækja„Miðlungs – 9. febrúar 2021.“
            Ax Sharma: „STÓRT skemmdarverk: Frægur npm-pakki eyðir skrám til að mótmæla stríðinu í Úkraínu„BleepingComputer“ – 17. mars 2022

            sca-tools-hugbúnaður-samsetningargreiningartól
            Forgangsraðaðu, lagfærðu og tryggðu hugbúnaðaráhættu þína
            Fáðu þér ókeypis aðgang.
            Ekkert kreditkort krafist.

            Tryggðu hugbúnaðarþróun og afhendingu þína

            með Xygeni vörupakkanum