ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗ് - ഫോർമാറ്റ് സ്ട്രിംഗ് ദുർബലത - മെമ്മറി കറപ്ഷൻ

ഒരു സിമ്പിൾ ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗ് മെമ്മറി കറപ്ഷനിലേക്ക് എങ്ങനെ നയിച്ചേക്കാം (നിങ്ങളുടെ കോഡിൽ അത് എങ്ങനെ കണ്ടെത്താം)

ഉള്ളടക്ക പട്ടിക

നിർബന്ധമായും വായിക്കേണ്ട പോസ്റ്റുകൾ

താൽപ്പര്യമുള്ള ഏറ്റവും പുതിയ പോസ്റ്റുകൾ

ഒരു ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗ് എന്താണ്, അത് ഇപ്പോഴും പ്രധാനമായിരിക്കുന്നത് എന്തുകൊണ്ട്?

A ഫംഗ്ഷനുകളിൽ ഫോർമാറ്റ് സ്ട്രിംഗ് ആയി ഉപയോക്തൃ നിയന്ത്രിത ഡാറ്റ കൈമാറുമ്പോൾ ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗ് സംഭവിക്കുന്നു. പ്രിന്റ്എഫ്, ഫ്പ്രിന്റ്എഫ്, അല്ലെങ്കിൽ സിസ്ലോഗ്, സാധൂകരണം ഇല്ലാതെ.

ലളിതമായി പറഞ്ഞാൽ, ഫോർമാറ്റിംഗ് ടെംപ്ലേറ്റായി ഉപയോക്തൃ ഇൻപുട്ട് ഉപയോഗിക്കുമ്പോൾ, മെമ്മറിയിൽ ഉദ്ദേശിക്കാത്ത വായനയോ എഴുത്തോ അനുവദിക്കുമ്പോൾ ഒരു ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗ് സംഭവിക്കുന്നു. ഇത് പോലുള്ള ഭാഷകളിൽ പ്രത്യേകിച്ച് അപകടകരമാണ് സി / സി ++, ഫോർമാറ്റ് സ്പെസിഫയറുകൾ ഇഷ്ടപ്പെടുന്നിടത്ത് %s, %x, ഒപ്പം %n സ്റ്റാക്ക് ഡാറ്റ നേരിട്ട് കൈകാര്യം ചെയ്യാൻ കഴിയും.

ആധുനിക DevSecOps-ൽ ഇത് പ്രധാനമായിരിക്കുന്നത് എന്തുകൊണ്ട്? കാരണം ഈ ബഗുകൾ ഇപ്പോഴും സജീവ കോഡ്ബേസുകളിൽ കാണപ്പെടുന്നു, പ്രത്യേകിച്ച്:

  • ലെഗസി സി കോഡുള്ള ഓപ്പൺ സോഴ്‌സ് ഘടകങ്ങൾ
  • പൈത്തൺ, ഗോ, അല്ലെങ്കിൽ റസ്റ്റ് എന്നിവയിലെ നേറ്റീവ് ബൈൻഡിംഗുകൾ
  • പ്രൊഡക്ഷനിൽ യാന്ത്രികമായി ലയിപ്പിച്ച മൂന്നാം കക്ഷി കോഡ് pipelines

ആഘാതം യഥാർത്ഥമാണ്: മെമ്മറി ലീക്കുകൾ, സ്റ്റാക്ക് കറപ്ഷൻ, പോലും റിമോട്ട് കോഡ് എക്സിക്യൂഷൻ (RCE)... എന്നിട്ടും, പല ടീമുകളും സ്റ്റാറ്റിക് സ്കാനറുകളെ വിശ്വസിക്കുന്നു, കൂടാതെ അവ വ്യക്തമായി പരിശോധിക്കുന്നില്ലെങ്കിൽ ഈ ബഗുകൾ കാണുന്നില്ല.

നേരെ കോഡിലേക്ക്: പ്രിന്റ്എഫ്(ഉപയോക്തൃ_ഇൻപുട്ട്) അപകടവും

ഒരു സാധാരണ തെറ്റ് നോക്കാം:

പ്രിന്റ്എഫ്(ഉപയോക്തൃ_ഇൻപുട്ട്);

ഈ ഒറ്റ വരി കുഴപ്പത്തിലേക്കുള്ള നേരിട്ടുള്ള പാതയാണ്. എങ്കിൽ ഉപയോക്തൃ_ഇൻപുട്ട് പോലുള്ള ഒന്ന് അടങ്ങിയിരിക്കുന്നു %x %x % x% %x, അത് നിർദ്ദേശിക്കുന്നു printf മെമ്മറി തുറന്നുകാട്ടിക്കൊണ്ട് സ്റ്റാക്കിന് പുറത്തുള്ള മൂല്യങ്ങൾ വായിക്കാൻ. മോശം, എങ്കിൽ %n ഉൾപ്പെടുത്തിയാൽ, ആക്രമണകാരിക്ക് മെമ്മറിയിലേക്ക് അനിയന്ത്രിതമായ മൂല്യങ്ങൾ എഴുതാൻ കഴിയും.

ഈ പാറ്റേൺ സ്റ്റാക്ക് ഡാറ്റ ചോർത്തുക മാത്രമല്ല ചെയ്യുന്നത്; ഇത് മെമ്മറി കേടാക്കുകയും റിമോട്ട് കോഡ് എക്സിക്യൂഷനിലേക്ക് (RCE) വ്യാപിക്കുകയും ചെയ്യും. പ്രായോഗികമായി ഒരു ഫോർമാറ്റ് സ്ട്രിംഗ് ദുർബലത ഇങ്ങനെയാണ് കാണപ്പെടുന്നത്. നിർദ്ദിഷ്ട ഫ്ലാഗുകളോ സാനിറ്റൈസറുകളോ പ്രവർത്തനക്ഷമമാക്കിയിട്ടില്ലെങ്കിൽ ഈ ദുർബലതകൾ കംപൈലർ പിശകുകളോ മുന്നറിയിപ്പുകളോ ഉയർത്തുന്നില്ല. കൂടാതെ, പല സന്ദർഭങ്ങളിലും, അവ റാപ്പറുകളിലോ യൂട്ടിലിറ്റി ഫംഗ്ഷനുകളിലോ കുഴിച്ചിട്ടിരിക്കുന്നു, ഇത് കാഷ്വൽ കോഡ് അവലോകനങ്ങൾക്ക് അദൃശ്യമാക്കുന്നു.

മെമ്മറി കറപ്ഷൻ 101: യഥാർത്ഥത്തിൽ എന്താണ് അപകടത്തിൽ?

എപ്പോഴാണ് ഒരു fഓർക്കാറ്റ് സ്ട്രിംഗ് ബഗ് ഉപയോഗപ്പെടുത്തിയാൽ, ആക്രമണകാരികൾക്ക് ഇവ ചെയ്യാൻ കഴിയും:

  • ഉപയോഗിച്ച് മെമ്മറി വിലാസങ്ങളും സ്റ്റാക്ക് മൂല്യങ്ങളും ഡംപ് ചെയ്യുക %x or %s
  • സ്റ്റാക്ക് വേരിയബിളുകൾ ഓവർറൈറ്റ് ചെയ്യുക അല്ലെങ്കിൽ വിലാസങ്ങൾ തിരികെ നൽകുക %n
  • മെമ്മറി കറപ്ഷൻ വഴി സെഗ്മെന്റേഷൻ ഫോൾട്ടുകൾ അല്ലെങ്കിൽ ലോജിക് പിശകുകൾ ഉണ്ടാക്കുക
  • പൂർണ്ണ RCE-യിലേക്ക് പിവറ്റ് ചെയ്യുക, പ്രത്യേകിച്ച് ASLR അല്ലെങ്കിൽ സ്റ്റാക്ക് കാനറികൾ പോലുള്ള സംരക്ഷണങ്ങൾ തെറ്റായി കോൺഫിഗർ ചെയ്തിട്ടുണ്ടെങ്കിൽ

സ്റ്റാക്ക് ഫ്രെയിം മനസ്സിലാക്കുന്നത് ഇവിടെ സഹായിക്കുന്നു. printf എത്ര ആർഗ്യുമെന്റുകൾ പ്രതീക്ഷിക്കണമെന്ന് അറിയില്ല; അത് പൂർണ്ണമായും ഫോർമാറ്റ് സ്ട്രിംഗിനെ ആശ്രയിച്ചിരിക്കുന്നു. അതുകൊണ്ടാണ് %x സ്റ്റാക്കിലേക്ക് കയറിച്ചെന്ന് ഡാറ്റ വെളിപ്പെടുത്തുകയോ കൈകാര്യം ചെയ്യുകയോ ചെയ്യുന്നു. ചെറിയ ചോർച്ച മുതൽ ഇൻസ്ട്രക്ഷൻ പോയിന്ററിന്മേലുള്ള പൂർണ്ണ നിയന്ത്രണം വരെ ഫലം വ്യത്യാസപ്പെടുന്നു.

മോഡേൺ കോഡ്ബേസുകളിൽ ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗുകൾ എവിടെയാണ് മറഞ്ഞിരിക്കുന്നത്

ഈ ദുർബലതകൾ ലെഗസി സി കോഡിന് മാത്രമുള്ളതല്ല. അവ ആധുനിക പരിതസ്ഥിതികളിൽ ഒളിഞ്ഞിരിക്കുന്നു:

  • പൈത്തൺ (സിടൈപ്പ്സ്), റസ്റ്റ് (എഫ്എഫ്ഐ), ഗോ (സിജിഒ) നേറ്റീവ് ലൈബ്രറികളുമായി ഇന്റർഫേസ് ചെയ്യുന്ന ബൈൻഡിംഗുകൾ പലപ്പോഴും നേർത്ത റാപ്പറുകളായി പ്രവർത്തിക്കുന്നു, പാരാമീറ്ററുകൾ നേരിട്ട് ദുർബലമായ സി ഫംഗ്ഷനുകളിലേക്ക് കൈമാറുന്നു.
  • മൂന്നാം കക്ഷി CLI ഉപകരണങ്ങളും ഡെമണുകളും മതിയായ അവലോകനമില്ലാതെ പഴയ C കോഡ് സംയോജിപ്പിക്കുന്നു.
  • ലോഗിംഗ് റാപ്പറുകൾ പോലെ ഡീബഗ്_ലോഗ്(ഉപയോക്തൃ_ഇൻപുട്ട്) അത് printf-സ്റ്റൈൽ ഫംഗ്ഷനുകളിലേക്കുള്ള ആന്തരിക റൂട്ട്
  • ലെഗസി പാറ്റേണുകളോ കുറഞ്ഞ മൂല്യനിർണ്ണയമോ അടങ്ങിയ യാന്ത്രികമായി ലയിപ്പിച്ച OSS സംഭാവനകൾ.

നേറ്റീവ് സി ലെയറിലെ ഒരു ബഗ് അവിടെ നിൽക്കില്ല; അത് മുകളിലേക്ക് വ്യാപിക്കുന്നു. ഒരു സി ഫംഗ്ഷൻ പോലെയാണെങ്കിൽ ലോഗ്_ഇവന്റ്(ചാർ *സന്ദേശം) സുരക്ഷിതമല്ല, പൈത്തണിൽ നിന്ന് ഇതിനെ വിളിക്കുന്നത് വഴി ctypes, തുരുമ്പ് വഴി സുരക്ഷിതമല്ലാത്ത പുറംലോകം, അല്ലെങ്കിൽ വഴി പോകുക സിജിഒ ഉയർന്ന തലത്തിലുള്ള പരിതസ്ഥിതികളിലേക്ക് ദുർബലത കൊണ്ടുവരുന്നു.

പ്രശ്നം എന്താണ്? ഈ സംയോജനങ്ങൾ സാധാരണമാണ്, കൂടാതെ DevSecOps പലപ്പോഴും ബൈൻഡിംഗുകൾ സുരക്ഷിതമായ അമൂർത്തീകരണങ്ങളാണെന്ന് അനുമാനിക്കുന്നു. അവ അങ്ങനെയല്ല. സ്റ്റാക്കിന്റെ ഒരു ലെയറിലുള്ള ഒരു ഫോർമാറ്റ് സ്ട്രിംഗ് ദുർബലത ഇന്റർഫേസുകളിലുടനീളം നിശബ്ദമായി പ്രചരിപ്പിക്കാൻ കഴിയും, പ്രത്യേകിച്ചും ശക്തമായ ടൈപ്പ് എൻഫോഴ്‌സ്‌മെന്റോ ഇൻപുട്ട് സാനിറ്റൈസേഷനോ ഇല്ലാതെ നേറ്റീവ് മൊഡ്യൂളുകൾ റാപ്പ് ചെയ്യുമ്പോൾ. അടിസ്ഥാന സി ഫംഗ്ഷൻ ദുർബലമാണെങ്കിൽ, ഉയർന്ന ലെവൽ കോഡ് ഫോർമാറ്റ് സ്ട്രിംഗ് ദുർബലതയെ അവകാശമാക്കുന്നു.

CI/CD Pipelines: ഇത് നിങ്ങളുടെ സുരക്ഷാ പരിശോധനകളെ എങ്ങനെ മറികടക്കുന്നു

ആധുനികമായ pipelineവേഗതയ്ക്കായിട്ടാണ് s രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്, പക്ഷേ ആ വേഗത ബ്ലൈൻഡ് സ്പോട്ടുകൾ അവതരിപ്പിക്കുന്നു:

  • SAST ഉപകരണങ്ങൾ കളങ്കപ്പെട്ട ഡാറ്റ കണ്ടെത്തുന്നതിനായി പ്രത്യേകം കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിൽ, ഡൈനാമിക് ഫോർമാറ്റ് സ്ട്രിംഗ് ഉപയോഗം അപൂർവ്വമായി മാത്രമേ പിടിക്കൂ.
  • പിആർ അവലോകകർ സി ഫംഗ്ഷൻ സ്വഭാവത്തിന് അടിസ്ഥാനമായല്ല, യുക്തിയിലോ ശൈലിയിലോ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു.
  • ഉപരിതലത്തിൽ നിരുപദ്രവകരമായി തോന്നുന്ന ദുർബലമായ പാക്കേജുകളെ CI ലയനങ്ങൾ പുൾ ഇൻ ചെയ്യുന്നു.
  • ഡിപൻഡൻസി സ്കാനറുകൾ പലപ്പോഴും നേറ്റീവ് കോഡ് അല്ലെങ്കിൽ സുരക്ഷിതമല്ലാത്ത ലോഗിംഗ് ലോജിക് അവഗണിക്കുക

Standard SAST നോൺ-ലിറ്ററൽ ഫോർമാറ്റ് ആർഗ്യുമെന്റുകൾ കണ്ടെത്തുന്നതിന് കസ്റ്റം നിയമങ്ങൾ നടപ്പിലാക്കിയില്ലെങ്കിൽ, ടൂളുകൾക്ക് പലപ്പോഴും ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗുകൾ കണ്ടെത്തുന്നതിൽ പരാജയപ്പെടും. ഈ അനുയോജ്യമായ പരിശോധനകൾ ഇല്ലാതെ, ഡൈനാമിക് ഫോർമാറ്റ് സ്ട്രിംഗുകൾ കണ്ടെത്താനാകാതെ എളുപ്പത്തിൽ വഴുതിവീഴും.

ഫോർമാറ്റ് സ്ട്രിംഗ്-നിർദ്ദിഷ്ട നിയമങ്ങൾ സംയോജിപ്പിക്കുന്നു CI/CD ഈ ബഗുകളെ നേരത്തെ തിരിച്ചറിയുന്നതിനും തടയുന്നതിനും അത്യന്താപേക്ഷിതമാണ്. ഇതിനർത്ഥം:

  • വിശ്വസനീയമല്ലാത്ത ഇൻപുട്ടുകൾ ഫോർമാറ്റിംഗ് ഫംഗ്ഷനുകളിൽ എത്തുന്നിടത്ത് കോഡ് തടയൽ
  • സ്റ്റാറ്റിക് വിശകലന സമയത്ത് ഡൈനാമിക് ഫോർമാറ്റ് സ്ട്രിംഗുകൾ ഫ്ലാഗ് ചെയ്യുന്നു
  • നിങ്ങളുടെ CI ലയന പ്രക്രിയയുടെ ഭാഗമായി ഈ നയങ്ങൾ നടപ്പിലാക്കൽ

ഇത് കൂടാതെ, നിങ്ങളുടെ pipeline കോഡ് ഉൽ‌പാദനത്തിൽ എത്തുന്നതിനു വളരെ മുമ്പുതന്നെ, മെമ്മറി കറപ്ഷനിലേക്കും ആർ‌സി‌ഇയിലേക്കും നയിച്ചേക്കാവുന്ന ഒരു തരം ദുർബലതകളെക്കുറിച്ച് അദ്ദേഹം അന്ധനാണ്.

ബഗ് കണ്ടെത്തൽ: GDB, സ്റ്റാറ്റിക് ടൂളുകൾ എന്നിവ ഉപയോഗിച്ച് പ്രായോഗിക കണ്ടെത്തൽ

ഈ ബഗുകൾ കണ്ടെത്തി സ്ഥിരീകരിക്കുന്നതിന്, മാനുവൽ ഡീബഗ്ഗിംഗും ഓട്ടോമേറ്റഡ് സ്റ്റാറ്റിക് വിശകലനവും സംയോജിപ്പിച്ച് ഉപയോഗിക്കുക.

GDB ഉപയോഗിച്ചുള്ള മാനുവൽ വിശകലനം:

ഫോർമാറ്റ് സ്ട്രിംഗ് ദുരുപയോഗം സംശയിക്കുമ്പോഴും റൺടൈമിൽ അത് എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കേണ്ടതുണ്ടെങ്കിലും GDB പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാണ്:

  • ബ്രേക്ക് ഓൺ printf അല്ലെങ്കിൽ അനുബന്ധ പ്രവർത്തനങ്ങൾ കോൾ സ്റ്റാക്കും ആർഗ്യുമെന്റുകളും പരിശോധിക്കാൻ.
  • സ്റ്റാക്കിൽ അപാകതകൾ, അപ്രതീക്ഷിത മെമ്മറി റീഡുകൾ, ഫോർമാറ്റിംഗ് സമയത്ത് ക്രാഷുകൾ, അല്ലെങ്കിൽ വിചിത്രമായ മൂല്യങ്ങൾ എന്നിവ തിരയുക.
  • ആവർത്തിച്ചുള്ളതുപോലുള്ള അമൂർത്ത ഇൻപുട്ട് %x or %s ഫോർമാറ്റ് സ്ട്രിംഗ് സ്റ്റാക്കിലൂടെ എത്ര ആഴത്തിൽ സഞ്ചരിക്കുന്നുവെന്ന് തിരിച്ചറിയാൻ സഹായിക്കും.

മാനുവൽ മുതൽ ഓട്ടോമേറ്റഡ് വരെ:

ദുരുപയോഗത്തിന്റെ ഒരു രീതി നിങ്ങൾ നേരിട്ട് സ്ഥിരീകരിച്ചുകഴിഞ്ഞാൽ, അടുത്ത ഘട്ടം ആ ഉൾക്കാഴ്ചയെ ഒരു ഓട്ടോമേറ്റഡ് നിയമമാക്കി മാറ്റുക എന്നതാണ്. ഉദാഹരണത്തിന്:

  • ഉപയോഗം grep 'printf(' src/' എന്നതിൽ നിന്ന് വ്യത്യസ്തമായി 'printf റോ ഫോർമാറ്റിംഗ് കോളുകൾ കണ്ടെത്താൻ.
  • ഏത് ഉപയോഗവും ഫ്ലാഗ് ചെയ്യുന്നതിന് ഇത് സ്ക്രിപ്റ്റിംഗുമായി സംയോജിപ്പിക്കുക printf( ആദ്യത്തെ വാദം എവിടെയാണ് അല്ല ഒരു അക്ഷരീയ സ്ട്രിംഗ്.
  • ഫോർമാറ്റ് സ്ട്രിംഗ് മൂല്യങ്ങൾ കണ്ടെത്തുന്നതിനും, അക്ഷരീയമല്ലാത്ത പാതകളെ ചലനാത്മകമായി തിരിച്ചറിയുന്നതിനും AST-അധിഷ്ഠിത ഉപകരണങ്ങൾ ഉപയോഗിക്കുക.
  • വിശ്വസനീയമല്ലാത്ത ഇൻപുട്ട് ഫോർവേഡ് ചെയ്യുന്ന റാപ്പർ ഫംഗ്‌ഷനുകൾ പോലുള്ള പതിവ് മാനുവൽ കണ്ടെത്തലുകൾ, ഈ കേസുകൾ സ്വയമേവ തടയുന്ന CI നിയമങ്ങളിലേക്ക് വിവർത്തനം ചെയ്യുക.

CI ഇന്റഗ്രേഷൻ നുറുങ്ങ്: നിങ്ങളുടെ കോൺഫിഗർ ചെയ്യുക pipeline ഏതെങ്കിലും ഫോർമാറ്റ് ഫംഗ്ഷൻ അതിന്റെ ഫോർമാറ്റ് സ്ട്രിംഗായി ഡൈനാമിക് ഇൻപുട്ട് സ്വീകരിക്കുകയാണെങ്കിൽ ബിൽഡുകൾ പരാജയപ്പെടും. GDB, റൺടൈം ഡീബഗ്ഗിംഗ് എന്നിവയിൽ നിന്ന് നിങ്ങൾ പഠിച്ച കാര്യങ്ങൾ നടപ്പിലാക്കുന്ന ഒരു ഫയർവാൾ ആയി ഈ പരിശോധനകൾ പ്രവർത്തിക്കുന്നു.

നിങ്ങളുടെ കോഡ് കഠിനമാക്കൽ: ഇൻപുട്ടും സുരക്ഷിത പാറ്റേണുകളും സാധൂകരിക്കുന്നു

ഫോർമാറ്റ് സ്ട്രിംഗ് ദുർബലത തടയുന്നത് സുരക്ഷിതമായ കോഡിംഗ് ശീലങ്ങൾ സ്വീകരിക്കുന്നതിലൂടെയും അവ സ്കെയിലിൽ നടപ്പിലാക്കുന്നതിലൂടെയും ആരംഭിക്കുന്നു:

  • എല്ലായ്പ്പോഴും സ്ഥിര ഫോർമാറ്റ് സ്ട്രിംഗുകൾ ഉപയോഗിക്കുക: printf(“%s”, ഉപയോക്തൃ_ഇൻപുട്ട്);, ഫോർമാറ്റായി ഒരിക്കലും റോ ഇൻപുട്ട് നൽകരുത്.
  • സുരക്ഷിതമായ വകഭേദങ്ങൾ തിരഞ്ഞെടുക്കുക: എസ്എൻപ്രിന്റ്എഫ്, vsഎൻപ്രിന്റ്എഫ്, ബഫർ വലുപ്പങ്ങൾ നിയന്ത്രിക്കാനും ഔട്ട്‌പുട്ട് ഘടന നടപ്പിലാക്കാനും സമാനമായ പ്രവർത്തനങ്ങൾ സഹായിക്കുന്നു.
  • എല്ലാ ഉപയോക്തൃ ഇൻപുട്ടുകളും സാധൂകരിക്കുക റാപ്പർ ഫംഗ്ഷനുകളിൽ പോലും ലോഗിംഗ് അല്ലെങ്കിൽ ഫോർമാറ്റിംഗ് ലോജിക്കിൽ പ്രവേശിച്ചേക്കാം.

നിങ്ങൾ പ്രാപ്തമാക്കേണ്ട യാന്ത്രിക ലഘൂകരണങ്ങൾ:

  • വിലാസം: സാനിറ്റൈസർ (അസാൻ): ബഫർ ഓവർഫ്ലോകളും സ്റ്റാക്ക് ലംഘനങ്ങളും ഉൾപ്പെടെ, മെമ്മറി കറപ്ഷൻ തത്സമയം കണ്ടെത്തുന്നു, പലപ്പോഴും തെറ്റായ ഫോർമാറ്റ് സ്ട്രിംഗുകൾ മൂലമുണ്ടാകുന്നവ.
  • നിർവചിക്കാത്ത പെരുമാറ്റ സാനിറ്റൈസർ (UBSan): ഫോർമാറ്റ് ഫംഗ്ഷനുകളിലേക്ക് പൊരുത്തപ്പെടാത്തതോ നഷ്‌ടമായതോ ആയ ആർഗ്യുമെന്റുകൾ കൈമാറുന്നത് പോലുള്ള നിർവചിക്കാത്ത പെരുമാറ്റം ഫ്ലാഗ് ചെയ്യുന്നു.
  • -ഡി_ഫോർട്ടിഫൈ_സോഴ്‌സ്=2: സമാഹരണ സമയത്ത് libc ഫംഗ്‌ഷനുകളിലേക്ക് ലൈറ്റ്‌വെയ്റ്റ് ചെക്കുകൾ ചേർക്കുന്നു, കുറഞ്ഞ പ്രകടന ഓവർഹെഡിൽ ഫോർമാറ്റ് സ്ട്രിംഗ് ദുരുപയോഗം അല്ലെങ്കിൽ ബഫർ ഓവർറണുകൾ പിടിക്കാൻ സഹായിക്കുന്നു.

വികസന പരിതസ്ഥിതികളിലും CI പരിതസ്ഥിതികളിലും ഷിപ്പ് ചെയ്യുന്നതിന് മുമ്പ് പ്രശ്നങ്ങൾ കണ്ടെത്തുന്നതിന് ഈ ഉപകരണങ്ങൾ പ്രാപ്തമാക്കണം. സ്റ്റാറ്റിക് വിശകലനവുമായി സംയോജിപ്പിച്ച്, അവ ശക്തമായ ഒരു സുരക്ഷാ വല സൃഷ്ടിക്കുന്നു, റൺടൈം വരെ അല്ലെങ്കിൽ ചൂഷണത്തിന് ശേഷം ശ്രദ്ധിക്കപ്പെടാതെ പോയേക്കാവുന്ന ദുരുപയോഗത്തെക്കുറിച്ച് നിങ്ങളെ മുന്നറിയിപ്പ് നൽകുന്നു.

നുറുങ്ങ്: ഈ സാനിറ്റൈസറുകൾ നിങ്ങളുടെ നിർമ്മാണത്തിന്റെ ഭാഗമാക്കൂ pipeline പരാജയപ്പെടൽ മുന്നറിയിപ്പ് നയങ്ങൾക്കൊപ്പം. ഏതൊരു ഫോർമാറ്റ് സ്ട്രിംഗ് ലംഘനത്തെയും പരാജയപ്പെട്ട പരിശോധനയായി കണക്കാക്കുക.

സ്ട്രിംഗ് ബഗുകൾ ഷിപ്പ് ചെയ്യുന്നതിന് മുമ്പ് സൈജെനി ഫോർമാറ്റ് ചെയ്യുന്നത് എങ്ങനെ നിർത്തുന്നു

സൈജെനി ദൃഢമാക്കുക CI/CD കണ്ടെത്തൽ മാത്രമല്ല, തത്സമയ പ്രതിരോധത്തോടൊപ്പം ഫോർമാറ്റ് സ്ട്രിംഗ് സുരക്ഷ നടപ്പിലാക്കുന്നതിലൂടെ:

  • അപകടകരമായ പാറ്റേണുകൾ തിരിച്ചറിയുന്നു പോലെ പ്രിന്റ്എഫ്(ഉപയോക്തൃ_ഇൻപുട്ട്) കോഡ് ഉൽപ്പാദനത്തിൽ എത്തുന്നതിനുമുമ്പ്
  • സ്റ്റാറ്റിക് കളങ്ക വിശകലനം പ്രയോഗിക്കുന്നു ഒന്നിലധികം ലെയറുകളിലോ റാപ്പർ കോളുകളിലോ പോലും ഫോർമാറ്റിംഗ് ഫംഗ്ഷനുകളിലേക്ക് വിശ്വസനീയമല്ലാത്ത ഇൻപുട്ടുകൾ കണ്ടെത്തുന്നതിന്
  • സുരക്ഷിതമല്ലാത്ത ബ്ലോക്കുകൾ യാന്ത്രികമായി ലയിക്കുന്നു GitHub, GitLab, Bitbucket, Jenkins എന്നിവയിൽ
  • വ്യക്തമായ ഫീഡ്‌ബാക്ക് നൽകുന്നു കോൾ ട്രെയ്‌സുകൾ, ഇൻപുട്ട് ഒറിജിൻ, പ്രീ എന്നിവ ഉപയോഗിച്ച്cisഇ പരിഹാര നിർദ്ദേശങ്ങൾ

പ്രവർത്തനത്തിലെ ഉദാഹരണം: iഎഫ്എ ഡെവലപ്പർ commitലൈൻ ആണ് ലോഗ്_ഡീബഗ്(ഉപയോക്തൃ_ഇൻപുട്ട്) ഒപ്പം ലോഗ്_ഡീബഗ്() ആന്തരികമായി ഒരു ദുർബലനെ പൊതിയുന്നു printf, Xygeni കോൾ ഗ്രാഫ് പിന്തുടരുന്നു, ഡൈനാമിക് ഇൻപുട്ട് പാത്ത് തിരിച്ചറിയുന്നു, ലയനം തടയുന്നു. ഡെവലപ്പർ അവരുടെ ലയന അഭ്യർത്ഥനയിൽ ഒരു ഉടനടി സന്ദേശം കാണുന്നു:

⚠️ ഫോർമാറ്റ് സ്ട്രിംഗ് ദുർബലത കണ്ടെത്തി: ഉപയോക്തൃ_ഇൻപുട്ട് ഒഴുകുന്നു src/logger.c:42-ൽ printf(). ഒരു നിശ്ചിത ഫോർമാറ്റ് സ്ട്രിംഗ് ഉപയോഗിച്ച് ഇൻപുട്ടുകൾ സാധൂകരിക്കുക.

ഈ ഫീഡ്‌ബാക്ക് MR/PR പ്രക്രിയയുടെ ഭാഗമായി GitHub, GitLab, Jenkins, അല്ലെങ്കിൽ Bitbucket എന്നിവയിൽ നേരിട്ട് ഡെലിവറി ചെയ്യുന്നു. ഡെവലപ്പർമാർക്ക് ഇത് നഷ്ടപ്പെടുത്താൻ കഴിയില്ല, മാത്രമല്ല പ്രശ്നം എങ്ങനെ പരിഹരിക്കാമെന്നതിനെക്കുറിച്ചുള്ള പ്രവർത്തനക്ഷമമായ മാർഗ്ഗനിർദ്ദേശം അവർക്ക് ലഭിക്കുന്നു, വെറും അവ്യക്തമായ മുന്നറിയിപ്പ് മാത്രമല്ല.

സംയോജനം സുഗമമാണ്:

  • ഓരോ റിപ്പോ, ബ്രാഞ്ച് അല്ലെങ്കിൽ പ്രോജക്റ്റ് അനുസരിച്ചുള്ള നയ നിയമങ്ങൾ കോൺഫിഗർ ചെയ്യുക
  • സുരക്ഷിതമല്ലാത്ത ഫോർമാറ്റ് ഉപയോഗത്തിന് ബ്ലോക്കിംഗ് വ്യവസ്ഥകൾ നടപ്പിലാക്കുക
  • സി/സി++, പൈത്തൺ, ഗോ, റസ്റ്റ്, അവയുടെ നേറ്റീവ് ബൈൻഡിംഗുകൾ എന്നിവയിലുടനീളം സുരക്ഷിതമല്ലാത്ത ഇൻപുട്ടുകൾ യാന്ത്രികമായി കണ്ടെത്തുക.

നിങ്ങളുടെ വർക്ക്ഫ്ലോയിൽ സുരക്ഷ ഉൾച്ചേർക്കുന്നതിലൂടെയും ഡെവലപ്പർമാരുടെ ആദ്യ ഫീഡ്‌ബാക്ക് നൽകുന്നതിലൂടെയും, ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗുകൾ ഒരിക്കലും ഉൽപ്പാദനത്തിലേക്ക് എത്തുന്നില്ലെന്നും അവ ഉയർന്നുവരുന്നിടത്ത് തന്നെ നിർത്തുന്നുണ്ടെന്നും സൈജെനി ഉറപ്പാക്കുന്നു.

അവസാന വാക്ക്: ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗുകൾ മരിച്ചിട്ടില്ല.

ആധുനിക ഭാഷാ ഉപകരണങ്ങൾ ഉണ്ടെങ്കിലും, ഫോർമാറ്റ് സ്ട്രിംഗ് ബഗുകൾ ഇപ്പോഴും പ്രത്യക്ഷപ്പെടുന്നുണ്ട്. അവ റാപ്പറുകൾ, തേർഡ്-പാർട്ടി പാക്കേജുകൾ, അണ്ടർ-റിവ്യൂഡ് പിആർ-കൾ എന്നിവയിലൂടെ കടന്നുപോകുന്നു. അവയുടെ ആഘാതം യഥാർത്ഥമാണ്: മെമ്മറി കറപ്ഷൻ, ഡാറ്റ ചോർച്ച, സാധ്യതയുള്ള ആർ‌സി‌ഇ.

നിങ്ങളുടെ കോഡ് ഓഡിറ്റ് ചെയ്യുക. നിങ്ങളുടെ കഠിനമാക്കുക CI/CD. കണ്ടെത്തൽ നിയമങ്ങൾ നടപ്പിലാക്കുകയും അവ നടപ്പിലാക്കുകയും ചെയ്യുക. ഇത് വെറും പഴയ ബാഗേജ് മാത്രമല്ല, വ്യക്തമായ കാഴ്ചയിൽ മറഞ്ഞിരിക്കുന്ന ഒരു സജീവ ഭീഷണിയാണ്. പ്രശ്നങ്ങൾ നേരത്തേ കണ്ടെത്തുന്നതിന് ഓട്ടോമേറ്റഡ് ഉപകരണങ്ങൾ, സ്റ്റാറ്റിക് വിശകലനം, റൺടൈം സാനിറ്റൈസറുകൾ എന്നിവ ഉപയോഗിക്കുക. കോഡ് കംപൈൽ ചെയ്യപ്പെടുന്നു എന്നതുകൊണ്ട് മാത്രം നിങ്ങൾ സുരക്ഷിതരാണെന്ന് കരുതരുത്.

സ്കാ-ടൂളുകൾ-സോഫ്റ്റ്‌വെയർ-കോമ്പോസിഷൻ-വിശകലന-ടൂളുകൾ
നിങ്ങളുടെ സോഫ്റ്റ്‌വെയർ അപകടസാധ്യതകൾക്ക് മുൻഗണന നൽകുക, പരിഹരിക്കുക, സുരക്ഷിതമാക്കുക
നിങ്ങളുടെ സൗജന്യ അക്കൗണ്ട് നേടൂ.
ക്രെഡിറ്റ് കാർഡ് ആവശ്യമില്ല.

നിങ്ങളുടെ സോഫ്റ്റ്‌വെയർ വികസനവും ഡെലിവറിയും സുരക്ഷിതമാക്കുക

സൈജെനി ഉൽപ്പന്ന സ്യൂട്ടിനൊപ്പം