የጥገኝነት-ግራ መጋባት-ስሪት-ፒኒንግ

የስሪት ፒኒንግ እጥረት እና የጥገኝነት ግራ መጋባት

በሶፍትዌር ልማት ውስጥ የምንመካው በራሳችንም ሆነ በሶስተኛ ወገን ክፍሎች ወይም ቅርሶች ላይ ነው። ተለዋዋጭ የጥገኝነት አስተዳደር ለዘመናዊ ሶፍትዌር አስፈላጊ ነው። እንደ NPM ያሉ የጥቅል አስተዳዳሪዎች፣ Maven, PIP or ኑጌት ብዙውን ጊዜ የሶፍትዌር ጥገኝነቶችን ለመለየት ያገለግላሉ። እነዚህ መሳሪያዎች የተነደፉት ለደህንነት ሳይሆን ለአጠቃቀም ምቹነት እና ለአጠቃቀም ቀላልነት ታስበው ነው።

 

ችግሩ

ችግሩ ገንቢዎች ተለዋዋጭነት እና የአጠቃቀም ቀላልነት መጥፎ ሰዎችን ብለው መጥራት ነው፣ የሶፍትዌር ጥገኝነቶችን ለንግድ ስራቸው የማይበገር ማራኪ አድርገው ይመለከቱታል። ውጤቱ፡ መጥፎ ተዋናዮች እዚህ የሚታዩትን ሁሉንም ሊሆኑ የሚችሉ የጥቃት መንገዶች ተከትለዋል። ምንጭ፡ “የባክስታበር ቢላዋ ስብስብ፡ የክፍት ምንጭ ሶፍትዌር አቅርቦት ሰንሰለት ጥቃቶች ግምገማ”

በዚህ ጽሑፍ ውስጥ የወረደው ስሪት ያልተስተካከለ ነገር ግን የተወሰነ ክልል መሆን አለበት በሚል ክፍት ስሪት መግለጫዎችን አጠቃቀም ላይ እናተኩራለን። በግንባታ ጊዜ፣ ከተጠቀሰው የስሪት ክልል ጋር የሚጣጣመው ከፍተኛው ነባር ስሪት በጥቅል አስተዳዳሪው ተመርጦ ይወርዳል/ይጫናል።

ለተለያዩ የጥቅል አስተዳዳሪዎች በጥገኝነት መግለጫዎች ውስጥ ክፍት መግለጫዎችን እናብራራ፡

      • ኤንፒኤም፡ package.json

    {

     

       ...

       "ጥገኝነቶች": {
          ...
          "ተቀባይነት አለው": ">=1.3.8",
          "lodash": "~4.16.0",
          ...
       },
       ...
    }

    ለተቀባይነት ፓኬጁ ከ1.3.8 በታች ያልሆነው ትልቁ ነባር ስሪት እንዲሁም በ4.16.x ክልል ውስጥ ለሎዳሽ ትልቁ 'የመጠገኛ' ዝማኔ ይጫናል።

        • ማቨን፡ ፖም

      ...

      ...

           ኮመንስ-አይኦ
           ኮመንስ-አይኦ
           ልቀት

      ...

      ...

      ለኮመንስ-io (jar file) የሚገኘው የመጨረሻው ልቀት እንደ ጥገኝነት ይታከላል።

          • ጫፍ ማዋቀር.ፒ

        ...
        ማዋቀር (
            ...
            install_requires=['peppercorn', 'launchpadlib'],
            ...
        )
        ...

        እንደዚህ ያሉ ክፍት የስሪት እቅዶች ጥሩም መጥፎም ጎኖች አሏቸው። ጥሩው ግን አዲሶቹ ስሪቶች መኖራቸው ነው። ብዙ ጊዜ ተግባራዊ እና የጥራት ማሻሻያዎችን፣ የሳንካ ጥገናዎችን እና የደህንነት ጥገናዎችን በራስ-ሰር የሚያሻሽሉ መሆናቸውን እባክዎ ልብ ይበሉ። እባክዎን ለአብዛኛዎቹ የእውነተኛ ዓለም ፕሮጀክቶች ጥገናዎች ወደ ቀደሙት ጥቃቅን ልቀቶች እንደማይመለሱ ልብ ይበሉ፣ ምናልባትም ለአስከፊ የደህንነት ተጋላጭነቶች ካልሆነ በስተቀር። ክፍት ስሪቶች በቤተ-መጽሐፍት ውስጥ ለመጠቀምም ጥሩ ናቸው፣ ይህም ሁሉም ጥገኝነቶች ሲፈቱ መጫን ያለባቸውን ስሪቶች ብዛት ለመቀነስ ነው።

        ነገር ግን ክፍት የስሪት ክልሎች መጥፎ ጎን አላቸው። የትኞቹ ስሪቶች በግንባታ ጊዜ እንደሚጫኑ በትክክል አታውቁም፣ እና ግንባታዎችም ሊደገሙ አይችሉም። እንዲሁም አንድም አለ። ጥቁር ከክፍት ስሪቶች ጋር ጎን ለጎን። አንድ መጥፎ ተዋናይ ከክፍት ክልልዎ ጋር ተኳሃኝ የሆነ ከፍተኛ ስሪት ያለው ተንኮል አዘል አካል በሕዝብ ማከማቻ ውስጥ ማተም ከቻለ፣ የሚቀጥለው ግንባታዎ ተንኮል አዘል አካልን ያካትታል፣ ምናልባትም በራስ-ሰር ሊፈጸሙ የሚችሉ ተንኮል አዘል ዌርን በመጫኛ ስክሪፕቶች ውስጥ እንኳን ያስፈጽማል። የጥቃቱን ክፍያ ማደብዘዝ አንድ ጥበብ ነው።

        ይህ በመባል ይታወቃል የስሪት ፒኒንግ እጥረት ርዕሰ ጉዳይ.

        መጥፎ ተዋናዮች ሁልጊዜ የታወቁ የክፍት ምንጭ ፓኬጆችን ተንኮል አዘል ስሪቶች ለማስቀመጥ ይሞክራሉ። ለፓኬጅ ማከማቻዎች ቁልፎችን በሚስጥር መፍሰስ ውስጥ ማግኘት ይችላሉ፤ ብዙውን ጊዜ ማህበራዊ ምህንድስናን ይጠቀማሉ ወይም ጠቃሚ በሚመስል መልኩ የተጠናከረ ተንኮል አዘል ጥገኝነትን ይደብቃሉ pull requestጥቂት ደራሲዎች እንኳን አንድ ቀን ዓለም ፍትሃዊ እንዳልሆነች ወስነው ደንበኞቻቸውን ነክሰዋል። ፕሮቴስታንትዌር በራሳቸው ፓኬጆች ውስጥ!

        አሁን ውስጣዊ ክፍሎችን እና ክፍት ምንጭ ክፍሎችን የሚጠቀም ድርጅት እየሠራህ እንደሆነ አስብ።
        አንድ መጥፎ ተዋናይ የእንደዚህ አይነት ውስጣዊ ክፍሎችን ስም የሚያውቅ ከሆነ፣ ተመሳሳይ ስም ያለው አካል በሕዝብ ማከማቻ ውስጥ ማተም ይችላል። ብዙ የጥቅል አስተዳዳሪዎች መጀመሪያ የሕዝብ ክፍሎችን ያገኛሉ፣ እና ስሪቱ በትክክል ከተመረጠ እና በተገለጸው ጥገኝነትዎ ውስጥ ያለው ስሪት ክፍት ከሆነ፣ ቡም! ይህ እትም ተሰይሟል። የጥገኝነት ግራ መጋባት.

        አንድ ምሳሌ እንመልከት። በ NPM ፕሮጀክታችን ውስጥ በግል አካል ላይ ጥገኛ ነን እንበል፡

            • ኤንፒኤም፡ package.json

          {
            "ስም": "የእኔ-ፕሮጀክት",

           

            ...
            "ጥገኝነቶች": {

              ...
              "የእኔ-የግል-ዴፕ": ">=1.0.0",

              ...

             }

             ...

          }

           

          አጥቂው ከፍተኛ የሆነ የ my-private-dep ስሪት (እንደ 99.0.0 ያሉ) ሊፈጥር እና በህዝብ npm ማከማቻ ውስጥ፣ የራሱ የውሸት መለያ (አጥቂው ከድርጅቴ ጋር ምንም ማድረግ አያስፈልገውም) ሊያሳትመው ይችላል። የ NPM ጥቅል አስተዳዳሪው ተንኮል አዘል ጥገኝነትን ይጭናል፣ ብዙውን ጊዜ አስከፊ ውጤቶችን ያስከትላል።

          መፍትሄው

          በሶፍትዌር ግንባታ ሂደታችን ውስጥ እነዚህን ችግሮች ለማስወገድ፣ ጥቅም ላይ በሚውለው ቴክኖሎጂ ላይ የተመሰረቱ የክፍሎች ስሪቶችን እንዴት ማወጅ እንዳለብን ጥብቅ ደንቦችን መከተል አለብን። ዋናው ነገር አንድ የተወሰነ የጥቅል ስሪት፣ አንዴ በማከማቻ ውስጥ ከታተመ በኋላ የማይለወጥ መሆን አለበት (ጥገኞችን ለደህንነት ሲባል ብቻ ሳይሆን፣ እንዳይሰበሩ ለመከላከል)።

          አጠቃላይ ሀሳቡ ማስተካከል ነው (ጭንቅላታም መያያዣ መርፌ) ስሪቶች፣ ሁልጊዜም የክፍሎቹ ቋሚ ስሪቶች (ሁሉንም የሽግግር ጥገኝነቶችን ጨምሮ) ከማልዌር የፀዱ መሆናቸውን በማረጋገጥ፣ እና ይህ የሚቻለው ለ የመቆለፊያ ፋይሎች ብዙ የጥቅል አስተዳዳሪዎች የሚያቀርቡት። የስሪት ፒንንግ ለተለያዩ የጥቅል አስተዳዳሪዎች እንዴት እንደሚሰራ እንመልከት። በመካከል ስውር የሆነ ቅናሽ አለ። ተደጋጋሚ የስሪት ዝመናዎች የታወቁ ጉድለቶችን ለማስተካከል እና የስሪት ፒንንግ ቆራጥ ያልሆኑ ግንባታዎችን እና ሊሆኑ የሚችሉ የአቅርቦት ሰንሰለት ጥቃቶችን ለማስወገድ።

              • NPM:
                የnpm ወይም የክር ጥቅል አስተዳዳሪዎች የተለያዩ የመቆለፊያ ፋይሎችን (npm-shrinkwrap.json / package-lock.json ወይም yarn.lock፣ በቅደም ተከተል) ይጠቀማሉ፤ ይህም ለሁሉም ጥገኞች፣ ቀጥተኛ እና ቀጥተኛ ያልሆኑ፣ ቋሚ ስሪቶችን ይዘረዝራል። የመቆለፊያ ፋይሎች በስሪት ቁጥጥር ስር መሆን አለባቸው፣ አለበለዚያ ሌሎች ገንቢዎች / የግንባታ ኖዶች በተለያዩ ስሪቶች ሊያልቁ ይችላሉ። በልማት ላይ እያሉ ጥገኞችን ማዘመን ካልፈለጉ በስተቀር የnpm ጭነትን ያስወግዱ (ለምሳሌ የደህንነት ጥገናዎችን ለመጫን)። በአጠቃላይ የበለጠ ትክክለኛ npm ci (Clean Install) ይጠቀሙ፣ ስለዚህ የጥቅል አስተዳዳሪው የመቆለፊያ ፋይሉን ይጠቀማል ወይም የመቆለፊያ ፋይል ከሌለ በስህተት ያበቃል፣ ወይም ከ package.json ጋር የማይዛመድ። የተዘረዘሩት ስሪቶች ለተንኮል አዘል ዌር ከተፈተሹ የመቆለፊያ ፋይሉ በግንባታ ጊዜ ምንም መጥፎ ነገር እንደማይከሰት ያረጋግጣል።

                ለውስጣዊ አካላት፣ ለመፍጠር ይመከራል የኤንፒኤም ወሰን በድርጅቱ የሚተዳደር (እንደ @myorg) እና ያንን ወሰን በጥገኝነት (እንደ @myorg/my-private-dep) ውስጥ ይጠቀሙበት፣ ይህም የግል ታይነት ብቻ ሊኖረው ይችላል። ይህ ያግዳል። የጥገኝነት ግራ መጋባት ጥቃቶችን ያስከትላል፣ ምክንያቱም የመፃፍ መብት ያለው የድርጅቱ አባል ብቻ በእንደዚህ ዓይነት ወሰን ስር ፓኬጆችን ማተም ይችላል።

              • Maven:
                ማቨን / ግራድል የመቆለፊያ ፋይሎች የላቸውም (ግን ይመልከቱ) ይህ የStackOverflow ጽሑፍ).

                የስሪት ክልሎች ልክ እንደሌሎች ሥነ-ምህዳሮች ሁሉ ከMaven/Gradle ጋር ጥቅም ላይ አይውሉም። ዝም ብለህ አስወግድ። የስሪት ክልሎች እና የቅርብ ጊዜ ወይም የተለቀቀ ሜታ-ስሪቶች። ቀጥተኛ ያልሆኑ ስሪቶችም እንዲሁ መረጋገጥ አለባቸው። የMaven ተሰኪ ስሪቶች ለስሪት ቁጥጥር ጥሩ መሳሪያ ነው።

                እባክዎን ማቨን ሁልጊዜ የድርጅት ወሰን (የጥገኝነት ቡድን አይዲ አካል) ጽንሰ-ሀሳብ እንደነበረው ልብ ይበሉ፣ እና የጥገኝነት ግራ መጋባት ለዚያ ሥነ-ምህዳር ምንም ችግር እንዳልሆነ ልብ ይበሉ።

              • PIP:
                በፓይዘን ውስጥ የመቆለፊያ ፋይሎችን ለማስተናገድ የተለያዩ መሳሪያዎች አሉ፡

                - ፒፔንቭ, ይህም የPipfile.lock መቆለፊያ ፋይል ይፈጥራል።
                - ሥነ ግጥም, ይህም poetry.lock ይፈጥራል።
                - የፓይፕ ፍሪዝ, እንደ መቆለፊያ ፋይል ሆኖ የሚያገለግል requirements.txt የሚያመነጭ ትዕዛዝ። ሁሉም ጥገኝነቶች በ == ኦፕሬተር የተስተካከሉ ስሪቶችን የሚጠቀሙ መሆናቸውን ያረጋግጡ። ከዚያም pip install -r requirements.txt ቋሚ ጥገኝነቶችን ይጠቀማል።

            ከላይ ያሉት የመቆለፊያ ፋይሎች በስሪት ቁጥጥር ስር መሆን እንዳለባቸው እና የተመረጠው የግንባታ ትዕዛዝ የመቆለፊያ ፋይሉን መጠቀም እንዳለበት ያስታውሱ።

            ከፒፒ (ፒፒአይ) ጋር ጥቅም ላይ የሚውለው የተለመደው የጥቅል ማከማቻ የስያሜ ስኮፖች የሉትም፣ እና ለጥገኝነት ግራ መጋባት ጥቃቶች የተጋለጠ ነው። በፓይዘን ሥነ-ምህዳር ውስጥ የጥገኝነት ግራ መጋባትን ማስወገድ ቀላል አይደለም፣ እና አንዳንድ ደራሲዎች ከ PyPI የተገኙ የህዝብ ጥገኝነቶችን እንደ ተኪ ሆኖ ለመስራት ውስጣዊ ማከማቻን እንዲጠቀሙ ይመክራሉ፣ ነገር ግን የግል ጥገኝነቶችን መጀመሪያ ከውስጣዊ ማከማቻው መውሰድ (-index-url ወደ ውስጣዊ ማከማቻው መጠቆም አለበት፣ PyPI ሳይሆን፣ እና -extra-index-url መወገድ አለበት)።

            አንዳንድ እውነተኛ ጥቃቶች

            የጌትኩኪስ ጥቃትተዋናዩ dustin87 በታዋቂው npm mailparser ጥቅል ውስጥ ቀጥተኛ ያልሆነ ጥገኝነት ወደ RCE backdoor (gCOMMANDhDATAi) ባለው ተንኮል አዘል ጥቅል ውስጥ አክሏል፡

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

            ምንም እንኳን ገምጋሚዎች ባይኖሩም (ምንም ገምጋሚዎች የሉም!)፣ mailparser አሁንም 64,000 የሚያህሉ ውርዶችን ይቀበላል። ይህ የጥቃት ሰለባ ነበር፣ ምክንያቱም RCE በትክክል አልሰራም ነበርcisአዘጋጅ.

            ኤንፒኤም ታትሟል ይህ ልጥፍ ስለ getcookies ጥቃት ዝርዝሮች።

            የጥገኝነት ግራ መጋባት:

            አሌክስ ቢርሳን በ2021 የጥገኝነት ግራ መጋባትን ጉዳይ አግኝቶ “…አፕልን፣ ማይክሮሶፍትን እና ሌሎች በርካታ ኩባንያዎችን እንዴት ጠለፋሁ".

            ለ npm እንደ @myorg ያሉ የድርጅቱ ወሰን ተጠብቆ መቆየት እንዳለበት እና ውስጣዊ ፓኬጆች ወሰን ለመጠቀም ማሻሻያ መደረግ እንዳለባቸው ያስታውሱ።

            በፒፕ፣ የተለመደው የህዝብ መዝገብ ቤት PyPI ስኮፖች/የስም ክፍተቶች የሉትም። እያንዳንዱ የግል ጥቅል ከውስጣዊው ጥቅል ጋር ተመሳሳይ ስም ያለው የህዝብ ጥቅል ስኩዊት ሊኖረው ይችላል፣ ነገር ግን ባዶ ነው፣ እና ምናልባትም ጥቅም ላይ ሲውል ስህተት ሊፈጥር ይችላል፣ ስለዚህ በአጋጣሚ ከተገኘ ሊታወቅ ይችላል።

            ኖድ-አይፒሲ:

            የሩሲያ-ዩክሬን ጦርነት ሲጀመር የጥቅሉ ባለቤት በሩሲያ እና በቤላሩስ አስተናጋጆች ላይ ሲጫን የዘፈቀደ ፋይሎችን ለማስወገድ ተንኮል አዘል ኮድ ያስገባ ነበር። ፋይሉ ssl-geospec.js እንዲህ አይነት ጂኦግራፊያዊ ልዩነት እያደረገ ነበር፡

            የሚገርመው ነገር፣ ሌሎች ፓኬጆች እንደ ታዋቂው የVue.js ማዕቀፍ ላሉ የኖድ-አይፒሲ ጥገኝነት ክፍት ስሪቶችን ተጠቅመዋል፣ እና አስተናጋጆቹ አንድ አግኝተዋል። አስቸኳይ ይግባኝ የኖድ-አይፒሲ ጥገኝነትን በአስተማማኝ ስሪት ላይ ለመሰካት።

            ይህ ጽሑፉ ተጨማሪ ዝርዝሮችን ይዟል በዚህ የጥፋት ተግባር ላይ፣ ይህም ከሌሎች እርምጃዎች የበለጠ እርምጃ የሚወስድ ነው ፕሮቴስታንትዌር ችግሮች.

             

            ማጠቃለያ ማጠቃለያ

            ክፍት ስሪቶች መሆን አለባቸው ፈጽሞ በተዋሃዱ የሶፍትዌር ፕሮጀክቶች ውስጥ ጥቅም ላይ ይውላሉ። ግንባታዎችን እንደገና ማባዛት የማይችሉ ያደርጉታል፣ እና አጥቂዎች እነሱን ሊበዘብዙ እና እንደተጠቀሰው የጥገኝነት ግራ መጋባት ባሉ የጥገኝነት ዛፎች ላይ በሚሰነዘሩ ጥቃቶች ተንኮል አዘል ዌር ሊወጉ ይችላሉ።

            የተሳሳቱ ውቅሮች እንደ ክፍት ስሪቶች፣ የስሪት ፒንንግ አለመኖር ወይም ያልተቀረጹ ውስጣዊ ክፍሎች መወገድ አለበት። የመጀመሪያው ነገር እንደዚህ አይነት ችግሮችን መለየት፣ ምናልባትም ግንባታው ሲገኝ እንኳን ማገድ እና ለተግባር ፕሮቶኮልን ደረጃውን የጠበቀ ማድረግ ነው።

            በጥገኝነት ላይ ያሉ ጉድለቶችን እና የተሳሳቱ ውቅሮችን በራስ-ሰር መለየት፣ እንደ የአቅርቦት ሰንሰለት ጥቃቶች ያሉ ለተወሰኑ የአቅርቦት ሰንሰለት ጥቃቶች ተጋላጭ ሊሆኑ የሚችሉ የተጠረጠሩ ጥገኝነቶችን ሪፖርት ማድረግ የጥገኝነት ግራ መጋባትሁሉም ተግባራዊ የማስተካከያ መሳሪያዎች ያሉት፣ ከዋና ዋና ግቦች አንዱ ነው። የኤክሲጂኒ መድረክ.

            የበለጠ ለማንበብ
            ኦህም ኤም.፣ ፕሌት ኤች.፣ ሲኮሽ ኤ.፣ ሜየር ኤም.፡ “የባክስታበር ቢላዋ ስብስብ፡ የክፍት ምንጭ ሶፍትዌር አቅርቦት ሰንሰለት ጥቃቶች ግምገማ”። DIMVA 2020። በኮምፒውተር ሳይንስ ውስጥ የትምህርት ማስታወሻዎች፣ ጥራዝ 12223። ስፕሪንገር – 2020 (የጥገኝነት ጥቃት ዛፍ ምስል ምንጭ።)
            @adam-npm: “የተዘገበ ተንኮል አዘል ሞጁል፡ getcookies". npm ብሎግ (በማህደር የተቀመጠ) - ግንቦት 2፣ 2018።
            አሌክስ ቢርሳን፡-አፕልን፣ ማይክሮሶፍትን እና ሌሎች በርካታ ኩባንያዎችን እንዴት ጠለፋሁ"መካከለኛ - የካቲት 9፣ 2021።
            አክስ ሻርማ፡ “ትልቅ ማጭበርበሪያ፡ ታዋቂው የ npm ጥቅል የዩክሬንን ጦርነት ለመቃወም ፋይሎችን ይሰርዛል"ብሊፒንግኮምፒውተር" - መጋቢት 17፣ 2022

            sca-tools-software-composition-analyse-tools
            የሶፍትዌር አደጋዎችዎን ቅድሚያ ይስጡ፣ ያስተካክሉ እና ይጠብቁ
            ነፃ መለያ ያግኙ።
            ምንም ዱቤ ካርድ አያስፈልግም።

            የሶፍትዌርዎን ልማት እና አቅርቦት ደህንነት ይጠብቁ

            ከ Xygeni Product Suite ጋር