முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்

ஸ்மார்ட் ஒப்பந்த பாதுகாப்பு கருவிகளுக்கான வழிகாட்டி

Solidity
ஸ்மார்ட் ஒப்பந்தங்கள்
பாதுகாப்பு
இடைநிலையாளர்
ட்ரெயில்ஆஃப்பிட்ஸ்
7 செப்டம்பர், 2020
5 நிமிட வாசிப்பு

நாம் மூன்று தனித்துவமான சோதனை மற்றும் நிரல் பகுப்பாய்வு நுட்பங்களைப் பயன்படுத்தப் போகிறோம்:

  • Slither உடனான நிலையான பகுப்பாய்வு (Static analysis). நிரலின் அனைத்து பாதைகளும் வெவ்வேறு நிரல் விளக்கக்காட்சிகள் மூலம் (எ.கா., கட்டுப்பாட்டு-ஓட்ட-வரைபடம்) ஒரே நேரத்தில் தோராயமாக மதிப்பிடப்பட்டு பகுப்பாய்வு செய்யப்படுகின்றன.
  • Echidna உடனான ஃபஸ்ஸிங் (Fuzzing). பரிவர்த்தனைகளின் போலி-சீரற்ற (pseudo-random) உருவாக்கத்துடன் குறியீடு செயல்படுத்தப்படுகிறது. கொடுக்கப்பட்ட பண்பை மீறுவதற்கான பரிவர்த்தனைகளின் வரிசையைக் கண்டறிய ஃபஸ்ஸர் (fuzzer) முயற்சிக்கும்.
  • Manticore உடனான குறியீட்டு செயலாக்கம் (Symbolic execution). இது ஒரு முறையான சரிபார்ப்பு நுட்பமாகும், இது ஒவ்வொரு செயலாக்கப் பாதையையும் ஒரு கணித சூத்திரமாக மொழிபெயர்க்கிறது, இதன் அடிப்படையில் கட்டுப்பாடுகளைச் சரிபார்க்கலாம்.

ஒவ்வொரு நுட்பத்திற்கும் நன்மைகள் மற்றும் ஆபத்துகள் உள்ளன, மேலும் அவை குறிப்பிட்ட சந்தர்ப்பங்களில் பயனுள்ளதாக இருக்கும்:

நுட்பம்கருவிபயன்பாடுவேகம்தவறவிட்ட பிழைகள்தவறான எச்சரிக்கைகள்
நிலையான பகுப்பாய்வுSlitherCLI & ஸ்கிரிப்டுகள்வினாடிகள்மிதமானதுகுறைவு
ஃபஸ்ஸிங்EchidnaSolidity பண்புகள்நிமிடங்கள்குறைவுஇல்லை
குறியீட்டு செயலாக்கம்ManticoreSolidity பண்புகள் & ஸ்கிரிப்டுகள்மணிநேரங்கள்இல்லை*இல்லை

* காலக்கெடு (timeout) இல்லாமல் அனைத்து பாதைகளும் ஆராயப்பட்டால்

Slither ஒப்பந்தங்களை சில வினாடிகளுக்குள் பகுப்பாய்வு செய்கிறது, இருப்பினும், நிலையான பகுப்பாய்வு தவறான எச்சரிக்கைகளுக்கு வழிவகுக்கும் மற்றும் சிக்கலான சரிபார்ப்புகளுக்கு (எ.கா., எண்கணித சரிபார்ப்புகள்) குறைவான பொருத்தமாக இருக்கும். உள்ளமைக்கப்பட்ட கண்டறிதல்களுக்கான புஷ்-பட்டன் அணுகலுக்கு API வழியாக அல்லது பயனர் வரையறுக்கப்பட்ட சரிபார்ப்புகளுக்கு API வழியாக Slither ஐ இயக்கவும்.

Echidna பல நிமிடங்கள் இயங்க வேண்டும் மற்றும் உண்மையான நேர்மறைகளை (true positives) மட்டுமே உருவாக்கும். Echidna, Solidity இல் எழுதப்பட்ட பயனர் வழங்கிய பாதுகாப்பு பண்புகளை சரிபார்க்கிறது. இது சீரற்ற ஆய்வை அடிப்படையாகக் கொண்டிருப்பதால் பிழைகளைத் தவறவிடக்கூடும்.

Manticore "மிக அதிக எடையுள்ள" பகுப்பாய்வைச் செய்கிறது. Echidna ஐப் போலவே, Manticore பயனர் வழங்கிய பண்புகளைச் சரிபார்க்கிறது. இது இயங்குவதற்கு அதிக நேரம் தேவைப்படும், ஆனால் இது ஒரு பண்பின் செல்லுபடியை நிரூபிக்க முடியும் மற்றும் தவறான எச்சரிக்கைகளைப் புகாரளிக்காது.

பரிந்துரைக்கப்பட்ட பணிப்பாய்வு

இப்போது எந்த எளிய பிழைகளும் இல்லை அல்லது பின்னர் அறிமுகப்படுத்தப்படாது என்பதை உறுதிப்படுத்த Slither இன் உள்ளமைக்கப்பட்ட கண்டறிதல்களுடன் தொடங்கவும். பரம்பரை (inheritance), மாறி சார்புகள் (variable dependencies) மற்றும் கட்டமைப்பு சிக்கல்கள் தொடர்பான பண்புகளைச் சரிபார்க்க Slither ஐப் பயன்படுத்தவும். குறியீட்டுத் தளம் வளரும்போது, நிலை இயந்திரத்தின் (state machine) சிக்கலான பண்புகளைச் சோதிக்க Echidna ஐப் பயன்படுத்தவும். ஒரு செயல்பாடு மேலெழுதப்படுவதிலிருந்து (overridden) பாதுகாப்பது போன்ற Solidity இலிருந்து கிடைக்காத பாதுகாப்புகளுக்கான தனிப்பயன் சரிபார்ப்புகளை உருவாக்க Slither ஐ மீண்டும் பார்வையிடவும். இறுதியாக, முக்கியமான பாதுகாப்பு பண்புகளின் இலக்கு சரிபார்ப்பைச் செய்ய Manticore ஐப் பயன்படுத்தவும், எ.கா., எண்கணித செயல்பாடுகள்.

  • பொதுவான சிக்கல்களைப் பிடிக்க Slither இன் CLI ஐப் பயன்படுத்தவும்
  • உங்கள் ஒப்பந்தத்தின் உயர்மட்ட பாதுகாப்பு பண்புகளைச் சோதிக்க Echidna ஐப் பயன்படுத்தவும்
  • தனிப்பயன் நிலையான சரிபார்ப்புகளை எழுத Slither ஐப் பயன்படுத்தவும்
  • முக்கியமான பாதுகாப்பு பண்புகளின் ஆழமான உத்தரவாதம் உங்களுக்குத் தேவைப்படும்போது Manticore ஐப் பயன்படுத்தவும்

யூனிட் சோதனைகள் பற்றிய ஒரு குறிப்பு. உயர்தர மென்பொருளை உருவாக்க யூனிட் சோதனைகள் (Unit tests) அவசியமாகும். இருப்பினும், பாதுகாப்பு குறைபாடுகளைக் கண்டறிய இந்த நுட்பங்கள் மிகவும் பொருத்தமானவை அல்ல. அவை பொதுவாக குறியீட்டின் நேர்மறையான நடத்தைகளைச் சோதிக்கப் பயன்படுத்தப்படுகின்றன (அதாவது, குறியீடு சாதாரண சூழலில் எதிர்பார்த்தபடி செயல்படுகிறது), அதேசமயம் பாதுகாப்பு குறைபாடுகள் டெவலப்பர்கள் கருத்தில் கொள்ளாத விளிம்பு நிலைகளில் (edge cases) இருக்கும். டஜன் கணக்கான ஸ்மார்ட் ஒப்பந்த பாதுகாப்பு மதிப்புரைகள் பற்றிய எங்கள் ஆய்வில், எங்கள் வாடிக்கையாளரின் குறியீட்டில் நாங்கள் கண்டறிந்த பாதுகாப்பு குறைபாடுகளின் எண்ணிக்கை அல்லது தீவிரத்தில் யூனிட் சோதனை கவரேஜ் எந்த விளைவையும் ஏற்படுத்தவில்லை (opens in a new tab).

பாதுகாப்பு பண்புகளைத் தீர்மானித்தல்

உங்கள் குறியீட்டை திறம்பட சோதிக்கவும் சரிபார்க்கவும், கவனம் தேவைப்படும் பகுதிகளை நீங்கள் அடையாளம் காண வேண்டும். பாதுகாப்பிற்காகச் செலவிடப்படும் உங்கள் வளங்கள் குறைவாக இருப்பதால், உங்கள் முயற்சியை மேம்படுத்த உங்கள் குறியீட்டுத் தளத்தின் பலவீனமான அல்லது அதிக மதிப்புள்ள பகுதிகளை வரையறுப்பது முக்கியம். அச்சுறுத்தல் மாடலிங் (Threat modeling) இதற்கு உதவலாம். பின்வருவனவற்றை மதிப்பாய்வு செய்வதைக் கவனியுங்கள்:

கூறுகள்

நீங்கள் எதைச் சரிபார்க்க விரும்புகிறீர்கள் என்பதை அறிந்துகொள்வது சரியான கருவியைத் தேர்ந்தெடுக்கவும் உதவும்.

ஸ்மார்ட் ஒப்பந்தங்களுக்கு அடிக்கடி தொடர்புடைய பரந்த பகுதிகள் பின்வருமாறு:

  • நிலை இயந்திரம் (State machine). பெரும்பாலான ஒப்பந்தங்களை ஒரு நிலை இயந்திரமாகப் பிரதிநிதித்துவப்படுத்தலாம். (1) எந்தவொரு தவறான நிலையையும் அடைய முடியாது, (2) ஒரு நிலை செல்லுபடியாகும் என்றால் அதை அடைய முடியும், மற்றும் (3) எந்த நிலையும் ஒப்பந்தத்தைப் பொறிக்குள் சிக்கவைக்காது என்பதைச் சரிபார்க்கவும்.

    • நிலை-இயந்திர விவரக்குறிப்புகளைச் சோதிக்க Echidna மற்றும் Manticore ஆகியவை விரும்பத்தக்க கருவிகளாகும்.
  • அணுகல் கட்டுப்பாடுகள் (Access controls). உங்கள் கணினியில் சலுகை பெற்ற பயனர்கள் (எ.கா., உரிமையாளர், கட்டுப்பாட்டாளர்கள், ...) இருந்தால், (1) ஒவ்வொரு பயனரும் அங்கீகரிக்கப்பட்ட செயல்களை மட்டுமே செய்ய முடியும் மற்றும் (2) எந்தவொரு பயனரும் அதிக சலுகை பெற்ற பயனரின் செயல்களைத் தடுக்க முடியாது என்பதை நீங்கள் உறுதிப்படுத்த வேண்டும்.

    • சரியான அணுகல் கட்டுப்பாடுகளை Slither, Echidna மற்றும் Manticore சரிபார்க்க முடியும். எடுத்துக்காட்டாக, ஏற்புப்பட்டியலில் (whitelisted) உள்ள செயல்பாடுகளுக்கு மட்டுமே onlyOwner மாற்றியமைப்பான் (modifier) இல்லை என்பதை Slither சரிபார்க்க முடியும். ஒப்பந்தம் ஒரு குறிப்பிட்ட நிலையை அடைந்தால் மட்டுமே வழங்கப்படும் அனுமதி போன்ற மிகவும் சிக்கலான அணுகல் கட்டுப்பாட்டிற்கு Echidna மற்றும் Manticore பயனுள்ளதாக இருக்கும்.
  • எண்கணித செயல்பாடுகள் (Arithmetic operations). எண்கணித செயல்பாடுகளின் சரியான தன்மையைச் சரிபார்ப்பது மிகவும் முக்கியமானது. ஓவர்ஃப்ளோ/அண்டர்ஃப்ளோவைத் (overflow/underflow) தடுக்க எல்லா இடங்களிலும் SafeMath ஐப் பயன்படுத்துவது ஒரு நல்ல படியாகும், இருப்பினும், ரவுண்டிங் சிக்கல்கள் மற்றும் ஒப்பந்தத்தைப் பொறிக்குள் சிக்கவைக்கும் குறைபாடுகள் உள்ளிட்ட பிற எண்கணித குறைபாடுகளையும் நீங்கள் கருத்தில் கொள்ள வேண்டும்.

    • இங்கு Manticore சிறந்த தேர்வாகும். எண்கணிதம் SMT தீர்வியின் (solver) வரம்பிற்கு வெளியே இருந்தால் Echidna ஐப் பயன்படுத்தலாம்.
  • பரம்பரை சரியான தன்மை (Inheritance correctness). Solidity ஒப்பந்தங்கள் பல பரம்பரைகளை (multiple inheritance) பெரிதும் நம்பியுள்ளன. super அழைப்பைக் காணாத ஷேடோவிங் செயல்பாடு (shadowing function) மற்றும் தவறாகப் புரிந்துகொள்ளப்பட்ட c3 லீனியரைசேஷன் வரிசை போன்ற தவறுகள் எளிதில் அறிமுகப்படுத்தப்படலாம்.

    • இந்தச் சிக்கல்களைக் கண்டறிவதை உறுதி செய்வதற்கான கருவி Slither ஆகும்.
  • வெளிப்புற தொடர்புகள் (External interactions). ஒப்பந்தங்கள் ஒன்றுக்கொன்று தொடர்பு கொள்கின்றன, மேலும் சில வெளிப்புற ஒப்பந்தங்களை நம்பக்கூடாது. எடுத்துக்காட்டாக, உங்கள் ஒப்பந்தம் வெளிப்புற ஆரக்கிள்களை (oracles) நம்பியிருந்தால், கிடைக்கக்கூடிய ஆரக்கிள்களில் பாதி சமரசம் செய்யப்பட்டால் அது பாதுகாப்பாக இருக்குமா?

    • உங்கள் ஒப்பந்தங்களுடனான வெளிப்புற தொடர்புகளைச் சோதிக்க Manticore மற்றும் Echidna சிறந்த தேர்வாகும். வெளிப்புற ஒப்பந்தங்களை ஸ்டப் (stub) செய்ய Manticore ஒரு உள்ளமைக்கப்பட்ட பொறிமுறையைக் கொண்டுள்ளது.
  • நிலையான இணக்கம் (Standard conformance). Ethereum தரநிலைகள் (எ.கா., ERC20) அவற்றின் வடிவமைப்பில் குறைபாடுகளின் வரலாற்றைக் கொண்டுள்ளன. நீங்கள் உருவாக்கும் தரநிலையின் வரம்புகளைப் பற்றி அறிந்திருங்கள்.

    • கொடுக்கப்பட்ட தரநிலையிலிருந்து விலகல்களைக் கண்டறிய Slither, Echidna மற்றும் Manticore உங்களுக்கு உதவும்.

கருவி தேர்வு சீட்ஷீட்

கூறுகருவிகள்எடுத்துக்காட்டுகள்
நிலை இயந்திரம்Echidna, Manticore
அணுகல் கட்டுப்பாடுSlither, Echidna, ManticoreSlither பயிற்சி 2 (opens in a new tab), Echidna பயிற்சி 2 (opens in a new tab)
எண்கணித செயல்பாடுகள்Manticore, EchidnaEchidna பயிற்சி 1 (opens in a new tab), Manticore பயிற்சிகள் 1 - 3 (opens in a new tab)
பரம்பரை சரியான தன்மைSlitherSlither பயிற்சி 1 (opens in a new tab)
வெளிப்புற தொடர்புகள்Manticore, Echidna
நிலையான இணக்கம்Slither, Echidna, Manticoreslither-erc (opens in a new tab)

உங்கள் இலக்குகளைப் பொறுத்து பிற பகுதிகள் சரிபார்க்கப்பட வேண்டும், ஆனால் இந்த பரந்த அளவிலான கவனம் செலுத்தும் பகுதிகள் எந்தவொரு ஸ்மார்ட் ஒப்பந்த அமைப்பிற்கும் ஒரு நல்ல தொடக்கமாகும்.

எங்கள் பொது தணிக்கைகளில் சரிபார்க்கப்பட்ட அல்லது சோதிக்கப்பட்ட பண்புகளின் எடுத்துக்காட்டுகள் உள்ளன. நிஜ உலக பாதுகாப்பு பண்புகளை மதிப்பாய்வு செய்ய பின்வரும் அறிக்கைகளின் Automated Testing and Verification பிரிவுகளைப் படிக்கவும்:

பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 3 மார்ச், 2026

இந்த வழிகாட்டி பயனுள்ளதாக இருந்ததா?