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