Ùn hè micca sicretu chì Internet hè un ambiente assai ostili. Appena suscitatu un servitore, hè subitu sottumessu à attacchi massivi è scans multiplici. Per esempiu
Tarpit hè un portu di trappula utilizatu per rallentà e cunnessione entranti. Se un sistema di terzu si cunnetta à stu portu, ùn puderà micca chjude rapidamente a cunnessione. Avarà da perdi i so risorse di u sistema è aspittà finu à chì i timeouts di cunnessione, o finiscinu manualmente.
A maiò spessu, i tarpits sò usati per prutezzione. A tecnica hè stata sviluppata prima per pruteggiri contra i vermi di l'informatica. È avà pò esse usatu per arruvinà a vita di i spammers è i circadori chì sò impegnati in una scansione larga di tutti l'indirizzi IP in una fila (esempii nantu à Habré:
Unu di l'amministratori di u sistema chjamatu Chris Wellons apparentemente s'hè stancu di fighjà sta disgrazia - è hà scrittu un picculu prugramma.
Installazione di l'utilità:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Un tarpit implementatu bè piglià più risorse da l'attaccante chè da voi. Ma ùn hè ancu una questione di risorse. Autore
In u modu operativu, u servitore Endlessh deve esse stallatu nantu à u portu di solitu 22, induve i hooligans batte in massa. I cunsiglii di sicurezza standard cunsiglianu sempre di trasfurmà SSH à un portu diversu, chì riduce immediatamente a dimensione di i logs per un ordine di grandezza.
Chris Wellons dice chì u so prugramma sfrutta un paràgrafu di a specificazione SSH-
.
Questu hè esattamente ciò chì face u prugramma Endlessh: it manda infinitu flussu di dati generati aleatoriamente, chì cumplenu cù RFC 4253, vale à dì, mandà prima di l'autentificazione, è ogni linea principia cù SSH-
è ùn supera micca 255 caratteri, cumpresu u caratteru di fine di linea. In generale, tuttu hè secondu u standard.
Per automaticamente, u prugramma aspetta 10 seconde trà l'inviu di pacchetti. Questu impedisce à u cliente da esse timed out, cusì u cliente serà intrappulatu per sempre.
Siccomu i dati sò mandati prima chì a criptografia hè applicata, u prugramma hè assai simplice. Ùn hè micca bisognu di implementà alcunu cifru è sustene parechji protokolli.
L'autore hà pruvatu à assicurà chì l'utilità consuma un minimu di risorse è travaglia completamente inespertu nantu à a macchina. A cuntrariu di l'antivirus muderni è altri "sistemi di sicurità", ùn deve micca rallentà u vostru urdinatore. Riiscì à minimizzà u trafficu è u cunsumu di memoria per via di una implementazione di software un pocu più astuta. Se simpricimenti hà lanciatu un prucessu separatu nantu à una nova cunnessione, allora i putenziali attaccanti puderanu lancià un attaccu DDoS aprendu parechje cunnessione per esaurisce risorse in a macchina. Un filu per cunnessione ùn hè ancu micca a megliu opzione, perchè u kernel perdirà risorse per gestisce i filamenti.
Hè per quessa Chris Wellons hà sceltu l'opzione più ligera per Endlessh: un servitore unicu filatu poll(2)
, induve i clienti in a trappula cunsumanu quasi nisuna risorsa extra, senza cuntà l'ughjettu di socket in u kernel è altri 78 bytes per u seguimentu in Endlessh. Per evità di avè da attribuisce riceve è mandà buffer per ogni cliente, Endlessh apre un socket d'accessu direttu è traduce i pacchetti TCP direttamente, sguassendu quasi tuttu u sistema operatore TCP / IP stack. U buffer entrante ùn hè micca necessariu in tuttu, perchè ùn avemu micca interessatu in i dati entranti.
L'autore dice chì à u tempu di u so prugramma
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 hè ideale per scrive tarpits. Per esempiu, stu ganciu congelarà Firefox, Chrome, o qualsiasi altru cliente chì prova di cunnette à u vostru servitore HTTP per parechje ore:
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 hè un grande strumentu per punisce i bulli in linea. True, ci hè un certu risicu, à u cuntrariu, di attirà a so attenzione à u cumpurtamentu inusual di un servitore particulari. Qualchissia
Hubs:
Python, Sicurezza di l'infurmazione, Software, Amministrazione di u sistema
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) per e cunnessione SSH entranti
Ùn hè micca sicretu chì Internet hè un ambiente assai ostili. Appena suscitatu un servitore, hè subitu sottumessu à attacchi massivi è scans multiplici. Per esempiu
Tarpit hè un portu di trappula utilizatu per rallentà e cunnessione entranti. Se un sistema di terzu si cunnetta à stu portu, ùn puderà micca chjude rapidamente a cunnessione. Avarà da perdi i so risorse di u sistema è aspittà finu à chì i timeouts di cunnessione, o finiscinu manualmente.
A maiò spessu, i tarpits sò usati per prutezzione. A tecnica hè stata sviluppata prima per pruteggiri contra i vermi di l'informatica. È avà pò esse usatu per arruvinà a vita di i spammers è i circadori chì sò impegnati in una scansione larga di tutti l'indirizzi IP in una fila (esempii nantu à Habré:
Unu di l'amministratori di u sistema chjamatu Chris Wellons apparentemente s'hè stancu di fighjà sta disgrazia - è hà scrittu un picculu prugramma.
Installazione di l'utilità:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Un tarpit implementatu bè piglià più risorse da l'attaccante chè da voi. Ma ùn hè ancu una questione di risorse. Autore
In u modu operativu, u servitore Endlessh deve esse stallatu nantu à u portu di solitu 22, induve i hooligans batte in massa. I cunsiglii di sicurezza standard cunsiglianu sempre di trasfurmà SSH à un portu diversu, chì riduce immediatamente a dimensione di i logs per un ordine di grandezza.
Chris Wellons dice chì u so prugramma sfrutta un paràgrafu di a specificazione SSH-
.
Questu hè esattamente ciò chì face u prugramma Endlessh: it manda infinitu flussu di dati generati aleatoriamente, chì cumplenu cù RFC 4253, vale à dì, mandà prima di l'autentificazione, è ogni linea principia cù SSH-
è ùn supera micca 255 caratteri, cumpresu u caratteru di fine di linea. In generale, tuttu hè secondu u standard.
Per automaticamente, u prugramma aspetta 10 seconde trà l'inviu di pacchetti. Questu impedisce à u cliente da esse timed out, cusì u cliente serà intrappulatu per sempre.
Siccomu i dati sò mandati prima chì a criptografia hè applicata, u prugramma hè assai simplice. Ùn hè micca bisognu di implementà alcunu cifru è sustene parechji protokolli.
L'autore hà pruvatu à assicurà chì l'utilità consuma un minimu di risorse è travaglia completamente inespertu nantu à a macchina. A cuntrariu di l'antivirus muderni è altri "sistemi di sicurità", ùn deve micca rallentà u vostru urdinatore. Riiscì à minimizzà u trafficu è u cunsumu di memoria per via di una implementazione di software un pocu più astuta. Se simpricimenti hà lanciatu un prucessu separatu nantu à una nova cunnessione, allora i putenziali attaccanti puderanu lancià un attaccu DDoS aprendu parechje cunnessione per esaurisce risorse in a macchina. Un filu per cunnessione ùn hè ancu micca a megliu opzione, perchè u kernel perdirà risorse per gestisce i filamenti.
Hè per quessa Chris Wellons hà sceltu l'opzione più ligera per Endlessh: un servitore unicu filatu poll(2)
, induve i clienti in a trappula cunsumanu quasi nisuna risorsa extra, senza cuntà l'ughjettu di socket in u kernel è altri 78 bytes per u seguimentu in Endlessh. Per evità di avè da attribuisce riceve è mandà buffer per ogni cliente, Endlessh apre un socket d'accessu direttu è traduce i pacchetti TCP direttamente, sguassendu quasi tuttu u sistema operatore TCP / IP stack. U buffer entrante ùn hè micca necessariu in tuttu, perchè ùn avemu micca interessatu in i dati entranti.
L'autore dice chì à u tempu di u so prugramma
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 hè ideale per scrive tarpits. Per esempiu, stu ganciu congelarà Firefox, Chrome, o qualsiasi altru cliente chì prova di cunnette à u vostru servitore HTTP per parechje ore:
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 hè un grande strumentu per punisce i bulli in linea. True, ci hè un certu risicu, à u cuntrariu, di attirà a so attenzione à u cumpurtamentu inusual di un servitore particulari. Qualchissia
Source: www.habr.com