paint-brush
Anonim Web Scraping için Kali Linux Konteynerlerini, WebDriver'ı ve Tor'u kullanınile@csfx
3,754 okumalar
3,754 okumalar

Anonim Web Scraping için Kali Linux Konteynerlerini, WebDriver'ı ve Tor'u kullanın

ile Colin Barrett-Fox12m2023/08/05
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Anonim web kazıma ve sızma testleri için Kali Linux Container'ı geçici bir ana bilgisayar İşletim Sistemi olarak kullanarak saldırı yüklerini simüle edin. Tor Tarayıcıyı otomatikleştirmek için Selenyum kullanımına ilişkin örnek kodu içerir. Son olarak, Bot etkinliğini tespit etmek, sınırlamak ve engellemek için hem Veri Merkezinde hem de istemci tarafında uygulanabilecek karşı önlemleri tartışacağım.
featured image - Anonim Web Scraping için Kali Linux Konteynerlerini, WebDriver'ı ve Tor'u kullanın
Colin Barrett-Fox HackerNoon profile picture
0-item
1-item

Önceki yazımda Tor Tarayıcı ile çalışan ve masaüstü ortamına VNC istemcisi ile bağlanan bir Kali Linux konteynerini göstermeyi başarmıştım. Bir tarama oturumu sırasında Tor Tarayıcının Tor Ağına bağlandığını doğruladım. Bu kurulum, bir web sitesini hedef alan bir saldırgandan gelebilecek trafik türünü simüle etmeme olanak tanıyacak.


Bu deneyde, tarayıcının WebDriver arayüzü aracılığıyla tuş vuruşlarını ve gezinme olaylarını sentezlemek üzere Tor Tarayıcıyı otomatikleştirmek için Selenium'u kullanacağım. Her tarayıcı, tespitten kaçınmak için yerleşik Tor Proxy'si tarafından sağlanan rastgele bir IP adresine sahip olacaktır. Sonuçları yerel dosya sisteminde JSON nesneleri olarak kaydettikten sonra bunları tek bir CSV dosyasına işlemek için Python'u kullanacağım. Son olarak, Bot etkinliğini tespit etmek, sınırlamak ve engellemek için Veri Merkezinde ve İstemci Tarafında hangi karşı önlemlerin uygulanabileceğini tartışacağım.


Tüm dosyalar ve geçerli lisanslar bu açık kaynak deposunda mevcuttur: tor-driver-python


Tamamlanan Tarayıcı Komut Dosyasını Çalıştıran Ekran Yakalama:


Test otomasyonu konusunda geçmişim var ve testleri tasarlamak için saatler harcadım. Ayrıca Selenium'la çalışmak için de çok zaman harcadım ve test amacıyla web tarayıcılarını otomatikleştirmek için bunu birçok farklı programlama dilinde ve ayarında kullandım. Bir web uygulamasını yalnızca gerçek bir tarayıcıyla test etmenin mümkün olduğu senaryolar vardır ve Selenium bunun için harika bir araçtır.


Senaryo

Bir DevOps Mühendisi olarak işimde, sorumlu olduğum web uygulamalarına saldıran ve bazen doğrudan saldıran web tarayıcılarıyla ne yapacağımı düşünerek çok az zaman harcadım. Bir kez olsun bu konunun diğer tarafını keşfetmenin ilginç bir deney olacağını düşündüm.


Eğitim amaçlı bir botnet saldırısını simüle etmeye ne kadar yaklaşabileceğimi görmek ve modern bir Veri Merkezinde şüpheli Tor ağı trafiği gibi şeylere karşı koyma yöntemlerini tartışmak istiyorum. Bot ağları genellikle Kimlik Bilgisi Doldurma saldırılarını gerçekleştirmek için kullanılır. Sorguları aramak ve web'den bilgi toplamak için benzer bir teknik kullanacağım.


Kimlik bilgisi doldurma, kullanıcı hesaplarına sahtekarlıkla erişim sağlamak amacıyla çalınan kullanıcı adı ve şifre çiftlerinin ("kimlik bilgileri") web sitesi giriş formlarına otomatik olarak eklenmesidir. 1


Etik Hususlar

Etik sorunlardan kaçınmak için bir yandan da göreve sadık kalmaya çalışıyoruz. Senaryoda aşağıdaki değişiklikleri yapıyorum:


  1. Kişisel Olarak Tanımlanabilir Bilgileri (PII) toplamayacağım ve hiçbir kimlik bilgisi kullanılmayacaktır. Bunun yerine, bir dosyadan arama terimlerini okuyacağım ve halka açık bilgiler toplayacağım.
  2. Botnet yerine rastgele bir IP adresi atlama davranışını simüle etmek için Tor Ağını kullanacağım.
  3. Bu adımlar kasıtlı olarak izin verilen robots.txt dosyalarına sahip siteleri hedef alır ve taramayı dışlamayacak şekilde Şartlar ve Koşullar bu yazının yazıldığı sırada kontrol edildi. Örneğin IMDB'nin Hüküm ve Koşulları, yazılı izin olmadan taramayı açıkça yasaklamaktadır.
  4. Toplanan bilgiler yalnızca kamuya açık bilgilerle sınırlı olacaktır. Hedef sitede kamuya açık olmayan bilgilere erişim sağlamak için herhangi bir açıktan yararlanma veya başka yöntem kullanmayacağım.
  5. Son olarak, engellenmeyi veya diğer kullanıcılar için üretim sorunlarına yol açmayı önlemek için hedef siteye yapılan hız isteklerini sınırlayacağım.


robots.txt

Robot Hariç Tutma Protokolü, Web Yöneticilerinin tarayıcılara nerede olduklarını ve nereden bilgi toplamalarına izin verilmediğini söylemelerinin bir yoludur. Daha fazla bilgi ve örnekleri robotstxt.org web sitesinde bulabilirsiniz. Bir makale buldum: Arama sonuçları sayfasında web kazımasına izin veren bir tane bulmaya çalışırken alternatif arama motorlarının listesi . Aşağıda bu araştırmanın bir özetini bulacaksınız.


Farklı arama motorlarından oluşan bir örnekteki robots.txt dosyalarını karşılaştırma


Arama motoru

robots.txt URL'si

Taramaya izin veriliyor mu?

Google

robots.txt

Hayır ama bir API'si var

Bing

robots.txt

Hayır ama bir API'si var

yahoo

robots.txt

HAYIR

ÖrdekDuckGo

robots.txt

Hayır ama bir API'si var

Açık Ayet

robots.txt

Evet ama tam olarak aradığım şey bu değil

SearX

robots.txt

Evet


Ek kaynaklar

Bu konuyu araştırırken faydalı bulduğum diğer bazı kaynaklar:


Selenyum ve WebDriver ile Bir Web Sayfasını Düzenleme

Bu örnek için Selenyum dışındaki kütüphaneleri kullanmaktan kaçınacağım. Göstermek istediğim bazı temel kalıplar var ve neler olup bittiğini anlamayı zorlaştırabilecek belirli bir Etki Alanına Özel Dil (DSL) ile çıkmaza girmek istemiyorum.


Ancak, test çalıştırma çerçevesi kullanmanın bu tür kodları düzenlemenin harika bir yolu olduğunu düşünüyorum. Bir çerçeve eklemek, genel kod yapısı, yeniden deneme mantığı ve hatta raporlamayla ilgili birçok sorunu çözebilir.


Temel Desen

WebDriver oturumunda bir sayfayı nasıl değiştireceğime dair temel bir model var. Ayrıca gerçekleştirilen her eylemden sonra bir duraklama ekliyorum. Tarayıcı otomasyonu kesintili olabilir. Zaman aşımları, taramaya büyük oranda istikrar katar ve hızın sınırlandırılması ve engellenmesi olasılığını büyük ölçüde sınırlar. Gerektiğinde, diğer Arama Motorlarına veya bilgi kaynaklarına yapılan API çağrılarıyla da taramayı artırıyorum.


  1. Bir URL'ye gidin.
  2. Sayfanın yüklenmesinin bitmesini bekleyin.
  3. Etkileşim kurmak istediğim öğeyi bulun, onun için seçici geliştirin.
  4. Öğenin mevcut olmasını bekleyin.
  5. Öğeyi görünüme kaydırın.
  6. Öğeyle etkileşime geçin.
  7. Tekrarlamak

Kurallara Genel Bakış

Seçicilere gerçekten basit bir yaklaşım sergiledim. Tarayıcıda bulunan xpath ve css seçicilerini kullanıyorum. Tarama sırasında sayfalar arasında gezinmek için esas olarak bağlantı etiketlerine ve URL parçalarına odaklanmak.


Öğelere tıklamayı denemeden önce öğelerin mevcut olmasını beklemek için beklenen koşulları kullanıyorum. Selenium projesinin çok sayıda dokümantasyonu var, ancak Stack Overflow'taki örnek kullanımlarla bekleme koşulları hakkındaki tartışmanın da paha biçilmez bir kaynak olduğunu gördüm.


TorDriver Modülü

Benzer bir işleve sahip tbselenium adında mevcut bir PyPi projesi var. Bu deneme için Firefox profil kurulumuna başvurdum ancak tbselenium'un içerdiği diğer özelliklerin hiçbirine ihtiyacım yoktu. Kök erişimine sahip olmayan kapsayıcıların ek karmaşıklığı, hata ayıklamanın daha da zorlaşmasına katkıda bulunuyordu. Bu, bağımlılıkları sınırlama ve önceden var olan basit çözümleri deneme motivasyonunu artırdı. Örneğin, saf python çözümlerini doğrudan uygulamak yerine linux araçlarını ve alt kabukları kullandığım birçok yer var.


Biten sınıf yaklaşık 150 satırlık Python'dur. Daha az incelemeyle olup biteni derinlemesine analiz etmenin daha kolay olacağını düşünüyorum. Tor Tarayıcı Başlatıcısının nasıl çalıştığı ve Firefox profillerinin nasıl yapılandırılacağı hakkında çok şey öğrendim. Bu profil çevrimiçi olarak birden fazla kaynaktan toplanmıştır ve kaynak kodunda ve bu belgede bunlardan bahsedilmektedir.


Başlatma, sökme ve çok yaygın bir gezinme mantığı parçasını TorDriver adlı bir sınıfa soyutladım. Tor Tarayıcı Başlatıcısı ile Firefox profili kuran oldukça basit bir sınıftır. Sayfada bir öğenin görünür olup olmadığını kontrol etmek için bir yöntemi ve proxy soketinin çalışır durumda olduğunu doğrulayan başka bir yöntemi vardır. Firefox profil kurulumu ve hata ayıklama büyük ölçüde Stack Overflow tartışmasıyla sağlandı: Tor Tarayıcıyı Selenium ile açın .


Tamamlanan dosyayı burada bulabilirsiniz: tor-driver-python/torDriver.py


İthalat

Kurulum ve WebDriver bileşenleri için selenyum, pprint, alt işlem ve soketin içe aktarılması.


TorDriver.py modülü için içe aktarmalar


Bir Öğenin Görünür olup olmadığını kontrol edin

Aşağıdaki yöntem, bir öğenin kontrolünü soyutlar ve bir zaman aşımı içinde görünürse True veya False döndürür.


Bir seçicinin görünür olup olmadığını kontrol edin

Tor Proxy'nin Başlatılıp Başlatılmadığını Kontrol Etme

Proxy bağlantı noktasının kendisine sinyal göndermeden önce etkin olması gerekir. Yığın Taşması'ndaki Python'da Soket Bağlantılarını Test Etmeye ilişkin bazı örnekleri takip ederek şunu buldum:


Bir soketin başarılı bağlantısını kontrol edin

Sınıf

Modülün büyük bir kısmı, Firefox profilini kontrol eden, gekodriver'ı indiren ve torbrowser-launcher'ı başlatan bir sınıftır.


TorDriver Tanımı ve Başlatma

Burada temel bir konfigürasyona ve bazı şeyleri geçersiz kılmanın bazı yollarına sahibim, ancak bunu çoğunlukla mümkün olduğunca basit tutuyorum:


TorDriver Sınıfı özellikleri ve başlatılması

Firefox Profil Kurulumu

Proxy bağlantı noktasına bağlanmak için Firefox profilinin en azından yapılandırılması gerekiyor, onunla birlikte javascript'i de devre dışı bırakmıştım.


Firefox profilini kur

WebDriver'ı Kur

Bu, bir sürücüyü başlatmak için TorDriver'ın profilini ve ikili dosyasını kullanır


Firefox için yeni bir WebDriver oturumu oluşturun


Geckodriver'ı indirin

Bir alt süreçte gekodriver'ı indirmek ve çıkarmak için bir yöntem ekleme. Bir şekilde kapsayıcıda çalıştırıldığında tar.gz dosyasının artık sıkıştırılmadığını ve yalnızca arşivden çıkarılması gerektiğini belirtmekte fayda var. Hata hakkında daha fazla bilgiyi burada bulabilirsiniz: stdin: gzip biçiminde değil hatası


Kıvırma ve Katran özü gekodriver


Tor Ağını Kurun ve Bekleyin

Soket yanıt verene kadar proxy bağlantı noktasına bağlanmayı yeniden deneyin:


Alt Süreçte Torbrowser-Launcher'ı başlatın


crawler.py

Bu örnekte aşağıdaki yaklaşımı iki aşamalı yaklaşımı aldım. İlk aşama bilgi toplama, sonraki aşama ise bilginin işlenmesidir. Bu şekilde tüm süreç boyunca ağ bağlantısına bağlı kalmıyorum ve kaynak malzemeye geri dönmeden sonuçları gerektiği kadar ayrıştırmayı yeniden deneyebiliyorum.


Dosyanın tamamını burada bulabilirsiniz: tor-driver-python/crawler.py


Modül İçe Aktarmaları

Tarayıcı tarafından kullanılan içe aktarmalar, özellikler ve kurulum yöntemleri


Ana Tarayıcı İşlevselliği

Tarayıcı bir metin dosyasını okur ve bu bilgiyi WebDriver oturumunda sorguları doldurmak için kullanır. Taramanın durumu, sorgu başına bir tane olmak üzere json dosyalarından oluşan bir klasörde tutulur. Bilgileri bir kez dışa aktarmak için kesinlikle gerekli olan minimum işlemi yapmaya çalışıyorum ve daha sonraki işlemler, sitelere geri dönmek yerine mevcut verilerde gerçekleşebilir.


Bir web tarayıcısıyla bir arama motorunda gezinmek için ana adımlar


aramalar.txt

Aramaları depolamak için bir metin dosyası kullanıyorum. Yeniden yapılandırılması çok kolay olduğu için bir metin dosyası seçtim. Metni düzenlemek, yeni bilgilerle tarama başlatmak veya kısmen başarısız olan bir taramayı sürdürmek için düşük bir engeldir. Bu tarayıcının daha karmaşık veri gereksinimleri olsaydı bunun yerine Veritabanı kullanmayı düşünürdüm. Bu, raporlama amacıyla taramaları özel bir kullanıcı arayüzüyle kontrol etmek için bir API uygulanmasına olanak tanıyacak.


Tarayıcı tarafından yürütülecek aramaların listesi


JSON Sonuç Formatı

Örnek dosyalar depodaki sonuçlar klasöründe zaten bulunmaktadır: tor-driver-python/results

Daha sağlam bir tarayıcıda gerçek bir veritabanı teknolojisinin kullanılmasını öneririm. Bu, veri toplamanın nerede durduğunu kolayca anlamak ve yeniden başlatmayı kolaylaştırmak için yeterlidir.


Bir web taramasının durumunu depolamak için JSON


Tarayıcıyı Konteynerden Çalıştırma

Tarayıcı, aşağıdaki komutlarla kapsayıcıdan çalıştırılabilir. Rapor oluşturucu, JSON dosyalarının mevcut olmasını gerektirir; örnek dışa aktarma CSV dosyasını burada bulabilirsiniz:


Konteyneri başlatın:

 docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser


Kapta bir VNC Sunucusu başlatın, oturum şifrelerini isteyecektir:

 /opt/start-vnc-server-once.sh 


Docker Container'da bir VNC oturumu başlatmanın terminal çıktısı


Taramayı VNC oturumunun içinden başlatın:

 python3 crawler.py


Tarayıcı Tor Tarayıcının başlatılmasını bekleyecektir ve ne yazık ki bu manuel bir adımdır. Onay kutusunu tıklamanız ve bağlan'ı tıklamanız yeterlidir. Örnek için video demosuna bakın.


Kap temizlenene kadar Tor'a otomatik olarak bağlanın


rapor.py

Rapor komut dosyası, Virgülle Ayrılmış Değer (CSV) dosyası oluşturacaktır.

Tarayıcının tarama boyunca kaydettiği JavaScript Nesne Gösterimi (JSON) sonuç dosyaları. CSV formatını seçtim çünkü bu, iş arkadaşlarıyla paylaşmak için daha yaygın bir format olmasına rağmen daha fazla analiz için diğer araçlara aktarılması yine de kolaydır.


Dosyanın tamamı burada bulunabilir: tor-driver-python/report.py


Modül İçe Aktarmaları

Bu, JSON'u okumak, CSV yazmak ve biçimlendirme ve veri sunumu için URL'leri ayrıştırmak için yerleşik Python kitaplıklarını kullanır. Daha sonra sonuçlar arasında geçiş yapar ve veri işlemeye başlamak için bunları yükler.


Rapor oluşturucunun içe aktarılması, özellikleri ve veri başlatılması


Ana Rapor Oluşturucu

Bu, rapor oluşturucunun temel işlevidir. Bu, sonuç nesnelerinde yakalanan verilerin son sunumunu ve sıralamasını yapar. Tipik olarak URL'ler, tarayıcıların bir sitedeki işlevsel hareketleri için faydalıdır ve son veri yakalama olarak kullanılmaz, ancak daha fazla veri çıkarımını özelleştirmek için iyi bir başlangıçtır.


Sonuç nesnelerinden bir CSV dosyasını biçimlendirme ve yazma


Raporu Çalıştır

Taramanın sonuçları ./results dizinine JSON dosyaları olarak kaydedilir. Verilerden bir rapor oluşturmak için aşağıdaki betiği kullanacağım.


 python3 report.py


Örnek Rapor

Örnek bir CSV çıktı dosyasını burada bulabilirsiniz: tor-driver-python/output.csv


Sütunları ve verileri gösteren CSV raporunun parçacıkları


Saldırıları Tespit Etme ve Azaltma

Bot etkinliğini tespit etmenin ve azaltmanın birkaç farklı yolu vardır. Öncelikle işin Veri Merkezi tarafına odaklanacağım, ancak aynı zamanda bazı müşteri tarafı tespit yöntemlerini de tartışacağım. İstemci tarafı sinyalleri her an değişebileceğinden ve yanıltılabileceğinden, istemciye hiçbir zaman gerçekten güvenilemez. Bir tespit sistemi tasarlarken bunu akılda tutmanın önemli olduğunu düşünüyorum. Veri Merkezinde tartışacağım iki koruma biçimi vardır: hız sınırlama ve itibar engelleme.



İstemci Tarafı Tespiti

İstemci tarafında aktif bir WebDriver oturumunu yalnızca javascript ile tespit etmenin birkaç yolu vardır: Github'daki ilgili bir sorun daha ayrıntılı olarak ele alınacaktır . Temel olarak, WebDriver protokolü belgeyi ve pencere nesnelerini değiştirdiğinden, istemci tarafı kodunda tespit edilebilir.


WebDriver istemci tarafının algılanmasıyla ilgili GitHub sorunu hakkında yorum yapın


Veri Merkezindeki Bot Trafiğinin Tespit Edilmesi ve Engellenmesi

En çok deneyime sahip olduğum çözümlere, Fastly, AWS WAF ve Nginx'e odaklanacağım. CloudFlare tam bir sürprizdi, bu yüzden onların tekliflerinden de bahsedeceğim.


AWS Web Uygulaması Güvenlik Duvarı (WAF) Hızına Dayalı Kurallar, Hizmet Reddi etkinlik düzeylerini engellemek için de kullanılabilir ve Tor ağ trafiğini tespit etmek için de kullanılabilecek varsayılan kurallar vardır; daha fazla bilgi için IP İtibar Kuralı Belgelerine bakın. Diğer bir yaygın yaklaşım ise diğer veri merkezlerinden gelen tüm trafiği engellemektir; hedef kitle Tüketiciler ise bu güvenlidir. Ancak İşletmeler, bunu meşru trafiğe zararlı hale getirebilecek bulut VPN ve diğer teknolojileri kullanıyor olabilir.


Çok popüler bir çözüm olan Fastly'nin Signal Science'ı, özellikle Tor trafiğini tespit etmek için kullanılabilir. Öncelikle DDOS saldırılarına karşı koruma sağlayabilirler; daha fazla bilgi için DDOS Azaltma sayfalarına bakın. İkincisi, Tor trafiğini tespit edip engelleyebilirler. İşte bunu kapsayan Sistem Sinyallerini Kullanma belgeleri.


Nginx için de bunu yapmaya ilişkin bazı makaleler vardır: Nginx ile veya web uygulamanızın içinde anonim trafik nasıl engellenir ? Temel olarak, Tor çıkış düğümleri hakkında bilgi almak için API'lere çağrı yapılarak, IP engelleme kuralları belirli bir programa göre oluşturulabilir ve Nginx'e uygulanabilir.


Yukarıdaki bulut sağlayıcılarının aksine şaşırtıcı bir şekilde CloudFlare, Tor istemcileri için destek sunuyor. Tor Destek Belgelerine rastladım!? burada ağdan Tor kullanıcılarına içerik sunma yeteneğini tartışıyorlar. Bunun gerçekten ilginç bir yaklaşım olduğunu düşünüyorum ve gelecekte bunu daha fazla keşfetmeye can atıyorum.



Çözüm


WebDriver test için güçlü bir araçtır ve aynı zamanda bir API'ye erişimin mümkün olmadığı yerlerde bilgi toplamak için de kullanılabilir. Örneğin: erişim başka şekilde kısıtlanmıştır, sansürlenmiştir, çok pahalıdır veya genel olarak rekabete aykırı uygulamaların arkasında kilitlenmiştir. Daha da iyisi, web taramasından toplanan verileri API'lerden toplanan bilgilerle birleştirmektir.


Bu önemli bir uygulamadır çünkü Botlardan gelen kötü amaçlı trafiği önlemek giderek daha zor hale gelmektedir ve bunun nasıl azaltılacağını düşünmek için bir saldırının gerçekleşmesini beklemek iyi bir güvenlik uygulaması değildir. Bilginin çevrimiçi ortama aktarılmasından sorumlu olan herkesin, ihlal edilen bilgilerin sorumlu oldukları sistemlere karşı nasıl kullanılacağını bilmesi gerektiğine inanıyorum. Basitleştirilmiş bir senaryoda, etik kısıtlamalarla bunu aşağıdakileri yaparak gösterdim:


  1. Rastgele bir IP Adresi kullanarak Tor Tarayıcı oturumunu otomatikleştirmek için Selenyum kullanma.
  2. Python ve WebDriver protokollerini kullanarak bir web sitesinden bilgi toplamak.
  3. Bilgileri bir dizi JSON dosyasına kaydettik.
  4. Çevrimdışı sonuçlardan bir CSV raporu oluşturmak için bir python betiği kullanıldı.
  5. Bir Veri Merkezindeki Hizmet Reddi ve Tor Ağı etkinliğini tespit etmenin ve azaltmanın çeşitli yollarını tartıştık.