Analise smart-contract
23.01.2024

Kuidas tuvastada BlackList DeFi sümbolit?

Jätkame artiklite seeriat, mis on pühendatud petturlikele skeemidele nutikates lepingutes. Täna analüüsime nutikaid lepinguid, mis sisaldavad Musta Nimekirja funktsioone (BlackList).

Ohtudest nutikates lepingutes, kus on BlackList funktsioonid:

Nutikad lepingud, mis sisaldavad Musta Nimekirja funktsioone, kujutavad endast teatavaid riske ja probleeme nii projekti kui ka selle kasutajate jaoks. Siin on mõned ohud, mis on seotud musta nimekirja funktsioonidega:

  1. Keskne kontroll: Musta nimekirja funktsioonid annavad sageli keskse kontrolli lepingu omanikule või administraatoritele.

  2. Musta nimekirja kuritarvitamine ebaausateks praktikateks: Kuritarvitajad (sealhulgas lepingu omanik) võivad kasutada musta nimekirja konkreetsete aadresside sihtmärgistamiseks. See võib hõlmata kontode külmutamist või piiramist põhjendamatult.

  3. Läbipaistvuse puudumine: Musta nimekirja funktsioonide olemasolu, eriti kui neid pole dokumenteeritud, võib kaasa tuua läbipaistvuse puudumise. Kasutajad võivad mitte teada musta nimekirja kriteeriume ega musta nimekirja protseduuri.

  4. Turvariskid: Kui Must Nimekiri pole turvaliselt rakendatud, on oht, et haavatavused võimaldavad volitamata osapooltel musta nimekirja manipuleerida, mis võib viia volitamata vahendite külmutamiseni või ülekandmiseni.

  5. Kasutajate usaldamatuse tekitamine: Musta nimekirja funktsioonide olemasolu võib õõnestada kasutajate usaldust, kuna nende varad võivad olla musta nimekirja pandud ilma selgete reeglitega.

  6. Tokenite konfiskeerimine: Ründajad võivad kasutada musta nimekirja tokenite või varade konfiskeerimiseks teatud aadressidelt ilma korraliku õigustuseta. See võib kaasa tuua olulisi rahalisi kahjusid.

Kuidas saate iseseisvalt kindlaks teha, kas sellised ohud on olemas nutikates lepingutes?

Nutika lepingu valideerimisel saab teha teatud samme, et tuvastada musta nimekirja funktsioonidega seotud ohud:

  • Enne nutika lepinguga töö alustamist lugege hoolikalt ja uurige selle koodi, sealhulgas kõiki musta nimekirja, külmutamise või konto funktsionaalsuse piiramisega seotud funktsioone. Otsige funktsioone, mis võimaldavad lisada või eemaldada aadresse mustast nimekirjast.

  • Analüüsige, kellel on omandiõigus või administratiivne kontroll lepingu üle. Hindake omandiõiguse ja administraatoritega seotud kontrolli ulatust ja õigusi.

  • Vaadake lepingu dokumentatsiooni, et mõista, kuidas musta nimekirja funktsioone kavatsetakse kasutada. Otsige teavet haldusmehhanismide kohta, mis kontrollivad musta nimekirja kasutamist.

  • Hindage läbipaistvust: kas leping tagab, et musta nimekirja kriteeriumid on läbipaistvad? Kontrollige, kas on selgeid protseduure valepositiivsete kõrvaldamiseks või aadresside musta nimekirjast eemaldamiseks.

  • Turvaauditid: kontrollige, kas nutikas leping on läbinud turvaauditeid mainekate kolmandate osapoolte ettevõtete poolt.

  • Tutvuge kogukonna tagasisidega või online-foorumitega musta nimekirja kasutamise kohta projektis. Olge tähelepanelik kogukonna liikmete tõstatatud ohumärkide suhtes ebaõiglaste praktikate või läbipaistvuse puudumise kohta.

  • Teostades põhjalikku analüüsi ja arvestades eespool toodud tegureid, olete võimeline paremini hindama musta nimekirja funktsioonidega nutikates lepingutes seotud riske. Olge kursis uusimate arengutega meie kogukonnas (Telegrami kanal) ja pettuste avastamise parimate praktikatega (meie blogi ja YouTube'i kanal).

 

Hea uudis: meie Turva Skänner leiab kõik levinud (sh varjatud) Musta Nimekirja (BlackList) funktsioonid 99,9% juhtudest. Kasutage meie premium tellimust ja kaitsege oma varasid ohtude eest.

 

Järgmiseks vaatame mõnda levinumat Musta Nimekirja funktsioonide näidet, mida meie platvorm edukalt tuvastab.

Tuletage meelde, et need on lihtsustatud näited ja tegelik rakendamine võib erineda. Nutikate lepingute analüüsimisel peaksite alati läbi viima põhjaliku koodi ülevaatuse ja arvestama kontekstist sõltuvaid tegureid.

Näide 1: Musta Nimekirja põhifunktsionaalsus


    contract TokenWithBlackListAndFee {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public BlackListFee;
  
      constructor(uint256 _fee) {
          owner = msg.sender;
          BlackListFee = _fee;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListWithFee(address _account) public payable onlyOwner {
          require(msg.value >= BlackListFee, "Insufficient fee");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Tuvastamisnäpunäited: Otsige funktsioone (nagu addToBlackList ja removeFromBlackList), mis omavad juurdepääsude muutujaid (ainultOmanik). Selliste modifikaatorite olemasolu tähendab, et ainult omanik saab musta nimekirja muuta.

üldised näpunäited

Näide 2: Musta Nimekirja funktsioonid tasumehhanismiga (BlackList koos tasuga)


    contract TokenWithBlackListAndFee {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public BlackListFee;
  
      constructor(uint256 _fee) {
          owner = msg.sender;
          BlackListFee = _fee;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListWithFee(address _account) public payable onlyOwner {
          require(msg.value >= BlackListFee, "Insufficient fee");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Tuvastamisnäpunäited: Määratlege funktsioonid (nagu addToBlackListWithFee), mis nõuavad tasu (msg.value) musta nimekirja lisamiseks. See on väga ohtlik signaal.

Näide 3: Must Nimekiri ajasõltuvate tingimustega


    contract TokenWithTimeLock {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public BlackListTimeLock;
  
      constructor(uint256 _timeLock) {
          owner = msg.sender;
          BlackListTimeLock = _timeLock;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListTimed(address _account) public onlyOwner {
          require(block.timestamp >= BlackListTimeLock, "Time lock not yet expired");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Tuvastamisnäpunäited: Määratlege funktsioonid (näiteks addToBlackListTimed), mis kehtestavad musta nimekirja bloki ajasõltuvad tingimused. Seda kasutatakse tavaliselt viivitatud või planeeritud mustade nimekirjade jaoks.

Näide 4: Musta Nimekirja sündmuste logimine


    contract TokenWithBlackListAndEvents {
      address public owner;
      mapping(address => bool) public BlackList;
  
      event AddressAddedToBlackList(address indexed account);
      event AddressRemovedFromBlackList(address indexed account);
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner {
          BlackList[_account] = true;
          emit AddressAddedToBlackList(_account);
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
          emit AddressRemovedFromBlackList(_account);
      }
    }  

Tuvastamisnäpunäited: Sündmuste logimine: Otsige lepinguid, kus on kirjeldatud musta nimekirja tegevusi salvestavad sündmused. Sündmused tagavad läbipaistvuse ja on väga olulised lepingute tegevuste jälgimisel. Võib öelda, et see on turvalisim tüüp Musta Nimekirja, kuna arendajad ei varja seda funktsiooni, vaid logivad kõik selle kutsed avalikult sündmuste logidesse.

Näide 5: Must nimekiri koos Valge Nimekirja funktsioonidega (Valge nimekiri)


    contract TokenWithBlackListAndWhitelist {
      address public owner;
      mapping(address => bool) public BlackList;
      mapping(address => bool) public whitelist;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the lists");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  
      function addToWhitelist(address _account) public onlyOwner {
          whitelist[_account] = true;
      }
  
      function removeFromWhitelist(address _account) public onlyOwner {
          whitelist[_account] = false;
      }
  }

Tuvastamisnäpunäited: Valge nimekirja funktsionaalsus: Pöörake tähelepanu lepingutele, mis sisaldavad samaaegselt nii musta kui valge nimekirja funktsioone. Selline topelthaldus võib mõjutada tokenite ülekandeid omaniku teadmata või tekitada muid pettuslikke tegevusi.

üldised näpunäited

Näide 6: Must nimekiri koos Halduskontrolliga (Halduskontroll)


    interface Governance {
      function canBlackList(address _caller) external view returns (bool);
  }
  
  contract TokenWithGovernanceControl {
      address public owner;
      address public governanceContract;
      mapping(address => bool) public BlackList;
  
      constructor(address _governanceContract) {
          owner = msg.sender;
          governanceContract = _governanceContract;
      }
  
      modifier onlyOwnerOrGovernance() {
          require(msg.sender == owner || Governance(governanceContract).canBlackList(msg.sender), "Not authorized");
          _;
      }
  
      function addToBlackListGoverned(address _account) public onlyOwnerOrGovernance {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwnerOrGovernance {
          BlackList[_account] = false;
      }
  }

Tuvastamisnäpunäited: Identifitseerige lepingud, kus musta nimekirja tegevused on allutatud väliste lepinguhaldurite kontrollile. Nutikate lepingute puhul analüüsige hoolikalt koodi, pöörates tähelepanu juurdepääsukontrollidele, makse mehhanismidele, ajasõltuvatele tingimustele, sündmuste logimisele, ümbersuunamise kaitsemeetmetele ja teistele olulistele teguritele. Lisaks arvestage projekti eripära ja eesmärke, hinnates musta nimekirja funktsioonide kasutamise tagajärgi.

Näide 7: Must nimekiri hädaolukorra peatamisega (Hädaolukord)


    contract TokenWithEmergencyStop {
      address public owner;
      bool public emergencyStop;
      mapping(address => bool) public BlackList;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      modifier whenNotPaused() {
          require(!emergencyStop, "Contract is paused");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner whenNotPaused {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner whenNotPaused {
          BlackList[_account] = false;
      }
  
      function toggleEmergencyStop() public onlyOwner {
          emergencyStop = !emergencyStop;
      }
  }

Tuvastamisnäpunäited: Krahhi peatamise mehhanism võib peatada mõned funktsioonid, sealhulgas musta nimekirja muutused.

Näide 8: Must nimekiri dünaamiliste tingimustega


    contract TokenWithDynamicBlackList {
      address public owner;
      mapping(address => bool) public BlackList;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function conditionallyBlackList(address _account, uint256 _threshold) public onlyOwner {
          require(getBalance(_account) < _threshold, "Account balance exceeds threshold");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Tuvastamisnäpunäited: Mustanimekirja aluseks võivad sageli olla teatud tingimused või sündmused. Uurige hoolikalt funktsioone, mis on enne Musta Nimekirja aktiveerimist kontrollitud. Need funktsioonid sisaldavad omaniku musta nimekirja lisamise loogikat; selles näites on lisamise tingimuseks, et kontosumma on määratud lävendi üle.

Näide 9: Ajalukustatud eemaldamise must nimekiri (Ajalukustatud eemaldamine)


    contract TokenWithTimeLockedRemoval {
      address public owner;
      mapping(address => bool) public BlackList;
      mapping(address => uint256) public removalTimeLock;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackList(address _account) public onlyOwner {
          BlackList[_account] = true;
          removalTimeLock[_account] = block.timestamp + 7 days;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          require(block.timestamp >= removalTimeLock[_account], "Time lock not expired");
          BlackList[_account] = false;
          removalTimeLock[_account] = 0;
      }
  }

Tuvastamisnäpunäited: Identifitseerige lepingud, kus musta nimekirja eemaldamine on ajapiiratud. Sellistel juhtudel kasutatakse sageli ajatõkkeid, mis põhinevad block.timestampil.

Näide 10: Must nimekiri gaasipiirangutega (Gaasipiirangukaitse)


    contract TokenWithGasLimitProtection {
      address public owner;
      mapping(address => bool) public BlackList;
  
      constructor() {
          owner = msg.sender;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      modifier limitGas() {
          require(gasleft() >= 100000, "Insufficient gas");
          _;
      }
  
      function addToBlackListGasLimited(address _account) public onlyOwner limitGas {
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  }

Tuvastamisnäpunäited: Identifitseerige lepingud, kus teatud funktsioonid, nagu musta nimekirja lisamine, on allutatud gaasipiirangutele.

üldised näpunäited

Näide 11: Must nimekiri välise integreerimisega Oracle'iga (Oracle)


    interface Oracle {
      function isBlackListed(address _account) external view returns (bool);
  }
  
  contract TokenWithOracleIntegration {
      address public owner;
      Oracle public oracle;
  
      constructor(address _oracleAddress) {
          owner = msg.sender;
          oracle = Oracle(_oracleAddress);
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListByOracle(address _account) public onlyOwner {
          require(oracle.isBlackListed(_account), "Oracle did not confirm BlackListing");
      }
  }

Tuvastamisnäpunäited: Olge ettevaatlik lepingute suhtes, mis sõltuvad välisest Oracle'ist musta nimekirja otsuste tegemisel. Kontrollige alati Oracle'i usaldusväärsust ja läbipaistvust, mida nutikas leping kasutab.

Näide 12: Must nimekiri suhtlemisega välise lepinguga


    interface ExternalContract {
      function addToBlackList(address _account) external;
      function removeFromBlackList(address _account) external;
  }
  
  contract TokenWithExternalInteraction {
      address public owner;
      ExternalContract public externalContract;
  
      constructor(address _externalContract) {
          owner = msg.sender;
          externalContract = ExternalContract(_externalContract);
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListExternal(address _account) public onlyOwner {
          externalContract.addToBlackList(_account);
      }
  
      function removeFromBlackListExternal(address _account) public onlyOwner {
          externalContract.removeFromBlackList(_account);
      }
  }

Tuvastamisnäpunäited: Otsustamisel musta nimekirja üle olge ettevaatlik lepingute suhtes, mis suhtlevad välise lepinguga, eriti juhul, kui välise lepingu lähtekoodi pole kontrollitud.

Näide 13: Must nimekiri dünaamilise lävega (Dünaamiline lävi)


    contract TokenWithDynamicThreshold {
      address public owner;
      mapping(address => bool) public BlackList;
      uint256 public dynamicThreshold;
  
      constructor(uint256 _initialThreshold) {
          owner = msg.sender;
          dynamicThreshold = _initialThreshold;
      }
  
      modifier onlyOwner() {
          require(msg.sender == owner, "Only the owner can modify the BlackList");
          _;
      }
  
      function addToBlackListDynamicThreshold(address _account) public onlyOwner {
          require(getBalance(_account) > dynamicThreshold, "Account balance is below threshold");
          BlackList[_account] = true;
      }
  
      function removeFromBlackList(address _account) public onlyOwner {
          BlackList[_account] = false;
      }
  
      function updateDynamicThreshold(uint256 _newThreshold) public onlyOwner {
          dynamicThreshold = _newThreshold;
      }
  }

Tuvastamisnäpunäited: Identifitseerige lepingud, kus musta nimekirja lävi on dünaamiline ja omanik saab seda aja jooksul muuta (kutsudes teatud lepingumeetodeid).

Üldised näpunäited musta nimekirja funktsioonide tuvastamiseks (Must nimekiri)

  1. Otsige funktsioone, mis muudavad aadressi loendit (mapimine):
    Uurige nutika lepingu koodi, et tuvastada funktsioone, mis muudavad aadresside loendit, nagu aadresside lisamine või eemaldamine.

  2. Kontrollige ainult omaniku juurdepääsu:
    Musta nimekirja funktsioonidel on sageli juurdepääsupiirangud, mis võimaldavad nende täitmist ainult lepingu omanikul või administraatoritel. Otsige ainultOmanik modifikaatori kasutamist või sarnaseid juurdepääsu kontrollimehhanisme.

  3. Kontrollige konstruktori() funktsiooni:
    Konstruktorifunktsioon määratleb lepingu algse oleku. Kontrollige, kas konstruktoris initsialiseeritakse mõni aadressi seotus või loend, mis viitab musta nimekirja olemasolule.

  4. Uurige modifikaatorite loogikat:
    Analüüsige ainultOmanik tüüpi modifikaatorite loogikat, et mõista, millistel tingimustel saab musta nimekirjaga seotud funktsioone täita.

  5. Leidke võtmesõnu:
    Otsige nutika lepingu koodist võtmesõnu nagu "MustNimekiri", "lisaMustaNimekiri", "eemaldaMustaNimekirjast" või sarnaseid termineid (lihtsamatel juhtudel on funktsioonide nimed sarnased, keerukamates variantides võivad nimed peegeldada funktsiooni olemust, et seda varjata).

  6. Kontrollige dokumentatsiooni ja kommentaare:
    Vaadake läbi dokumentatsioon ja lepingu kommentaarid, et leida viiteid musta nimekirja funktsioonidele. Arendajad annavad sageli teavet selle kohta, kuidas konkreetseid funktsioone, sealhulgas musta nimekirja funktsioone, tuleks kasutada.

  7. Kontrollige väliseid kõnesid (kõne) või sündmusi (sündmus):
    Otsige väliseid kõnesid või sündmusi, mis võivad käivituda, kui aadress lisatakse või eemaldatakse musta nimekirjast. See võib anda ülevaate sellest, kuidas leping suhtleb musta nimekirjaga seotud toimingute põhjal väliste komponentidega.
  8. < br />
  9. Hinnake lepingukoodi värskendus- ja haldusvõimekust:
    Hindake nutikat lepingut värskendusmehhanismide või haldusstruktuuride osas, mis võimaldavad selle musta nimekirja loogikat muuta. Arusaamine sellest, kuidas värskendusi hallatakse, on oluline, et ennetada potentsiaalseid musta nimekirja funktsionaalsuse muutusi.

  10. Kontrollige musta nimekirja loogikat teistes funktsioonides:
    Uurige lepingu teisi funktsioone, et kontrollida, kas enne teatud toimingute tegemist kontrollitakse, kas aadress on mustas nimekirjas.

  11. Avastage kasutusjuhtumid ja tokenoomika:
    Mõistke projekti kasutusstsenaariume ja tokenoomikat. Kui projekt on seotud kasutaja aadressihaldusega või sisaldab funktsioone kasutajaõigustega seotud funktsioonide jaoks, võib olla põhjus musta nimekirja olemasoluks.

  12. Sündmuste logimine:
    Märkige musta nimekirja toimingutega seotud sündmuste logi olemasolu. Sündmused on sageli kasutusel, et logida olulisi olekumuutusi, pakkudes läbipaistvust lepingu käitumise osas.

  13. Gaasipiirangukaitse:
    Olge ettevaatlik funktsioonide suhtes, mis omavad gaasipiirangukaitset. Kuigi see võib olla turvaelemendi rakendamine, võib seda kasutada ka mõne kriitilise lepingufunktsiooni juhtimiseks või piiramiseks.

  14. Ajast sõltuvad tingimused:
    Kontrollige ajaga seotud tingimusi, mis on seotud musta nimekirjaga. Näiteks võivad lepingud rakendada ajalukustusi kustutamise või muude aja tundlike mehhanismide kohta.

  15. Iseseisvad auditeerimised:
    Otsige nutikaid lepinguid, mis on läbinud iseseisvad auditid mainekate auditeerimisfirmade poolt. Auditiraportid annavad ülevaate lepingu turvalisusest ja funktsionaalsusest.

  16. Ülevaade kogukonna tagasisidest:
    Kontrollige kogukonna foorumeid, sotsiaalmeediat või ametlikke suhtluskanaleid aruteludeks musta nimekirja funktsioonide olemasolu ja kasutamise kohta. Kasutajad võivad pakkuda väärtuslikke teadmisi ja muresid.












  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  

tavalised näpunäited

Nutika lepingu analüüsimisel on oluline mõista selle funktsioone ja funktsionaalsust täielikult. Need näpunäited aitavad teil tuvastada ja hinnata musta nimekirja funktsioonide olemasolu, võimaldades teil teha teadlikke otsuseid lepinguga suhtlemisel.

Kui võimalik, valige lepingud, mis vastavad kehtestatud standarditele (nt ERC-20). Need standardid on sageli põhjalikult läbi vaadatud ja neil on maine usaldusväärsuse osas.

 

Loodame, et need näited aitasid teil paremini mõista musta nimekirja skeeme nutikates lepingutes.

 

Kuna kogu teave blokiahelas on avatud (tingimusel, et lepingu lähtekood on muidugi kontrollitud), saate selle teadmise põhjal iseseisvalt uurida nutikaid lepinguid ja tuvastada erinevaid pettuste skeeme.

Kuid oleme juba kõik selle teie jaoks ära teinud! Registreeruge meie kuldliikmeks ja saate juurdepääsu eksklusiivsetele filtritele nutikate lepingute funktsioonide ja värskete analüüside kohta. Suurendage oma võimalusi edukalt investeerida kasumlikesse tokenitesse.

Parimate soovidega, Lotus Marketi meeskond.

All posts

Connect to a wallet

Metamask