Hoe ik schadelijke software adverteer via Google Ads
Update: Door de schijnbare magie van Hacker News is mijn Google Ads-account hersteld. ✨ Er is nog steeds geen uitleg over wat de schorsing heeft veroorzaakt, maar bedankt aan iedereen die heeft geholpen om dit zichtbaar te maken (en/of op te lossen).
Wat is RACE?
RACE is een native macOS terminal multiplexer geschreven in Rust. In plaats van alles in een uniform raster te proppen, kun je terminals vrij positioneren en aanpassen in grootte: houd een grote editor naast een kleine shell, verspreid build-logs, richt de werkruimte in rondom het werk, markeer met kleuren, enzovoort. Ik heb het gebouwd, ik gebruik het en ik onderhoud het. Omdat het een multiplexer is, beheert het terminals en zorgt het ervoor dat shell-sessies blijven bestaan na het herstarten van de applicatie (handig voor ontwikkeling en het hervatten van werk).
Ik heb ook de website hiervoor gebouwd: https://race-term.com. Dit is een statische pagina gebouwd met Bridgetown. JavaScript wijzigt de DOM om interactieve visuele functies te bieden en dat is alles. Er zit geen custom server-side applicatie achter. Ten tijde van de indiening (dat is recent gewijzigd) was de enige third-party JavaScript die van Cloudflare Analytics. Er is geen Google Analytics of advertentie-tracking gebruikt om het licht te houden. De site wordt geserveerd via Cloudflare, en Cloudflare R2 bewaart de downloads.
De Google Ads campagne
Toen probeerde ik voor het eerst te adverteren. Ik stelde een Google Ads-campagne in, gaf 500 dollar uit en... Google schorste het account vanwege "schadelijke software" (Malicious software).
Een onverwachte toevoeging aan de functielijst.
Om precies te zijn: Google sprak van "schadelijke software" en een "gecompromitteerde site" (Compromised Site). Dat klonk als onzin. De applicatie was ondertekend en genotariseerd. De website was overzichtelijk en had geen aanvalsoppervlak, maar voor de zekerheid heb ik het gecontroleerd. Niets. Helemaal niets. Alles was schoon. Dus ik ging in beroep.
Mijn beroep werd afgewezen. Google vertelde me dat ik nieuwe informatie moest indienen en suggereerde dat ik mijn account kon verwijderen als ik geen andere opties had. Ook werd ik gewezen op EU-rechtsmiddelen. Er werd niet vermeld wat er schadelijk was, wat er gecompromitteerd was, of waarom het bewijs dat ik leverde niet voldeed aan de beschuldigingen. Ik ontving instructies voor het indienen van een beroep, maar geen uitleg die mij zou helpen om de beslissing aan te vechten.
Ik ging opnieuw in beroep, en werd afgewezen. Ik ging opnieuw in beroep, en werd afgewezen. Ik ging opnieuw in beroep met nog meer informatie, en werd afgewezen. En opnieuw, waarna ik een week lang geblokkeerd werd. En opnieuw...
Beveiligingsverificatie en analyse
In mijn verzoek tot herbeoordeling heb ik het volgende uiteengezet:
We hebben een volledige beveiligingsreview uitgevoerd van de RACE-website, de downloadinfrastructuur, de JavaScript-assets en de gedistribueerde macOS-applicatie.
Beveiligingsverificatie
- Google Safe Browsing: Geen problemen gemeld voor de gedistribueerde DMG: https://transparencyreport.google.com/safe-browsing/search?url=https:%2F%2Fdownloads.race-term.com%2FRACE.dmg&hl=en
- VirusTotal: De gedistribueerde DMG/binary is schoon: https://www.virustotal.com/gui/file/84d082f6a5d3ab75b30e532bf60b406ce12ecc3550bc3f2c6904f34d08ba5e9f?nocache=1
- Handmatige controle: De DMG- en applicatiesignaturen zijn onafhankelijk geverifieerd en bleken geldig en schoon.
- Code-analyse: Alle JavaScript-bronbestanden en gegenereerde bundles die door de website worden gebruikt, zijn gecontroleerd. De bundle-outputs zijn geanalyseerd en er is geen schadelijke, geïnjecteerde, geobfusceerde of onverwachte code gevonden.
- Google Search Console: Er zijn geen beveiligingsproblemen gemeld voor:
race-term.com: https://search.google.com/search-console/security-issues?resourceid=sc-domain%3Arace-term.comdownloads.race-term.com: https://search.google.com/search-console/security-issues?resourceid=sc-domain%3Adownloads.race-term.com
Applicatiegedrag
RACE is een native applicatie geschreven in Rust. Het is een terminal multiplexer, dus het is inherent aan het ontwerp dat het terminalprocessen in de achtergrond start en beheert.
Dit gedrag van subprocess-management is een essentieel onderdeel van de functionaliteit van de applicatie. Hoewel dit gedrag soms geassocieerd wordt met beveiligingsgevoelige software, is het in dit geval niet verborgen en niet schadelijk. Het proces-multiplexing mechanisme is gedocumenteerd in de applicatie. Gebruikers kunnen RACE ook configureren om dtach als alternatieve multiplexer te gebruiken. Dit gedrag en de relevante configuratie worden vermeld in de About/configuratie-documentatie van de applicatie.
De applicatie installeert geen malware, injecteert geen code in andere applicaties, wijzigt het gedrag van de browser niet en probeert zijn procesactiviteit niet te verbergen.
Verzoek tot herbeoordeling
We hebben alle plausibele oorzaken van de policy/security-vlag onderzocht, de website en de gedistribueerde applicatie geverifieerd met behulp van zowel Google- als onafhankelijke beveiligingstools, en hebben geen beveiligingsproblemen gevonden.
Wij geloven daarom dat de schorsing het resultaat is van een false positive, mogelijk gerelateerd aan het legitieme subprocess-management gedrag dat inherent is aan een terminal multiplexer. Wij verzoeken om een handmatige herbeoordeling van het account, de website en de applicatie op basis van het bovenstaande bewijs.
De Checklist
Ik heb niet alleen gereageerd; ik heb alles gecontroleerd:
- Google Safe Browsing
Ik heb zowel race-term.com als downloads.race-term.com gecontroleerd. Beiden meldden "Geen onveilige inhoud gevonden". De screenshots tonen dat de status is bijgewerkt op 9 september 2026. Dit stelt vast wat Safe Browsing rapporteerde, maar niet noodzakelijkerwijs wat Google Ads detecteerde.
- Google Search Console
Ik heb het rapport voor beveiligingsproblemen voor elk domein afzonderlijk geopend. Beiden meldden "Geen problemen gedetecteerd". Er was geen geïnfecteerde pagina, schadelijke download of geïnjecteerde resource om te onderzoeken.
- Het bestand
Ik heb het bestand gecontroleerd om te zien of er iets in terecht was gekomen. Natuurlijk was het schoon; zelfs de scan van Google identificeerde GEEN MALWARE.
- Signaturen en websitecode
Ik heb het volgende gecontroleerd:
- Bestands-signaturen
- Notarisatie-status
- Ruwe JavaScript-output
- Gebundelde JavaScript-output (om uit te sluiten dat de bundler iets toevoegde)
- Cloudflare-logs (om te kijken of Google werd tegengehouden door een anti-LLM guard of captcha)
- Toegankelijkheid met verschillende User Agents
- Resultaat: Niets. Niets. Niets.
- Persistente terminalprocessen
Er is één ding: RACE start en beheert bewust shellprocessen op de achtergrond. De configuratie documenteert drie persistence-backends: de eigen PTY-host, externe dtach, of geen persistentie.
Ik dacht: misschien is dat het probleem. Dat je de app start en deze op de achtergrond blijft draaien. Daarom maakte ik versie 1.0.39, die een (geïmproviseerde) schoonmaak uitvoert nadat de applicatie is verwijderd. Ik diende dit in, en raad eens wat het resultaat was? (Opmerking: de geïmproviseerde methode is inmiddels verwijderd; de gebruiker wordt hier nu over geïnformeerd, hoewel dat vanuit UX-perspectief erg onhandig is).
Conclusie
Wie weet wat nu gebeurt. Misschien is die weg voor altijd afgesloten.
Het meest frustrerende aan de hele situatie is de Catch-22 waarin ik me bevind: ik heb geen idee wat ik nu kan doen. Ik zal in beroep gaan tot in het oneindige... of misschien probeer ik een rechtszaak via de EU. Want het lijkt erop dat dat de enige weg vooruit is.
Radio Erywan leverde in ieder geval nog correcties aan.
Przemysław Alexander Kamiński
Groetjes,