การเขียนพร็อกซี Reverse Socks5 ใน PowerShell ส่วนที่ 1

เรื่องราวเกี่ยวกับการวิจัยและพัฒนาใน 3 ส่วน ส่วนที่ 1 เป็นการสำรวจ
มีต้นบีชมากมาย - มีประโยชน์มากกว่านั้นอีก

คำแถลงปัญหา

ในระหว่างการทดสอบเพนเทสต์และแคมเปญ RedTeam เป็นไปไม่ได้เสมอไปที่จะใช้เครื่องมือมาตรฐานของลูกค้า เช่น VPN, RDP, Citrix เป็นต้น เป็นจุดยึดในการเข้าสู่เครือข่ายภายใน ในบางสถานที่ VPN มาตรฐานทำงานโดยใช้ MFA และโทเค็นฮาร์ดแวร์ถูกใช้เป็นปัจจัยที่สอง ในสถานที่อื่น ๆ จะได้รับการตรวจสอบอย่างโหดร้ายและการเข้าสู่ระบบ VPN ของเราจะมองเห็นได้ทันทีตามที่พวกเขาพูด ทุกสิ่งที่เกี่ยวข้อง แต่ในที่อื่น ๆ มี เพียงแค่ไม่มีวิธีการดังกล่าว

ในกรณีเช่นนี้ เราจะต้องสร้างสิ่งที่เรียกว่า "อุโมงค์ย้อนกลับ" อย่างต่อเนื่อง ซึ่งก็คือการเชื่อมต่อจากเครือข่ายภายในไปยังทรัพยากรภายนอกหรือเซิร์ฟเวอร์ที่เราควบคุม ภายในอุโมงค์ดังกล่าว เราสามารถทำงานร่วมกับทรัพยากรภายในของลูกค้าได้แล้ว

อุโมงค์ส่งคืนเหล่านี้มีหลายประเภท แน่นอนว่าสิ่งที่มีชื่อเสียงที่สุดคือ Meterpreter อุโมงค์ SSH ที่มีการส่งต่อพอร์ตแบบย้อนกลับยังเป็นที่ต้องการอย่างมากในหมู่แฮ็กเกอร์ มีหลายวิธีในการดำเนินการ Reverse Tunneling และหลายวิธีได้รับการศึกษาและอธิบายอย่างดี
แน่นอนว่าผู้พัฒนาโซลูชั่นรักษาความปลอดภัยไม่ได้ยืนเฉยและตรวจจับการกระทำดังกล่าวอย่างจริงจัง
ตัวอย่างเช่น IPS สมัยใหม่จาก Cisco หรือ Positive Tech ตรวจพบเซสชัน MSF ได้สำเร็จ และสามารถตรวจพบอุโมงค์ SSH แบบย้อนกลับได้ด้วยไฟร์วอลล์ปกติเกือบทุกตัว

ดังนั้น เพื่อที่จะไม่มีใครสังเกตเห็นในแคมเปญ RedTeam ที่ดี เราจำเป็นต้องสร้างอุโมงค์ย้อนกลับโดยใช้วิธีการที่ไม่ได้มาตรฐาน และปรับให้เข้ากับโหมดการทำงานจริงของเครือข่ายให้มากที่สุด

ลองค้นหาหรือประดิษฐ์สิ่งที่คล้ายกัน

ก่อนที่จะประดิษฐ์สิ่งใดๆ เราต้องเข้าใจว่าเราต้องการบรรลุผลอะไร หน้าที่การพัฒนาของเราควรทำเช่นไร ข้อกำหนดสำหรับอุโมงค์คืออะไรเพื่อให้เราสามารถทำงานในโหมดซ่อนตัวสูงสุดได้?

เป็นที่ชัดเจนว่าข้อกำหนดดังกล่าวอาจแตกต่างกันอย่างมากในแต่ละกรณี แต่ขึ้นอยู่กับประสบการณ์การทำงาน สามารถระบุข้อกำหนดหลักได้:

  • ทำงานบนระบบปฏิบัติการ Windows-7-10 เนื่องจากเครือข่ายองค์กรส่วนใหญ่ใช้ Windows
  • ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน SSL เพื่อหลีกเลี่ยงการฟังโง่ ๆ โดยใช้ ips
  • เมื่อเชื่อมต่อไคลเอ็นต์จะต้องสนับสนุนการทำงานผ่านพร็อกซีเซิร์ฟเวอร์ที่ได้รับอนุญาตเนื่องจาก ในหลายบริษัท การเข้าถึงอินเทอร์เน็ตเกิดขึ้นผ่านพร็อกซี ในความเป็นจริง เครื่องไคลเอนต์อาจไม่รู้อะไรเลยด้วยซ้ำ และพร็อกซีถูกใช้ในโหมดโปร่งใส แต่เราต้องจัดให้มีฟังก์ชันดังกล่าว
  • ส่วนของไคลเอ็นต์ควรกระชับและพกพาได้
    เห็นได้ชัดว่าในการทำงานภายในเครือข่ายของลูกค้า คุณสามารถติดตั้ง OpenVPN บนเครื่องไคลเอนต์และสร้างอุโมงค์เต็มรูปแบบไปยังเซิร์ฟเวอร์ของคุณ (โชคดีที่ไคลเอนต์ openvpn สามารถทำงานผ่านพร็อกซีได้) แต่ประการแรก สิ่งนี้อาจไม่ได้ผลเสมอไป เนื่องจากเราอาจไม่ใช่ผู้ดูแลระบบในพื้นที่ที่นั่น และประการที่สอง มันจะส่งเสียงดังมากจน SIEM หรือ HIPS ที่เหมาะสมจะ "โจมตี" เราทันที ตามหลักการแล้ว ไคลเอนต์ของเราควรเป็นสิ่งที่เรียกว่าคำสั่งอินไลน์ เช่น มีการใช้งาน bash shell จำนวนมาก และเปิดใช้งานผ่านทางบรรทัดคำสั่ง เช่น เมื่อดำเนินการคำสั่งจากมาโครคำ
  • อุโมงค์ของเราจะต้องเป็นแบบมัลติเธรดและรองรับการเชื่อมต่อจำนวนมากพร้อมกัน
  • การเชื่อมต่อไคลเอนต์-เซิร์ฟเวอร์จะต้องได้รับการอนุญาตบางอย่างเพื่อให้อุโมงค์นั้นถูกสร้างขึ้นสำหรับลูกค้าของเราเท่านั้น และไม่ใช่สำหรับทุกคนที่มาที่เซิร์ฟเวอร์ของเราตามที่อยู่และพอร์ตที่ระบุ ตามหลักการแล้ว หน้า Landing Page ที่มีแมวหรือหัวข้อทางวิชาชีพที่เกี่ยวข้องกับโดเมนเดิมควรเปิดสำหรับ "ผู้ใช้บุคคลที่สาม"
    ตัวอย่างเช่น หากลูกค้าเป็นองค์กรทางการแพทย์ สำหรับผู้ดูแลระบบความปลอดภัยของข้อมูลที่ตัดสินใจตรวจสอบทรัพยากรที่พนักงานคลินิกเข้าถึง หน้าเว็บที่มีผลิตภัณฑ์ยา วิกิพีเดียพร้อมคำอธิบายการวินิจฉัย หรือบล็อกของ Dr. Komarovsky ฯลฯ . ควรเปิด.

การวิเคราะห์เครื่องมือที่มีอยู่

ก่อนที่จะคิดค้นจักรยานของคุณเองขึ้นมาใหม่ คุณต้องวิเคราะห์จักรยานที่มีอยู่แล้วและทำความเข้าใจว่าเราต้องการมันจริงๆ หรือไม่ และอาจไม่ใช่เราคนเดียวที่คิดถึงความจำเป็นสำหรับจักรยานที่ใช้งานได้จริงเช่นนี้

Googling บนอินเทอร์เน็ต (ปกติแล้วเราจะใช้ Google) เช่นเดียวกับการค้นหาบน Github โดยใช้คำหลัก "ถุงเท้าย้อนกลับ" ไม่ได้ให้ผลลัพธ์มากนัก โดยพื้นฐานแล้ว ทั้งหมดนี้มาจากการสร้างอุโมงค์ ssh พร้อมการส่งต่อพอร์ตแบบย้อนกลับและทุกสิ่งที่เชื่อมต่อกับมัน นอกจากอุโมงค์ SSH แล้ว ยังมีวิธีแก้ปัญหาอีกมากมาย:

github.com/klsecservices/rpivot
การดำเนินการ Reverse Tunnel ที่มีมาอย่างยาวนานจากทีมงาน Kaspersky Lab ชื่อทำให้ชัดเจนว่าสคริปต์นี้มีไว้เพื่ออะไร ใช้งานใน Python 2.7 อุโมงค์ทำงานในโหมดข้อความเคลียร์ (ตามที่นิยมพูดตอนนี้ - สวัสดี RKN)

github.com/tonyseek/rsocks
การใช้งานอื่นใน Python ในรูปแบบข้อความธรรมดา แต่มีความเป็นไปได้มากกว่า เขียนเป็นโมดูลและมี API สำหรับรวมโซลูชันเข้ากับโปรเจ็กต์ของคุณ

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
ลิงก์แรกคือเวอร์ชันดั้งเดิมของการใช้งาน Reverse Sox ใน Golang (ไม่รองรับโดยนักพัฒนา)
ลิงค์ที่สองคือการแก้ไขของเราพร้อมคุณสมบัติเพิ่มเติมใน Golang เช่นกัน ในเวอร์ชันของเรา เราใช้ SSL ทำงานผ่านพร็อกซีที่มีการอนุญาต NTLM การอนุญาตบนไคลเอนต์ หน้า Landing Page ในกรณีที่รหัสผ่านไม่ถูกต้อง (หรือเปลี่ยนเส้นทางไปยังหน้า Landing Page) โหมดมัลติเธรด (เช่น หลายคน สามารถทำงานร่วมกับอุโมงค์ได้พร้อม ๆ กัน) ซึ่งเป็นระบบส่ง Ping ลูกค้าเพื่อตรวจสอบว่าเขายังมีชีวิตอยู่หรือไม่

github.com/jun7th/tsocks
การใช้งาน Reverse Sox จาก “เพื่อนชาวจีน” ของเราใน Python สำหรับคนเกียจคร้านและ "อมตะ" มีไบนารี่สำเร็จรูป (exe) ซึ่งประกอบโดยชาวจีนและพร้อมใช้งาน ที่นี่ มีเพียงพระเจ้าของจีนเท่านั้นที่รู้ว่าไบนารี่นี้อาจมีอะไรอีกนอกเหนือจากฟังก์ชันหลัก ดังนั้นโปรดใช้ด้วยความเสี่ยงและอันตรายเอง

github.com/securesocketfunneling/ssf
ค่อนข้างเป็นโปรเจ็กต์ที่น่าสนใจใน C++ สำหรับการนำ Reverse Sox ไปใช้และอื่นๆ อีกมากมาย นอกเหนือจากช่องทางย้อนกลับแล้ว ยังสามารถทำการส่งต่อพอร์ต สร้างเชลล์คำสั่ง ฯลฯ

เครื่องวัดมิเตอร์ MSF
อย่างที่พวกเขาพูดไม่มีความคิดเห็น แฮกเกอร์ที่ได้รับการศึกษาไม่มากก็น้อยคุ้นเคยกับสิ่งนี้เป็นอย่างดีและเข้าใจว่าเครื่องมือรักษาความปลอดภัยตรวจพบได้ง่ายเพียงใด

เครื่องมือทั้งหมดที่อธิบายไว้ข้างต้นทำงานโดยใช้เทคโนโลยีที่คล้ายกัน: โมดูลไบนารี่ปฏิบัติการที่เตรียมไว้ล่วงหน้าจะถูกเปิดใช้งานบนเครื่องภายในเครือข่าย ซึ่งสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ภายนอก เซิร์ฟเวอร์รันเซิร์ฟเวอร์ SOCKS4/5 ที่ยอมรับการเชื่อมต่อและส่งต่อไปยังไคลเอนต์

ข้อเสียของเครื่องมือทั้งหมดข้างต้นคือต้องติดตั้ง Python หรือ Golang บนเครื่องไคลเอนต์ (คุณเคยเห็น Python ติดตั้งบนเครื่องของผู้อำนวยการบริษัทหรือพนักงานออฟฟิศบ่อยครั้งหรือไม่) หรือเครื่องมือที่ประกอบไว้ล่วงหน้าแล้ว ไบนารี่ (จริงๆ แล้วคือหลาม) จะต้องถูกลากไปยังเครื่องนี้และสคริปต์ในขวดเดียว) และรันไบนารี่นี้อยู่ที่นั่นแล้ว และการดาวน์โหลด exe แล้วเปิดใช้งานก็เป็นลายเซ็นสำหรับโปรแกรมป้องกันไวรัสในเครื่องหรือ HIPS

โดยทั่วไปแล้ว ข้อสรุปแสดงให้เห็นตัวเอง - เราต้องการโซลูชัน PowerShell ตอนนี้มะเขือเทศจะบินมาหาเรา - พวกเขาบอกว่า PowerShell ถูกแฮ็กหมดแล้วมีการตรวจสอบถูกบล็อก ฯลฯ และอื่น ๆ ในความเป็นจริงไม่ใช่ทุกที่ เราประกาศอย่างมีความรับผิดชอบ อย่างไรก็ตาม มีหลายวิธีในการหลีกเลี่ยงการบล็อก (ที่นี่อีกครั้งมีวลีที่ทันสมัยเกี่ยวกับสวัสดี RKN 🙂) เริ่มต้นจากการเปลี่ยนชื่อ Powershell.exe อย่างโง่เขลา -> cmdd.exe และลงท้ายด้วย powerdll เป็นต้น

มาเริ่มประดิษฐ์กันดีกว่า

ชัดเจนว่าก่อนอื่นเราจะดูใน Google และ... เราจะไม่พบสิ่งใดในหัวข้อนี้ (หากมีใครพบ ให้โพสต์ลิงก์ในความคิดเห็น) มีเพียงเท่านั้น การดำเนินงาน Socks5 บน PowerShell แต่นี่เป็นทีม "โดยตรง" ธรรมดาซึ่งมีข้อเสียหลายประการ (เราจะพูดถึงพวกเขาในภายหลัง) แน่นอนคุณสามารถเปลี่ยนมือของคุณให้เป็นแบบย้อนกลับได้ด้วยการขยับมือเล็กน้อย แต่นี่จะเป็นซอกซอคเธรดเดียวเท่านั้นซึ่งไม่ใช่สิ่งที่เราต้องการสำหรับเรา

ดังนั้นเราจึงไม่พบสิ่งที่สำเร็จรูป ดังนั้นเรายังคงต้องสร้างวงล้อของเราขึ้นมาใหม่ เราจะใช้เป็นพื้นฐานสำหรับจักรยานของเรา การพัฒนาของเรา Reverse Sox ใน Golang และเราใช้ไคลเอ็นต์ใน PowerShell

RSocksTun
rsockstun ทำงานอย่างไร?

การทำงานของ RsocksTun (ต่อไปนี้จะเรียกว่า rs) ขึ้นอยู่กับส่วนประกอบซอฟต์แวร์สองส่วน - เซิร์ฟเวอร์ Yamux และ Socks5 เซิร์ฟเวอร์ Socks5 เป็นถุงเท้าภายในเครื่องปกติซึ่งทำงานบนไคลเอนต์ และการเชื่อมต่อแบบมัลติเพล็กซ์ (จำเกี่ยวกับมัลติเธรดได้ไหม) มีให้โดยใช้ yamux (มัลติเพล็กเซอร์อีกตัวหนึ่ง). รูปแบบนี้ช่วยให้คุณสามารถเปิดใช้งานเซิร์ฟเวอร์ไคลเอ็นต์ถุงเท้า 5 หลายตัวและกระจายการเชื่อมต่อภายนอกไปยังเซิร์ฟเวอร์เหล่านั้นโดยส่งต่อผ่านการเชื่อมต่อ TCP เดียว (เกือบจะเหมือนในมิเตอร์พรีเตอร์) จากไคลเอนต์ไปยังเซิร์ฟเวอร์ ดังนั้นจึงใช้โหมดมัลติเธรดโดยที่เราจะไม่เป็นเช่นนั้น สามารถทำงานในเครือข่ายภายในได้อย่างเต็มที่

สาระสำคัญของวิธีการทำงานของ yamux คือการแนะนำเลเยอร์เครือข่ายเพิ่มเติมของสตรีม โดยนำไปใช้ในรูปแบบของส่วนหัวขนาด 12 ไบต์สำหรับแต่ละแพ็กเก็ต (ที่นี่เราใช้คำว่า "สตรีม" อย่างจงใจแทนที่จะเป็นเธรดเพื่อไม่ให้ผู้อ่านสับสนกับสตรีม "เธรด" ของโปรแกรม - เราจะใช้แนวคิดนี้ในบทความนี้ด้วย) ส่วนหัว yamux ประกอบด้วยหมายเลขสตรีม แฟล็กสำหรับการติดตั้ง/ยุติสตรีม จำนวนไบต์ที่ถ่ายโอน และขนาดของหน้าต่างการถ่ายโอน

การเขียนพร็อกซี Reverse Socks5 ใน PowerShell ส่วนที่ 1

นอกเหนือจากการติดตั้ง/ยุติสตรีมแล้ว yamux ยังใช้กลไก Keepalive ที่ช่วยให้คุณสามารถตรวจสอบประสิทธิภาพของช่องทางการสื่อสารที่กำหนดไว้ได้ การทำงานของกลไกข้อความ Keeplive ได้รับการกำหนดค่าเมื่อสร้างเซสชัน Yamux จริงๆ แล้ว การตั้งค่ามีเพียง XNUMX พารามิเตอร์เท่านั้น คือ เปิด/ปิด และความถี่ในการส่งแพ็กเก็ตในหน่วยวินาที ข้อความ Keepalive สามารถส่งโดยเซิร์ฟเวอร์ yamux หรือไคลเอ็นต์ yamux เมื่อได้รับข้อความ Keepalive ฝ่ายระยะไกลจะต้องตอบกลับโดยส่งตัวระบุข้อความเดียวกันทุกประการ (จริงๆ แล้วเป็นตัวเลข) ที่ได้รับ โดยทั่วไป Keepalive จะเป็น Ping เดียวกัน เฉพาะกับ yamux เท่านั้น

เทคนิคการทำงานทั้งหมดของมัลติเพล็กเซอร์: ประเภทแพ็กเก็ต การตั้งค่าการเชื่อมต่อ และแฟล็กการยกเลิก และกลไกการถ่ายโอนข้อมูลมีการอธิบายโดยละเอียดใน ข้อกำหนด ถึงยามุกซ์

บทสรุปของภาคแรก

ดังนั้นในส่วนแรกของบทความ เราได้ทำความคุ้นเคยกับเครื่องมือบางอย่างสำหรับจัดระเบียบอุโมงค์ย้อนกลับ ดูข้อดีและข้อเสีย ศึกษากลไกการทำงานของมัลติเพล็กเซอร์ Yamux และอธิบายข้อกำหนดพื้นฐานสำหรับโมดูล PowerShell ที่สร้างขึ้นใหม่ ในส่วนถัดไป เราจะพัฒนาโมดูลเองตั้งแต่เริ่มต้น ยังมีต่อ. อย่าเปลี่ยน :)

ที่มา: will.com

เพิ่มความคิดเห็น