ចំពោះ Commit ដែលបានបើកទ្វារក្រោយ
មុខងារថ្មីមួយត្រូវបានបញ្ចូលគ្នាដើម្បីដោះស្រាយវត្ថុដែលបានផ្ទុកឡើងដោយអ្នកប្រើប្រាស់។ អ្វីគ្រប់យ៉ាងឆ្លងកាត់ការធ្វើតេស្ត ប៉ុន្តែប៉ុន្មានសប្តាហ៍ក្រោយមក ការធ្វើតេស្ត pentest បានបង្ហាញថាអ្នកវាយប្រហារអាចប្រតិបត្តិពាក្យបញ្ជានៅលើម៉ាស៊ីនមេ។ លទ្ធផលនៃការ deserialization ដែលមិនមានសុវត្ថិភាពត្រូវបានលាក់នៅក្នុងកូដ។ គម្លាតពីការ deserialization រហូតដល់ការប្រតិបត្តិកូដពីចម្ងាយអាចមានទំហំតូចគ្រោះថ្នាក់ ជាពិសេសនៅពេលដែលទិន្នន័យ serialized ពីកញ្ចប់ប្រភពបើកចំហ ឬសេវាកម្មផ្ទៃក្នុងត្រូវបានទុកចិត្តដោយគ្មានការផ្ទៀងផ្ទាត់។
តើ Deserialization នៅក្នុងកូដជាអ្វី ហេតុអ្វីបានជាវាមានហានិភ័យ និងកន្លែងដែលវាលាក់ខ្លួន
នៅក្នុងន័យរបស់អ្នកអភិវឌ្ឍន៍ តើ deserialization ជាអ្វី? វាគឺជាដំណើរការនៃការយកទិន្នន័យដែលមានរចនាសម្ព័ន្ធ JSON, XML, ទម្រង់គោលពីរ ឬវត្ថុដែលបានធ្វើស៊េរីជាក់លាក់តាមភាសា ហើយប្រែក្លាយវាទៅជាវត្ថុនៅក្នុងអង្គចងចាំវិញ។
ដោយខ្លួនឯង ការដកស៊េរី គឺមិនបង្កគ្រោះថ្នាក់ និងជារឿងធម្មតាទេ ឧទាហរណ៍៖
- កោះជ្វា: ការអានវត្ថុជាមួយ ស្ទ្រីមបញ្ចូលវត្ថុ
- ពស់ថ្លាន់: កំពុងផ្ទុកទិន្នន័យជាមួយ pickle.load
- Node.js: កំពុងវិភាគ JSON ជាមួយ JSON.parse
ហានិភ័យលេចឡើងនៅពេលដែលការលុបស៊ីរីលៀលីសត្រូវបានអនុវត្តចំពោះទិន្នន័យដែលមិនគួរឱ្យទុកចិត្តដោយគ្មានការផ្ទៀងផ្ទាត់។ អ្នកវាយប្រហារអាចបង្កើតការបញ្ចូលដែលបង្កឱ្យមានខ្សែសង្វាក់ឧបករណ៍ ផ្លូវកូដដែលមានស្រាប់ត្រូវបានប្រើប្រាស់តាមរបៀបដែលមិនបានគ្រោងទុក ដែលអាចនាំឱ្យមានការប្រតិបត្តិកូដពីចម្ងាយ។
មិនមានសុវត្ថិភាព ការដកស៊េរី ជារឿយៗត្រូវបានរកឃើញនៅក្នុង៖
- កញ្ចប់ប្រភពបើកចំហ ជាមួយលំនាំដើមដែលមិនមានសុវត្ថិភាព
- លេខកូដផ្ទាល់ខ្លួន ដែលសន្មតថាការបញ្ចូលជាស៊េរីគឺគួរឱ្យទុកចិត្ត
- API ភាគីទីបី កំពុងប្រគល់វត្ថុដែលបានធ្វើស៊េរីដោយគ្មានការផ្ទៀងផ្ទាត់
- សាងសង់វត្ថុបុរាណ ដូចជា:
- កោះជ្វា .ser ឯកសារដែលមានវត្ថុដែលបានធ្វើស៊េរីជាមុន។
- ពស់ថ្លាន់ .pkl ឯកសារគំរូនៅក្នុងលំហូរការងាររៀនរបស់ម៉ាស៊ីន។
- វត្ថុកំណត់រចនាសម្ព័ន្ធដែលបានបង្កប់ជាស៊េរីនៅក្នុងរូបភាព Docker ឬកុងតឺន័រដាក់ពង្រាយ
- កោះជ្វា .ser ឯកសារដែលមានវត្ថុដែលបានធ្វើស៊េរីជាមុន។
- ឧបករណ៍សាកល្បង ដូចជា:
- ទិន្នន័យតេស្តស៊េរីចាស់ៗត្រូវបានចម្លងពីរូបថតអេក្រង់ផលិតកម្ម។
- បន្ទុកទិន្នន័យដែលបានធ្វើស៊េរីដែលបានទាញយកពីឃ្លាំងទិន្នន័យខាងក្រៅសម្រាប់ការធ្វើតេស្តដំណើរការ ឬការវិភាគតំរែតំរង់។
- ទិន្នន័យតេស្តស៊េរីចាស់ៗត្រូវបានចម្លងពីរូបថតអេក្រង់ផលិតកម្ម។
ឯកសារទាំងនេះអាចត្រូវបានណែនាំទៅក្នុងឃ្លាំង ហើយផ្ទុកដោយស្វ័យប្រវត្តិក្នុងអំឡុងពេលធ្វើតេស្ត ឬការដាក់ពង្រាយ ដែលបង្កឱ្យមានស្ថានភាពមិនមានសុវត្ថិភាព។ ការដកស៊េរី in CI/CD pipelineមុនពេលដែលកូដឈានដល់ការផលិត។
ពីការលុបស៊ីរីលៀលីសដែលមិនមានសុវត្ថិភាព រហូតដល់ការប្រតិបត្តិកូដពីចម្ងាយ៖ ផ្លូវវាយប្រហារ
ខ្សែសង្វាក់កេងប្រវ័ញ្ចសម្រាប់ការដកស៊ីរីលដែលមិនមានសុវត្ថិភាពជារឿយៗធ្វើតាមគំរូមួយក្នុងចំណោមគំរូទាំងនេះ៖
- ការបញ្ចូលដែលមិនគួរឱ្យទុកចិត្តចូលទៅក្នុងកម្មវិធី។
- ការដកស៊េរីដែលមិនមានសុវត្ថិភាពបង្កើតវត្ថុឡើងវិញដោយគ្មានការរឹតត្បិត។
- ខ្សែសង្វាក់ឧបករណ៍អេឡិចត្រូនិចបង្កឱ្យមានមុខងារដែលមានស្រាប់តាមរបៀបដែលមិនបានគិតទុកជាមុន។
- អ្នកវាយប្រហារបង្កើនសិទ្ធិ ហើយសម្រេចបានការប្រតិបត្តិកូដពីចម្ងាយ។
វ៉ារ្យ៉ង់៖
- ខ្សែសង្វាក់ឧបករណ៍ 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 ដូច្នេះអ្នកអភិវឌ្ឍន៍អាចដោះស្រាយបញ្ហាទាំងនោះមុនពេលបញ្ចូលគ្នា។
- កំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនស្កេនដើម្បីរកឃើញ API ដែលមានហានិភ័យដូចជា ស្ទ្រីមបញ្ចូលវត្ថុ, pickle.loadនិង YAML.load ដោយគ្មានឧបករណ៍ផ្ទុកដែលមានសុវត្ថិភាព។
- CI/CD សមាហរណកម្ម:
ឧទាហរណ៍លំហូរការងារ៖
sql
Commit → SAST scan → PR alert → Fix before merge
- ប្លុកបញ្ចូលគ្នាលើការរកឃើញ deserialization ដែលមិនមានសុវត្ថិភាពដ៏សំខាន់ ដើម្បីការពារកូដដែលមិនមានសុវត្ថិភាពពីការទៅដល់សាខាផលិតកម្ម។
- ការធ្វើតេស្តឯកតាជាមួយនឹងការបញ្ចូលមេរោគក្លែងក្លាយ:
- បង្កើត បន្ទុកដែលមិនបង្កគ្រោះថ្នាក់ និងត្រូវបានគ្រប់គ្រង ដែលធ្វើត្រាប់តាមវត្ថុវាយប្រហារជាបន្តបន្ទាប់ទូទៅ។
- សាកល្បងពីរបៀបដែលកម្មវិធីដោះស្រាយពួកវា។ វាគួរតែបដិសេធ សម្អាត ឬកត់ត្រាការបញ្ចូលជំនួសឱ្យការដំណើរការវាដោយងងឹតងងល់។
- រួមបញ្ចូលការធ្វើតេស្តទាំងនេះនៅក្នុងប្រព័ន្ធស្វ័យប្រវត្តិ pipeline ដូច្នេះពួកគេដំណើរការលើ PR នីមួយៗ ដោយចាប់បានឥរិយាបថ deserialization ដែលមិនមានសុវត្ថិភាពតាំងពីដំបូង។
- ត្រូវប្រាកដថា payloads សាកល្បងមិនអាចប្រតិបត្តិបាន និងមានសុវត្ថិភាពក្នុងការរក្សាទុកនៅក្នុងឃ្លាំងទិន្នន័យ ដោយផ្តោតតែលើតក្កវិជ្ជារកឃើញ។
- បង្កើត បន្ទុកដែលមិនបង្កគ្រោះថ្នាក់ និងត្រូវបានគ្រប់គ្រង ដែលធ្វើត្រាប់តាមវត្ថុវាយប្រហារជាបន្តបន្ទាប់ទូទៅ។
វិធីសាស្រ្តស្រទាប់នេះរួមបញ្ចូលគ្នានូវការស្កេនដោយស្វ័យប្រវត្តិជាមួយនឹងការធ្វើតេស្តដែលគ្រប់គ្រងដោយអ្នកអភិវឌ្ឍន៍ ដោយធានាថាផ្លូវ deserialization ដែលមិនមានសុវត្ថិភាពត្រូវបានកំណត់អត្តសញ្ញាណ និងដកចេញជាយូរមកហើយមុនពេលដែលពួកវាអាចក្លាយជាចំណុចខ្សោយនៃការប្រតិបត្តិកូដពីចម្ងាយ។
យុទ្ធសាស្ត្របង្ការសម្រាប់អ្នកអភិវឌ្ឍន៍៖ ការបញ្ឈប់ការលុបស៊ីរីលៀលីសពីការក្លាយជាការប្រតិបត្តិកូដពីចម្ងាយ
- ព្រំដែននៃការជឿទុកចិត្ត៖ លុបស៊េរីចេញតែពីប្រភពដែលបានផ្ទៀងផ្ទាត់ និងបានផ្ទៀងផ្ទាត់ប៉ុណ្ណោះ។
- API សុវត្ថិភាព:
- ចាវ៉ា៖ បណ្ណាល័យដែលមានសុវត្ថិភាពជាមួយនឹងការផ្ទៀងផ្ទាត់។
- ព្យាណូ៖ ការប្រើប្រាស់ json.loads() ជាង pickle.loads() បើអាចធ្វើទៅបាន។
- Node.js៖ ជៀសវាង វាយតម្លៃ() ឬការប្រតិបត្តិកូដថាមវន្ត។
- ចាវ៉ា៖ បណ្ណាល័យដែលមានសុវត្ថិភាពជាមួយនឹងការផ្ទៀងផ្ទាត់។
- បញ្ជីអនុញ្ញាត និងគ្រោងការណ៍៖ ដាក់កម្រិតប្រភេទវត្ថុដែលត្រូវបានអនុញ្ញាត។ អនុវត្តគ្រោងការណ៍ JSON។
- អនាម័យនៃការពឹងផ្អែកត្រួតពិនិត្យ CVE ដែលលើកឡើងពីការដកស៊េរី ឬការប្រតិបត្តិកូដពីចម្ងាយ។
- ការពិនិត្យកូដ: បន្ថែម ការដកស៊េរី ការត្រួតពិនិត្យសុវត្ថិភាពចំពោះគំរូពិនិត្យ 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ក្រុមអាចចាប់ និងកែតម្រូវភាពមិនមានសុវត្ថិភាព ការធ្វើឲ្យស៊ីរីលនីយកម្មប្រសើរឡើងមុនពេលដែលវាមានឱកាសកើនឡើងទៅក្នុងការប្រតិបត្តិកូដពីចម្ងាយក្នុងផលិតកម្ម។







