ప్రధాన కంటెంట్‌కు దాటవేయి

స్మార్ట్ కాంట్రాక్ట్ భద్రతా సాధనాలకు ఒక మార్గదర్శి

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

మనం మూడు విభిన్న టెస్టింగ్ మరియు ప్రోగ్రామ్ విశ్లేషణ పద్ధతులను ఉపయోగించబోతున్నాము:

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

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

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

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

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

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

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

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

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

  • సాధారణ సమస్యలను పట్టుకోవడానికి స్లిదర్ యొక్క CLIని ఉపయోగించండి
  • మీ కాంట్రాక్ట్ యొక్క ఉన్నత-స్థాయి భద్రతా లక్షణాలను పరీక్షించడానికి ఎకిడ్నాను ఉపయోగించండి
  • అనుకూల స్టాటిక్ తనిఖీలను వ్రాయడానికి స్లిదర్‌ను ఉపయోగించండి
  • మీకు క్లిష్టమైన భద్రతా లక్షణాల గురించి లోతైన భరోసా కావాలనుకున్నప్పుడు మాంటికోర్‌ను ఉపయోగించండి

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

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

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

భాగాలు

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

స్మార్ట్ కాంట్రాక్ట్‌లకు తరచుగా సంబంధితంగా ఉండే విస్తృత ప్రాంతాలు ఇవి:

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

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

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

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

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

    • మీ కాంట్రాక్ట్‌లతో బాహ్య పరస్పర చర్యలను పరీక్షించడానికి మాంటికోర్ మరియు ఎకిడ్నా ఉత్తమ ఎంపిక. బాహ్య కాంట్రాక్ట్‌లను స్టబ్ చేయడానికి మాంటికోర్ అంతర్నిర్మిత యంత్రాంగాన్ని కలిగి ఉంది.
  • ప్రామాణిక అనుగుణ్యత. ఎథీరియం ప్రమాణాలు (ఉదా., ERC-20) వాటి రూపకల్పనలో లోపాల చరిత్రను కలిగి ఉన్నాయి. మీరు నిర్మిస్తున్న ప్రమాణం యొక్క పరిమితుల గురించి తెలుసుకోండి.

    • ఇచ్చిన ప్రమాణం నుండి వ్యత్యాసాలను గుర్తించడంలో స్లిదర్, ఎకిడ్నా మరియు మాంటికోర్ మీకు సహాయపడతాయి.

సాధన ఎంపిక చీట్‌షీట్

భాగంసాధనాలుఉదాహరణలు
స్థితి యంత్రంఎకిడ్నా, మాంటికోర్
యాక్సెస్ నియంత్రణస్లిదర్, ఎకిడ్నా, మాంటికోర్స్లిదర్ వ్యాయామం 2 (opens in a new tab), ఎకిడ్నా వ్యాయామం 2 (opens in a new tab)
అంకగణిత కార్యకలాపాలుమాంటికోర్, ఎకిడ్నాఎకిడ్నా వ్యాయామం 1 (opens in a new tab), మాంటికోర్ వ్యాయామాలు 1 - 3 (opens in a new tab)
వారసత్వ ఖచ్చితత్వంస్లిదర్స్లిదర్ వ్యాయామం 1 (opens in a new tab)
బాహ్య పరస్పర చర్యలుమాంటికోర్, ఎకిడ్నా
ప్రామాణిక అనుగుణ్యతస్లిదర్, ఎకిడ్నా, మాంటికోర్slither-erc (opens in a new tab)

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

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