ለአስርተ ዓመታት፣ የማይንቀሳቀስ የመተግበሪያ ደኅንነት ሙከራ (SAST) የደኅንነት ቡድኖች የኮድ ደረጃን የሚገመግሙባቸው በጣም ውጤታማ መንገዶች አንዱ ነው።
ነገር ግን የCodex ደኅንነትን ስንገነባ፣ ሆን ብለን የንድፍ ምርጫ አድርገናል፦ የማይንቀሳቀስ የትንታኔ ሪፖርት በማስመጣት እና ወኪሉ እንዲመረምረው በመጠየቅ አልጀመርንም። ሥርዓቱን በራሱ ማከማቻ—አርክቴክቸሩን፣ የመተማመን ወሰኖቹን እና የታሰበውን ባህሪ—እንዲጀምር እና አንድ ሰው በእሱ ላይ ጊዜ እንዲያሳልፍ ከመጠየቁ በፊት የሚያገኘውን ለማረጋገጥ እንዲረዳ ነድፈነዋል።
ምክንያቱ ቀላል ነው፦ በጣም አስቸጋሪዎቹ ተጋላጭነቶች ብዙውን ጊዜ የውሂብ ፍሰት ችግሮች አይደሉም። እነሱ ኮድ የደኅንነት ፍተሻ እየተፈጸመ እንደሚመስል ሲታይ ነገር ግን ያ ፍተሻ ሥርዓቱ የሚያስፈልገውን ባህሪ በእውነት እንደሚያረጋግጥ ሳይሆን ሲቀር ይከሰታሉ። በሌላ አነጋገር፣ ተግዳሮቱ መረጃ በፕሮግራም ውስጥ እንዴት እንደሚንቀሳቀስ መከታተል ብቻ አይደለም—በኮዱ ውስጥ ያሉት መከላከያዎች በእርግጥ ይሠራሉ ወይ የሚለውን መወሰን ነው።
SAST ብዙውን ጊዜ እንደ ንፁህ የቧንቧ መስመር ሆኖ ይቀረፃል፦ የማይታመን ግብዓት ምንጭን መለየት፣ በፕሮግራሙ በኩል ውሂብን መከታተል እና ያ መረጃ ያለ ንፅህና ወደ ስሱ የውሃ ማጠራቀሚያ የሚደርስባቸውን ጉዳዮች መጠቆም። የሚያምር ሞዴል ነው፣ እና ብዙ እውነተኛ ስህተቶችን ይሸፍናል።
በተግባር፣ SAST በመጠን ረገድ ተደራሽ ሆኖ እንዲቆይ ግምቶችን ማድረግ አለበት—በተለይም በተዘዋዋሪ፣ ተለዋዋጭ ስርጭት፣ መልሶ ማገገሚያዎች፣ ነጸብራቅ እና ማዕቀፍ-ከባድ የቁጥጥር ፍሰት ባላቸው እውነተኛ የኮድ ቤዞች። እነዚያ ግምቶች SASTን የሚያደናቅፉ አይደሉም፤ ኮድን ሳይተገብሩት ለማመዛዘን የመሞከር እውነታ ናቸው።
Codex ደኅንነት በSAST ሪፖርት የማይጀምረው ለዚህ ብቻ አይደለም።
ጥልቅ የሆነው ችግር አንድን ምንጭ በተሳካ ሁኔታ ወደ ማጠቢያ ገንዳ ከወሰዱ በኋላ የሚሆነው ነገር ነው።
የማይንቀሳቀስ ትንተና ግብዓትን በበርካታ ተግባራት እና ንብርብሮች በትክክል ቢከታተልም እንኳን፣ ተጋላጭነት መኖሩን የሚወስነውን ጥያቄ መመለስ አለበት፦
አንድ የተለመደ ንድፍ ይውሰዱ፦ ያልታመነ ይዘት ከማቅረብዎ በፊት እንደ sanitize_html() ያሉ የኮድ ጥሪዎች። የማይንቀሳቀስ ተንታኝ የሳኒታይዘር መሥራቱን ማየት ይችላል። ብዙውን ጊዜ ሊወስን የማይችለው ነገር፣ ያ ሳኒታይዘር ለተጠቀሰው የምስል አውድ፣ ለቴምፕል ሞተር፣ ለኮድ ባህሪ እና ለተያያዙ ተሻጋሪ ለውጦች በቂ መሆኑን ነው።
ነገሮች አስቸጋሪ የሚሆኑበት ቦታ እዚህ ነው። ችግሩ መረጃው ወደ ውህድ ውስጥ መግባቱ ብቻ አይደለም። ይህ በኮድ ውስጥ ያሉ ማረጋገጫዎች ሥርዓቱ እንደሚያምነው መልኩ እሴቱን በእውነት ይገድባሉን የሚለው ጉዳይ ነው።
በተለየ መንገድ ሲቀመጡ፦ «ኮዱ ሳኒታይዘርን ይለዋል» እና «ሥርዓቱ ደኅንነቱ የተጠበቀ ነው» መካከል ትልቅ ልዩነት አለ።
በእውነተኛ ሥርዓቶች ውስጥ ሁልጊዜ የሚታይ ንድፍ ይኸውና።
የድር መተግበሪያ የJSON ክፍያ ይቀበላል፣ redirect_urlን ያወጣል፣ ከallowlist regex ጋር በማነፃፀር ያረጋግጣል፣ URL-decode ያደርጋል፣ እና ውጤቱን ወደ redirect handler ያስተላልፋል።
አንድ ክላሲክ የምንጭ-ወደ-መስመጥ ሪፖርት ፍሰቱን ሊገልጽ ይችላል፦
ያልታመነ ግቤት → የሬጅክስ ፍተሻ → የዩአርኤል ዲኮድ → አቅጣጫ አዙር
ግን ትክክለኛው ጥያቄ ማረጋገጫ መኖሩ አለመኖሩ አይደለም። ያ ፍተሻ ከሚከተሉት ለውጦች በኋላ እሴቱን አሁንም ይገድበው እንደሆነ ነው።
regex ከመተርጎም በፊት ቢሠራ፣ redirect handler እንደሚተረጎመው መንገድ በእውነት ተተርጎም የURLን ያገድባል?
ለዚህ መልስ መስጠት ማለት ስለ አጠቃላይ የትራንስፎርሜሽን ሰንሰለት ማሰብ ማለት ነው፦ regex ምን እንደሚፈቅድ፣ ዲኮዲንግ እና ኖርማላይዜሽን እንዴት እንደሚሠሩ፣ የURL ትንተና የጠርዝ ጉዳዮችን እንዴት እንደሚይዝ እና ሪቨርስ ሎጂክ እቅዶችን እና ባለስልጣናትን እንዴት እንደሚፈታ።
በተግባር ላይ አስፈላጊ የሆኑት ብዙዎቹ ተጋላጭነቶች እንደዚህ ይመስላሉ፦ የአሠራር ቅደም ተከተል ስህተቶች፣ ከፊል መደበኛነት፣ አሻሚ ነገሮችን መተንተን እና በማረጋገጫ እና በትርጓሜ መካከል አለመጣጣም። የውሂብ ፍሰት ይታያል። ድክመቱ ገደቦች በለውጥ ሰንሰለት ላይ እንዴት እንደሚተላለፉ—ወይም እንዴት እንደማይተላለፉ—ውስጥ ነው።
ይህ ንድፈ-ሐሳባዊ ንድፍ ብቻ አይደለም። በCVE-እ.ኤ.አ 2024-29041(በአዲስ መስኮት ውስጥ ይክፈታል)፣ ኤክስፕረስ በክፍት ሪቨርስ ችግር ተጎድቷል፤ በዚህም ምክንያት የተበላሹ URLዎች የተለመዱ የተፈቀደ ዝርዝር አተገባበሮችን ማለፍ ችለዋል፤ ምክንያቱም ሪቨርስ ኢላማዎች እንዴት እንደተቀዱ እና ከዚያም እንደተተረጎሙ። የውሂብ ፍሰቱ ቀጥተኛ ነበር። በጣም አስቸጋሪው ጥያቄ—እና ስህተቱ መኖሩን የሚወስነው—የትራንስፎርሜሽን ሰንሰለቱ ከተጠናቀቀ በኋላ ማረጋገጫው አሁንም መያዙን ነው።
የCodex ደኅንነት የተገነባው በቀላል ግብ ላይ ነው፦ ችግሮችን በጠንካራ ማስረጃዎች በማሳየት የመለየት ሂደትን መቀነስ። በምርቱ ውስጥ፣ ይህ ማለት የሪፖ-ተኮር አውድ (የስጋት ሞዴልን ጨምሮ) መጠቀም እና ከፍተኛ ምልክት ያላቸውን ችግሮች ከማየታቸው በፊት በተናጠል አካባቢ ማረጋገጥ ማለት ነው።
የCodex ደኅንነት «ማረጋገጫ» ወይም «ንፅህና» የሚመስል ድንበር ሲያጋጥመው፣ እንደ አመልካች ሳጥን አድርጎ አይመለከተውም። ኮዱ ምን ዋስትና ለመስጠት እየሞከረ እንደሆነ ለመረዳት ይሞክራል—ከዚያም ያንን ዋስትና ለማሳሳት ይሞክራል።
በተግባር፣ ይህ ብዙውን ጊዜ የሚከተሉትን ድብልቅ ይመስላል፦
- ተዛማጅ የሆነውን የኮድ ዱካ ሙሉ የመረጃ ማከማቻ አውድ ያለው፣ የደኅንነት ተመራማሪ የሚያደርገውን መንገድ ማንበብ እና በዓላማ እና በአተገባበር መካከል አለመጣጣሞችን መፈለግ። ይህ አስተያየቶችን ያካትታል፣ ነገር ግን ሞዴሉ አስተያየቶችን ማመን የለበትም፣ ስለዚህ //|\Halvar ሲጨምር እንዲህ ይላል፦ ይህ ከኮድዎ በላይ የሆነ ስህተት አይደለም፣ በእርግጥ ስህተት ካለ አያደናግርም።
- ችግሩን ወደ ትንሹ ሊፈተሽ ወደሚችል ቁራጭ (ለምሳሌ፣ በአንድ ግብዓት ዙሪያ ያለውን የትራንስፎርሜሽን ቧንቧ) በመቀነስ፣ የቀረው የሥርዓቱ ክፍል ሳይስተጓጎል ስለሱ ማሰብ ይችላሉ። በዚህ መልኩ፣ የCodex ደኅንነት ትናንሽ የኮድ ቁርጥራጮችን አውጥቶ ከዚያም ማይክሮ-ፉዘሮችን ይጽፋል።
- እያንዳንዱን ፍተሻ ለየብቻ ከማስተናገድ ይልቅ በለውጦቹ ላይ ስለሚደረጉ ገደቦች ማመዛዘን። አግባብ በሆነ ጊዜ፣ ይህ እንደ ማረጋገጥ ችሎታ ጥያቄ መደበኛ ማድረግን ሊያካትት ይችላል። በሌላ አነጋገር፣ ሞዴሉን ለz3-solver ያለው የPython አካባቢ መዳረሻ እንሰጣለን፣ እና አስፈላጊ በሚሆንበት ጊዜ ሁሉ፣ ልክ አንድ ሰው በተለይ ውስብስብ የሆነ የግቤት ገደብ ችግርን ሲመልስ ማድረግ እንዳለበት ሁሉ፣ እሱንም መጠቀም ጥሩ ነው። ይህ በተለይ መደበኛ ባልሆኑ አርክቴክቸሮች ላይ የኢንቲጀር ፍሌክስ ወይም ተመሳሳይ ስህተቶችን ለመመልከት ጠቃሚ ነው።
- በተቻለ መጠን መላምቶችን በአሸዋ ሳጥን ውስጥ በማረጋገጫ አካባቢ መፈጸም፣ «ይህ ችግር ሊሆን ይችላል» የሚለውን «ይህ ችግር ነው» ለመለየት። ኮዱ በስህተት ማረም ሁነታ የተጠናቀረ ከሆነ ከጫፍ እስከ ጫፍ ያለው የPoC አገልግሎት የተሻለ ማረጋገጫ የለም።
ይህ ቁልፍ ለውጥ ነው፦ ሥርዓቱ «ፍተሻ አለ» ላይ ከማቆም ይልቅ «የማይለዋወጥ መያዣዎችን (ወይም የለውም) ይገፋፋል፣ እና ማስረጃው ይኸውልህ»። እና ሞዴሉ ለዚያ ሥራ ምርጡን መሣሪያ ይመርጣል።
ምክንያታዊ ምላሽ፦ ለምን ሁለቱንም አያደርጉም? በSAST ሪፖርት ይጀምሩ፣ ከዚያም ወኪሉን በጥልቀት ለማመዛዘን ይጠቀሙ።
አስቀድሞ የተሰላ ግኝቶች ጠቃሚ የሚሆኑባቸው አጋጣሚዎች አሉ—በተለይም ለጠባብ እና ለታወቁ የሳንካ ክፍሎች። ነገር ግን ተጋላጭነቶችን በአውድ ውስጥ ለማግኘት እና ለማረጋገጥ የተነደፈ ወኪል፣ ከSAST ሪፖርት ጀምሮ ሦስት ሊገመቱ የሚችሉ የውድቀት ሁነታዎችን ይፈጥራል።
በመጀመሪያ፣ ያለጊዜው መጥበብን ሊያበረታታ ይችላል። የግኝቶች ዝርዝር አንድ መሣሪያ አስቀድሞ የታየበትን ቦታ የሚያሳይ ካርታ ነው። እንደ መነሻ ነጥብ አድርገው የሚመለከቱት ከሆነ፣ ሥርዓቱን በተመሳሳይ ክልሎች ውስጥ ተመጣጣኝ ያልሆነ ጥረትን ለማዋል፣ ተመሳሳይ ረቂቅ ነገሮችን በመጠቀም እና ከመሣሪያው የዓለም ዕይታ ጋር የማይጣጣሙ የችግሮች ክፍሎችን ወደጎደሉ ሊያደናቅፉ ይችላሉ።
ሁለተኛ፣ ለመላቀቅ አስቸጋሪ የሆኑ ስውር ፍርዶችን ሊያስተዋውቅ ይችላል። ብዙ የSAST ግኝቶች ስለ ጽዳት፣ ማረጋገጫ ወይም የመተማመን ወሰኖች ግምቶችን ይገልጻሉ። እነዚህ ግምቶች የተሳሳቱ ከሆኑ—ወይም ያልተሟሉ—ወደ አመክንዮ ዑደት ውስጥ ማስገባት ወኪሉን «ከመመርመር» ወደ «ማረጋገጥ ወይም ውድቅ ማድረግ» ሊያሸጋግረው ይችላል፣ ይህም ወኪሉ እንዲያደርግ የምንፈልገው አይደለም።
ሦስተኛ፣ የማመዛዘን ሥርዓቱን ለመገምገም አስቸጋሪ ሊያደርገው ይችላል። የቧንቧ መስመሩ በSAST ውጤት የሚጀምር ከሆነ፣ ወኪሉ በራሱ ትንተና ያገኘውን ከሌላ መሣሪያ ከወረሰው ነገር ለመለየት አስቸጋሪ ይሆናል። የሥርዓቱን አቅም በትክክል ለመለካት ከፈለጉ ይህ መለያየት አስፈላጊ ነው፣ ይህም ሥርዓቱ ከጊዜ ወደ ጊዜ እንዲሻሻል የሚያስፈልገው ነው።
ስለዚህ የCodex ደኅንነት የገነባነው የደኅንነት ጥናት የሚጀመርበትን ቦታ ለመጀመር ነው፤ ከኮዱ እና ከሥርዓቱ ዓላማ ጀምሮ፣ አንድን ሰው ከማቋረጣችን በፊት የመተማመን አሞሌውን ከፍ ለማድረግ የሚያገለግል ማረጋገጫ።
የSAST መሣሪያዎች ለተዘጋጁት ነገር በጣም ጥሩ ሊሆኑ ይችላሉ፤ እነዚህም ደኅንነታቸው የተጠበቀ የኮድ ደረጃዎችን ማስፈጸም፣ ቀጥተኛ የሆኑ ከምንጭ-ወደ-መስመጥ ችግሮችን መፍታት እና ሊገመቱ ከሚችሉ ልዩነቶች ጋር በመጠን የሚታወቁ ቅጦችን መለየት ናቸው። በጥልቅ የመከላከያ ጠንካራ አካል ሊሆኑ ይችላሉ።
ይህ ጽሑፍ ጠባብ ነው፦ ስለ ባህሪ ለማመዛዘን እና ግኝቶችን ለማረጋገጥ የተነደፈ ወኪል ሥራውን ከማይንቀሳቀሱ የግኝቶች ዝርዝር ጋር በማያያዝ መጀመር የሌለበት ምክንያት ነው።
እንዲሁም ከንፁህ ምንጭ ወደ መስመጥ አስተሳሰብ ጋር የተያያዘ ገደብ መጥቀስ ተገቢ ነው፦ እያንዳንዱ ተጋላጭነት የውሂብ ፍሰት ችግር አይደለም። ብዙ እውነተኛ ውድቀቶች የሁኔታ እና የማይለዋወጡ ችግሮች ናቸው—የሥራ ፍሰት ማለፊያዎች፣ የፈቃድ ክፍተቶች እና «ሥርዓቱ በተሳሳተ ሁኔታ ውስጥ ነው» ስህተቶች። ለእነዚህ ዓይነት ሳንካዎች፣ የተበከለ እሴት ወደ አንድ «አደገኛ መስመጥ» አይደርስም። አደጋው ፕሮግራሙ ሁልጊዜ እውነት ይሆናል ብሎ በሚያስብበት ነገር ላይ ነው።
የደኅንነት መሣሪያ ሥነ-ምህዳር መሻሻልን እንደሚቀጥል እንጠብቃለን፤ የማይለዋወጥ ትንተና፣ ማጉላት፣ የሩጫ ጊዜ ጠባቂዎች እና ወኪል የሥራ ፍሰቶች ሁሉም ሚና ይኖራቸዋል።
የCodex ደኅንነት ጎበዝ እንዲሆን የምንፈልገው ለደኅንነት ቡድኖች ከፍተኛ ወጪ የሚጠይቀው ክፍል ነው፦ «ይህ አጠራጣሪ ይመስላል» የሚለውን ወደ «ይህ እውነት ነው፣ እንዴት እንደሚከሽፍ እነሆ፣ እና ከሥርዓት ዓላማ ጋር የሚስማማ ማስተካከያ ይኸውና» የሚለው ነው።
የCodex ደኅንነት እንዴት የውሂብ ማከማቻዎችን እንደሚቃኝ፣ ግኝቶችን እንደሚያረጋግጥ እና ጥገናዎችን እንደሚያቀርብ የበለጠ ለማወቅ ከፈለጉ፣ ሰነዶቻችንን(በአዲስ መስኮት ውስጥ ይክፈታል) ይመልከቱ።


