ืื ืื ืกืื ืฉืืืื ืืจื ื ืืื ืกืืืื ืืืื ืขืืื ืช. ืืจืืข ืฉืืชื ืืขืื ืฉืจืช, ืืื ื ืชืื ืืืืคื ืืืืื ืืืชืงืคืืช ืืกืืืืืช ืืืกืจืืงืืช ืืจืืืืช. ืืืืืื
Tarpit ืืื ืืฆืืืช ืืืืืืช ืืืฉืืฉืช ืืืืืช ืืืืืจืื ื ืื ืกืื. ืื ืืขืจืืช ืฆื ืฉืืืฉื ืืชืืืจืช ืืืฆืืื ืื, ืื ืชืืื ืืกืืืจ ืืช ืืืืืืจ ืืืืืจืืช. ืืื ืชืฆืืจื ืืืืื ืืช ืืฉืืื ืืืขืจืืช ืฉืื ืืืืืชืื ืขื ืืคืกืง ืืื ืฉื ืืืืืืจ, ืื ืืกืืื ืืืชื ืืืืคื ืืื ื.
ืืจืื, ืืจืื ื ืืฉืืฉืื ืืืื ื. ืืืื ืืงื ืคืืชืื ืืจืืฉืื ื ืืื ืืืื ืืคื ื ืชืืืขื ืืืฉื. ืืขืืฉืื ืื ืืืื ืืฉืืฉ ืืื ืืืจืืก ืืช ืืืืื ืฉื ืฉืืืื ืืืืจ ืืื ืืืืงืจืื ืฉืขืืกืงืื ืืกืจืืงื ืจืืื ืฉื ืื ืืชืืืืช ื-IP ืืจืฆืฃ (ืืืืืืืช ืขื Habrรฉ:
ืืืื ืืื ืืื ืืืขืจืืช ืืฉื ืืจืืก ืืืื ืก ื ืืืก ืื ืจืื ืืฆืคืืช ืืืืืืื ืืื - ืืืื ืืชื ืชืืื ืืช ืงืื ื
ืืชืงื ื ืฉื ืืื ืืฉืืจืืช:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
ืืจืื ื ืืืืฉื ืืืืื ืืืงื ืืืชืจ ืืฉืืืื ืืืชืืงืฃ ืืืฉืจ ืืื. ืืื ืื ืืคืืื ืื ืขื ืืื ืฉื ืืฉืืืื. ืึฐืึทืึผึตืจ
ืืืฆื ืืคืขืื, ืืฉ ืืืชืงืื ืืช ืฉืจืช ื-Endlessh ืืคืืจื 22 ืืจืืื, ืฉืื ืืืืืื ืื ืืืคืงืื ืืืืื ืืื. ืืืืฆืืช ืืืืื ืกืื ืืจืืืืช ืชืืื ืืืืืฆืืช ืืืขืืืจ ืืช SSH ืืืฆืืื ืืืจืช, ืื ืฉืืงืืื ืืื ืืช ืืืื ืืืืื ืื ืืกืืจ ืืืื.
ืืจืืก ืืืืื ืืืืจ ืฉืืชืืื ืืช ืฉืื ืื ืฆืืช ืคืกืงื ืืืช ืืืืคืจื SSH-
.
ืื ืืืืืง ืื ืฉืืชืืื ืืช Endlessh ืขืืฉื: ืื ืฉืืื ืืื ืกืืคื ืืจื ืฉื ื ืชืื ืื ืฉื ืืฆืจื ืืืืคื ืืงืจืื, ืืฉืจ ืชืืืืื ื-RFC 4253, ืืืืืจ, ืฉืืืืื ืืคื ื ืืืืืช, ืืื ืฉืืจื ืืชืืืื ืขื SSH-
ืืืื ื ืขืืื ืขื 255 ืชืืืื, ืืืื ืชื ืกืืื ืืฉืืจื. ืืืืคื ืืืื ืืื ืืคื ืืชืงื.
ืืืจืืจืช ืืืื, ืืชืืื ืืช ืืืชืื ื 10 ืฉื ืืืช ืืื ืฉืืืืช ืื ืืช. ืื ืืื ืข ืืืืงืื ืืืืืข ืืืื ืงืฆืื, ืื ืฉืืืงืื ืืืื ืืืื ืื ืฆื.
ืืืืืื ืฉืื ืชืื ืื ื ืฉืืืื ืืคื ื ืืืืช ืืฆืคื ื, ืืชืืื ืืช ืคืฉืืื ืืืืชืจ. ืื ืื ืฆืจืื ืืืืฉื ืฉืื ืฆืืคื ืืชืืื ืืืกืคืจ ืคืจืืืืงืืืื.
ืืืืืจ ื ืืกื ืืืืืื ืฉืชืืื ืืช ืืฉืืจืืช ืฆืืจืืช ืืื ืืืื ืฉื ืืฉืืืื ืืคืืขืืช ืืื ืชืฉืืืช ืื ืืืืืืื ืขื ืืืืื ื. ืื ืืืื ืืื ืื ืืืจืืกืื ืืืืจื ืืื ื"ืืขืจืืืช ืืืืื" ืืืจืืช, ืื ืื ืืืืจ ืืืื ืืช ืืืืฉื ืฉืื. ืืื ืืฆืืื ืืืืขืจ ืื ืืช ืืชืขืืืจื ืืื ืืช ืฆืจืืืช ืืืืืจืื ืืืื ืืืืขืช ืชืืื ื ืงืฆืช ืืืชืจ ืขืจืืืืืช. ืื ืื ืคืฉืื ืืฉืืง ืชืืืื ื ืคืจื ืืืืืืจ ืืืฉ, ืื ืชืืงืคืื ืคืืื ืฆืืืืืื ืืืืืื ืืืฉืืง ืืชืงืคืช DDoS ืขื ืืื ืคืชืืืช ืืกืคืจ ืืืืืจืื ืืื ืืืฆืืช ืืฉืืืื ืขื ืืืืฉื. ืฉืจืฉืืจ ืืื ืืื ืืืืืจ ืืื ืื ืื ืืืคืฉืจืืช ืืืืื ืืืืชืจ, ืืืืืื ืฉืืงืจื ื ืืืืื ืืฉืืืื ืื ืืืื ืฉืจืฉืืจืื.
ืื ืืกืืื ืฉืืจืืก ืืืื ืก ืืืจ ืืืคืฉืจืืช ืืงืื ืืืืชืจ ืขืืืจ Endlessh: ืฉืจืช ืืื ืืืื poll(2)
, ืืืฉืจ ืืืงืืืืช ืืืืืืืช ืืืขื ืืื ืฆืืจืืื ืืฉืืืื ื ืืกืคืื, ืื ืกืืคืจืื ืืช ืืืืืืงื ื-socket ืืงืจื ื ืืขืื 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, ืืืืืช ืืืืข, ืชืืื ื, ื ืืืื ืืขืจืืช
ืชืืืืช:
SSH, Endlessh, ืืจืื ื, ืืจืื ื, ืืืืืืช, asycio
ืืืืืืช (ืืจืื ื) ืขืืืจ ืืืืืจื SSH ื ืื ืกืื
ืื ืื ืกืื ืฉืืืื ืืจื ื ืืื ืกืืืื ืืืื ืขืืื ืช. ืืจืืข ืฉืืชื ืืขืื ืฉืจืช, ืืื ื ืชืื ืืืืคื ืืืืื ืืืชืงืคืืช ืืกืืืืืช ืืืกืจืืงืืช ืืจืืืืช. ืืืืืื
Tarpit ืืื ืืฆืืืช ืืืืืืช ืืืฉืืฉืช ืืืืืช ืืืืืจืื ื ืื ืกืื. ืื ืืขืจืืช ืฆื ืฉืืืฉื ืืชืืืจืช ืืืฆืืื ืื, ืื ืชืืื ืืกืืืจ ืืช ืืืืืืจ ืืืืืจืืช. ืืื ืชืฆืืจื ืืืืื ืืช ืืฉืืื ืืืขืจืืช ืฉืื ืืืืืชืื ืขื ืืคืกืง ืืื ืฉื ืืืืืืจ, ืื ืืกืืื ืืืชื ืืืืคื ืืื ื.
ืืจืื, ืืจืื ื ืืฉืืฉืื ืืืื ื. ืืืื ืืงื ืคืืชืื ืืจืืฉืื ื ืืื ืืืื ืืคื ื ืชืืืขื ืืืฉื. ืืขืืฉืื ืื ืืืื ืืฉืืฉ ืืื ืืืจืืก ืืช ืืืืื ืฉื ืฉืืืื ืืืืจ ืืื ืืืืงืจืื ืฉืขืืกืงืื ืืกืจืืงื ืจืืื ืฉื ืื ืืชืืืืช ื-IP ืืจืฆืฃ (ืืืืืืืช ืขื Habrรฉ:
ืืืื ืืื ืืื ืืืขืจืืช ืืฉื ืืจืืก ืืืื ืก ื ืืืก ืื ืจืื ืืฆืคืืช ืืืืืืื ืืื - ืืืื ืืชื ืชืืื ืืช ืงืื ื
ืืชืงื ื ืฉื ืืื ืืฉืืจืืช:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
ืืจืื ื ืืืืฉื ืืืืื ืืืงื ืืืชืจ ืืฉืืืื ืืืชืืงืฃ ืืืฉืจ ืืื. ืืื ืื ืืคืืื ืื ืขื ืืื ืฉื ืืฉืืืื. ืึฐืึทืึผึตืจ
ืืืฆื ืืคืขืื, ืืฉ ืืืชืงืื ืืช ืฉืจืช ื-Endlessh ืืคืืจื 22 ืืจืืื, ืฉืื ืืืืืื ืื ืืืคืงืื ืืืืื ืืื. ืืืืฆืืช ืืืืื ืกืื ืืจืืืืช ืชืืื ืืืืืฆืืช ืืืขืืืจ ืืช SSH ืืืฆืืื ืืืจืช, ืื ืฉืืงืืื ืืื ืืช ืืืื ืืืืื ืื ืืกืืจ ืืืื.
ืืจืืก ืืืืื ืืืืจ ืฉืืชืืื ืืช ืฉืื ืื ืฆืืช ืคืกืงื ืืืช ืืืืคืจื SSH-
.
ืื ืืืืืง ืื ืฉืืชืืื ืืช Endlessh ืขืืฉื: ืื ืฉืืื ืืื ืกืืคื ืืจื ืฉื ื ืชืื ืื ืฉื ืืฆืจื ืืืืคื ืืงืจืื, ืืฉืจ ืชืืืืื ื-RFC 4253, ืืืืืจ, ืฉืืืืื ืืคื ื ืืืืืช, ืืื ืฉืืจื ืืชืืืื ืขื SSH-
ืืืื ื ืขืืื ืขื 255 ืชืืืื, ืืืื ืชื ืกืืื ืืฉืืจื. ืืืืคื ืืืื ืืื ืืคื ืืชืงื.
ืืืจืืจืช ืืืื, ืืชืืื ืืช ืืืชืื ื 10 ืฉื ืืืช ืืื ืฉืืืืช ืื ืืช. ืื ืืื ืข ืืืืงืื ืืืืืข ืืืื ืงืฆืื, ืื ืฉืืืงืื ืืืื ืืืื ืื ืฆื.
ืืืืืื ืฉืื ืชืื ืื ื ืฉืืืื ืืคื ื ืืืืช ืืฆืคื ื, ืืชืืื ืืช ืคืฉืืื ืืืืชืจ. ืื ืื ืฆืจืื ืืืืฉื ืฉืื ืฆืืคื ืืชืืื ืืืกืคืจ ืคืจืืืืงืืืื.
ืืืืืจ ื ืืกื ืืืืืื ืฉืชืืื ืืช ืืฉืืจืืช ืฆืืจืืช ืืื ืืืื ืฉื ืืฉืืืื ืืคืืขืืช ืืื ืชืฉืืืช ืื ืืืืืืื ืขื ืืืืื ื. ืื ืืืื ืืื ืื ืืืจืืกืื ืืืืจื ืืื ื"ืืขืจืืืช ืืืืื" ืืืจืืช, ืื ืื ืืืืจ ืืืื ืืช ืืืืฉื ืฉืื. ืืื ืืฆืืื ืืืืขืจ ืื ืืช ืืชืขืืืจื ืืื ืืช ืฆืจืืืช ืืืืืจืื ืืืื ืืืืขืช ืชืืื ื ืงืฆืช ืืืชืจ ืขืจืืืืืช. ืื ืื ืคืฉืื ืืฉืืง ืชืืืื ื ืคืจื ืืืืืืจ ืืืฉ, ืื ืชืืงืคืื ืคืืื ืฆืืืืืื ืืืืืื ืืืฉืืง ืืชืงืคืช DDoS ืขื ืืื ืคืชืืืช ืืกืคืจ ืืืืืจืื ืืื ืืืฆืืช ืืฉืืืื ืขื ืืืืฉื. ืฉืจืฉืืจ ืืื ืืื ืืืืืจ ืืื ืื ืื ืืืคืฉืจืืช ืืืืื ืืืืชืจ, ืืืืืื ืฉืืงืจื ื ืืืืื ืืฉืืืื ืื ืืืื ืฉืจืฉืืจืื.
ืื ืืกืืื ืฉืืจืืก ืืืื ืก ืืืจ ืืืคืฉืจืืช ืืงืื ืืืืชืจ ืขืืืจ Endlessh: ืฉืจืช ืืื ืืืื poll(2)
, ืืืฉืจ ืืืงืืืืช ืืืืืืืช ืืืขื ืืื ืฆืืจืืื ืืฉืืืื ื ืืกืคืื, ืื ืกืืคืจืื ืืช ืืืืืืงื ื-socket ืืงืจื ื ืืขืื 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 ืืื ืืื ื ืืืจ ืืืขื ืฉืช ืืจืืื ืื ืืงืืื ืื. ื ืืื, ืืฉ ืกืืืื ืืกืืื, ืืืืคื, ืืืคื ืืืช ืชืฉืืืช ืืื ืืืชื ืืืืช ืืืฆืืช ืืืคื ืฉื ืฉืจืช ืืกืืื. ืึดืืฉืึถืืึผ
ืืงืืจ: www.habr.com