Десериализатсия чист - иҷрои дурдасти код

Чӣ гуна дерериализатсияи ноамн ба иҷрои дурдасти код табдил меёбад (ва чӣ гуна онро пеш аз якҷояшавӣ пайдо кардан мумкин аст)

Дар Commit Ки дари қафоро боз кард

Хусусияти нав барои коркарди объектҳои аз ҷониби корбар боршуда муттаҳид карда шуд. Ҳама чиз аз санҷиш мегузарад, аммо ҳафтаҳо пас, пентест нишон медиҳад, ки ҳамлагарон метавонанд фармонҳоро дар сервер иҷро кунанд; натиҷаи десериализатсияи ноамн дар рамз пинҳон аст. Фосила аз десериализатсия то иҷрои дурдасти код метавонад хеле хатарнок бошад, хусусан вақте ки маълумоти силсилавӣ аз бастаҳои манбаъи кушода ё хидматҳои дохилӣ бе тасдиқ эътимод карда мешавад.

Десериализатсия дар код чист, чаро он хатарнок аст ва дар куҷо пинҳон мешавад

Аз нигоҳи таҳиягарон, дерериализатсия чист? Ин раванди гирифтани маълумоти сохторӣ, JSON, XML, форматҳои дуӣ ё объектҳои силсилавии хоси забон ва баргардонидани онҳо ба объектҳо дар хотира мебошад.

Худ аз худ, десериализатсия безарар ва маъмул аст, масалан:

  • Java: Хондани ашё бо Ҷараёни вуруди объект
  • Python: Боркунии маълумот бо боркунии бодиринг
  • Node.jsТаҷзияи JSON бо JSON.parse

Хатар вақте пайдо мешавад, ки дериализатсия ба маълумоти беэътимод бе тасдиқ татбиқ карда мешавад. Ҳамлагар метавонад вурудеро эҷод кунад, ки занҷири гаҷетро фаъол мекунад, роҳҳои мавҷудаи рамз бо роҳҳои номатлуб истифода мешаванд, ки метавонад ба иҷрои дурдасти рамз оварда расонад.

Бехатар десериализатсия аксар вақт дар инҳо пайдо мешавад:

  • Бастаҳои манбаъи кушода бо нобаёнҳои ноамн
  • Рамзи фармоишӣ ки вуруди силсилавӣ боэътимод аст, фарз мекунад
  • API-ҳои тарафи сеюм объектҳои силсилашударо бе тасдиқ бармегардонанд
  • Артефактҳо созед ба мисли:
    • Java .сер файлҳое, ки дорои объектҳои пешакӣ силсилашуда мебошанд.
    • Python .pkl файлҳои моделӣ дар ҷараёнҳои кории омӯзиши мошинӣ.
    • Объектҳои конфигуратсияи силсилавӣ, ки дар тасвирҳои Docker ё контейнерҳои ҷойгиркунӣ ҷойгир карда шудаанд
  • Дастгоҳҳои санҷишӣ ба мисли:

    • Маълумоти кӯҳнаи санҷиши силсилавӣ аз аксҳои истеҳсолӣ нусхабардорӣ шудааст.
    • Пардохтҳои силсилавӣ, ки аз анборҳои беруна барои санҷишҳои иҷро ё регрессия зеркашӣ карда шудаанд.

Ин файлҳоро метавон ба анбор ворид кард ва ҳангоми санҷишҳо ё ҷойгиркунӣ ба таври худкор бор кард, ки боиси ноамнӣ мегардад десериализатсия in CI/CD pipelines пеш аз он ки код ҳатто ба истеҳсолот расад.

Аз силсиласозии ноамн то иҷрои дурдасти код: Роҳи ҳамла

Занҷираи истисмор барои бекоркунии ноамн аксар вақт яке аз ин нақшҳоро риоя мекунад:

  1. Вуруди беэътимод ба барнома ворид мешавад.
  2. Десериализатсияи ноамн объектҳоро бе маҳдудият аз нав эҷод мекунад.
  3. Занҷири гаҷет функсияҳои мавҷударо бо роҳҳои номатлуб фаъол мекунад.
  4. Ҳамлагар имтиёзҳоро афзоиш медиҳад ва иҷрои дурдасти кодро ба даст меорад.

Вариантҳо:

  • Занҷирҳои гаҷетҳои Java китобхонаҳои кӯҳнаро ба монанди Apache Commons истифода мебаранд.
  • Python .pkl боркунии модел бо объектҳои зараровари дарунсохт.
  • Таҷзияи JSON дар Node.js бо eval() ё воридоти динамикӣ.

Акнун:

				
					Untrusted Input → Deserialization → Gadget Chain → Remote Code Execution
				
			

Чӣ тавр дериализатсияи ноамниро пеш аз якҷояшавӣ муайян кардан мумкин аст

Муайян кардани десериализатсияи ноамн пеш аз якҷояшавии код нисбат ба ислоҳи он пас аз ҷойгиркунӣ хеле арзонтар аст. Якҷоя кардани таҳлили автоматӣ ва санҷиши проактивӣ беҳтарин кор мекунад:

  • Санҷиши амнияти барномаҳои статикӣ (SAST):
    • Танзимоти сканерҳоро барои муайян кардани API-ҳои хатарнок ба монанди Ҷараёни вуруди объект, боркунии бодирингва YAML.бор бе боркунаки бехатар.
    • Ҳам рамзи сарчашма ва ҳам артефактҳои сохтмон/озмоишро барои ноамнӣ скан кунед десериализатсия намунаҳо.
    • Намоиши натиҷаҳо мустақиман дар 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: Пешгирӣ кунед eval() ё иҷрои динамикии код.

       

  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 Pipelineс: Пеш аз расидан ба истеҳсолот, қатъ кардани силсилакунонӣ

Автоматикунонии ошкоркунии дерериализатсияи ноамн кафолат медиҳад камбудиҳо ошкор ва ислоҳ карда мешаванд пеш аз он ки онҳо ба иҷрои дурдасти код дар истеҳсолот оварда расонанд.

Pipeline Тренинг

  • давидан SAST дар ҳар як рамзи сарчашма, файлҳои конфигуратсия ва артефактҳои сохтмонӣ commit.
  • Муайян кардани намунаҳои ноамни десериализатсия дар ҳарду рамзи барнома ва вобастагӣ.

Санҷиши артефакт

  • Скан .ser, .pkl, ва дигар файлҳои силсилавӣ барои намунаҳои ноамн пеш аз ҷойгиркунӣ ё ҳатто иҷро кардани санҷишҳо.

Pull Request Бастабандӣ

  • Агар дерсериализатсияи ноамн ошкор карда шавад, блокҳо якҷоя мешаванд.
  • Барои суръат бахшидан ба ислоҳ, дар PR-ҳо фикру мулоҳизаҳои амалишавандаро нишон диҳед.

Татбиқи санҷиши воҳидӣ

  • Санҷишҳои воҳидро бо вурудоти зараровари симулятсияшуда дар дохил кунед CI/CD pipeline
  • Агар барнома маълумоти силсилавии ноамнро ба ҷои рад кардани он коркард кунад, хатогӣ ба вуҷуд меояд.

Пешгирӣ аз мусбатҳои бардурӯғ бидуни суст кардани қоидаҳо

  • Қоидаҳои ошкоркуниро барои "хомӯш кардани" огоҳиҳо ғайрифаъол накунед; ин метавонад ба дерериализатсияи воқеии ноамн имкон диҳад, ки ошкор нашуда гузарад.
  • Барои намунаҳо ё вобастагиҳои бехатари маълум рӯйхати сафеди назоратшаванда (рӯйхати иҷозатдодашуда)-ро истифода баред.
  • Пеш аз тасдиқи вурудҳои рӯйхати сафед, тасдиқи амниятро талаб кунед.
  • Рӯйхати сафедро таҳти назорати версия нигоҳ доред ва онро мунтазам аз назар гузаронед, то боварӣ ҳосил кунед, ки ҳамаи истисноҳо асоснок ва бехатар боқӣ мемонанд.

Нақши Xygeni

  • Мустақиман ба он дохил мешавад CI/CD pipelines барои скан кардани ҳам рамзи сарчашма ва ҳам артефактҳои сохташуда.
  • Нақшаҳои ноамни дериализатсия ва вобастагиҳои хатарнокро дар аввали давраи ҳаёт муайян мекунад.
  • Рӯйхати сафеди асоси сиёсатро бо баррасии ҳатмии амниятӣ дастгирӣ мекунад ва дақиқии ошкоркуниро бо ҳосилнокии таҳиягар мувозинат мекунад.

Пешсаф будан аз иҷрои дурдасти код тавассути дерериализатсияи амн

Десериализатсияи ноамн метавонад то он даме, ки он ба роҳи мустақими иҷрои дурдасти код табдил ёбад, нодида гирифта шавад. Пешгирии он талаб мекунад, ки:

  • Фаҳмидани он, ки десериализатсия чист ва чӣ гуна он метавонад сӯиистифода шавад.
  • Ҷойгиркунии ошкоркунии автоматӣ дар ҷараёни кори таҳия.
  • Баррасии мунтазами вобастагиҳо, артефактҳои сохта ва маълумоти силсилавӣ, ки дар санҷишҳо истифода мешаванд.

Нақши амалии Xygeni дар ин раванд:

  • Сканкунии рамзи манбаъПеш аз якҷоя кардани рамз, намунаҳои ноамни десериализатсияро дар забонҳои гуногун муайян мекунад.
  • Таҳлили артефакт ва вобастагӣФайлҳои сериализатсияшудаи хатарнокро муайян мекунад (.ser, .pkl, конфигуратсияи дарунсохт) ва ҷузъҳои тарафи сеюм бо осебпазириҳои маълум.
  • Назорати бар сиёсат асосёфтаРӯйхати иҷозатномаҳои назоратшавандаро бо тасдиқи амниятӣ дастгирӣ мекунад ва кафолат медиҳад, ки истисноҳои зарурӣ хатарҳои воқеиро ба вуҷуд намеоранд.
  • Фикру мулоҳизаҳои таҳиягар дар замина: Макони дақиқ ва сабаби ноамнии бекоркунии дохилиро қайд мекунад pull requests, ба таҳиягарон имкон медиҳад, ки мушкилотро фавран ҳал кунанд ва тавассути аз нав сканкунӣ чораҳои коҳишдиҳиро тасдиқ кунанд.

Бо ворид кардани чекҳо ба монанди инҳо мустақиман ба CI/CD, дастаҳо метавонанд ноамниро муайян ва ислоҳ кунанд десериализатсия пеш аз он ки имкони гузариш ба иҷрои дурдасти код дар истеҳсолотро дошта бошад.

асбобҳои sca-tools-нармафзор-таҳлили таркиб
Хатарҳои нармафзори худро афзалият диҳед, ислоҳ кунед ва бехатар созед
Ҳисоби ройгони худро дастрас кунед.
Корти кредитӣ лозим нест.

Таҳия ва интиқоли нармафзори худро таъмин кунед

бо маҷмӯи маҳсулоти Xygeni