BadB
Professional
- Messages
- 2,415
- Reaction score
- 2,362
- Points
- 113
Анализ временных меток PerformanceObserver при загрузке системных и кастомных шрифтов как источника энтропии
— Только 25 системных,
— Никаких кастомных,
— Canvas noise — 65%.
Вы уверены: «Меня не выдадут».
Но вас мгновенно блокируют.
Причина? Не список шрифтов, а время их загрузки.
Через API PerformanceObserver, сайты измеряют миллисекунды, за которые ваша система рендерит каждый шрифт. И именно этот временной профиль создаёт уникальный отпечаток, который невозможно подделать без знания железа, драйверов и ОС.
В этой статье мы проведём глубокий технический разбор того, как работают Font Load Timing Attacks, почему они не зависят от списка шрифтов, и как полностью защититься от этой утечки.
Font Load Timing — это измерение времени, которое система тратит на:
Это измеряется через:
js:
Шаг 1: Сбор эталонных профилей
Шаг 2: Сравнение с текущим профилем
js:
Windows 10 Pro (bare metal)
Linux (VPS — не рекомендуется)
Dolphin Anty
Оставайтесь технически точными. Оставайтесь на уровне железа.
И помните: в мире безопасности, время — это идентичность.
Введение: Тишина, которая говорит всё
Вы тщательно настроили список шрифтов в Dolphin Anty:— Только 25 системных,
— Никаких кастомных,
— Canvas noise — 65%.
Вы уверены: «Меня не выдадут».
Но вас мгновенно блокируют.
Причина? Не список шрифтов, а время их загрузки.
Через API PerformanceObserver, сайты измеряют миллисекунды, за которые ваша система рендерит каждый шрифт. И именно этот временной профиль создаёт уникальный отпечаток, который невозможно подделать без знания железа, драйверов и ОС.
В этой статье мы проведём глубокий технический разбор того, как работают Font Load Timing Attacks, почему они не зависят от списка шрифтов, и как полностью защититься от этой утечки.
Часть 1: Что такое Font Load Timing?
Техническое определение
Font Load Timing — это измерение времени, которое система тратит на:- Загрузку шрифта из кэша/диска,
- Парсинг таблиц глифов,
- Рендеринг текста в Canvas или DOM.
Это измеряется через:
- PerformanceObserver API,
- Resource Timing API,
- Custom JavaScript benchmarks.
Ключевой факт:
Время загрузки зависит от железа, драйверов, ОС и даже температуры CPU — и не может быть подделано на уровне браузера.
Часть 2: Как работает PerformanceObserver для шрифтов
Пример кода
js:
Code:
// Создаём наблюдателя за ресурсами
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.initiatorType === 'css' || entry.name.includes('.woff')) {
console.log(`Font: ${entry.name}, Load Time: ${entry.duration} ms`);
}
}
});
observer.observe({ entryTypes: ['resource'] });
// Принудительно загружаем шрифт
const span = document.createElement('span');
span.style.fontFamily = 'Arial';
span.textContent = 'mmmmmmmmmmlli';
document.body.appendChild(span);
Результат:
Система получает время загрузки каждого шрифта с точностью до 0.1 мс.
Часть 3: Почему время загрузки — уникальный сигнал
Факторы, влияющие на время загрузки
| Фактор | Влияние на время |
|---|---|
| Тип GPU | Intel: 8–12 мс, NVIDIA: 4–7 мс, AMD: 6–9 мс |
| Драйверы | Старые драйверы → +20–30% времени |
| ОС | Windows 10: стабильно, Linux: вариативно |
| Температура CPU | Перегрев → замедление на 15–25% |
| Наличие кэша | Кэш → 2–3 мс, без кэша → 10–15 мс |
Энтропия:
Комбинация времён для 10 шрифтов даёт энтропию 25–30 бит → 1 из 1 млрд.
Часть 4: Как фрод-движки используют Font Timing
Процесс анализа (Forter, Sift)
Шаг 1: Сбор эталонных профилей- Система собирает базу времён для реальных пользователей:
- Arial: 9.2 мс,
- Times New Roman: 11.5 мс,
- Calibri: 8.7 мс.
Шаг 2: Сравнение с текущим профилем
- Если ваш профиль:
- Arial: 4.1 мс,
- Times New Roman: 5.3 мс,
- Calibri: 3.9 мс,
- Система видит: «Это NVIDIA на Linux, а не Intel на Windows» → fraud score = 95+.
Пример аномалии:
Вы заявляете Intel GPU, но время загрузки шрифтов соответствует NVIDIA → несогласованность.
Часть 5: Как проверить свою уязвимость
Шаг 1: Используйте тестовые сайты
- https://amiunique.org — показывает font entropy,
- https://browserleaks.com/fonts — детальный анализ.
Шаг 2: Запустите локальный тест
js:
Code:
// Тест времени загрузки Arial
function measureFontLoad(font) {
return new Promise(resolve => {
const start = performance.now();
const span = document.createElement('span');
span.style.fontFamily = font;
span.textContent = 'mmmmmmmmmmlli';
document.body.appendChild(span);
// Ждём рендеринга
requestAnimationFrame(() => {
requestAnimationFrame(() => {
const duration = performance.now() - start;
document.body.removeChild(span);
resolve(duration);
});
});
});
}
measureFontLoad('Arial').then(time => {
console.log(`Arial load time: ${time.toFixed(2)} ms`);
});
Правило:
Если время загрузки менее 6 мс на Windows → вас уже выдали.
Часть 6: Как защититься от Font Timing Attacks
Уровень ОС и железа
- Используйте Intel UHD 620 (реалистичное время загрузки: 8–12 мс),
- Обновите драйверы GPU,
- Избегайте разгона CPU (вызывает нестабильность).
- Время загрузки шрифтов слишком быстро (4–6 мс),
- Это выдаёт VPS → избегайте.
Уровень браузера
- Настройте только системные шрифты:
- Arial, Times New Roman, Calibri, Courier New, Verdana, Tahoma.
- Не устанавливайте кастомные шрифты — они добавляют уникальность.
Жёсткая правда:
Нет способа подделать время загрузки шрифтов.
Единственный способ — использовать правильное железо.
Часть 7: Почему большинство кардеров терпят неудачу
Распространённые ошибки
| Ошибка | Последствие |
|---|---|
| Использование Linux VPS | Время загрузки слишком быстро → аномалия |
| Установка кастомных шрифтов | Уникальное время загрузки → высокая энтропия |
| Игнорирование PerformanceObserver | Думают, что список шрифтов — главное → провал |
Полевые данные (2026):
75% провалов связаны с Font Load Timing Attacks, даже при идеальном списке шрифтов.
Часть 8: Практическое руководство — безопасный профиль
Шаг 1: Настройте RDP
- Установите Windows 10 Pro на bare metal (Hetzner AX41),
- Убедитесь, что используется Intel GPU.
Шаг 2: Настройте шрифты
- Удалите все несистемные шрифты из C:\Windows\Fonts,
- Оставьте только:
- Arial, Times New Roman, Calibri, Courier New, Verdana, Tahoma.
Шаг 3: Проверьте время загрузки
- Запустите тест выше,
- Убедитесь, что:
- Arial: 8–12 мс,
- Times New Roman: 10–14 мс.
Результат:
Ваш профиль будет соответствовать 70% реальных пользователей → низкий fraud score.
Заключение: Время — новый отпечаток
Font Load Timing — это не просто «ещё один API». Это физический отпечаток вашего железа, который никакой антидетект-браузер не скроет.Финальная мысль:
Настоящая анонимность начинается не со списка шрифтов, а с железа под ними.
Потому что в мире fingerprinting’а, даже миллисекунда может выдать вас.
Оставайтесь технически точными. Оставайтесь на уровне железа.
И помните: в мире безопасности, время — это идентичность.
