ప్రధాన కంటెంట్‌కి స్కిప్ చేయండి

స్మార్ట్ కాంట్రాక్ట్ భద్రతా ఉపకరణాలకు మార్గదర్శి

Solidity
స్మార్ట్ కాంట్రాక్టులు
భద్రత
మధ్యస్థ
Trailofbits
7 సెప్టెంబర్, 2020
5 నిమిషం పఠనం

మేము మూడు విలక్షణమైన పరీక్ష మరియు ప్రోగ్రామ్ విశ్లేషణ పద్ధతులను ఉపయోగించబోతున్నాము:

  • Slitherతో స్టాటిక్ విశ్లేషణ. ప్రోగ్రామ్ యొక్క అన్ని మార్గాలు ఒకే సమయంలో, విభిన్న ప్రోగ్రామ్ ప్రెజెంటేషన్‌ల ద్వారా (ఉదా., కంట్రోల్-ఫ్లో-గ్రాఫ్) అంచనా వేయబడతాయి మరియు విశ్లేషించబడతాయి
  • Echidnaతో ఫజ్జింగ్. లావాదేవీల యొక్క సూడో-రాండమ్ జనరేషన్‌తో కోడ్ అమలు చేయబడుతుంది. ఇచ్చిన ఆస్తిని ఉల్లంఘించడానికి లావాదేవీల క్రమాన్ని కనుగొనడానికి ఫజర్ ప్రయత్నిస్తుంది.
  • Manticoreతో సింబాలిక్ ఎగ్జిక్యూషన్. ఒక అధికారిక ధృవీకరణ పద్ధతి, ఇది ప్రతి ఎగ్జిక్యూషన్ మార్గాన్ని ఒక గణిత సూత్రానికి అనువదిస్తుంది, దానిపై పరిమితులను తనిఖీ చేయవచ్చు.

ప్రతి పద్ధతికి ప్రయోజనాలు మరియు ఆపదలు ఉన్నాయి మరియు నిర్దిష్ట సందర్భాలలో ఉపయోగకరంగా ఉంటుంది:

పద్ధతిసాధనంవినియోగంవేగంతప్పిపోయిన బగ్స్తప్పుడు అలారాలు
స్టాటిక్ విశ్లేషణSlitherCLI & స్క్రిప్ట్‌లుసెకన్లుమధ్యస్తంగాతక్కువ
ఫజ్జింగ్EchidnaSolidity లక్షణాలునిమిషాలుతక్కువఏదీ లేదు
సింబాలిక్ ఎగ్జిక్యూషన్ManticoreSolidity లక్షణాలు & స్క్రిప్ట్‌లుగంటలుఏదీ లేదు*ఏదీ లేదు

* టైమౌట్ లేకుండా అన్ని మార్గాలు అన్వేషించబడితే

Slither సెకన్ల వ్యవధిలో కాంట్రాక్టులను విశ్లేషిస్తుంది, అయితే, స్టాటిక్ విశ్లేషణ తప్పుడు అలారాలకు దారితీయవచ్చు మరియు సంక్లిష్ట తనిఖీలకు (ఉదా., అంకగణిత తనిఖీలు) తక్కువ అనుకూలంగా ఉంటుంది. అంతర్నిర్మిత డిటెక్టర్లకు పుష్-బటన్ యాక్సెస్ కోసం API ద్వారా లేదా వినియోగదారు-నిర్వచించిన తనిఖీల కోసం API ద్వారా Slitherను అమలు చేయండి.

Echidna అనేక నిమిషాల పాటు అమలు కావాలి మరియు నిజమైన పాజిటివ్‌లను మాత్రమే ఉత్పత్తి చేస్తుంది. Echidna, Solidityలో వ్రాయబడిన వినియోగదారు-అందించిన భద్రతా లక్షణాలను తనిఖీ చేస్తుంది. ఇది రాండమ్ అన్వేషణపై ఆధారపడి ఉన్నందున బగ్‌లను కోల్పోయే అవకాశం ఉంది.

Manticore "అత్యంత బరువైన" విశ్లేషణను నిర్వహిస్తుంది. Echidna వలె, Manticore వినియోగదారు-అందించిన లక్షణాలను ధృవీకరిస్తుంది. ఇది అమలు కావడానికి ఎక్కువ సమయం పడుతుంది, కానీ ఇది ఒక ఆస్తి యొక్క ప్రామాణికతను నిరూపించగలదు మరియు తప్పుడు అలారాలను నివేదించదు.

సూచించిన వర్క్‌ఫ్లో

ప్రస్తుతం ఎలాంటి సాధారణ బగ్‌లు లేవని లేదా తరువాత ప్రవేశపెట్టబడవని నిర్ధారించుకోవడానికి Slither అంతర్నిర్మిత డిటెక్టర్‌లతో ప్రారంభించండి. వారసత్వం, వేరియబుల్ డిపెండెన్సీలు మరియు నిర్మాణ సమస్యలకు సంబంధించిన లక్షణాలను తనిఖీ చేయడానికి Slitherను ఉపయోగించండి. కోడ్‌బేస్ పెరిగేకొద్దీ, స్టేట్ మెషీన్ యొక్క మరింత సంక్లిష్టమైన లక్షణాలను పరీక్షించడానికి Echidnaను ఉపయోగించండి. ఫంక్షన్ ఓవర్‌రైడ్ చేయబడకుండా రక్షించడం వంటి, Solidity నుండి అందుబాటులో లేని రక్షణల కోసం కస్టమ్ తనిఖీలను అభివృద్ధి చేయడానికి Slitherని తిరిగి సందర్శించండి. చివరగా, క్లిష్టమైన భద్రతా లక్షణాల యొక్క లక్ష్య ధృవీకరణను నిర్వహించడానికి Manticoreను ఉపయోగించండి, ఉదా., అంకగణిత కార్యకలాపాలు.

  • సాధారణ సమస్యలను గుర్తించడానికి Slither's CLIని ఉపయోగించండి
  • మీ కాంట్రాక్ట్ యొక్క ఉన్నత-స్థాయి భద్రతా లక్షణాలను పరీక్షించడానికి Echidnaను ఉపయోగించండి
  • కస్టమ్ స్టాటిక్ తనిఖీలను వ్రాయడానికి Slitherను ఉపయోగించండి
  • మీరు క్లిష్టమైన భద్రతా లక్షణాల గురించి లోతైన హామీని కోరుకున్న తర్వాత Manticoreను ఉపయోగించండి

యూనిట్ పరీక్షలపై ఒక గమనిక. అధిక-నాణ్యత సాఫ్ట్‌వేర్‌ను రూపొందించడానికి యూనిట్ పరీక్షలు అవసరం. అయితే, భద్రతా లోపాలను కనుగొనడానికి ఈ పద్ధతులు ఉత్తమంగా సరిపోవు. అవి సాధారణంగా కోడ్ యొక్క సానుకూల ప్రవర్తనలను పరీక్షించడానికి ఉపయోగిస్తారు (అంటే, సాధారణ సందర్భంలో కోడ్ ఊహించిన విధంగా పనిచేస్తుంది), అయితే భద్రతా లోపాలు డెవలపర్లు పరిగణించని ఎడ్జ్ కేసులలో ఉండే అవకాశం ఉంది. డజన్ల కొద్దీ స్మార్ట్ కాంట్రాక్ట్ భద్రతా సమీక్షల మా అధ్యయనంలో, మేము మా క్లయింట్ కోడ్‌లో కనుగొన్న భద్రతా లోపాల సంఖ్య లేదా తీవ్రతపై యూనిట్ టెస్ట్ కవరేజ్‌కు ఎలాంటి ప్రభావం లేదు (opens in a new tab).

భద్రతా లక్షణాలను నిర్ణయించడం

మీ కోడ్‌ను సమర్థవంతంగా పరీక్షించడానికి మరియు ధృవీకరించడానికి, మీరు శ్రద్ధ అవసరమైన ప్రాంతాలను గుర్తించాలి. భద్రతపై మీరు ఖర్చు చేసే వనరులు పరిమితంగా ఉన్నందున, మీ ప్రయత్నాన్ని ఆప్టిమైజ్ చేయడానికి మీ కోడ్‌బేస్ యొక్క బలహీనమైన లేదా అధిక-విలువ భాగాలను స్కోప్ చేయడం ముఖ్యం. థ్రెట్ మోడలింగ్ సహాయపడుతుంది. సమీక్షించడాన్ని పరిగణించండి:

భాగాలు

మీరు ఏమి తనిఖీ చేయాలనుకుంటున్నారో తెలుసుకోవడం సరైన సాధనాన్ని ఎంచుకోవడానికి కూడా మీకు సహాయపడుతుంది.

స్మార్ట్ కాంట్రాక్టులకు తరచుగా సంబంధించిన విస్తృత ప్రాంతాలు:

  • స్టేట్ మెషీన్. చాలా కాంట్రాక్టులను స్టేట్ మెషీన్‌గా సూచించవచ్చు. (1) చెల్లని స్థితిని చేరుకోలేమని, (2) ఒక స్థితి చెల్లుబాటు అయితే దాన్ని చేరుకోగలమని, మరియు (3) ఏ స్థితి కాంట్రాక్టును ట్రాప్ చేయదని తనిఖీ చేయడాన్ని పరిగణించండి.

    • స్టేట్-మెషీన్ స్పెసిఫికేషన్‌లను పరీక్షించడానికి Echidna మరియు Manticore అనుకూలమైన సాధనాలు.
  • యాక్సెస్ నియంత్రణలు. మీ సిస్టమ్‌లో ప్రత్యేక హక్కులు కలిగిన వినియోగదారులు (ఉదా., యజమాని, కంట్రోలర్లు, ...) ఉంటే (1) ప్రతి వినియోగదారు అధీకృత చర్యలను మాత్రమే చేయగలరని మరియు (2) ఏ వినియోగదారు కూడా మరింత ప్రత్యేక హక్కులు కలిగిన వినియోగదారు నుండి చర్యలను నిరోధించలేరని మీరు నిర్ధారించుకోవాలి.

    • Slither, Echidna మరియు Manticore సరైన యాక్సెస్ నియంత్రణల కోసం తనిఖీ చేయగలవు. ఉదాహరణకు, Slither వైట్‌లిస్ట్ చేయబడిన ఫంక్షన్‌లకు మాత్రమే onlyOwner మాడిఫైయర్ లేదని తనిఖీ చేయగలదు. కాంట్రాక్ట్ ఒక నిర్దిష్ట స్థితికి చేరుకుంటే మాత్రమే ఇవ్వబడిన అనుమతి వంటి మరింత సంక్లిష్టమైన యాక్సెస్ నియంత్రణ కోసం Echidna మరియు Manticore ఉపయోగపడతాయి.
  • అంకగణిత కార్యకలాపాలు. అంకగణిత కార్యకలాపాల యొక్క పటిష్టతను తనిఖీ చేయడం చాలా ముఖ్యం. ఓవర్‌ఫ్లో/అండర్‌ఫ్లోను నివారించడానికి ప్రతిచోటా SafeMath ఉపయోగించడం ఒక మంచి అడుగు, అయితే, రౌండింగ్ సమస్యలు మరియు కాంట్రాక్టును ట్రాప్ చేసే లోపాలతో సహా ఇతర అంకగణిత లోపాలను మీరు ఇప్పటికీ పరిగణించాలి.

    • ఇక్కడ Manticore ఉత్తమ ఎంపిక. SMT సాల్వర్ యొక్క స్కోప్ వెలుపల అంకగణితం ఉంటే Echidnaను ఉపయోగించవచ్చు.
  • వారసత్వ సరియైనత. Solidity కాంట్రాక్టులు బహుళ వారసత్వంపై ఎక్కువగా ఆధారపడతాయి. super కాల్ లేని షాడోయింగ్ ఫంక్షన్ మరియు తప్పుగా అన్వయించబడిన c3 లీనియరైజేషన్ ఆర్డర్ వంటి పొరపాట్లు సులభంగా జరగవచ్చు.

    • ఈ సమస్యలను గుర్తించడాన్ని నిర్ధారించడానికి Slither ఒక సాధనం.
  • బాహ్య పరస్పర చర్యలు. కాంట్రాక్టులు ఒకదానితో ఒకటి సంకర్షణ చెందుతాయి, మరియు కొన్ని బాహ్య కాంట్రాక్టులను విశ్వసించకూడదు. ఉదాహరణకు, మీ కాంట్రాక్ట్ బాహ్య ఒరాకిల్స్‌పై ఆధారపడితే, అందుబాటులో ఉన్న ఒరాకిల్స్‌లో సగం రాజీపడితే అది సురక్షితంగా ఉంటుందా?

    • మీ కాంట్రాక్టులతో బాహ్య పరస్పర చర్యలను పరీక్షించడానికి Manticore మరియు Echidna ఉత్తమ ఎంపిక. Manticore బాహ్య కాంట్రాక్టులను స్టబ్ చేయడానికి అంతర్నిర్మిత యంత్రాంగాన్ని కలిగి ఉంది.
  • ప్రామాణిక అనుగుణ్యత. 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)

మీ లక్ష్యాలను బట్టి ఇతర ప్రాంతాలను తనిఖీ చేయవలసి ఉంటుంది, కానీ ఈ విస్తృత దృష్టి ప్రాంతాలు ఏదైనా స్మార్ట్ కాంట్రాక్ట్ సిస్టమ్‌కు మంచి ప్రారంభం.

మా పబ్లిక్ ఆడిట్‌లలో ధృవీకరించబడిన లేదా పరీక్షించబడిన లక్షణాల ఉదాహరణలు ఉన్నాయి. నిజ-ప్రపంచ భద్రతా లక్షణాలను సమీక్షించడానికి క్రింది నివేదికల యొక్క ఆటోమేటెడ్ టెస్టింగ్ మరియు వెరిఫికేషన్ విభాగాలను చదవడాన్ని పరిగణించండి:

పేజీ చివరి అప్‌డేట్: 22 అక్టోబర్, 2025

ఈ ట్యుటోరియల్ ఉపయోగపడిందా?