Автор терминального мультиплексора RACE настроил рекламную кампанию в Google Ads, потратил 500$ и получил приостановку аккаунта с формулировками Malicious softwareобвинение Google Ads во вредоносном ПО и Compromised Siteобвинение Google Ads во взломанном сайте. Google не сообщил, что именно признано вредоносным или скомпрометированным. Аккаунт позже восстановили, но разбор причин и попытки апелляции заняли недели и дали отрицательный результат.
Что именно произошло
Заблокирован был не отдельный рекламный креатив, а весь аккаунт Google Ads. Автор описывает это так: настроил кампанию, потратил 500$, после чего Google приостановил аккаунт. Позже он подал апелляции — несколько раз, с всё большим объёмом информации. Первую отклонили и предложили либо прислать новые сведения, либо удалить аккаунт, если таковых нет; также его направили к вариантам возмещения в ЕС. Следующие апелляции тоже отклонялись, а одна из попыток привела к блокировке на неделю. В итоге аккаунт был восстановлен.
Google не указал, что именно было вредоносным, что скомпрометировано и почему предоставленные доказательства не опровергли обвинения.
Что проверял автор
Автор провёл независимую проверку по нескольким каналам:
- Google Safe Browsing: оба домена,
race-term.comиdownloads.race-term.com, сообщили «No unsafe content found». - Google Search Console: отчёт Security Issuesраздел Search Console со списком проблем безопасности сайта открывался для каждого домена отдельно, оба сообщили «No issues detected».
- VirusTotal: распространяемый DMGформат файла-образа для установки приложений в macOS/бинарник признан чистым.
- Подписи DMG и приложения: независимо проверены, признаны действительными и чистыми.
- JavaScript: все исходные файлы и сгенерированные бандлы сайта проверены, вредоносного, внедрённого, обфусцированного или неожиданного кода не найдено.
Автор отдельно оговаривает, что результаты Safe Browsing и Search Console не устанавливают, что именно обнаружил Google Ads, и не показывают, используют ли обе системы одинаковые критерии. По его формулировке, это не clearance certificate from Google Adsподтверждение от Google Ads об отсутствии нарушений.
Почему классификатор мог сработать
RACE — нативное приложение на Rust, терминальный мультиплексорпрограмма, которая запускает несколько терминальных сессий внутри одного окна и управляет ими. По дизайну он запускает и управляет терминальными процессами в фоне — это неотъемлемая часть функциональности. Автор предполагает, что такое управление подпроцессами могло напоминать поведение, иногда ассоциируемое с security-sensitive software, хотя оно не скрыто и не вредоносно.
Конфигурация RACE документирует три режима сохранения сессий: собственный PTY-хострежим, при котором RACE сам удерживает псевдотерминал и процессы сессии, пока приложение работает, внешний dtachрежим, при котором сохранение сессий между запусками обеспечивает отдельная внешняя утилита dtach или без сохранениярежим, при котором сессии завершаются вместе с приложением и между запусками не сохраняются. Автор считает, что приостановка могла быть ложноположительным срабатываниемошибочным вердиктом, когда система помечает как угрозу безопасное поведение и связывает его именно с легитимным управлением подпроцессами, присущим терминальному мультиплексору.
Чтобы проверить эту гипотезу, он выпустил версию 1.0.39 и отправил её на повторную проверку, но результат остался неясным. Хакерский подход в итоге убрали: теперь об этом спрашивают пользователя. Автор описывает своё положение как Catch 22ситуацию, из которой нет выхода: чтобы оспорить обвинение, нужно знать его суть, а её не раскрывают и замечает, что «that road might be out forever».
Замкнутый круг апелляций
Без раскрытия сути обвинения оспаривать нечего: Google сообщил только формулировки, но не указал, какая сущность признана вредоносной. Автор получил инструкции по апелляции, но без объяснения, которое помогло бы оспорить решение. Каждая новая апелляция с ещё большим объёмом информации снова отклонялась, а одна из попыток привела к недельной блокировке.
Собранный пакет доказательств — Safe Browsing, VirusTotal, Search Console, подписи и нотаризациязаверение приложения у Apple, подтверждающее, что оно не изменялось после подписи, анализ JavaScript — не гарантирует разблокировку. При разбирательстве с европейскими регуляторами он может послужить материалом для обращения к EU redress optionsпредложенным Google способам обжалования решения в Евросоюзе или судебного иска в ЕС, но гарантированного результата такого разбирательства нет. Автор формулирует дальнейшие планы так: «I'll appeal until oblivion, …or maybe I'll try EU court case».
Что остаётся неизвестным
Google не сообщил, какая именно сущность признана вредоносной, почему доказательства не сработали и что нужно изменить для разблокировки. Проверка файла показала, что он чист, и даже сканирование Google не нашло вредоносного ПО. Единственная рассматриваемая автором причина — управление фоновыми shell-процессамипроцессами командной оболочки, которые запускаются и работают в фоне, но подтвердить или опровергнуть её он не смог: версия 1.0.39 с очисткой после удаления не дала ясного ответа.