რვა თვის განმავლობაში სამჯერ იმუშავა ერთი და იგივე npm ჭიამაიკის სახელმძღვანელომ. სხვადასხვა თავდამსხმელები, სხვადასხვა პაკეტები, იგივე მექანიკა და გამოქვეყნებასა და აღმოჩენას შორის იგივე დროის ფანჯარა, რამაც თითოეული მათგანი შესაძლებელი გახადა. თუ თქვენ კითხულობთ, თუ რა არის სინამდვილეში npm ჭია და რატომ მეორდება ეს ნიმუში გამოსწორების ნაცვლად, ეს არის გულწრფელი პასუხი, ინციდენტები, მექანიკა და ერთადერთი ხარვეზი, რომელსაც მყარი თავდაცვითი ჩარჩოც კი ღიად ტოვებს.
რა არის npm ჭია?
npm ჭია არის მავნე კოდის ნაწილი, რომელიც გამოქვეყნებულია npm რეესტრში და ავტომატურად ვრცელდება სხვა პაკეტებზე გაშვების შემდეგ, როგორც წესი, მომწოდებლის გამოქვეყნების მონაცემების მოპარვით და მათი გამოყენებით იგივე დატვირთვის შეყვანით ყველა პაკეტში, რომელსაც მომწოდებელი აკონტროლებს. ეს არის „ჭია“ კლასიკური გაგებით: ის არ ელოდება ვინმეს განზრახ ინსტალაციას, ის თავისით ვრცელდება, პაკეტიდან პაკეტში, ანგარიშიდან ანგარიშზე, მანქანის სიჩქარით.
სწორედ თვითგავრცელება განასხვავებს npm ჭიის ინციდენტს ჩვეულებრივი მავნე პაკეტისგან. ერთი დაზიანებული პაკეტი თივის ზვინში ნემსია. npm ჭია ყველა კომპრომეტირებულ შემნახველს ახალ განაწილების წერტილად აქცევს და თივის ზვინი საკუთარი ნემსების გენერირებას იწყებს.
npm ჭიის ყველაზე დიდი შემთხვევები აქამდე
გასულ წელს npm ჭიის ნიმუშს სამი რეალურ სამყაროში ტესტირება ჩაუტარდა, რომელთაგან თითოეული წინაზე უფრო ეფექტური იყო:
- შაი-ჰულუდი (2025 წლის სექტემბერი). პირველი დოკუმენტირებული თვითგავრცელებადი npm ჭია. მან საფრთხე შეუქმნა შემნახველის ავტორიზაციის მონაცემებს, შემდეგ კი გამოიყენა ისინი შემნახველის კონტროლის ქვეშ მყოფი ყველა პაკეტის მავნე ვერსიების გამოსაქვეყნებლად, რითაც თავად დეველოპერები გადაიქცნენ ჭიის შემდეგი ეტაპის მიწოდების მექანიზმად.
- აქსიოსი (2026 წლის მარტი). პაკეტში დამალული ეროვნული-სახელმწიფოებრივი მავნე პროგრამა, რომელიც კვირაში დაახლოებით 100 მილიონჯერ იტვირთება. ეს არ არის ჭია გავრცელების მკაცრი გაგებით, მაგრამ იმის დასტურია, რომ იგივე npm ეკოსისტემის ნდობის მოდელი, რომელსაც შაი-ჰულუდი იყენებდა, შეიძლება მართლაც მასიური მასშტაბით გადაეტანა ტვირთი.
- SAP npm (2026 წლის აპრილი). იმ დროს აღწერილი იყო, როგორც მინი შაი-ჰულუდი: იგივე ჭიების სქემა, რომელიც მასშტაბურად განმეორდა, ორიგინალური ინციდენტიდან ერთ წელზე ნაკლები ხნის შემდეგ. მექანიზმი არ შეცვლილა. თავდაცვის მექანიზმებიც ძირითადად არ შეცვლილა.
სამი npm ჭიის ინციდენტი, ერთი განმეორებადი ნიმუში: სანდო გამომცემლის კომპრომეტირება, მისი ავტორიზაციის გამოყენება ავტომატური გავრცელებისთვის და დანარჩენისთვის გამოცემასა და საზოგადოების მიერ აღმოჩენას შორის არსებულ ხარვეზზე დაყრდნობა.
განმეორებადი ნიმუში
თუ დეტალებს გამორიცხავთ, npm-ის ყველა ჭიის ინციდენტი იგივე ოთხ ნაბიჯს მიჰყვება:
- ანგარიშის კომპრომეტირება. მომვლელის გამოქვეყნების ნიშანი, npm login, ან CI სერთიფიკატი იპარება, როგორც წესი, ფიშინგის, გაჟონილი საიდუმლოს ან კომპრომეტირებული დამოკიდებულების გზით, საკუთარ ჯაჭვში უფრო მაღალ დონეზე.
- ჩუმი ინექცია. თავდამსხმელი ავრცელებს ლეგიტიმური, სანდო პაკეტის ახალ ვერსიას დამატებული მავნე კოდით, ხშირად ინსტალაციის შემდგომ ან სხვა სასიცოცხლო ციკლის სკრიპტში, რომელიც ავტომატურად მუშაობს ინსტალაციისთანავე.
- ავტომატური გავრცელება. თუ კომპრომეტირებული მომვლელი აკონტროლებს სხვა პაკეტებს, ან თუ მავნე სკრიპტი თავად აგროვებს დამატებით სერთიფიკატებს, ჭია ვრცელდება შემდეგ პაკეტსა და შემდეგ მომხმარებლად თავდამსხმელის მხრიდან შემდგომი ქმედების გარეშე.
- გამოვლენის შეფერხება. პაკეტი რეესტრში ცოცხლად ინახება, მისი ინსტალაცია ნებისმიერი პირისთვისაა შესაძლებელი, სანამ ვინმე არ შეამჩნევს, არ შეატყობინებს და არ წაიშლება. ეს შეფერხება, ზოგიერთი ინციდენტისთვის საათები, ზოგისთვის კი დღეები, არის მთელი ის ფანჯარა, რაც ჭიას სჭირდება.
სწორედ მეოთხე დარტყმის აღიარებაა ის, რაც რეალურად მნიშვნელოვანია თავდაცვისთვის. npm ჭიის ინციდენტის შემსუბუქების ყველა სტრატეგია, თავისი არსით, ამ აღმოჩენის შეფერხების შემცირების ან გვერდის ავლის მცდელობაა.
ციტირების ღირსი ჩარჩო: SIP-ის პასუხი გაგრილების პრობლემაზე
ამ ნიმუშზე ყველა პასუხი გამყიდველისგან არ მოდის. ერთ-ერთი ყველაზე ნათელია SIP, მოჰამედ-ალი არაბის უსაფრთხოების დაუყოვნებელი გეგმა, პროგრამული უზრუნველყოფის მიწოდების ჯაჭვის რისკებისთვის განკუთვნილი ხუთკონტროლიანი საგანგებო ჩარჩო, რომელიც წარმოიშვა SafeDev სესიის ბოლოს დასმული ძალიან პრაქტიკული კითხვიდან: „თუ მხოლოდ რამდენიმე რამის გაკეთება შეგვიძლია, რა უნდა გავაკეთოთ პირველ რიგში?“
SIP-ის მეორე კონტროლი პირდაპირ npm ჭიის პრობლემას ეხება: შეუმოწმებელი დამოკიდებულებების გაყინვა ხუთდღიანი გაგრილების პერიოდით და სასიცოცხლო ციკლის სკრიპტების გამორთვა, რათა მავნე პოსტინსტალაციამ ინსტალაციის დროს ავტომატურად ვერ შეძლოს შესრულება. პრაქტიკაში, ეს არის min-release-age=5 მდე ignore-scripts=true პროექტში .npmrc, CI-ში ამოქმედებულია ისე, რომ დაბლოკვის ფაილს არ შეუძლია გუშინ გამოქვეყნებული პაკეტის ჩუმად ამოხსნა. ეს არის ნამდვილად საიმედო, დაბალი ძალისხმევის მქონე კონტროლი და პირდაპირ მიზნად ისახავს იმავე აღმოჩენის შეფერხებას, რომელზეც დამოკიდებულია npm ჭიის ყველა ინციდენტი. ჩაუღრმავდით:
სადაც გაგრილების ფანჯარა კვლავ ტოვებს ხარვეზს
გაგრილების პერიოდი არის ფსონი: რომ საზოგადოება შეამჩნევს და შეატყობინებს მავნე პაკეტს ლოდინის პერიოდის დასრულებამდე. უმეტეს შემთხვევაში, ეს ფსონი ფასდება. კომპრომეტირებული პაკეტების მნიშვნელოვანი ნაწილი აღინიშნება გამოქვეყნებიდან პირველი რამდენიმე დღის განმავლობაში, სწორედ ამიტომ არის ხუთდღიანი ფანჯარა გონივრული ნაგულისხმევი.
თუმცა, npm ჭია ტიპური მავნე პაკეტივით არ იქცევა და ეს ცვლის იმას, თუ რა შეუძლია და რა არა ფიქსირებულ გაგრილების დროს.
წინასწარ ყოფნაcisსიჩქარის შესახებ: სწრაფად გავრცელებული ჭია რეალურად არ ამარცხებს თავად გაგრილების პერიოდს. თუ მკაცრად დააწესებთ გამოშვების მინიმალურ ასაკს, ამ საწყისი ტალღის დროს გამოქვეყნებული პაკეტები მაინც ძალიან ახალი იქნება აწყობაში შესასვლელად, მიუხედავად იმისა, თუ რამდენ პაკეტს დააზიანებს ჭია ამასობაში. სიჩქარე მნიშვნელოვანია, მაგრამ მნიშვნელოვანია ყველასთვის, ვინც არ იყენებს გაგრილების პერიოდს და არა იმ პაკეტებისთვის, რომელიც უკვე აწესებს გაგრილების პერიოდს.
რეალური შეზღუდვა მოთმინებაა. უფრო ფრთხილი დატვირთვა შეიძლება უმოქმედოდ დარჩეს გაგრილების პერიოდის შემდეგ და გააქტიურდეს მხოლოდ დღეების გასვლის შემდეგ და პაკეტი „სანდო“ ზონაში მოხვდეს.cisიმიტომ, რომ იცის, რომ გაგრილების დრო თვალყურს ადევნებს. ეს ის სცენარია, როდესაც მხოლოდ ფიქსირებული გაგრილების დრო საკმარისი არ არის და ზუსტად ის, რაც MEW-ის მტკიცებულებებზე დაფუძნებული აღმოჩენის მსგავსია, მის გვერდით უნდა იდგეს და არა მის ნაცვლად.
არცერთი წარუმატებლობის რეჟიმი არ წარმოადგენს SIP-ის აზროვნების ნაკლს. გაგრილების დრო საზოგადოების აღმოჩენის ფსონია და საზოგადოების აღმოჩენას აქვს მინიმალური ზღვარი: მას არ შეუძლია დაიჭიროს ის, რაც ჯერ არავის შეუტყობინებია. ეს არ არის მხოლოდ SIP-ისთვის დამახასიათებელი ხარვეზი, ეს არის ნებისმიერი დაცვის სტრუქტურული ზღვარი, რომელიც მოქმედებამდე ელოდება ხელმოწერას, საკონსულტაციო დოკუმენტს ან საჯარო ანგარიშს.
როგორ ხსნის MEW გაგრილების დროის ინტერვალს
ეს წინასწარ არისcisელი, უფსკრული Xygeni-ს მავნე პროგრამების ადრეული გაფრთხილება (MEW) შექმნილია დახურვისთვის. საზოგადოების ანგარიშების ან გამოქვეყნებული ხელმოწერის მოლოდინის ნაცვლად, MEW განუწყვეტლივ სკანირებს NPM-ს, PyPI-ს და Maven-ს ახალი პაკეტებისა და ვერსიების გამოქვეყნებისთანავე, აანალიზებს ქცევას და არა ცნობილ საფრთხეებთან შედარებას. როდესაც რაღაც მავნე ჩანს, ის კარანტინში იდება და აღმოჩენას უსაფრთხოების მკვლევარები ადასტურებენ საჯაროდ გამჟღავნებამდე და არა მის შემდეგ.
ეს განსხვავება მნიშვნელოვანია ზემოთ ჩამოთვლილი ორივე npm ჭიის უკმარისობის რეჟიმისთვის. სწრაფად გავრცელებული ჭიის წინააღმდეგ, ხელმოწერის წინასწარი აღმოჩენა არ საჭიროებს ხუთ დღეს, რასაც გაგრილების პერიოდი ვარაუდობს. პაციენტი, მიძინებული დატვირთვის წინააღმდეგ, MEW-ის ქცევითი ანალიზი არ ეძებს ასაკს ან რეპუტაციას, ის ეძებს იმას, თუ რას აკეთებს კოდი სინამდვილეში, ამიტომ გაგრილების პერიოდის დალოდება თავდამსხმელს არაფერს სთავაზობს.
MEW-ის დამოკიდებულების ფაირვოლი ამას ინსტალაციის წერტილამდე აფართოებს, რეალურ დროში ბლოკავს მავნე პაკეტს, მაშინაც კი, თუ ის წინა შემოწმებებს გაურბის და იგივე აღმოჩენის ფენა ფარავს. CI/CD npm ჭიის ინციდენტის მხარე: განბლოკვის განშტოების, ინექციის, ხელახლა დაბლოკვის ნიმუში, რომელიც თავდამსხმელს საშუალებას აძლევს განახორციელოს მავნე პროგრამა. commit და ჩუმად დამალონ თავიანთი კვალი, სრული აუდიტის კვალით, თუ ეს მაინც მოხდა.
SIP და MEW ერთსა და იმავე კითხვას პასუხობენ, სხვადასხვა დონეზე
ეს ყველაფერი არ არღვევს SIP-ის გაგრილების დროის კონტროლს და ცალსახად უნდა ითქვას: ხუთდღიანი გაგრილების დრო გამორთული სასიცოცხლო ციკლის სკრიპტებით კვლავ ერთ-ერთი ყველაზე სწრაფი და იაფი დაცვაა, რომლის განხორციელებაც გუნდს შეუძლია ჩვეულებრივი npm ჭიის ინციდენტის წინააღმდეგ და ის ნებისმიერ სერიოზულ მიწოდების ჯაჭვის გამკაცრების გეგმაში უნდა შედიოდეს. ის, რაც მას, თავისი ჩანაფიქრით, არ შეუძლია, არის იმის დაჭერა, რაც საზოგადოებას ჯერ არ აღმოუჩენია. ეს არის უწყვეტი, ქცევაზე დაფუძნებული აღმოჩენის სამუშაო, რომელიც გაგრილების დროის ქვეშ მუშაობს და არა მის ნაცვლად.
ერთად შერწყმული, ორი მიდგომა ერთი და იგივე პრობლემის ორივე მხარეს მოიცავს: SIP ამაგრებს კონსტრუქციას. pipeline, დამოკიდებულების გაყინვა და კონტეინერის გამოსახულება ცნობილი, გამჟღავნებული საფრთხის ლანდშაფტის გარშემო, მაშინ როდესაც MEW-ის ხელმოწერამდელი აღმოჩენა მოიცავს npm ჭიის იმ ინციდენტებს, რომლებიც ჯერ არ გამჟღავნებულა, ისეთებს, რომლებსაც გაგრილების ფანჯარა, საკუთარი ლოგიკით, ვერ ხედავს.
კითხვა-პასუხი
რა არის npm ჭია, ერთი წინადადებით?
npm-ში გამოქვეყნებული მავნე კოდი, რომელიც ავტომატურად ვრცელდება სხვა პაკეტებზე, როგორც წესი, მომწოდებლის სერთიფიკატების მოპარვით და მათი გამოყენებით იგივე დატვირთვის სხვაგან ინექციისთვის, თავდამსხმელის მხრიდან შემდგომი ქმედების გარეშე.
ყველა მავნე npm პაკეტი npm ჭიაა?
არა. მავნე პაკეტი, რომელიც თავისით არ ვრცელდება, მიწოდების ჯაჭვის შეტევაა და არა ჭია. npm ჭიის ინციდენტს კონკრეტულად თვითგავრცელების ეტაპი განსაზღვრავს: ერთი კომპრომეტირება ავტომატურად იწვევს შემდეგს.
დამოკიდებულების გაგრილების პერიოდი აჩერებს npm ჭიას?
ეს მნიშვნელოვნად ამცირებს რისკს, რადგან მავნე პაკეტების უმეტესობა გამოქვეყნებიდან პირველი რამდენიმე დღის განმავლობაში ფიქსირდება. თუმცა, გაგრილების დრო დამოკიდებულია საზოგადოების აღმოჩენის სიჩქარეზე და სწრაფად გავრცელებული ან განზრახ მიძინებული npm ჭია შეიძლება სპეციალურად შეიქმნას ამ პერიოდის დასაძლევად.
რა იჭერს სინამდვილეში npm ჭიას გაგრილების პერიოდამდე?
უწყვეტი, ქცევაზე დაფუძნებული სკანირება, რომელიც არ არის დამოკიდებული ხელმოწერაზე ან არსებულ საჯარო ანგარიშზე. სწორედ ამ კონკრეტული ხარვეზის შესავსებად არის შექმნილი ხელმოწერამდელი აღმოჩენის ინსტრუმენტები, როგორიცაა Xygeni-ის MEW.







