Стрим по Affiliate Marketing. Интервью AEZAKMI

AEZAKMI_ RU
5 min readOct 20, 2020

--

Друзья, всем привет!

Недавно у нас прошёл стрим вместе с NPPR TEAM (команда арбитражников с полезными сервисами) и dr.cash (известная CPA сетка), после которого Yellow web (один из ярких представителей CPA-рынка на сегодняшний день) задал ряд вопросов.

Ответы вы можете найти внутри этой статьи.

Запись стрима вы можете посмотреть тут:
www.youtube.com/watch?v=nqOSeXn-qFY

Приятного ознакомления!

  1. Как определили, что фб чекает камеру/колонки/микрофон и речевые синтезаторы?

Исследование проводилось с помощью инжекта JS скрипта, который переопределяет методы WebApi, за счет чего — при вызове соответствующих методов — этот вызов логируется — указывая на функцию которая вызывала метод и аргументы переданные в метод.

Таким образом в режиме реального времени, проводя различные действия на FB — я смог отслеживать какие методы и откуда вызываются, чтобы впоследствии анализировать обфусцированный код шаг за шагом.

Код для детекта сбора фингерпринта установленных речевых синтезаторов:

const original_speechSynthesis = speechSynthesis.getVoices;
speechSynthesis.getVoices = function getVoices() {
let detector = {};
detector.type = "speechSynthesis";
detector.func = "getVoices";
detector.arguments = Array.from(arguments);
console.table(detector);
return original_speechSynthesis.apply(this, arguments);
};

Проверить что отдает функция можно на любой вкладке в консоли разраба — speechSynthesis.getVoices();

Код для детекта сбора фингерпринта имеющихся камер,колонок и микрофонов:

const original_enumerateDevices = navigator.mediaDevices.enumerateDevices;
navigator.mediaDevices.enumerateDevices = function () {
let detector = {};
detector.type = "navigator";
detector.func = "mediaDevices";
detector.arguments = Array.from(arguments);
console.table(detector);
return original_enumerateDevices.apply(this, arguments);
};

Проверить что отдает функция можно на любой вкладке в консоли разраба — navigator.mediaDevices.enumerateDevices();

2. Чем отличаются браузерные плагины для Chrome и Chromium?

Плагины Chromium:

Plugin {0: MimeType, application/x-google-chrome-pdf: MimeType, name: "Chromium PDF Plugin", filename: "internal-pdf-viewer", description: "Portable Document Format", length: 1}Plugin {0: MimeType, application/pdf: MimeType, name: "Chromium PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai", description: "", length: 1}

Плагины Chrome:

Plugin {0: MimeType, application/x-google-chrome-pdf: MimeType, name: "Chrome PDF Plugin", filename: "internal-pdf-viewer", description: "Portable Document Format", length: 1}Plugin {0: MimeType, application/pdf: MimeType, name: "Chrome PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai", description: "", length: 1}Plugin {0: MimeType, 1: MimeType, application/x-nacl: MimeType, application/x-pnacl: MimeType, name: "Native Client", filename: "internal-nacl-plugin", description: "", …}

Проверить можно вызвав в консоли: navigator.plugins

3. Откуда инфа о том, что фб использует Passive OS Fingerprint? Пруфы, плз.

Пруфов не будет — так как анализ TCP пакетов происходит за счет прослушки сетевого интерфейса на стороне инфраструктуры FB. Это та часть АФ системы — работа которой всегда будет скрыта от глаз исследователей. Единственный возможный пруф — это если FB сам об этом публично заявит.

Беря в расчет экономику этих данных и подключив дедукцию — напрашивается следующий вывод.

У любой крупной системы имеется то или иное DLP решение которое слушает интерфейс и собирает cap файлы логов для последующего анализа.

Как я и говорил — отпечатки которые нельзя получить из сторонней БД или за счет вычислительных ресурсов юзера — считаются дорогими и этот метод несомненно к ним относится.

Для понимания как это скорее всего происходит — системе нужно обратиться к поисковому движку (fb юзает elasticsearch) для получения указателя на соответствующий юзеру cap файл (у них скорее всего не в капах они лежат) и грепнуть его на наличие строки типа “4:120+8:0:1452:65535,0:mss,nop,nop,sok:df,id+:0”

В случае когда скоринг спорный и АФ системе нужно принять решение — она исходя из коммерческой ценности юзера принимает решение — кинуть на селфи или запросить из имеющихся данных доп инфу. На лету такие данные парсить из пакета и класть в базу конечно бессмысленно и FB себе такого никогда не позволит. Но никаких законов сбор этих данных не нарушает так как они лежат в открытом виде внутри каждого TCP пакета.

Если сопоставить это с тем — что FB использует более дорогие методы проверок, и с тем что GDRP значительно урезал их возможности в плане сбора данных, то кажется очевидным что их антифрод будет анализировать эти данные при необходимости.

4. Как фб видит, что у меня два монитора?

Если окно браузера развернуто не на крайнем левом экране, то значение Screen.availLeft — будет показывать ширину левого экрана в пикселях.

Если же экран является левым-боковым и экранов левее нету — то значение этого параметра будет равно нулю.

То же самое с AvailTop если измерять по оси Y.

Это самый верный и дешевый способ задетектить 2 монитора.

5. Ну и самое главное: откуда у фэбэ есть база тарифных планов Билайна с платной раздачей интернета?

Эти данные доступны в Mobile Data Plan Sharing API от Google.

Так же это можно выявить по косвенным признакам анализируя ttl и ip диапазон. Имея набор исторических данных по клиентам определенного оператора — несложно выявить что мобильных клиентов beeline куда больше чем tele2.

Эти данные FB необходимы в первую очередь для оценки платежеспособности юзера.

6. Тимур, скинь, плз, тот Javascript, где ты увидел прямо во фронтэнде фэбэ списки моделей клавиатур и мышей.

Все методы по анализу клавиатуры и мыши работают с помощью EventListener-ов.

На странице создания BM и на странице настроек рекламной кампании — можно поставить в консоли дебагер на события keydown и keyup. Или уже после загрузки страницы собрать их с помощью
https://gist.github.com/chelovekula/73d82152cabe1724a5962e5d572ea227

Указатели на стартовые функции будут следующими

https://gist.github.com/chelovekula/ffdffd4faf1bbc0be77550dfa4a10e82

Далее — необходимо поставить точку остановки на этих функциях и с помощью “Step over the next function call” пробираться сквозь этот ад. Там будет обфусцированная json-ка о которой и идет речь.

Но из за большого количества рекурсий в обфусцированном коде — дело это не быстрое и в прошлый раз у меня ушло несколько часов прежде чем я добрался до этого момента.

На следующей неделе я планировал выделить время и залезть в это болото еще раз — чтобы более тщательно все изучить и заодно скину вам этот json.

7. Сканирование портов

4 года назад FB действительно мог сотрудничать с этой компанией и сканировать порты с помощью веб сокетов.

Но в последствии появился GDPR и последующие разбирательства связанные с утечками вынудили FB отказаться от этого метода.

Так как метод связан с использованием вебсокетов — сканирование невозможно провести скрытно — во вкладке networks сразу можно будет увидеть запросы вида wss://127.0.0.1:5900/.

Недавно проводилось исследование этой конторы с которой FB раньше сотрудничал и был выявлен список их актуальных клиентов с помощью СNAME анализа — https://docs.google.com/spreadsheets/d/1Nu4lpyZ5PQUIpiLJBddXnr67t5-1y0u40dzyzSYj1gc/edit#gid=0 — судя по этим данным FB там уже нет. И я ни разу не видел в networks запросы к локалхосту на FB.

Что касается дороговизны метода — я имел ввиду, что FB не может себе его позволить из за репутационных и юридических издержек в связи с GDPR.

Хочу еще раз вернуться к первому вопросу.

На стриме я озвучил что использую собственный детектор вызовов WebApi методов для исследования антифрод системы FB. В ближайшее время я выпущу специальную версию Aezakmi в которой будет присутствовать этот инструмент, его код будет полностью открытым и вы на каждом этапе сможете самостоятельно отслеживать что и когда FB собирает — получая отчет по аккам.

Также — вы сможете присоединится к добровольной программе сбора обезличенных данных, которая будет анализировать все ваши действия на FB и логировать все что обнаружил детектор.

Так как антифрод система у них — Динамическая, этот подход позволит нам максимально точно анализировать изменчивое поведение FB — показывая нам закономерности. Все данные будут доступны для анализа любому исследователю который участвует в программе.

NPPR недавно анонсировал народную клоаку и мне кажется подобные кооперативные решения и самоорганизации повысят нашу общую эффективность в целом.

Эта инициатива — при наличии поддержки от сообщества сможет стать народной слежкой за FB

--

--