რა არის დესერიალიზაცია - კოდის დისტანციური შესრულება

როგორ გარდაიქმნება დაუცველი დესერიალიზაცია დისტანციური კოდის შესრულებად (და როგორ დავაფიქსიროთ ის შერწყმამდე)

ის Commit ამან უკანა კარი გააღო

მომხმარებლის მიერ ატვირთული ობიექტების დასამუშავებლად ახალი ფუნქცია გაერთიანდა. ყველაფერი წარმატებით გადის ტესტებს, მაგრამ რამდენიმე კვირის შემდეგ, შეღწევადობის ტესტირება ავლენს, რომ თავდამსხმელებს შეუძლიათ სერვერზე ბრძანებების შესრულება; ეს კოდში დამალული დაუცველი დესერიალიზაციის შედეგია. დესერიალიზაციიდან დისტანციურ კოდის შესრულებამდე სხვაობა შეიძლება სახიფათოდ მცირე იყოს, განსაკუთრებით მაშინ, როდესაც ღია კოდის პაკეტებიდან ან შიდა სერვისებიდან სერიალიზებული მონაცემები სანდოა ვალიდაციის გარეშე.

რა არის დესერიალიზაცია კოდში, რატომ არის ის სარისკო და სად იმალება

დეველოპერის ტერმინოლოგიით, რა არის დესერიალიზაცია? ეს არის სტრუქტურირებული მონაცემების, JSON, XML, ბინარული ფორმატების ან ენისთვის სპეციფიკური სერიალიზებული ობიექტების აღების და მათი მეხსიერებაში არსებულ ობიექტებად ხელახლა გადაქცევის პროცესი.

Თავისით, დესერიალიზაცია უვნებელია და გავრცელებულია, მაგალითად:

  • Java: ობიექტების წაკითხვა ობიექტის შეყვანის ნაკადი
  • Python: მონაცემების ჩატვირთვა მწნილი.დატვირთვა
  • Node.js: JSON-ის დამუშავება JSON.პარსე

რისკი ჩნდება მაშინ, როდესაც დესერიალიზაცია გამოიყენება არასანდო მონაცემებზე ვალიდაციის გარეშე. თავდამსხმელს შეუძლია შექმნას შეყვანის მონაცემები, რომელიც ააქტიურებს გაჯეტების ჯაჭვს, არსებულ კოდის ბილიკებს, რომლებიც გამოიყენება გაუთვალისწინებელი გზებით, რამაც შეიძლება გამოიწვიოს კოდის დისტანციური შესრულება.

უვნებელი დესერიალიზაცია ხშირად გვხვდება:

  • ღია კოდის პაკეტები სახიფათო ნაგულისხმევი პარამეტრებით
  • მორგებული კოდი რომელიც ვარაუდობს, რომ სერიალიზებული შეყვანა სანდოა
  • მესამე მხარის API-ები სერიალიზებულ ობიექტებს აბრუნებენ ვერიფიკაციის გარეშე
  • არტეფაქტების შექმნა როგორიცაა:
    • Java .სერ ფაილები, რომლებიც შეიცავს წინასწარ სერიალიზებულ ობიექტებს.
    • Python .pkl მოდელის ფაილები მანქანური სწავლების სამუშაო პროცესებში.
    • სერიალიზებული კონფიგურაციის ობიექტები ჩაშენებულია Docker-ის სურათებში ან განლაგების კონტეინერებში
  • სატესტო მოწყობილობები როგორიცაა:

    • წარმოების სნეპშოტებიდან კოპირებული ძველი სერიალიზებული ტესტის მონაცემები.
    • გარე საცავებიდან შესრულების ან რეგრესიული ტესტებისთვის ჩამოტვირთული სერიალიზებული დატვირთვები.

ეს ფაილები შეიძლება შეიყვანოთ საცავში და ავტომატურად ჩაიტვირთოს ტესტების ან განლაგების დროს, რაც გამოიწვევს არაუსაფრთხო რეჟიმებს. დესერიალიზაცია in CI/CD pipelineსანამ კოდი წარმოებაშიც კი მოვა.

დაუცველი დესერიალიზაციიდან დისტანციური კოდის შესრულებამდე: შეტევის გზა

დაუცველი დესერიალიზაციის ექსპლუატაციის ჯაჭვი ხშირად მიჰყვება შემდეგ ნიმუშებს:

  1. აპლიკაციაში არასანდო შეყვანა შედის.
  2. არაუსაფრთხო დესერიალიზაცია ქმნის ობიექტებს შეზღუდვების გარეშე.
  3. გაჯეტების ჯაჭვი გაუთვალისწინებელი გზებით ააქტიურებს არსებულ ფუნქციონალს.
  4. თავდამსხმელი სარგებლობს პრივილეგიებით და ახორციელებს კოდის დისტანციურად შესრულებას.

ვარიანტები:

  • Java-ს გაჯეტების ჯაჭვები იყენებენ ძველ ბიბლიოთეკებს, როგორიცაა Apache Commons.
  • Python .pkl მოდელის ჩატვირთვა ჩაშენებული მავნე ობიექტებით.
  • Node.js JSON-ის დამუშავება შეფასება() ან დინამიური იმპორტი.

ნაკადი:

				
					Untrusted Input → Deserialization → Gadget Chain → Remote Code Execution
				
			

როგორ ამოვიცნოთ დაუცველი დესერიალიზაცია შერწყმამდე

კოდის შერწყმამდე დაუცველი დესერიალიზაციის აღმოჩენა გაცილებით იაფია, ვიდრე მისი გამოსწორება განლაგების შემდეგ. ავტომატიზირებული ანალიზისა და პროაქტიული ტესტირების კომბინაცია საუკეთესოდ მუშაობს:

  • სტატიკური აპლიკაციის უსაფრთხოების ტესტირება (SAST):
    • სკანერების კონფიგურაცია სარისკო API-ების აღმოსაჩენად, როგორიცაა ობიექტის შეყვანის ნაკადი, მწნილი.დატვირთვადა YAML.load უსაფრთხო დამტვირთავის გარეშე.
    • დაუცველობის აღმოსაჩენად, როგორც საწყისი კოდის, ასევე არტეფაქტების შექმნის/ტესტირების სკანირება დესერიალიზაცია ნიმუშები.
    • დასკვნების პირდაპირ ჩვენება pull requests რათა დეველოპერებმა შეძლონ მათი მოგვარება გაერთიანებამდე.
  • CI/CD ინტეგრაციის:

სამუშაო პროცესის მაგალითი:

				
					sql

Commit → SAST scan → PR alert → Fix before merge

				
			
  • ბლოკი უერთდება კრიტიკულ დაუცველ დესერიალიზაციის აღმოჩენებს, რათა თავიდან აიცილოს სახიფათო კოდის მოხვედრა წარმოების ფილიალებში.
  • ერთეულის ტესტები სიმულირებული მავნე შეყვანებით:

    • შექმნა უვნებელი, კონტროლირებადი ტვირთები რომლებიც ბაძავენ ჩვეულებრივ სერიალიზებულ შეტევის ობიექტებს.
    • შეამოწმეთ, თუ როგორ ამუშავებს აპლიკაცია მათ; მან უნდა უარყოს, გაასუფთაოს ან აღრიცხოს შეყვანილი მონაცემები ბრმად დამუშავების ნაცვლად.
    • ჩართეთ ეს ტესტები ავტომატურში pipeline ამგვარად, ისინი ყველა PR-ზე მუშაობენ და ადრეულ ეტაპზევე აფიქსირებენ დესერიალიზაციის სახიფათო ქცევას.
    • დარწმუნდით, რომ ტესტის დატვირთვები არ არის შესრულებადი და უსაფრთხოა საცავში შესანახად, ფოკუსირებით მხოლოდ აღმოჩენის ლოგიკაზე.

ეს მრავალშრიანი მიდგომა აერთიანებს ავტომატურ სკანირებას დეველოპერის მიერ საკუთრებაში არსებულ ტესტებთან, რაც უზრუნველყოფს, რომ დაუცველი დესერიალიზაციის გზები იდენტიფიცირებული და ამოღებული იყოს დიდი ხნით ადრე, სანამ ისინი დისტანციური კოდის შესრულების დაუცველობად გადაიქცევიან.

დეველოპერებისთვის პრევენციის სტრატეგიები: დესერიალიზაციის დისტანციური კოდის შესრულებისგან თავის შეკავება

  1. ნდობის საზღვრებიდესერიალიზაცია მხოლოდ ავთენტიფიცირებული, დამოწმებული წყაროებიდან განახორციელეთ.
  2. უსაფრთხო API-ები:

     

    • Java: დაცული ბიბლიოთეკები ვალიდაციით.
    • Python: გამოყენება json.loads() მეტი pickle.loads() სადაც შესაძლებელია.
    • Node.js: თავიდან აცილება შეფასება() ან დინამიური კოდის შესრულება.

       

  3. დაშვებული სიები და სქემები: დაშვებული ობიექტების ტიპების შეზღუდვა. JSON სქემების აღსრულება.
  4. დამოკიდებულების ჰიგიენა: აკონტროლეთ CVE-ები, რომლებიც ახსენებენ დესერიალიზაციას ან კოდის დისტანციურ შესრულებას.
  5. კოდის მიმოხილვა: დამატება დესერიალიზაცია უსაფრთხოების შემოწმებები PR მიმოხილვის შაბლონებზე.

ხელსაწყოების შენიშვნა: ხელსაწყოები, როგორიცაა ქსიგენი შერწყმამდე კოდისა და დამოკიდებულებების სკანირება დაუცველი დესერიალიზაციისთვის, მაღალი რისკის მქონე ადგილების იდენტიფიცირებით, რათა დეველოპერებმა შეძლონ მათი ადრეულ ეტაპზე გამოსწორება.

სხვადასხვა ენაზე აღმოჩენის ნიმუშების მაგალითები (უსაფრთხო ფსევდოკოდი)

ქვემოთ მოცემული ყველა მაგალითი წარმოადგენს გასუფთავებულ ფსევდოკოდს, რომელიც აჩვენებს აღმოჩენის ნიმუშებს და არა ექსპლოიტებს, რომლებიც მუშაობენ:

Java – API-ის არაუსაფრთხო გამოყენების აღმოჩენა:

				
					java
// BAD: Accepting untrusted input without validation
ObjectInputStream in = new ObjectInputStream(userInputStream);
Object obj = in.readObject(); // Unsafe - no class type checks

// GOOD: Validate allowed classes before processing
if (allowedClasses.contains(obj.getClass().getName())) {
    process(obj); // Safe processing of approved classes
}

				
			

Python – სახიფათო დესერიალიზაციის თავიდან აცილება:

				
					python
import pickle

# BAD: Loading untrusted serialized data directly
data = pickle.loads(untrusted_input)  # Unsafe - arbitrary object execution risk

# GOOD: Use JSON with schema validation
import json
data = json.loads(untrusted_input)  # Safe when validated against schema

				
			

Node.js – დინამიური კოდის შესრულების თავიდან აცილება:

				
					javascript
// BAD: Executing code from parsed data
let obj = JSON.parse(untrustedInput);
eval(obj.code); // Unsafe - allows arbitrary code execution

// GOOD: Use fixed logic without dynamic execution
let safeObj = JSON.parse(untrustedInput);
process(safeObj); // Handle only expected properties and values

				
			

DevSecOps-ში აღმოჩენის ავტომატიზაცია Pipelines: დესერიალიზაციის დაჭერა წარმოებამდე

დაუცველი დესერიალიზაციის აღმოჩენის ავტომატიზაცია უზრუნველყოფს დაუცველობები აღმოჩენილი და გამოსწორებულია სანამ ისინი წარმოებაში დისტანციურ კოდის შესრულებამდე არ მიგვიყვანენ.

Pipeline სკანირება

  • გასაშვებად SAST საწყის კოდზე, კონფიგურაციის ფაილებზე და ყველა აწყობის არტეფაქტზე commit.
  • დაუცველი დესერიალიზაციის ნიმუშების აღმოჩენა როგორც აპლიკაციის კოდში, ასევე დამოკიდებულებები.

არტეფაქტების შემოწმება

  • სკანირების .ser, .pkl, და სხვა სერიალიზებული ფაილები სახიფათო შაბლონებისთვის, ტესტების განლაგებამდე ან თუნდაც გაშვებამდე.

Pull Request ბლოკირება

  • ბლოკები გაერთიანდება, თუ აღმოჩნდება სახიფათო დესერიალიზაცია.
  • გამოსწორების დასაჩქარებლად, PR-ებში აჩვენეთ ქმედითი უკუკავშირი.

ერთეულის ტესტის აღსრულება

  • ჩართეთ ერთეულის ტესტები სიმულირებული მავნე შეყვანით CI/CD pipeline
  • წარუმატებლობა წარმოიქმნება, თუ აპლიკაცია უარყოფის ნაცვლად ამუშავებს არაუსაფრთხო სერიალიზებულ მონაცემებს.

ცრუ დადებითი შედეგების თავიდან აცილება წესების შესუსტების გარეშე

  • არ გამორთოთ აღმოჩენის წესები შეტყობინებების „ჩასახშობად“; ამან შეიძლება გამოიწვიოს რეალური დაუცველი დესერიალიზაციის შეუმჩნევლად დატოვება.
  • ცნობილი უსაფრთხო შაბლონების ან დამოკიდებულებებისთვის გამოიყენეთ კონტროლირებადი თეთრი სია (დაშვებული სია).
  • თეთრი სიის ჩანაწერების დამტკიცებამდე უსაფრთხოების ვალიდაციაა საჭირო.
  • თეთრი სია ვერსიის კონტროლის ქვეშ შეინახეთ და პერიოდულად გადახედეთ მას, რათა დარწმუნდეთ, რომ ყველა გამონაკლისი გამართლებული და უსაფრთხოა.

ქსიგენის როლი

  • პირდაპირ ინტეგრირდება CI/CD pipelines როგორც საწყისი კოდის სკანირებისთვის, ასევე არტეფაქტების შესაქმნელად.
  • სასიცოცხლო ციკლის ადრეულ ეტაპზე აფიქსირებს დაუცველ დესერიალიზაციის ნიმუშებს და სარისკო დამოკიდებულებებს.
  • მხარს უჭერს პოლიტიკაზე დაფუძნებულ თეთრ სიაში შეყვანას სავალდებულო უსაფრთხოების გადახედვით, რითაც აბალანსებს აღმოჩენის სიზუსტეს დეველოპერის პროდუქტიულობასთან.

დისტანციური კოდის შესრულების წინსვლა უსაფრთხო დესერიალიზაციის გზით

დაუცველი დესერიალიზაცია შეიძლება შეუმჩნეველი დარჩეს მანამ, სანამ ის დისტანციური კოდის შესრულების პირდაპირ გზად არ იქცევა. მისი თავიდან ასაცილებლად საჭიროა:

  • იმის გაგება, თუ რა არის დესერიალიზაცია და როგორ შეიძლება მისი ბოროტად გამოყენება.
  • ავტომატური აღმოჩენის ჩასმა განვითარების სამუშაო პროცესში.
  • ტესტებში გამოყენებული დამოკიდებულებების, არტეფაქტების შექმნისა და სერიალიზებული მონაცემების რეგულარული განხილვა.

Xygeni-ს პრაქტიკული როლი ამ პროცესში:

  • საწყისი კოდის სკანირებაკოდის გაერთიანებამდე ახდენს არაუსაფრთხო დესერიალიზაციის შაბლონების იდენტიფიცირებას მრავალ ენაზე.
  • არტეფაქტებისა და დამოკიდებულების ანალიზი: აფიქსირებს სარისკო სერიალიზებულ ფაილებს (.ser, .pkl, ჩაშენებული კონფიგურაცია) და მესამე მხარის კომპონენტები ცნობილი დაუცველობებით.
  • პოლიტიკაზე დაფუძნებული კონტროლიმხარს უჭერს კონტროლირებად დაშვებულთა სიას უსაფრთხოების დადასტურებით, რაც უზრუნველყოფს, რომ აუცილებელი გამონაკლისები რეალურ რისკებს არ წარმოქმნის.
  • დეველოპერის გამოხმაურება კონტექსტში: მიუთითებს არაუსაფრთხო დესერიალიზაციის ზუსტ ადგილმდებარეობასა და მიზეზს შიგნით pull requestsრაც დეველოპერებს საშუალებას აძლევს დაუყოვნებლივ გამოასწორონ პრობლემები და დაადასტურონ მათი შემსუბუქება ხელახალი სკანირების გზით.

ამგვარი შემოწმებების პირდაპირ ინტეგრირებით CI/CD, გუნდებს შეუძლიათ დაუცველობის დაჭერა და გამოსწორება დესერიალიზაცია მანამ, სანამ მას წარმოებაში დისტანციური კოდის შესრულებაში გადაზრდის შანსი ექნება.

sca-tools-software-composition-analysis-tools
თქვენი პროგრამული უზრუნველყოფის რისკების პრიორიტეტიზაცია, გამოსწორება და დაცვა
მიიღეთ თქვენი უფასო ანგარიში.
საკრედიტო ბარათი არ არის საჭირო.

უზრუნველყავით თქვენი პროგრამული უზრუნველყოფის შემუშავება და მიწოდება

Xygeni Product Suite-თან ერთად