Om een Rowhammer-exploit te maken, moet de programmeur drie problemen oplossen. Allereerst moet het lukken de hoogfrequente lees-benaderingen direct op het DRAM uit te voeren, zonder dat deze in de cache terechtkomen. Er moeten twee logische geheugenadressen opgespoord worden die naar twee DRAM-rijen van dezelfde bank verwijzen en moet er in het geval van een double-sided Rowhammer een derde slachtoffer-rij opgespoord worden. Ten slotte moet het lukken slachtoffer-rijen te gebruiken die binnen een virtueel geheugenbereik zitten met datastructuren die met de beveiliging te maken hebben.
Om het cachegeheugen te omzeilen gebruikten de eerste Rowhammer-onderzoekers de processorinstructie CLFLUSH, die het cachegeheugen leegmaakt waardoor de eerstvolgende leesbenadering direct in het DRAM terechtkomt. Er zijn echter platforms, bijvoorbeeld systemen met ARM-chips, waar gebruikers of processen zonder voldoende rechten zulke instructies niet mogen gebruiken. Daarvoor werd een strategie uitgedacht om het cachegeheugen snel met foute waarden te vullen waarbij door het volle cachegeheugen de opvolgende leesbenadering een cache-miss genereert, en zo het DRAM direct aanspreekt. Alternatieve strategieën gebruiken instructies die helemaal niet in het cachegeheugen terechtkomen of die met DMA-benaderingen werken om de tussenopslag te verhinderen.
Het is ingewikkelder om de virtuele adressen van geschikte agressor- en slachtoffer-rijen te berekenen. Dat gaat hooguit enigszins eenvoudig wanneer de zogenaamde mapping van logische naar fysieke adressen precies kan worden achterhaald, bijvoorbeeld uit de documentatie van het besturingssysteem, cpu, BIOS en geheugenmodules. Zoals gezegd verschilt de mapping mogelijk al bij geheugenmodules die stammen uit verschillende productieseries van dezelfde fabrikant. Intussen worden al de eerste methoden ontwikkeld om de mapping via software te automatiseren. Een methode is het meten van de minimale tijdsverschillen tussen benaderingen van opgeslagen waarden. Cache-hits zijn duidelijk sneller dan cache-misses. Die laatste ‘verbruiken’ namelijk meer cpu-cycli dan een hit, en software herkent de tijdsverschillen. Bovendien buffert de cache de gegevens uit RAM in specifieke brokjes. Met deze informatie, en successievelijke benaderingen op adresbereiken, kan malware de mapping tussen logische en fysieke adressen achterhalen. Dat duurt wel even.
Onlangs werd de zogeheten ‘spoiler’-procedure voorgesteld, waarmee een proces zonder beheerdersrechten toch snel kan mappen [3]. Spoiler gebruikt de data-afhankelijkheid van het speculatief laden en opslaan in de Memory Order Buffer voor het identificeren van samenhangende fysieke geheugenbereiken.
Er zijn verschillende concepten om na het mappen adresbereiken te vinden met veiligheidsrelevante datastructuren. Een van die concepten is het onderzoeken van Page Table Entries (PTE). Deze bevatten naast de mapping tussen logische en fysieke adressen ook toegangsrechten op geheugenbereiken.
Indien een virtueel adresbereik is geïdentificeerd dat bruikbare doelwitten bevat, moet de malware dat koppelen aan het fysieke adres van een geschikte slachtoffer-rij. De RAM-adressen van datastructuren kunnen verschoven worden via procedures genaamd memory spraying – ook wel bekend als heap spraying – en memory grooming. Deze procedures worden ook bij andere aanvallen ingezet.