Büyük şirketler gibi web scraping yapmak istiyorsanız (2021)
(incolumitas.com)- Yalnızca AWS Lambda ve Headless Chrome ile haftada milyonlarca Google SERP toplanabiliyordu, ancak güçlü şekilde korunan siteler karşısında bulut tabanlı bot mimarisi kolayca sınırlarına ulaşıyordu
- Lambda'yı yeniden çağırma ve birden çok bölge kullanımıyla, 16 bölge temelinde yaklaşık
16 * 250 = 4000genel IP aynı anda kullanılabiliyordu ve bu, gevşek hedefler için yeterliydi - DataDome, Akamai, Imperva gibi anti-bot şirketleri tarayıcı ayar tutarsızlıklarını, otomasyon izlerini ve parmak izi bilgilerini takip ediyor; asıl zor problem tespitin kendisinden çok yanlış pozitif oranını düşürmek olmaya yakındı
- Daha az tespit edilen bir mimari olarak Docker veya bulut sunucuları yerine gerçek Android cihazları ve mobil IP'leri kullanma yaklaşımı öneriliyor; 4G/5G/LTE IP'leri büyük şehirlerde çok sayıda normal kullanıcı tarafından paylaşıldığı için engellenmeleri zor
- Gerçek cihaz çiftlikleri; cihaz satın alma, şehirlere göre alan kiralama, yerinde bakım ve donanım arızaları gibi yükleri beraberinde getiriyor; Android emülatörlerinde de emülasyon tespiti riski sürüyor
AWS Lambda ile kurulan büyük ölçekli scraping mimarisi
- Geçmişte scraping hizmeti işletirken haftada milyonlarca Google SERP toplamış olsa da, Brightdata, Packetstream, Oxylabs gibi proxy sağlayıcılarını kullanmamış
- Aynı proxy bant genişliğini paylaşan diğer müşterilere güvenmenin zor olduğunu düşünüyormuş
- Herkese açık bilgiler üzerinde DoS dışı scraping'i kabul edilebilir bulsa da, reklam dolandırıcılığı, sosyal medya spam'i, otomatik SQL injection, XSS gibi web saldırılarıyla arasına çizgi çekiyor
- Proxy hizmetlerinin maliyeti de bir yük olmuş
- Gerçek kurulum, AWS Lambda içine Headless Chrome koyup puppeteer-extra ve chrome-aws-lambda ile 300 saniye boyunca tarayıcı çalıştıran bir fonksiyondan oluşuyormuş
- Google, kendi arama motoruna karşı bot engellemeyi çok sert uygulamıyor ve daha çok IP bazlı hız sınırlaması kullanıyor; bu yüzden yalnızca Google SERP için bakılırsa
curlile bile mümkün olabileceğini düşünüyor - Lambda'da fonksiyon 3 kez çağrıldıktan sonra yeni bir genel IP alındığını, 1000 fonksiyon eşzamanlı çağrıldığında yaklaşık 250 genel IP'ye ulaşıldığını söylüyor
- 16 bölge kullanılırsa aynı anda yaklaşık
4000genel IP kullanılabildiğini hesaplıyor - Bunlar paylaşımlı veri merkezi IP'leri olsa da, haftada milyonlarca Google SERP toplamak için yeterliymiş
- 16 bölge kullanılırsa aynı anda yaklaşık
- Google Cloud Platform da denenmiş, ancak Google kendi bulut altyapısından gelen trafiği AWS trafiğinden daha sert engellemiş
- Bu deneyimin 2019 ve 2020 dönemine ait olduğu, sonrasında durumun değişmiş olabileceği belirtiliyor
Bulut botları neden engelleniyor?
- Lambda tabanlı mimari, Google, Bing, Amazon gibi belirli ölçüde scraping'e izin veren hedeflerde çalışabilir; ancak güçlü koruma uygulayan siteler için uygun değil
- DataDome, Akamai, Imperva gibi anti-bot şirketleri tarayıcı parmak izini, ayar tutarsızlıklarını ve insan tarafından kullanılan tarayıcılardan farklı izleri arıyor
- Tespit tekniklerinin örnekleri yaygın biçimde mevcut
- Bot tespit yöntemleri çok fazla ve neredeyse tüm bot mimarileri bir ölçüde tespite açık
- Bot geliştirmek, tespit etmekten daha zor; anti-bot şirketlerinin daha büyük sorunu ise çoğu botu yakalamaktan çok yanlış pozitif oranını düşürmek olmaya yakın
Tespit edilmesi kolay ekonomik mimari
- Büyük ölçekli scraping yapmak isteyen bot geliştiricileri çoğu zaman tarayıcıyı Docker konteynerine koyup Docker Swarm veya Kubernetes ile orkestrasyon yapıyor
- Bu botlar sıkça Hetzner, AWS, DigitalOcean gibi bulut sağlayıcılarında barındırılıyor
- Bu mimari, insan kullanıcı ortamından ciddi biçimde farklı
- Normal bir kullanıcının Hetzner VPS içindeki bir Docker konteynerinden Instagram'da gezinmesi doğal bir durum değil
- Başarılı scraping için iki kural öneriliyor
- İkinci en önemli kural: Tarayıcı ayarları hakkında yalan söylemeyin
- En önemli kural: Yalnızca yakalanmayacağınız zaman tarayıcı ayarları hakkında yalan söyleyin
Gerçek Android cihaz çiftliği
- Obfuscate edilmiş anti-bot parmak izi toplama kütüphanelerini tersine mühendislikle çözmek zor olduğu için, scraping için gerçek cihaz kullanma yaklaşımı öneriliyor
- Varsayılan mimari; 500 ucuz Android cihaz satın alıp parmak izi çeşitliliği için bunları yaklaşık 5 üretici arasında karıştırmak
- Ucuz Android cihazlar cihaz başına 58 dolardan başlıyor
- Bir seferde 100 adet alınırsa büyük indirim alınabileceği düşünülüyor
- Her cihaza ucuz bir veri tarifesi bağlanıyor ve DeviceFarmer/stf ile kontrol ediliyor
- London, Paris, Boston, Frankfurt, Los Angeles gibi 5 büyük şehirde her birine 100 cihaz yerleştirip, mobil baz istasyonlarına yakın ucuz depolama alanı kiralama fikri anlatılıyor
- Cihazlara hafif Android Go kuruluyor, gereksiz unsurlar çıkarılıyor ve cihazlar sürekli elektriğe bağlı tutuluyor
- Her 5 dakikada bir uçak modunu açıp kapatarak 4G Carrier Grade NAT üzerinden yeni IP alınabiliyor
- Mobil IP adresleri büyük şehirlerde yüz binlerce normal kullanıcı tarafından paylaşıldığı için fiilen engellenmeleri zor
- Örnek olarak, Instagram'ın birkaç spam kullanıcısı yüzünden LA'deki 200 bin kişiyi engellemeyeceği savunuluyor
- CGN altında bir IPv4 adresi engellenirse bunun tüm abone tabanını etkileyebileceğine dair Ofcom belgesine atıf yapılıyor
- IPv6 adres alanı çok geniş olduğu için, çoğu anti-bot şirketinin IPv6 adreslerine çok az veya hiç IP itibarı vermediği düşünülüyor
Gerçek cihaz mimarisinin tespit noktaları ve operasyon yükü
- Gerçek cihazlar gün boyu yerde sabit durursa dönme veya hareket olmaması dikkat çekebileceği için,
deviceorientationvedevicemotionJavaScript event'lerinin kernel seviyesinde spoof edilmesi gerekiyor- Web siteleri Android'in dönüş ve ivme verilerine izin istemeden erişebiliyor
- Bu sorun dışında, söz konusu mimarinin bot tespit sistemleri tarafından nasıl engellenebileceği net görünmüyor
- Operasyon yükü küçük değil
- 500 Android cihaz satın almak gerekiyor
- Büyük şehirlerde depolama alanı kiralamak gerekiyor ve bu maliyetli
- 5 şehirde cihaz çiftliği sorunlarını çözebilecek insanlara ihtiyaç var
- Donanımla uğraşmak gerekiyor ve sürekli sorun çıkabiliyor
- Bu tür bir yapı büyük bir projeye dönüşüyor ve bakımının binlerce dolara mal olabileceği düşünülüyor
Alternatif olarak Android emülatörü
- Gerçek Android cihazlar yerine Android emülatörleri kullanmanın daha iyi olabileceği düşünülüyor
- Maliyet azaltılabilir, ancak anti-bot şirketleri emülasyon ortamını tespit edebilir
- Olası tespit yöntemleri çeşitli
- Tarayıcı tabanlı red pill teknikleri, tarayıcının emülasyon ortamında çalıştığını ortaya çıkarabilir
- tarayıcı tabanlı port taraması ile yalnızca emüle edilmiş Android cihazlarda çalışan portlar veya
adbgibi servisler bulunabilir - Google, mobil cihaz genelinde reklam kimliği ayarlayabiliyor; bu kimliğin olmaması veya hep aynı olması şüphe işareti olabilir
- Social Media Login Detection ile Gmail veya YouTube hesabı oturumu açık mı kontrol edilebilir; Android'de Google hesabıyla giriş yapılmamışsa bu şüpheli görülebilir
- Bunun dışında da emüle edilmiş Android cihazları tespit etmeye yönelik çok sayıda teknik olabilir
- Android emülatörlerinin kusursuz olmama ihtimali yüksek ve bu kusurlar mobil tarayıcının geniş JavaScript API yüzeyi üzerinden ortaya çıkabilir
- Yine de emülasyon yaklaşımı tercih ediliyor; güçlü birkaç sunucuya 4G dongle bağlanan bir kurulum öneriliyor
- proxidize.com 4G mobil proxy sağlıyor, ancak proxy'ler kendi başına tespit edilebilir olduğu için 4G dongle'ların Android emülatörlerinde doğrudan kullanılmasının istendiği belirtiliyor
- Nihai mimari, bölgesel scraping istasyonları şeklinde tasarlanıyor
- Tek bir coğrafi konumda, 50 adet 4G dongle bağlı güçlü bir scraping sunucusu kuruluyor
- Her sunucuda 50 ila 100 emüle edilmiş Android cihaz çalıştırılıyor
- Bu istasyonlardan 5 tanesi büyük şehirlere dağıtılıyor
- Basit bir komuta ve kontrol sunucusu bu 5 scraping istasyonunu orkestre ediyor
1 yorum
Hacker News yorumları
Üstelik o veriler çoğu durumda hukuken tanınabilir anlamda gerçekten “onların” verisi de değil. Bu yüzden web scraping etiği de, bununla ilgili hukuki meseleler de o kadar basit değil. Geçen sonbaharda bu konuda yazdığım yazı burada da ilgi görmüştü: https://news.ycombinator.com/item?id=37264676
Sonuçta kendilerinin büyümek için kullandığı yöntemi başkalarının kullanmasını engelliyorlar.
İnsanlar iletişim kurmaya başladığından beri konuşmalar hep böyle değil miydi zaten? Buna karşılık hukuki meseleler, yerleşik işletmeleri devlet şiddeti tehdidiyle korumak için dokunmuş bir kumaş gibi görünüyor; pek yeni de değil, acıklı ama öngörülebilir türden. Daha geniş açıdan bakınca bunu fikri mülkiyet meselesi diye paketleyip sanatçı ve yaratıcıların korunmasına bağlama girişimi de mantıken çok zorlama ve insanın kaşlarını çattırıyor.
Web scraping SaaS’leri ve ilgili hizmetler çok fazla; konut tipi proxy sağlayıcıları da onlarca. Çoğu bot önleme mekanizması o kadar hızlı evriliyor ki, geleneksel yazılım mühendisliği rolleri içinde bile sadece bot önleme sistemlerini aşma tekniklerine odaklanarak epey iyi gelir elde edilebiliyor. Bu değişim hızı yüzünden web scraping’i meslek edinmektense bir web scraping şirketinde çalışmak daha istikrarlı. Scraper’lar proje bazında para alıyor ve uzun vadede istikrarsızlar; ileri seviye scraping için konut tipi proxy ve sunucu kiralama gibi operasyonel yatırımlar gerekiyor; düşük bütçeli işler ise çok az ödüyor. Brightdata’nın web scraping konferansı düzenlemesi bile büyük ölçekli scraping hizmetleri satmanın ne kadar kârlı olduğunu gösteriyor.
Bu amaçla güvenliği zayıf IoT cihazlarının ya da kötü amaçlı yazılımla enfekte olmuş tüketici donanımlarının yaygın kullanılıp kullanılmadığını merak ediyorum. ISP’lerle iş birliği yaparak konut tipi IP elde etmenin kârlı ya da mümkün olacağını sanmıyorum; bu yüzden konut tipi proxy hizmeti denince geriye ancak epey gizli saklı yöntemler kalıyor gibi görünüyor.
Bu alanda geçmişim yoktu, ama şirketlerin övünerek anlattıkları şeyleri bir araya getirince zor olmadı; ayrıca spor bahislerini otomatikleştirmek gibi pratik bir amacım da vardı. Asıl işim de zaten buna yakındı ve yirmilerimin sonlarında programlamayı hızlı öğrenmeme yardımcı oldu. Ama neredeyse hemen Çinli sneaker bot operatörlerinden ve ana dili İngilizce değilmiş gibi tuhaf İngilizce kullanan kişilerden istek yağmaya başladı. Kodu hukuki tehditler yüzünden değil, müşteri desteği yapmak ya da başkasının altında çalışmak istemediğim için kaldırdım; isteklerin çoğu “sen çalış, kârı paylaşalım” tarzındaydı ve böyle teklifleri kimin kabul ettiğine inanmak zordu. İnternet sonsuza kadar sürer; bu yüzden Cyberfed-Akamai 0.8~2.3’ü taklit eden kodun bazı parçaları hâlâ ortalıkta dolaşıyor olabilir. Yirmilerimin ortasında programlamayı öğrenip üç yıl içinde yayımladığım kod işe yaradıysa, böyle ürünlere yüksek ücret alan siber güvenlik şirketleri utanmalı bence. Lise ikinci sınıftan sonra matematik de yapmadım; ADHD yüzünden ne videolara ne yazılara uzun süre odaklanabiliyorum, bu yüzden tek yaptığım GitHub benzeri servislerden kopyalayarak çalışana kadar öğrenmekti. Bu sektörde muhtemelen çok fazla yılan yağı türü çözüm satılıyor.
Tehdit aktörleri, kötü amaçlı payload’lara erişimi engellemek için Cloudflare gibi hizmetleri kullanıyor. Marka taklidi ya da kimlik bilgisi oltalamasını bulup tespit etmeye çalışan müşteriler için bu büyük bir sorun; Cloudflare ise hiç yardımcı olmuyor, sadece umursamıyor.
Akamai arkasında neredeyse hiç phishing görmememiz ilginç. Biz de bu alanda çalıştığımız için bu tehditleri gelecekte de tespit edebilmemiz konusunda çıkarımız var.
Gerçek dünyadaki problemleri çözmek ve bir şeyi yapmanın yeni yollarını bulmak gerektiği için eğlenceli. Exploit geliştirme de aynı. Bu insanlar uyumsuz değil; tutkuyla bağlı oldukları işi yapan normal insanlar. “Benim hoşlanmadığım işi yapan kişi uyumsuzdur” zihniyeti asıl tamamen tuhaf olan şey.
Süreç açık; gizlilik riski ya da tuhaf hileler yok; başarısız olsa bile en azından insanların görüp bildirebileceği şekilde başarısız oluyor. Bilinmeyen bir arıza gibi görünmesinden daha iyi.
Reddedilme durumlarını nasıl yöneteceğimi düşünüyordum; ucuz bir Android cihaz bu boşluğu doldurabilir gibi görünüyor.