ไม่เป็นความลับเลยที่อินเทอร์เน็ตมีสภาพแวดล้อมที่ไม่เป็นมิตรมาก ทันทีที่คุณเพิ่มเซิร์ฟเวอร์ เซิร์ฟเวอร์ก็จะถูกโจมตีครั้งใหญ่และการสแกนหลายครั้งทันที ตัวอย่างเช่น
Tarpit เป็นพอร์ตกับดักที่ใช้ในการชะลอการเชื่อมต่อขาเข้า หากระบบของบุคคลที่สามเชื่อมต่อกับพอร์ตนี้ คุณจะไม่สามารถปิดการเชื่อมต่อได้อย่างรวดเร็ว เธอจะต้องสิ้นเปลืองทรัพยากรระบบและรอจนกว่าการเชื่อมต่อจะหมดเวลาหรือยุติการเชื่อมต่อด้วยตนเอง
ส่วนใหญ่มักใช้ tarpits เพื่อการป้องกัน เทคนิคนี้ได้รับการพัฒนาครั้งแรกเพื่อป้องกันเวิร์มคอมพิวเตอร์ และตอนนี้สามารถใช้เพื่อทำลายชีวิตของผู้ส่งอีเมลขยะและนักวิจัยที่สแกนที่อยู่ IP ทั้งหมดติดต่อกันในวงกว้าง (ตัวอย่างใน Habré:
เห็นได้ชัดว่าผู้ดูแลระบบคนหนึ่งชื่อ Chris Wellons รู้สึกเบื่อหน่ายกับการดูความอับอายนี้ - และเขาก็เขียนโปรแกรมขนาดเล็กขึ้นมา
การติดตั้งยูทิลิตี้:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
ผ้าใบกันน้ำที่ใช้งานอย่างเหมาะสมจะใช้ทรัพยากรจากผู้โจมตีมากกว่าจากคุณ แต่มันไม่ใช่เรื่องของทรัพยากรด้วยซ้ำ ผู้เขียน
ในโหมดการทำงานจำเป็นต้องติดตั้งเซิร์ฟเวอร์ Endlessh บนพอร์ตปกติ 22 ซึ่งพวกอันธพาลเคาะกันมากมาย คำแนะนำด้านความปลอดภัยมาตรฐานแนะนำให้ย้าย SSH ไปยังพอร์ตอื่นเสมอ ซึ่งจะลดขนาดของบันทึกทันทีตามลำดับความสำคัญ
Chris Wellons กล่าวว่าโปรแกรมของเขาใช้ประโยชน์จากข้อกำหนดหนึ่งย่อหน้า SSH-
.
นี่คือสิ่งที่โปรแกรม Endlessh ทำ: มัน ส่ง ไม่มีที่สิ้นสุด กระแสข้อมูลที่สร้างขึ้นแบบสุ่มซึ่งเป็นไปตาม RFC 4253 กล่าวคือ ส่งก่อนการรับรองความถูกต้อง และแต่ละบรรทัดขึ้นต้นด้วย SSH-
และมีความยาวไม่เกิน 255 ตัวอักษร รวมอักขระลงท้ายบรรทัดด้วย โดยทั่วไปทุกอย่างเป็นไปตามมาตรฐาน
ตามค่าเริ่มต้น โปรแกรมจะรอ 10 วินาทีระหว่างการส่งแพ็กเก็ต วิธีนี้จะป้องกันไม่ให้ไคลเอ็นต์หมดเวลา ดังนั้นไคลเอ็นต์จะถูกดักไว้ตลอดไป
เนื่องจากข้อมูลจะถูกส่งก่อนที่จะใช้การเข้ารหัส โปรแกรมจึงง่ายมาก ไม่จำเป็นต้องใช้การเข้ารหัสใดๆ และรองรับหลายโปรโตคอล
ผู้เขียนพยายามให้แน่ใจว่ายูทิลิตี้นี้ใช้ทรัพยากรขั้นต่ำและทำงานโดยไม่มีใครสังเกตเห็นบนเครื่องเลย ไม่เหมือนกับแอนตี้ไวรัสสมัยใหม่และ “ระบบรักษาความปลอดภัย” อื่นๆ มันไม่ควรทำให้คอมพิวเตอร์ของคุณช้าลง เขาจัดการเพื่อลดปริมาณการใช้ข้อมูลและหน่วยความจำให้เหลือน้อยที่สุดเนื่องจากการใช้ซอฟต์แวร์ที่ชาญฉลาดกว่าเล็กน้อย หากเพียงแค่เปิดตัวกระบวนการแยกต่างหากในการเชื่อมต่อใหม่ ผู้โจมตีที่มีศักยภาพก็สามารถเปิดการโจมตี DDoS ได้โดยการเปิดการเชื่อมต่อหลาย ๆ อันเพื่อใช้ทรัพยากรบนเครื่องจนหมด หนึ่งเธรดต่อการเชื่อมต่อก็ไม่ใช่ตัวเลือกที่ดีที่สุด เนื่องจากเคอร์เนลจะทำให้ทรัพยากรสิ้นเปลืองในการจัดการเธรด
นั่นเป็นเหตุผลที่ Chris Wellons เลือกตัวเลือกที่เบาที่สุดสำหรับ Endlessh: เซิร์ฟเวอร์แบบเธรดเดียว poll(2)
โดยที่ไคลเอนต์ในกับดักแทบไม่ต้องใช้ทรัพยากรเพิ่มเติม โดยไม่นับออบเจ็กต์ซ็อกเก็ตในเคอร์เนลและอีก 78 ไบต์สำหรับการติดตามใน Endlessh เพื่อหลีกเลี่ยงการจัดสรรบัฟเฟอร์การรับและส่งสำหรับแต่ละไคลเอ็นต์ Endlessh จะเปิดซ็อกเก็ตการเข้าถึงโดยตรงและแปลแพ็กเก็ต TCP โดยตรง โดยข้ามสแต็ก TCP/IP ของระบบปฏิบัติการเกือบทั้งหมด บัฟเฟอร์ขาเข้าไม่จำเป็นเลย เนื่องจากเราไม่สนใจข้อมูลที่เข้ามา
ผู้เขียนบอกว่าตอนที่เขาเขียนโปรแกรม
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()
asyncio.run(main())
Asyncio เหมาะสำหรับเขียนผ้าใบกันน้ำ ตัวอย่างเช่น ฮุคนี้จะหยุด Firefox, Chrome หรือไคลเอนต์อื่น ๆ ที่พยายามเชื่อมต่อกับเซิร์ฟเวอร์ HTTP ของคุณเป็นเวลาหลายชั่วโมง:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()
asyncio.run(main())
Tarpit เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการลงโทษผู้รังแกทางออนไลน์ จริงอยู่ ในทางกลับกัน มีความเสี่ยงที่จะดึงความสนใจไปที่พฤติกรรมที่ผิดปกติของเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่ง ใครบางคน
ฮับ:
Python ความปลอดภัยของข้อมูล ซอฟต์แวร์ การดูแลระบบ
Tags:
SSH, Endlessh, tarpit, tarpit, กับดัก, asycio
Trap (tarpit) สำหรับการเชื่อมต่อ SSH ขาเข้า
ไม่เป็นความลับเลยที่อินเทอร์เน็ตมีสภาพแวดล้อมที่ไม่เป็นมิตรมาก ทันทีที่คุณเพิ่มเซิร์ฟเวอร์ เซิร์ฟเวอร์ก็จะถูกโจมตีครั้งใหญ่และการสแกนหลายครั้งทันที ตัวอย่างเช่น
Tarpit เป็นพอร์ตกับดักที่ใช้ในการชะลอการเชื่อมต่อขาเข้า หากระบบของบุคคลที่สามเชื่อมต่อกับพอร์ตนี้ คุณจะไม่สามารถปิดการเชื่อมต่อได้อย่างรวดเร็ว เธอจะต้องสิ้นเปลืองทรัพยากรระบบและรอจนกว่าการเชื่อมต่อจะหมดเวลาหรือยุติการเชื่อมต่อด้วยตนเอง
ส่วนใหญ่มักใช้ tarpits เพื่อการป้องกัน เทคนิคนี้ได้รับการพัฒนาครั้งแรกเพื่อป้องกันเวิร์มคอมพิวเตอร์ และตอนนี้สามารถใช้เพื่อทำลายชีวิตของผู้ส่งอีเมลขยะและนักวิจัยที่สแกนที่อยู่ IP ทั้งหมดติดต่อกันในวงกว้าง (ตัวอย่างใน Habré:
เห็นได้ชัดว่าผู้ดูแลระบบคนหนึ่งชื่อ Chris Wellons รู้สึกเบื่อหน่ายกับการดูความอับอายนี้ - และเขาก็เขียนโปรแกรมขนาดเล็กขึ้นมา
การติดตั้งยูทิลิตี้:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
ผ้าใบกันน้ำที่ใช้งานอย่างเหมาะสมจะใช้ทรัพยากรจากผู้โจมตีมากกว่าจากคุณ แต่มันไม่ใช่เรื่องของทรัพยากรด้วยซ้ำ ผู้เขียน
ในโหมดการทำงานจำเป็นต้องติดตั้งเซิร์ฟเวอร์ Endlessh บนพอร์ตปกติ 22 ซึ่งพวกอันธพาลเคาะกันมากมาย คำแนะนำด้านความปลอดภัยมาตรฐานแนะนำให้ย้าย SSH ไปยังพอร์ตอื่นเสมอ ซึ่งจะลดขนาดของบันทึกทันทีตามลำดับความสำคัญ
Chris Wellons กล่าวว่าโปรแกรมของเขาใช้ประโยชน์จากข้อกำหนดหนึ่งย่อหน้า SSH-
.
นี่คือสิ่งที่โปรแกรม Endlessh ทำ: มัน ส่ง ไม่มีที่สิ้นสุด กระแสข้อมูลที่สร้างขึ้นแบบสุ่มซึ่งเป็นไปตาม RFC 4253 กล่าวคือ ส่งก่อนการรับรองความถูกต้อง และแต่ละบรรทัดขึ้นต้นด้วย SSH-
และมีความยาวไม่เกิน 255 ตัวอักษร รวมอักขระลงท้ายบรรทัดด้วย โดยทั่วไปทุกอย่างเป็นไปตามมาตรฐาน
ตามค่าเริ่มต้น โปรแกรมจะรอ 10 วินาทีระหว่างการส่งแพ็กเก็ต วิธีนี้จะป้องกันไม่ให้ไคลเอ็นต์หมดเวลา ดังนั้นไคลเอ็นต์จะถูกดักไว้ตลอดไป
เนื่องจากข้อมูลจะถูกส่งก่อนที่จะใช้การเข้ารหัส โปรแกรมจึงง่ายมาก ไม่จำเป็นต้องใช้การเข้ารหัสใดๆ และรองรับหลายโปรโตคอล
ผู้เขียนพยายามให้แน่ใจว่ายูทิลิตี้นี้ใช้ทรัพยากรขั้นต่ำและทำงานโดยไม่มีใครสังเกตเห็นบนเครื่องเลย ไม่เหมือนกับแอนตี้ไวรัสสมัยใหม่และ “ระบบรักษาความปลอดภัย” อื่นๆ มันไม่ควรทำให้คอมพิวเตอร์ของคุณช้าลง เขาจัดการเพื่อลดปริมาณการใช้ข้อมูลและหน่วยความจำให้เหลือน้อยที่สุดเนื่องจากการใช้ซอฟต์แวร์ที่ชาญฉลาดกว่าเล็กน้อย หากเพียงแค่เปิดตัวกระบวนการแยกต่างหากในการเชื่อมต่อใหม่ ผู้โจมตีที่มีศักยภาพก็สามารถเปิดการโจมตี DDoS ได้โดยการเปิดการเชื่อมต่อหลาย ๆ อันเพื่อใช้ทรัพยากรบนเครื่องจนหมด หนึ่งเธรดต่อการเชื่อมต่อก็ไม่ใช่ตัวเลือกที่ดีที่สุด เนื่องจากเคอร์เนลจะทำให้ทรัพยากรสิ้นเปลืองในการจัดการเธรด
นั่นเป็นเหตุผลที่ Chris Wellons เลือกตัวเลือกที่เบาที่สุดสำหรับ Endlessh: เซิร์ฟเวอร์แบบเธรดเดียว poll(2)
โดยที่ไคลเอนต์ในกับดักแทบไม่ต้องใช้ทรัพยากรเพิ่มเติม โดยไม่นับออบเจ็กต์ซ็อกเก็ตในเคอร์เนลและอีก 78 ไบต์สำหรับการติดตามใน Endlessh เพื่อหลีกเลี่ยงการจัดสรรบัฟเฟอร์การรับและส่งสำหรับแต่ละไคลเอ็นต์ Endlessh จะเปิดซ็อกเก็ตการเข้าถึงโดยตรงและแปลแพ็กเก็ต TCP โดยตรง โดยข้ามสแต็ก TCP/IP ของระบบปฏิบัติการเกือบทั้งหมด บัฟเฟอร์ขาเข้าไม่จำเป็นเลย เนื่องจากเราไม่สนใจข้อมูลที่เข้ามา
ผู้เขียนบอกว่าตอนที่เขาเขียนโปรแกรม
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()
asyncio.run(main())
Asyncio เหมาะสำหรับเขียนผ้าใบกันน้ำ ตัวอย่างเช่น ฮุคนี้จะหยุด Firefox, Chrome หรือไคลเอนต์อื่น ๆ ที่พยายามเชื่อมต่อกับเซิร์ฟเวอร์ HTTP ของคุณเป็นเวลาหลายชั่วโมง:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()
asyncio.run(main())
Tarpit เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการลงโทษผู้รังแกทางออนไลน์ จริงอยู่ ในทางกลับกัน มีความเสี่ยงที่จะดึงความสนใจไปที่พฤติกรรมที่ผิดปกติของเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่ง ใครบางคน
ที่มา: will.com