ααΆαα·ααααααΆααΏαα’αΆααααααΆαααααααα’ααΈαααΊαα·αααΊααΆααα·ααΆααΆαα’αα·ααΆαααααΆααα αααΆαααΆα’αααααΎααααΆαααΈααα ααΆααΉαααα½αααααΆαααΆααααα αΆαααααααααΆαα αα·αααΆααααααα
αααΎαα α§ααΆα ααα
Tarpit ααΊβααΆβα αααβα’ααααΆααβαααβααααΎβααΎααααΈβαααααΊαβααΆαβαααααΆααβα αΌαα ααααα·αααΎααααααααααΆααΈααΈααΈααααΆαααα α αααααα α’αααααΉααα·αα’αΆα αα·αααΆαααααΆααααΆαααΏααααααα ααΆαααΉαααααΌαααααααααΆαααααΆαααααααααααααααΆα α αΎααααα αΆααα αΌααααα’αααααααααΆααααααΆαα α¬αααα ααααΆαααααα
ααΆαα
αααΎαααΆααΉαααΆαα tarpits ααααΌαααΆαααααΎαααααΆααααΆαααΆαααΆαα αα
αα
ααααααααααααΌαααΆααααααΎαα‘αΎαααΆααΎαααααΌαααΎααααΈααΆαααΆααααααΆααααΉαααα½α Worm αα»αααααΌαααα α αΎαα₯α‘αΌααααααΆα’αΆα
ααααΌαααΆαααααΎααΎααααΈααααααΆαααΈαα·αααααα’αααααααΎααΆαα₯αααΆαααΆα αα·αα’αααααααΆαααααΆααααα
αΌααα½ααααα»αααΆααααααααΌααααΌααΆαααα’αΆααααααΆα 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 stack α ααα·ααααααα’αΆααααα
αΌααα·αα
αΆαααΆα
αααΆααααααα ααΈαααααααΎααα·αα
αΆααα’αΆααααααααΉααα·ααααααα
αΌαα
α’αααβαα·ααααβαα·ααΆαβααΆ αα
βαααβαααααα·ααΈβααααβααΆαα
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 ααΊααα’αααααΆααααΆαααααα tarpits α α§ααΆα ααα ααααααααααΉαααααα 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, tarpit, tarpit, trap, asycio
α’ααααΆαα (tarpit) αααααΆααααΆααααααΆαα SSH α
αΌα
ααΆαα·ααααααΆααΏαα’αΆααααααΆαααααααα’ααΈαααΊαα·αααΊααΆααα·ααΆααΆαα’αα·ααΆαααααΆααα αααΆαααΆα’αααααΎααααΆαααΈααα ααΆααΉαααα½αααααΆαααΆααααα αΆαααααααααΆαα αα·αααΆααααααα
αααΎαα α§ααΆα ααα
Tarpit ααΊβααΆβα αααβα’ααααΆααβαααβααααΎβααΎααααΈβαααααΊαβααΆαβαααααΆααβα αΌαα ααααα·αααΎααααααααααΆααΈααΈααΈααααΆαααα α αααααα α’αααααΉααα·αα’αΆα αα·αααΆαααααΆααααΆαααΏααααααα ααΆαααΉαααααΌαααααααααΆαααααΆαααααααααααααααΆα α αΎααααα αΆααα αΌααααα’αααααααααΆααααααΆαα α¬αααα ααααΆαααααα
ααΆαα
αααΎαααΆααΉαααΆαα tarpits ααααΌαααΆαααααΎαααααΆααααΆαααΆαααΆαα αα
αα
ααααααααααααΌαααΆααααααΎαα‘αΎαααΆααΎαααααΌαααΎααααΈααΆαααΆααααααΆααααΉαααα½α Worm αα»αααααΌαααα α αΎαα₯α‘αΌααααααΆα’αΆα
ααααΌαααΆαααααΎααΎααααΈααααααΆαααΈαα·αααααα’αααααααΎααΆαα₯αααΆαααΆα αα·αα’αααααααΆαααααΆααααα
αΌααα½ααααα»αααΆααααααααΌααααΌααΆαααα’αΆααααααΆα 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 stack α ααα·ααααααα’αΆααααα
αΌααα·αα
αΆαααΆα
αααΆααααααα ααΈαααααααΎααα·αα
αΆααα’αΆααααααααΉααα·ααααααα
αΌαα
α’αααβαα·ααααβαα·ααΆαβααΆ αα
βαααβαααααα·ααΈβααααβααΆαα
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 ααΊααα’αααααΆααααΆαααααα tarpits α α§ααΆα ααα ααααααααααΉαααααα 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