តើ​ការ​ធ្វើ​ឲ្យ​ស៊ីរីល​កម្ម​ជា​អ្វី - ការ​ប្រតិបត្តិ​កូដ​ពី​ចម្ងាយ

របៀបដែល Deserialization ដែលមិនមានសុវត្ថិភាពក្លាយជាការប្រតិបត្តិកូដពីចម្ងាយ (និងវិធីចាប់វាមុនពេល Merge)

ចំពោះ Commit ដែលបានបើកទ្វារក្រោយ

មុខងារថ្មីមួយត្រូវបានបញ្ចូលគ្នាដើម្បីដោះស្រាយវត្ថុដែលបានផ្ទុកឡើងដោយអ្នកប្រើប្រាស់។ អ្វីគ្រប់យ៉ាងឆ្លងកាត់ការធ្វើតេស្ត ប៉ុន្តែប៉ុន្មានសប្តាហ៍ក្រោយមក ការធ្វើតេស្ត pentest បានបង្ហាញថាអ្នកវាយប្រហារអាចប្រតិបត្តិពាក្យបញ្ជានៅលើម៉ាស៊ីនមេ។ លទ្ធផលនៃការ deserialization ដែលមិនមានសុវត្ថិភាពត្រូវបានលាក់នៅក្នុងកូដ។ គម្លាតពីការ deserialization រហូតដល់ការប្រតិបត្តិកូដពីចម្ងាយអាចមានទំហំតូចគ្រោះថ្នាក់ ជាពិសេសនៅពេលដែលទិន្នន័យ serialized ពីកញ្ចប់ប្រភពបើកចំហ ឬសេវាកម្មផ្ទៃក្នុងត្រូវបានទុកចិត្តដោយគ្មានការផ្ទៀងផ្ទាត់។

តើ Deserialization នៅក្នុងកូដជាអ្វី ហេតុអ្វីបានជាវាមានហានិភ័យ និងកន្លែងដែលវាលាក់ខ្លួន

នៅក្នុងន័យរបស់អ្នកអភិវឌ្ឍន៍ តើ deserialization ជាអ្វី? វាគឺជាដំណើរការនៃការយកទិន្នន័យដែលមានរចនាសម្ព័ន្ធ JSON, XML, ទម្រង់គោលពីរ ឬវត្ថុដែលបានធ្វើស៊េរីជាក់លាក់តាមភាសា ហើយប្រែក្លាយវាទៅជាវត្ថុនៅក្នុងអង្គចងចាំវិញ។

ដោយខ្លួនឯង ការដកស៊េរី គឺមិនបង្កគ្រោះថ្នាក់ និងជារឿងធម្មតាទេ ឧទាហរណ៍៖

  • កោះជ្វា: ការអានវត្ថុជាមួយ ស្ទ្រីមបញ្ចូលវត្ថុ
  • ពស់ថ្លាន់: កំពុងផ្ទុកទិន្នន័យជាមួយ pickle.load
  • Node.js: កំពុងវិភាគ JSON ជាមួយ JSON.parse

ហានិភ័យលេចឡើងនៅពេលដែលការលុបស៊ីរីលៀលីសត្រូវបានអនុវត្តចំពោះទិន្នន័យដែលមិនគួរឱ្យទុកចិត្តដោយគ្មានការផ្ទៀងផ្ទាត់។ អ្នកវាយប្រហារអាចបង្កើតការបញ្ចូលដែលបង្កឱ្យមានខ្សែសង្វាក់ឧបករណ៍ ផ្លូវកូដដែលមានស្រាប់ត្រូវបានប្រើប្រាស់តាមរបៀបដែលមិនបានគ្រោងទុក ដែលអាចនាំឱ្យមានការប្រតិបត្តិកូដពីចម្ងាយ។

មិនមានសុវត្ថិភាព ការដកស៊េរី ជារឿយៗត្រូវបានរកឃើញនៅក្នុង៖

  • កញ្ចប់ប្រភពបើកចំហ ជាមួយលំនាំដើមដែលមិនមានសុវត្ថិភាព
  • លេខកូដផ្ទាល់ខ្លួន ដែលសន្មតថាការបញ្ចូលជាស៊េរីគឺគួរឱ្យទុកចិត្ត
  • API ភាគីទីបី កំពុងប្រគល់វត្ថុដែលបានធ្វើស៊េរីដោយគ្មានការផ្ទៀងផ្ទាត់
  • សាងសង់វត្ថុបុរាណ ដូចជា:
    • កោះជ្វា .ser ឯកសារដែលមានវត្ថុដែលបានធ្វើស៊េរីជាមុន។
    • ពស់ថ្លាន់ .pkl ឯកសារគំរូនៅក្នុងលំហូរការងាររៀនរបស់ម៉ាស៊ីន។
    • វត្ថុកំណត់រចនាសម្ព័ន្ធដែលបានបង្កប់ជាស៊េរីនៅក្នុងរូបភាព Docker ឬកុងតឺន័រដាក់ពង្រាយ
  • ឧបករណ៍សាកល្បង ដូចជា:

    • ទិន្នន័យតេស្តស៊េរីចាស់ៗត្រូវបានចម្លងពីរូបថតអេក្រង់ផលិតកម្ម។
    • បន្ទុកទិន្នន័យដែលបានធ្វើស៊េរីដែលបានទាញយកពីឃ្លាំងទិន្នន័យខាងក្រៅសម្រាប់ការធ្វើតេស្តដំណើរការ ឬការវិភាគតំរែតំរង់។

ឯកសារទាំងនេះអាចត្រូវបានណែនាំទៅក្នុងឃ្លាំង ហើយផ្ទុកដោយស្វ័យប្រវត្តិក្នុងអំឡុងពេលធ្វើតេស្ត ឬការដាក់ពង្រាយ ដែលបង្កឱ្យមានស្ថានភាពមិនមានសុវត្ថិភាព។ ការដកស៊េរី in CI/CD pipelineមុនពេលដែលកូដឈានដល់ការផលិត។

ពីការលុបស៊ីរីលៀលីសដែលមិនមានសុវត្ថិភាព រហូតដល់ការប្រតិបត្តិកូដពីចម្ងាយ៖ ផ្លូវវាយប្រហារ

ខ្សែសង្វាក់កេងប្រវ័ញ្ចសម្រាប់ការដកស៊ីរីលដែលមិនមានសុវត្ថិភាពជារឿយៗធ្វើតាមគំរូមួយក្នុងចំណោមគំរូទាំងនេះ៖

  1. ការបញ្ចូលដែលមិនគួរឱ្យទុកចិត្តចូលទៅក្នុងកម្មវិធី។
  2. ការ​ដក​ស៊េរី​ដែល​មិន​មាន​សុវត្ថិភាព​បង្កើត​វត្ថុ​ឡើង​វិញ​ដោយ​គ្មាន​ការ​រឹតត្បិត។
  3. ខ្សែសង្វាក់ឧបករណ៍អេឡិចត្រូនិចបង្កឱ្យមានមុខងារដែលមានស្រាប់តាមរបៀបដែលមិនបានគិតទុកជាមុន។
  4. អ្នកវាយប្រហារបង្កើនសិទ្ធិ ហើយសម្រេចបានការប្រតិបត្តិកូដពីចម្ងាយ។

វ៉ារ្យ៉ង់៖

  • ខ្សែសង្វាក់ឧបករណ៍ Java ទាញយកប្រយោជន៍ពីបណ្ណាល័យចាស់ៗដូចជា Apache Commons។
  • ពស់ថ្លាន់ .pkl ការផ្ទុកគំរូជាមួយវត្ថុព្យាបាទដែលបានបង្កប់។
  • ការ​វិភាគ JSON របស់ Node.js ជាមួយ វាយតម្លៃ() ឬការនាំចូលថាមវន្ត។

លំហូរ:

				
					Untrusted Input → Deserialization → Gadget Chain → Remote Code Execution
				
			

របៀបសម្គាល់ការលុបចោលដែលមិនមានសុវត្ថិភាពមុនពេលបញ្ចូល

ការចាប់​យក​ការ​លុប​ស៊េរី​ដែល​មិន​មាន​សុវត្ថិភាព​មុន​ពេល​បញ្ចូល​កូដ​គឺ​មាន​តម្លៃ​ថោក​ជាង​ការ​ជួសជុល​វា​បន្ទាប់​ពី​ការ​ដាក់​ពង្រាយ។ ការ​រួម​បញ្ចូល​គ្នា​នៃ​ការ​វិភាគ​ដោយ​ស្វ័យប្រវត្តិ និង​ការ​ធ្វើ​តេស្ត​ដោយ​សកម្ម​ដំណើរការ​បាន​ល្អ​បំផុត៖

  • ការធ្វើតេស្តសុវត្ថិភាពកម្មវិធីឋិតិវន្ត (SAST):
    • កំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនស្កេនដើម្បីរកឃើញ API ដែលមានហានិភ័យដូចជា ស្ទ្រីមបញ្ចូលវត្ថុ, pickle.loadនិង YAML.load ដោយគ្មានឧបករណ៍ផ្ទុកដែលមានសុវត្ថិភាព។
    • ស្កេនទាំងកូដប្រភព និង build/test artifacts សម្រាប់ភាពមិនមានសុវត្ថិភាព ការដកស៊េរី លំនាំ។
    • បង្ហាញការរកឃើញដោយផ្ទាល់នៅក្នុង pull requests ដូច្នេះអ្នកអភិវឌ្ឍន៍អាចដោះស្រាយបញ្ហាទាំងនោះមុនពេលបញ្ចូលគ្នា។
  • CI/CD សមាហរណកម្ម:

ឧទាហរណ៍លំហូរការងារ៖

				
					sql

Commit → SAST scan → PR alert → Fix before merge

				
			
  • ប្លុកបញ្ចូលគ្នាលើការរកឃើញ deserialization ដែលមិនមានសុវត្ថិភាពដ៏សំខាន់ ដើម្បីការពារកូដដែលមិនមានសុវត្ថិភាពពីការទៅដល់សាខាផលិតកម្ម។
  • ការធ្វើតេស្តឯកតាជាមួយនឹងការបញ្ចូលមេរោគក្លែងក្លាយ:

    • បង្កើត បន្ទុក​ដែល​មិន​បង្ក​គ្រោះថ្នាក់ និង​ត្រូវ​បាន​គ្រប់គ្រង ដែលធ្វើត្រាប់តាមវត្ថុវាយប្រហារជាបន្តបន្ទាប់ទូទៅ។
    • សាកល្បងពីរបៀបដែលកម្មវិធីដោះស្រាយពួកវា។ វាគួរតែបដិសេធ សម្អាត ឬកត់ត្រាការបញ្ចូលជំនួសឱ្យការដំណើរការវាដោយងងឹតងងល់។
    • រួមបញ្ចូលការធ្វើតេស្តទាំងនេះនៅក្នុងប្រព័ន្ធស្វ័យប្រវត្តិ pipeline ដូច្នេះពួកគេដំណើរការលើ PR នីមួយៗ ដោយចាប់បានឥរិយាបថ deserialization ដែលមិនមានសុវត្ថិភាពតាំងពីដំបូង។
    • ត្រូវប្រាកដថា payloads សាកល្បងមិនអាចប្រតិបត្តិបាន និងមានសុវត្ថិភាពក្នុងការរក្សាទុកនៅក្នុងឃ្លាំងទិន្នន័យ ដោយផ្តោតតែលើតក្កវិជ្ជារកឃើញ។

វិធីសាស្រ្តស្រទាប់នេះរួមបញ្ចូលគ្នានូវការស្កេនដោយស្វ័យប្រវត្តិជាមួយនឹងការធ្វើតេស្តដែលគ្រប់គ្រងដោយអ្នកអភិវឌ្ឍន៍ ដោយធានាថាផ្លូវ deserialization ដែលមិនមានសុវត្ថិភាពត្រូវបានកំណត់អត្តសញ្ញាណ និងដកចេញជាយូរមកហើយមុនពេលដែលពួកវាអាចក្លាយជាចំណុចខ្សោយនៃការប្រតិបត្តិកូដពីចម្ងាយ។

យុទ្ធសាស្ត្របង្ការសម្រាប់អ្នកអភិវឌ្ឍន៍៖ ការបញ្ឈប់ការលុបស៊ីរីលៀលីសពីការក្លាយជាការប្រតិបត្តិកូដពីចម្ងាយ

  1. ព្រំដែននៃការជឿទុកចិត្ត៖ លុប​ស៊េរី​ចេញ​តែ​ពី​ប្រភព​ដែល​បាន​ផ្ទៀងផ្ទាត់ និង​បាន​ផ្ទៀងផ្ទាត់​ប៉ុណ្ណោះ។
  2. API សុវត្ថិភាព:

     

    • ចាវ៉ា៖ បណ្ណាល័យដែលមានសុវត្ថិភាពជាមួយនឹងការផ្ទៀងផ្ទាត់។
    • ព្យាណូ៖ ការប្រើប្រាស់ 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 - ការជៀសវាងការ deserialization ដែលមិនមានសុវត្ថិភាព:

				
					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: ការចាប់យក Deserialization មុនពេលវាឈានដល់ផលិតកម្ម

ការធ្វើស្វ័យប្រវត្តិកម្មការរកឃើញនៃការលុបចោលស៊ីរីលដែលមិនមានសុវត្ថិភាពធានា ចំណុចខ្សោយត្រូវបានចាប់បាន និងជួសជុល មុនពេលដែលពួកវានាំទៅដល់ការប្រតិបត្តិកូដពីចម្ងាយនៅក្នុងផលិតកម្ម។

Pipeline កំពុងស្កេន

  • Run SAST នៅលើកូដប្រភព ឯកសារកំណត់រចនាសម្ព័ន្ធ និងការបង្កើតវត្ថុបុរាណនៅគ្រប់ commit.
  • រកឃើញលំនាំ deserialization ដែលមិនមានសុវត្ថិភាពទាំងនៅក្នុងកូដកម្មវិធី និង ភាពអាស្រ័យ.

ការត្រួតពិនិត្យវត្ថុបុរាណ

  • ស្កេន .ser, .pkl, និងឯកសារដែលបានធ្វើស៊េរីផ្សេងទៀតសម្រាប់លំនាំដែលមិនមានសុវត្ថិភាពមុនពេលដាក់ពង្រាយ ឬសូម្បីតែដំណើរការការធ្វើតេស្ត។

Pull Request ទប់ស្កាត់

  • ប្លុក​បញ្ចូល​គ្នា ប្រសិនបើ​ការ​លុប​ស៊េរី​ដែល​មិន​មាន​សុវត្ថិភាព​ត្រូវ​បាន​រក​ឃើញ។
  • បង្ហាញមតិកែលម្អដែលអាចអនុវត្តបាននៅក្នុង PR ដើម្បីពន្លឿនការដោះស្រាយ។

ការអនុវត្តការធ្វើតេស្តឯកតា

  • រួមបញ្ចូលការធ្វើតេស្តឯកតាជាមួយនឹងការបញ្ចូលមេរោគដែលក្លែងធ្វើនៅក្នុង CI/CD pipeline
  • ការបរាជ័យនឹងកើតឡើង ប្រសិនបើកម្មវិធីដំណើរការទិន្នន័យស៊េរីដែលមិនមានសុវត្ថិភាព ជំនួសឱ្យការបដិសេធវា។

ការជៀសវាងភាពវិជ្ជមានមិនពិតដោយមិនធ្វើឱ្យច្បាប់ចុះខ្សោយ

  • កុំបិទច្បាប់រកឃើញដើម្បី "បិទសំឡេង" ការជូនដំណឹង; នេះអាចអនុញ្ញាតឱ្យការលុបស៊េរីដែលមិនមានសុវត្ថិភាពពិតប្រាកដឆ្លងកាត់ដោយមិនអាចរកឃើញ។
  • ប្រើបញ្ជីសដែលបានគ្រប់គ្រង (បញ្ជីអនុញ្ញាត) សម្រាប់លំនាំ ឬការពឹងផ្អែកដែលមានសុវត្ថិភាពដែលគេស្គាល់។
  • តម្រូវឱ្យមានការផ្ទៀងផ្ទាត់សុវត្ថិភាពមុនពេលអនុម័តធាតុបញ្ជីស។
  • រក្សាបញ្ជីសឱ្យស្ថិតនៅក្រោមការគ្រប់គ្រងកំណែ ហើយពិនិត្យវាជាប្រចាំ ដើម្បីធានាថាករណីលើកលែងទាំងអស់នៅតែត្រឹមត្រូវ និងមានសុវត្ថិភាព។

តួនាទីរបស់ Xygeni

  • រួមបញ្ចូលដោយផ្ទាល់ទៅក្នុង CI/CD pipelineដើម្បីស្កេនទាំងកូដប្រភព និងបង្កើតវត្ថុបុរាណ។
  • រកឃើញលំនាំ deserialization ដែលមិនមានសុវត្ថិភាព និងការពឹងផ្អែកដែលមានហានិភ័យនៅដើមវដ្តជីវិត។
  • គាំទ្រ​ការ​ដាក់​ក្នុង​បញ្ជី​ស​ដែល​ផ្អែក​លើ​គោលការណ៍​ជាមួយ​នឹង​ការ​ពិនិត្យ​ឡើង​វិញ​សុវត្ថិភាព​ជា​កាតព្វកិច្ច ដោយ​ធ្វើ​ឲ្យ​មាន​តុល្យភាព​ភាព​ត្រឹមត្រូវ​នៃ​ការ​រក​ឃើញ​ជាមួយ​នឹង​ផលិតភាព​របស់​អ្នក​អភិវឌ្ឍន៍។

ការនាំមុខគេក្នុងការប្រតិបត្តិកូដពីចម្ងាយតាមរយៈការលុបស៊ីរីលៀលីសដោយសុវត្ថិភាព

ការលុបស៊ីរីលៀសដែលមិនមានសុវត្ថិភាពអាចនៅតែមិនមាននរណាកត់សម្គាល់រហូតដល់វាក្លាយជាផ្លូវផ្ទាល់ទៅកាន់ការប្រតិបត្តិកូដពីចម្ងាយ។ ការទប់ស្កាត់វាទាមទារ៖

  • ការយល់ដឹងអំពីអ្វីដែលជា deserialization និងរបៀបដែលវាអាចត្រូវបានរំលោភបំពាន។
  • ការបង្កប់ការរកឃើញដោយស្វ័យប្រវត្តិនៅក្នុងលំហូរការងារអភិវឌ្ឍន៍។
  • ពិនិត្យឡើងវិញជាប្រចាំនូវ dependencies បង្កើត artifacts និងទិន្នន័យដែលបានធ្វើស៊េរីដែលប្រើក្នុងការធ្វើតេស្ត។

តួនាទីជាក់ស្តែងរបស់ Xygeni នៅក្នុងដំណើរការនេះ:

  • ការស្កេនកូដប្រភព៖ កំណត់​លំនាំ​នៃ​ការ​លុប​ស៊េរី​ដែល​មិន​មាន​សុវត្ថិភាព​នៅ​ទូទាំង​ភាសា​ច្រើន​មុន​ពេល​កូដ​ត្រូវ​បាន​បញ្ចូល​គ្នា។
  • ការវិភាគវត្ថុបុរាណ និងការពឹងផ្អែករកឃើញឯកសារស៊េរីដែលមានហានិភ័យ (.ser, .pkl, embedded config) និងសមាសធាតុភាគីទីបីដែលមានភាពងាយរងគ្រោះដែលគេស្គាល់។
  • ការគ្រប់គ្រងផ្អែកលើគោលនយោបាយ៖ គាំទ្របញ្ជីអនុញ្ញាតដែលបានគ្រប់គ្រងជាមួយនឹងការផ្ទៀងផ្ទាត់សុវត្ថិភាព ដោយធានាថាករណីលើកលែងចាំបាច់មិនបង្កហានិភ័យពិតប្រាកដទេ។
  • មតិកែលម្អរបស់អ្នកអភិវឌ្ឍន៍នៅក្នុងបរិបទ៖ សម្គាល់ទីតាំងពិតប្រាកដ និងមូលហេតុនៃការដកស៊ីរីលៀសដែលមិនមានសុវត្ថិភាពនៅខាងក្នុង pull requestsដែលអនុញ្ញាតឱ្យអ្នកអភិវឌ្ឍន៍ជួសជុលបញ្ហាភ្លាមៗ និងបញ្ជាក់ពីការកាត់បន្ថយតាមរយៈការស្កេនឡើងវិញ។

ដោយការរួមបញ្ចូលការត្រួតពិនិត្យដូចនេះដោយផ្ទាល់ទៅក្នុង CI/CDក្រុមអាចចាប់ និងកែតម្រូវភាពមិនមានសុវត្ថិភាព ការ​ធ្វើ​ឲ្យ​ស៊ីរីល​នីយកម្ម​ប្រសើរ​ឡើង​មុន​ពេល​ដែល​វា​មាន​ឱកាស​កើន​ឡើង​ទៅ​ក្នុង​ការ​ប្រតិបត្តិ​កូដ​ពី​ចម្ងាយ​ក្នុង​ផលិតកម្ម។

ឧបករណ៍វិភាគសមាសភាពកម្មវិធី sca
ផ្តល់អាទិភាព ដោះស្រាយ និងធានាសុវត្ថិភាពហានិភ័យផ្នែកទន់របស់អ្នក
ទទួលបានគណនីឥតគិតថ្លៃរបស់អ្នក។
មិនតម្រូវឱ្យមានកាតឥណទានទេ។

ធានាសុវត្ថិភាពនៃការអភិវឌ្ឍន៍ និងការដឹកជញ្ជូនកម្មវិធីរបស់អ្នក

ជាមួយឈុតផលិតផល Xygeni