Analise smart-contract
03.04.2024

Intelligente Verträge mit Pausenfunktion

Wir setzen die Artikelserie fort, die sich mit der Beschreibung von betrügerischen Machenschaften in Smart Contracts beschäftigt. Heute werden wir Smart Contracts mit Pause-Funktion analysieren.

Smart Contracts mit Pause-Funktionen bieten die Möglichkeit, bestimmte Operationen oder Funktionen innerhalb des Vertrags vorübergehend oder dauerhaft anzuhalten. Während Pausenfunktionen für Sicherheit und Wartung nützlich sein können, stellen sie auch ein potenzielles Risiko dar, wenn sie von Betrügern genutzt werden. Um sich zu schützen und potenzielle Bedrohungen zu erkennen, müssen Sie die Risiken und gängigen Betrugsmethoden verstehen und wissen, wie man sie in einem Smart Contract erkennt.

Die Gefahren von Smart Contracts mit der Pause-Funktion:

  • Unbefugte Pause: Betrüger können die Kontrolle über die Pause-Funktion erlangen und den Vertrag ohne ordnungsgemäße Autorisierung anhalten, was zu Geschäftsunterbrechungen oder finanziellen Verlusten führen kann.

  • Täuschende Verzögerungen: Böswillige Verträge können kritische Transaktionen wie Abhebungen oder Überweisungen unter dem Deckmantel vorübergehender Wartungs- oder Sicherheitsmaßnahmen aussetzen, um Nutzern den Zugriff auf ihr Vermögen zu verwehren.

  • Falsche Behauptungen über Notfälle: Betrüger können fälschlicherweise Notfälle oder Sicherheitslücken behaupten, um eine Vertragssperre zu rechtfertigen, und dann die Gelder der Nutzer während der Pause verwenden.

  • Sicherheitsvorwand: Böswillige Verträge können behaupten, dass eine Sicherheitslücke entdeckt wurde, die zur Aktivierung der Suspendierungsfunktion führt. In Wirklichkeit beabsichtigen die Betrüger, die Situation auszunutzen.

  • Notfallschemata: Betrüger können angsteinflößende Formulierungen oder Szenarien verwenden, wie z. B. die Behauptung eines "Einbruchsversuchs" oder einer "Notsituation", um eine Pause zu rechtfertigen, in der sie illegale Handlungen begehen können.

Wie können Sie unabhängig feststellen, ob solche Bedrohungen in Smart Contracts vorhanden sind?

Wenn Sie das Vorhandensein von Pause-Funktionen in intelligenten Verträgen selbst feststellen wollen, sind die folgenden Tipps hilfreich.

  1. Untersuchen Sie den Quellcode des Vertrags, um festzustellen, ob es eine Pause-Funktion gibt. Vergewissern Sie sich, dass der Pausenmechanismus gut dokumentiert ist und über angemessene Zugriffskontrollen verfügt.

  2. Finden Sie heraus, wer die Pausenfunktion kontrolliert. Unbefugter oder unkontrollierter Besitz der Pausenfunktion ist ein potenzielles Problem.

  3. Lesen Sie die Dokumentation und die Projektspezifikationen, um sicherzustellen, dass sie klare und genaue Informationen über die Pausenfunktion, ihren Zweck und die Umstände, unter denen sie verwendet werden darf, enthalten.

  4. Prüfen Sie die Transparenz der Verwendung der Pausenfunktion. Stellen Sie sicher, dass es klare Verfahren für die Verwaltung und Entscheidung über die Aktivierung oder Deaktivierung der Pause-Funktion gibt.

  5. Achten Sie auf externe Audits der Smart-Contract-Sicherheit, insbesondere des Pause-Mechanismus. Auditoren sollten die Sicherheit und Transparenz der Pausenfunktion bewerten.

  6. Beobachten Sie das Verhalten des Vertrags und stellen Sie sicher, dass die Pausenfunktion nur unter legitimen Umständen aktiviert wird, wie z.B. aus Wartungs- oder Sicherheitsgründen.

  7. Sprechen Sie sich mit der Projektgemeinschaft und anderen Nutzern ab, um deren Erfahrungen und Bedenken bezüglich der Nutzung der Pausenfunktion zu verstehen.

  8. Halten Sie sich auf dem Laufenden über die neuesten Entwicklungen in unserer Community (Telegram-Kanal) und über bewährte Praktiken zur Betrugserkennung (unser Blog und YouTube-Kanal).

Um potenziell bösartige Funktionen in einem Pause-Smart-Contract zu erkennen, müssen Sie eine Due-Diligence-Prüfung durchführen und den Code und die Dokumentation des Projekts unter die Lupe nehmen. Vermeiden Sie Verträge mit verdächtigem Verhalten oder mangelnder Transparenz in Bezug auf die Nutzung der Pause-Funktion.

Der Sicherheitsscanner von Lotus Market findet alle gängigen (auch versteckte) Pause-Funktionen in 99,9 % der Fälle. Nutzen Sie unser Premium-Abonnement und schützen Sie Ihre Gelder vor Bedrohungen.

Nachfolgend sehen wir uns einige der häufigsten Beispiele für die Pause-Funktion an, die von der Lotus Market Platform erfolgreich gefunden werden.

independently determine

Beispiel 1: Grundlegende Pause-Funktion


  contract BasicPauseToken {
    address public owner;
    bool public paused;

    constructor() {
        owner = msg.sender;
        paused = false;
    }

    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused
    }
}

Tipps zur Identifizierung: Achten Sie auf einen Vertrag mit Funktionen wie pause und unpause oder ähnlichen Funktionen, die den Pausenzustand umschalten können.

Prüfen Sie auf einen Modifikator vom Typ whenNotPaused, der auf bestimmte Funktionen angewendet wird, um sicherzustellen, dass sie nur ausgeführt werden können, wenn der Vertrag nicht angehalten ist.

Prüfen Sie den Zugriffskontrollmechanismus, der es nur dem Eigentümer oder autorisierten Personen erlauben sollte, die Aussetzung eines Vertrags auszusetzen und zu widerrufen.

Beispiel 2: Zeitaktivierte Pause


  contract TimeActivatedPauseToken {
    address public owner;
    bool public paused;
    uint256 public pauseStartTime;
    uint256 public pauseDuration;

    constructor(uint256 _duration) {
        owner = msg.sender;
        paused = false;
        pauseStartTime = 0;
        pauseDuration = _duration;
    }

    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
        pauseStartTime = block.timestamp;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused
    }
}

Tipps zur Identifizierung: Suchen Sie nach einem Vertrag mit einem zeitaktivierten Pausenmechanismus, bei dem die Pause und der Pausenabbruch eine bestimmte Dauer haben.

Prüfen Sie, ob ein Modifikator vom Typ whenNotPaused auf bestimmte Funktionen angewendet wird. Vergewissern Sie sich, dass der Vertrag die Dauer der Pause erzwingt und einen Abbruch erst nach Ablauf der festgelegten Zeitspanne zulässt.

Bei der Identifizierung von Pausenfunktionen in einem Smart Contract ist es wichtig, den Code, die Zugriffskontrollen und den Zweck des Pausenmechanismus zu untersuchen. Prüfen Sie die Dokumentation und das Vertragsverwaltungsmodell sorgfältig und setzen Sie sich mit der Projektgemeinschaft auseinander, um die Legitimität des Vertrags und seine Eignung für den Zweck zu beurteilen. Lassen Sie stets Vorsicht walten und führen Sie eine Due-Diligence-Prüfung durch, bevor Sie sich an einer Transaktion oder Investition beteiligen, die aussetzbare Verträge beinhaltet.

time-activated pause

Beispiel 3: Bedingte Pausenfunktion


  contract ConditionalPauseToken {
    address public owner;
    bool public paused;

    constructor() {
        owner = msg.sender;
        paused = false;
    }

    modifier whenNotPaused() {
        require(!paused || msg.sender == owner, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused, except for the owner
    }
}

Tipps zur Identifizierung: Suchen Sie nach einem Vertrag mit einem bedingten Pausemechanismus, der es dem Eigentümer erlaubt, bestimmte Transaktionen auszuführen, auch wenn der Vertrag pausiert ist.

Prüfen Sie, ob der Modifikator des Typs whenNotPaused für Funktionen gilt, die erfordern, dass sich der Vertrag in einem nicht pausierten Zustand befindet.

Beispiel 4: Notpausenfunktion


  contract EmergencyPauseToken {
    address public owner;
    bool public paused;

    constructor() {
        owner = msg.sender;
        paused = false;
    }

    modifier whenNotPaused() {
        require(!paused || msg.sender == owner, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
    }

    function emergencyPause() public {
        require(msg.sender == owner, "Only the owner can initiate emergency pause");
        paused = true;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused, except for the owner
    }
}

Tipps zur Identifizierung: Achten Sie auf einen Vertrag mit einer Notpausenfunktion, die es dem Eigentümer ermöglicht, den Vertrag auch ohne Standardaussetzungsverfahren sofort auszusetzen.

Prüfen Sie auf einen Modifikator vom Typ whenNotPaused, um festzustellen, welche Operationen eingeschränkt sind, wenn der Vertrag ausgesetzt ist.

Achten Sie auf die Notpausenfunktionen des Vertrags und stellen Sie sicher, dass ihre Verwendung streng kontrolliert und gut dokumentiert ist.

Passen Sie die Aussetzungsfunktionen des Vertrags an sein Governance-Modell und die Entscheidungsprozesse für die Aktivierung und Deaktivierung der Aussetzungsfunktion an.

Beispiel 5: Eigentümergesteuerte Pause mit Zeitlimit


  contract TimedPauseToken {
    address public owner;
    bool public paused;
    uint256 public pauseStartTime;
    uint256 public pauseDuration;

    constructor(uint256 _duration) {
        owner = msg.sender;
        paused = false;
        pauseStartTime = 0;
        pauseDuration = _duration;
    }

    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == owner, "Only the owner can pause");
        paused = true;
        pauseStartTime = block.timestamp;
    }

    function unpause() public {
        require(msg.sender == owner, "Only the owner can unpause");
        require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused
    }
}

Tipps zur Identifizierung: Suchen Sie nach einem Vertrag mit einer eigentümergesteuerten Pause, die eine bestimmte Pausendauer und eine Abbruchpause enthält.

Prüfen Sie auf einen Modifikator vom Typ whenNotPaused, der auf die entsprechenden Funktionen angewendet wird, um die Operationen einzuschränken, wenn der Vertrag ausgesetzt wird.

owner-controlled pause with time limit

Beispiel 6: Drittanbieter-Pause mit Zeitlimit


  contract ThirdPartyTimedPauseToken {
    address public owner;
    address public thirdParty;
    bool public paused;
    uint256 public pauseStartTime;
    uint256 public pauseDuration;

    constructor(address _thirdParty, uint256 _duration) {
        owner = msg.sender;
        thirdParty = _thirdParty;
        paused = false;
        pauseStartTime = 0;
        pauseDuration = _duration;
    }

    modifier whenNotPaused() {
        require(!paused || msg.sender == owner || msg.sender == thirdParty, "Contract is paused");
        _;
    }

    function pause() public {
        require(msg.sender == thirdParty, "Only the third party can pause");
        paused = true;
        pauseStartTime = block.timestamp;
    }

    function unpause() public {
        require(msg.sender == thirdParty, "Only the third party can unpause");
        require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
        paused = false;
    }

    function transfer(address to, uint256 amount) public whenNotPaused {
        // Transfer logic when the contract is not paused, except for the owner and the third party
    }
}

Tipps zur Identifizierung: Suchen Sie nach einem Vertrag mit einem von einem Dritten verwalteten Aussetzungsmechanismus, bei dem der Dritte den Vertrag mit einer festgelegten Dauer aussetzen und trennen kann.

Prüfen Sie auf einen Modifikator vom Typ whenNotPaused, um festzustellen, welche Operationen eingeschränkt sind, wenn ein Vertrag ausgesetzt ist.

Stellen Sie sicher, dass die Zugriffskontrollmechanismen für Pausenfunktionen im Vertrag, unabhängig davon, ob sie vom Eigentümer, von der Gemeinschaft oder von Dritten verwaltet werden, transparent und gut konzipiert sind.

Wenn eine Pausenfunktion in einem Smart Contract identifiziert wird, sollte eine gründliche Codeanalyse durchgeführt, die Zugriffskontrollen getestet und der Zweck und das Kontrollmodell des Pausenmechanismus verstanden werden. Es ist von entscheidender Bedeutung, eine Due-Diligence-Prüfung durchzuführen und sich mit der Projektgemeinschaft auseinanderzusetzen, um die Legitimität des Vertrags zu bewerten und festzustellen, ob er für seinen Zweck geeignet ist. Seien Sie immer vorsichtig und recherchieren Sie gründlich, bevor Sie Verträge abschließen, die eine Pause-Option anbieten, um potenzielle Risiken zu mindern.

 

Wir hoffen, dass diese Beispiele Ihnen geholfen haben, die Schemata der Pause-Funktion in Smart Contracts besser zu verstehen.

 

 

Da alle Informationen in der Blockchain offen sind (vorausgesetzt natürlich, dass der Quellcode des Vertrags verifiziert ist), können Sie mit diesem Wissen bewaffnet selbstständig Smart Contracts studieren und verschiedene Betrugsversuche identifizieren.

 

Allerdings haben wir das alles schon für Sie erledigt! Melden Sie sich für ein Premium-Abonnement an und erhalten Sie Zugang zu exklusiven Filtern für die Funktionen von Smart Contracts und neuen Analysen. Erhöhen Sie Ihre Chancen, erfolgreich in profitable Token zu investieren.

Grüße, Lotus Market Team.

All posts

Connect to a wallet

Metamask