Pengesahan iklan rosak. Audit industri 2023 mendapati bahawa 60-80 peratus daripada tayangan iklan programatik yang dihidangkan melalui pertukaran utama menunjukkan kreatif yang berbeza kepada bot pengesahan berbanding pengguna sebenar. Ini adalah penyamaran — dan ia menjejaskan setiap laporan keselamatan jenama yang pernah anda baca. Penyelesaiannya memerlukan merawat perangkak pengesahan seperti penyerang: halakan ia melalui proksi HTTP, variasikan cap jarinya, dan bandingkan kandungan yang diberikan terhadap garis dasar yang diketahui selamat.
Bagaimana Penyamaran Memilih Sasaran
Penyamaran bergantung pada tiga isyarat: User-Agent, X-Forwarded-For (atau IP terus), dan Referer. Pelayan iklan berniat jahat memeriksa permintaan masuk dan memutuskan sama ada pelawat adalah bot pengesahan atau manusia. Bot — seperti dari Moat, Integral Ad Science, atau DoubleVerify — menghantar pengepala yang boleh diramal. Pelayan kemudian menghidangkan kreatif yang bersih dan selamat jenama kepada bot dan kreatif berniat jahat atau tidak sesuai kepada semua orang lain. Percanggahan itu tidak kelihatan pada papan pemuka pengesah.
Contoh dunia sebenar termasuk kandungan dewasa, propaganda politik, atau ubah hala perisian hasad yang dihidangkan hanya kepada pengguna mudah alih di geografi tertentu. Penyerang memeriksa User-Agent untuk “Mozilla/5.0 (Linux; Android …)” dan X-Forwarded-For untuk julat IP yang dimiliki oleh vendor pengesahan yang diketahui. Jika IP sepadan, iklan selamat. Jika tidak, pengguna mendapat muatan.
Menggunakan Proksi MITM untuk Mengesan Percanggahan
Kaedah pengesanan yang paling boleh dipercayai adalah menjalankan perangkak pengesahan anda sendiri melalui proksi HTTP telus — mitmproxy atau Burp Suite — dan bandingkan respons terhadap permintaan kawalan yang dihantar tanpa proksi. Proksi membolehkan anda menangkap badan respons mentah dan mengubah suai pengepala dalam masa nyata. Anda boleh memainkan semula permintaan yang sama dengan User-Agent atau X-Forwarded-For yang berbeza dan lihat sama ada pelayan iklan menukar kreatif.
Berikut adalah skrip mitmproxy minimum yang mencatat percanggahan antara dua permintaan ke URL yang sama dengan ejen pengguna yang berbeza:
# save as check_cloak.py
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if "adserver.example.com" in flow.request.pretty_host:
ua = flow.request.headers.get("User-Agent", "")
if "Android" in ua:
flow.request.headers["X-Forwarded-For"] = "1.2.3.4" # bot IP
else:
flow.request.headers["X-Forwarded-For"] = "5.6.7.8" # user IP
Jalankannya dengan mitmproxy -s check_cloak.py --listen-port 8080, kemudian halakan pelayar atau curl anda ke proksi. Bandingkan badan respons — jika HTML, imej, atau JavaScript berbeza, anda mempunyai kreatif yang disamarkan.
Perangkakan Sasaran Geo dengan Putaran Proksi
Penyamaran sering menggunakan GeoIP sebagai pembeza tambahan. Iklan mungkin menghidangkan kreatif bersih kepada permintaan yang berasal dari Amerika Syarikat tetapi bertukar kepada yang berniat jahat untuk pengguna di Asia Tenggara atau Eropah Timur. Untuk menangkap ini, anda mesti merangkak URL iklan yang sama dari pelbagai titik akhir geografi. Kumpulan proksi kediaman (contohnya, BrightData, Oxylabs) atau rantai proksi SOCKS5 membolehkan anda menetapkan X-Forwarded-For dan IP sumber TCP secara serentak.
Gunakan curl dengan proksi dan pengepala tersuai untuk mensimulasikan pengguna mudah alih di rantau sasaran:
curl -x socks5://user:pass@proxy-us-east:1080 \
-H "User-Agent: Mozilla/5.0 (Linux; Android 13; Pixel 7)" \
-H "X-Forwarded-For: 203.0.113.50" \
-H "Referer: https://example.com/article" \
-o response_us.html \
https://adserver.example.com/ad
curl -x socks5://user:pass@proxy-vietnam:1080 \
-H "User-Agent: Mozilla/5.0 (Linux; Android 13; Pixel 7)" \
-H "X-Forwarded-For: 42.112.0.1" \
-H "Referer: https://example.com/article" \
-o response_vn.html \
https://adserver.example.com/ad
Bandingkan dua fail tersebut. Sebarang perbezaan dalam tag <script> atau atribut imej src menunjukkan penyamaran mengikut geografi.
Perbezaan Kreatif Mudah Alih vs. Desktop
Penyamaran sering menyasarkan trafik mudah alih kerana pengguna mudah alih kurang cenderung untuk memeriksa permintaan rangkaian. Perangkak pengesahan yang hanya meniru pelayar desktop terlepas sepenuhnya perkara ini. Anda mesti menghantar permintaan dengan kedua-dua rentetan User-Agent dan bandingkan respons. Corak biasa: respons desktop mengandungi sepanduk 300x250 standard, manakala respons mudah alih memuatkan interstisial skrin penuh yang mengubah hala ke halaman pancingan data.
Gunakan alat seperti diff atau jq untuk membandingkan respons JSON. Untuk HTML, gunakan htmlq atau pup untuk mengekstrak elemen tertentu. Kuncinya adalah untuk mengautomasikan perbandingan merentas matriks ejen pengguna, geo IP, dan perujuk. Satu sistem pengeluaran yang saya bina menjalankan 16 permintaan selari per unit iklan dan menandakan sebarang variasi melebihi ambang saiz bait 5%.
Keseimbangan dan Had
Pendekatan ini tidak sempurna. Pelayan iklan boleh mengesan julat IP proksi dan menghidangkan kreatif bersih kepada pintu keluar proksi yang diketahui — sama seperti mereka mengesan bot pengesahan. Memutarkan proksi kediaman membantu tetapi menambah kependaman dan kos. Juga, sesetengah penyamaran berdasarkan masa: kreatif berniat jahat hanya muncul selepas kelewatan atau selepas peristiwa JavaScript yang tidak boleh dicetuskan oleh permintaan curl yang mudah. Dalam kes tersebut, anda memerlukan pelayar tanpa kepala (Puppeteer, Playwright) di belakang proksi, yang meningkatkan kerumitan dan kebolehcapjarian.
Namun prinsip teras tetap sah: jika anda tidak dapat menghasilkan semula respons yang sama tepat merentas set cap jari klien yang pelbagai, iklan itu tidak boleh dipercayai. Proksi HTTP memberi anda kawalan untuk membina cap jari tersebut secara atur cara. Mulakan dengan skrip mitmproxy yang mudah dan beberapa titik akhir proksi. Itu sahaja akan menangkap majoriti kempen penyamaran usaha rendah — dan ia tidak memerlukan kos selain beberapa baris Python.