ã€ã³ã¿ãŒããããéåžžã«æµå¯Ÿçãªç°å¢ã§ããããšã¯åšç¥ã®äºå®ã§ãã ãµãŒããŒãç«ã¡äžãããšããã«ã倧èŠæš¡ãªæ»æãšè€æ°ã®ã¹ãã£ã³ã«ãããããŸãã äŸãã°
Tarpit ã¯ãåä¿¡æ¥ç¶ã®é床ãäœäžãããããã«äœ¿çšããããã©ãã ããŒãã§ãã ãµãŒãããŒã㣠ã·ã¹ãã ããã®ããŒãã«æ¥ç¶ããŠããå Žåãæ¥ç¶ãããã«éããããšã¯ã§ããŸããã ã·ã¹ãã ãªãœãŒã¹ãç¡é§ã«ããŠæ¥ç¶ãã¿ã€ã ã¢ãŠãã«ãªããŸã§åŸ ã€ããæåã§æ¥ç¶ãçµäºããå¿ èŠããããŸãã
ã»ãšãã©ã®å Žåãã¿ãŒãããã¯ä¿è·ã®ããã«äœ¿çšãããŸãã ãã®æè¡ã¯ãæåã¯ã³ã³ãã¥ãŒã¿ ã¯ãŒã ããä¿è·ããããã«éçºãããŸããã ãããŠä»ã§ã¯ãããã䜿çšããŠããã¹ãŠã® IP ã¢ãã¬ã¹ãé£ç¶ããŠå€§èŠæš¡ã«ã¹ãã£ã³ããã¹ãããŒãç 究è
ã®ç掻ãå°ç¡ãã«ããããšãã§ããŸã (ããã¬ã®äŸ:
Chris Wellons ãšããååã®ã·ã¹ãã 管çè
ã® XNUMX 人ã¯ãæããã«ãã®æ¥èŸ±ãèŠãã®ã«ããããããŠãã - ãããŠåœŒã¯å°ããªããã°ã©ã ãæžãã
ãŠãŒãã£ãªãã£ã®ã€ã³ã¹ããŒã«:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
é©åã«å®è£
ãããã¿ãŒã«ãããã¯ãããªããããããæ»æè
ããããå€ãã®ãªãœãŒã¹ã奪ããŸãã ããããããã¯è³æºã®åé¡ã§ããããŸããã èè
åäœã¢ãŒãã§ã¯ãEndlessh ãµãŒããŒã¯ãããŒãªã¬ã³ãäžæã«æ»æããéåžžã®ããŒã 22 ã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã æšæºã®ã»ãã¥ãªãã£æšå¥šäºé ã§ã¯ãSSH ãå¥ã®ããŒãã«ç§»åããããšãåžžã«æšå¥šããŠããŸããããã«ããããã°ã®ãµã€ãºãå³åº§ã«æ¡éãã«æžå°ããŸãã
Chris Wellons æ°ã¯ã圌ã®ããã°ã©ã ã¯ä»æ§ã® XNUMX ã€ã®æ®µèœãæªçšããŠãããšè¿°ã¹ãŠããŸã SSH-
.
ããã¯ãŸãã« Endlessh ããã°ã©ã ãè¡ãããšã§ãã éä¿¡ããŸã æãŠããªã ã©ã³ãã ã«çæãããããŒã¿ã®ã¹ããªãŒã ãã㯠RFC 4253 ã«æºæ ããŠãããèªèšŒåã«éä¿¡ãããåè¡ã¯æ¬¡ã§å§ãŸããŸãã SSH-
è¡æ«æåãå«ã㊠255 æåãè¶
ããŠã¯ãªããŸããã äžè¬ã«ããã¹ãŠãæšæºã«åŸã£ãŠããŸãã
ããã©ã«ãã§ã¯ãããã°ã©ã ã¯ãã±ãããéä¿¡ãããŸã§ã« 10 ç§åŸ æ©ããŸãã ããã«ãããã¯ã©ã€ã¢ã³ããã¿ã€ã ã¢ãŠãã«ãªãããšããªããªããã¯ã©ã€ã¢ã³ãã¯æ°žä¹ ã«ãã©ãããããããšã«ãªããŸãã
æå·åãé©çšãããåã«ããŒã¿ãéä¿¡ããããããããã°ã©ã ã¯éåžžã«åçŽã§ãã æå·ãå®è£ ããå¿ èŠã¯ãªããè€æ°ã®ãããã³ã«ããµããŒãããŸãã
äœæè ã¯ããŠãŒãã£ãªãã£ãæå°éã®ãªãœãŒã¹ãæ¶è²»ãããã·ã³äžã§ãŸã£ããæ°ä»ãããã«åäœããããšãä¿èšŒããããšããŸããã ææ°ã®ãŠã€ã«ã¹å¯Ÿçãœããããã®ä»ã®ãã»ãã¥ãªã㣠ã·ã¹ãã ããšã¯ç°ãªããã³ã³ãã¥ãŒã¿ã®é床ãäœäžããããšã¯ãããŸããã 圌ã¯ãããå°ãå·§åŠãªãœãããŠã§ã¢å®è£ ã«ããããã©ãã£ãã¯ãšã¡ã¢ãªæ¶è²»ã®äž¡æ¹ãæå°éã«æããããšãã§ããŸããã æ°ããæ¥ç¶ã§å¥ã®ããã»ã¹ãèµ·åããã ãã®å Žåãæœåšçãªæ»æè ã¯è€æ°ã®æ¥ç¶ãéããŠãã·ã³äžã®ãªãœãŒã¹ã䜿ãæããããšã§ DDoS æ»æãéå§ããå¯èœæ§ããããŸãã ã«ãŒãã«ãã¹ã¬ããã管çãããªãœãŒã¹ãç¡é§ã«ãããããæ¥ç¶ããšã« XNUMX ã€ã®ã¹ã¬ããã䜿çšããããšãæé©ãªãªãã·ã§ã³ã§ã¯ãããŸããã
ã ãããããChris Wellons 㯠Endlessh ã«æã軜éãªãªãã·ã§ã³ãã€ãŸãã·ã³ã°ã«ã¹ã¬ãã ãµãŒããŒãéžæããŸããã poll(2)
ããã§ããã©ããå
ã®ã¯ã©ã€ã¢ã³ãã¯ãã«ãŒãã«å
ã®ãœã±ãã ãªããžã§ã¯ããš Endlessh ã§ã®è¿œè·¡çšã®ããã« 78 ãã€ããé€ããŠãè¿œå ã®ãªãœãŒã¹ãå®è³ªçã«æ¶è²»ããŸããã åã¯ã©ã€ã¢ã³ãã«åä¿¡ãããã¡ãšéä¿¡ãããã¡ãå²ãåœãŠãå¿
èŠããªãããã«ãEndlessh ã¯ãã€ã¬ã¯ã ã¢ã¯ã»ã¹ ãœã±ãããéãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã® TCP/IP ã¹ã¿ãã¯ã®ã»ãŒå
šäœããã€ãã¹ã㊠TCP ãã±ãããçŽæ¥å€æããŸãã åä¿¡ããŒã¿ã«ã¯èå³ããªãã®ã§ãåä¿¡ãããã¡ã¯ãŸã£ããå¿
èŠãããŸããã
èè
ã¯çªçµã®æç¹ã§ããèšã£ãŠããŸãã
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 ã¯ã¿ãŒããããæžãã®ã«æé©ã§ãã ããšãã°ããã®ããã¯ã¯ãHTTP ãµãŒããŒã«é·æéæ¥ç¶ããããšãã FirefoxãChromeããŸãã¯ãã®ä»ã®ã¯ã©ã€ã¢ã³ããããªãŒãºããŸãã
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ããšã³ãã¬ã¹ãã¿ãŒããããã¿ãŒãããããã©ãããã¢ãµã€ã·ãª
åä¿¡ SSH æ¥ç¶çšã®ãã©ãã (ã¿ãŒã«ããã)
ã€ã³ã¿ãŒããããéåžžã«æµå¯Ÿçãªç°å¢ã§ããããšã¯åšç¥ã®äºå®ã§ãã ãµãŒããŒãç«ã¡äžãããšããã«ã倧èŠæš¡ãªæ»æãšè€æ°ã®ã¹ãã£ã³ã«ãããããŸãã äŸãã°
Tarpit ã¯ãåä¿¡æ¥ç¶ã®é床ãäœäžãããããã«äœ¿çšããããã©ãã ããŒãã§ãã ãµãŒãããŒã㣠ã·ã¹ãã ããã®ããŒãã«æ¥ç¶ããŠããå Žåãæ¥ç¶ãããã«éããããšã¯ã§ããŸããã ã·ã¹ãã ãªãœãŒã¹ãç¡é§ã«ããŠæ¥ç¶ãã¿ã€ã ã¢ãŠãã«ãªããŸã§åŸ ã€ããæåã§æ¥ç¶ãçµäºããå¿ èŠããããŸãã
ã»ãšãã©ã®å Žåãã¿ãŒãããã¯ä¿è·ã®ããã«äœ¿çšãããŸãã ãã®æè¡ã¯ãæåã¯ã³ã³ãã¥ãŒã¿ ã¯ãŒã ããä¿è·ããããã«éçºãããŸããã ãããŠä»ã§ã¯ãããã䜿çšããŠããã¹ãŠã® IP ã¢ãã¬ã¹ãé£ç¶ããŠå€§èŠæš¡ã«ã¹ãã£ã³ããã¹ãããŒãç 究è
ã®ç掻ãå°ç¡ãã«ããããšãã§ããŸã (ããã¬ã®äŸ:
Chris Wellons ãšããååã®ã·ã¹ãã 管çè
ã® XNUMX 人ã¯ãæããã«ãã®æ¥èŸ±ãèŠãã®ã«ããããããŠãã - ãããŠåœŒã¯å°ããªããã°ã©ã ãæžãã
ãŠãŒãã£ãªãã£ã®ã€ã³ã¹ããŒã«:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
é©åã«å®è£
ãããã¿ãŒã«ãããã¯ãããªããããããæ»æè
ããããå€ãã®ãªãœãŒã¹ã奪ããŸãã ããããããã¯è³æºã®åé¡ã§ããããŸããã èè
åäœã¢ãŒãã§ã¯ãEndlessh ãµãŒããŒã¯ãããŒãªã¬ã³ãäžæã«æ»æããéåžžã®ããŒã 22 ã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã æšæºã®ã»ãã¥ãªãã£æšå¥šäºé ã§ã¯ãSSH ãå¥ã®ããŒãã«ç§»åããããšãåžžã«æšå¥šããŠããŸããããã«ããããã°ã®ãµã€ãºãå³åº§ã«æ¡éãã«æžå°ããŸãã
Chris Wellons æ°ã¯ã圌ã®ããã°ã©ã ã¯ä»æ§ã® XNUMX ã€ã®æ®µèœãæªçšããŠãããšè¿°ã¹ãŠããŸã SSH-
.
ããã¯ãŸãã« Endlessh ããã°ã©ã ãè¡ãããšã§ãã éä¿¡ããŸã æãŠããªã ã©ã³ãã ã«çæãããããŒã¿ã®ã¹ããªãŒã ãã㯠RFC 4253 ã«æºæ ããŠãããèªèšŒåã«éä¿¡ãããåè¡ã¯æ¬¡ã§å§ãŸããŸãã SSH-
è¡æ«æåãå«ã㊠255 æåãè¶
ããŠã¯ãªããŸããã äžè¬ã«ããã¹ãŠãæšæºã«åŸã£ãŠããŸãã
ããã©ã«ãã§ã¯ãããã°ã©ã ã¯ãã±ãããéä¿¡ãããŸã§ã« 10 ç§åŸ æ©ããŸãã ããã«ãããã¯ã©ã€ã¢ã³ããã¿ã€ã ã¢ãŠãã«ãªãããšããªããªããã¯ã©ã€ã¢ã³ãã¯æ°žä¹ ã«ãã©ãããããããšã«ãªããŸãã
æå·åãé©çšãããåã«ããŒã¿ãéä¿¡ããããããããã°ã©ã ã¯éåžžã«åçŽã§ãã æå·ãå®è£ ããå¿ èŠã¯ãªããè€æ°ã®ãããã³ã«ããµããŒãããŸãã
äœæè ã¯ããŠãŒãã£ãªãã£ãæå°éã®ãªãœãŒã¹ãæ¶è²»ãããã·ã³äžã§ãŸã£ããæ°ä»ãããã«åäœããããšãä¿èšŒããããšããŸããã ææ°ã®ãŠã€ã«ã¹å¯Ÿçãœããããã®ä»ã®ãã»ãã¥ãªã㣠ã·ã¹ãã ããšã¯ç°ãªããã³ã³ãã¥ãŒã¿ã®é床ãäœäžããããšã¯ãããŸããã 圌ã¯ãããå°ãå·§åŠãªãœãããŠã§ã¢å®è£ ã«ããããã©ãã£ãã¯ãšã¡ã¢ãªæ¶è²»ã®äž¡æ¹ãæå°éã«æããããšãã§ããŸããã æ°ããæ¥ç¶ã§å¥ã®ããã»ã¹ãèµ·åããã ãã®å Žåãæœåšçãªæ»æè ã¯è€æ°ã®æ¥ç¶ãéããŠãã·ã³äžã®ãªãœãŒã¹ã䜿ãæããããšã§ DDoS æ»æãéå§ããå¯èœæ§ããããŸãã ã«ãŒãã«ãã¹ã¬ããã管çãããªãœãŒã¹ãç¡é§ã«ãããããæ¥ç¶ããšã« XNUMX ã€ã®ã¹ã¬ããã䜿çšããããšãæé©ãªãªãã·ã§ã³ã§ã¯ãããŸããã
ã ãããããChris Wellons 㯠Endlessh ã«æã軜éãªãªãã·ã§ã³ãã€ãŸãã·ã³ã°ã«ã¹ã¬ãã ãµãŒããŒãéžæããŸããã poll(2)
ããã§ããã©ããå
ã®ã¯ã©ã€ã¢ã³ãã¯ãã«ãŒãã«å
ã®ãœã±ãã ãªããžã§ã¯ããš Endlessh ã§ã®è¿œè·¡çšã®ããã« 78 ãã€ããé€ããŠãè¿œå ã®ãªãœãŒã¹ãå®è³ªçã«æ¶è²»ããŸããã åã¯ã©ã€ã¢ã³ãã«åä¿¡ãããã¡ãšéä¿¡ãããã¡ãå²ãåœãŠãå¿
èŠããªãããã«ãEndlessh ã¯ãã€ã¬ã¯ã ã¢ã¯ã»ã¹ ãœã±ãããéãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã® TCP/IP ã¹ã¿ãã¯ã®ã»ãŒå
šäœããã€ãã¹ã㊠TCP ãã±ãããçŽæ¥å€æããŸãã åä¿¡ããŒã¿ã«ã¯èå³ããªãã®ã§ãåä¿¡ãããã¡ã¯ãŸã£ããå¿
èŠãããŸããã
èè
ã¯çªçµã®æç¹ã§ããèšã£ãŠããŸãã
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 ã¯ã¿ãŒããããæžãã®ã«æé©ã§ãã ããšãã°ããã®ããã¯ã¯ãHTTP ãµãŒããŒã«é·æéæ¥ç¶ããããšãã FirefoxãChromeããŸãã¯ãã®ä»ã®ã¯ã©ã€ã¢ã³ããããªãŒãºããŸãã
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 ã¯ããªã³ã©ã€ã³ã®ãããã£åã眰ããããã®åªããããŒã«ã§ãã 確ãã«ãéã«ãç¹å®ã®ãµãŒããŒã®ç°åžžãªåäœã«æ³šæãåããŠããŸããªã¹ã¯ã¯ãããŸãã 誰ã
åºæïŒ habr.com