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 honeypot da i guardiani di sicurità pudete stimà a scala di stu trafficu di basura. In fattu, nantu à u servitore mediu, u 99% di u trafficu pò esse maliziusi.

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é: Austria, Ukraine).

Unu di l'amministratori di u sistema chjamatu Chris Wellons apparentemente s'hè stancu di fighjà sta disgrazia - è hà scrittu un picculu prugramma. senza fine, un tarpit per SSH chì rallenta e cunnessione entranti. U prugramma apre un portu (u portu predeterminatu per a prova hè 2222) è finta di esse un servitore SSH, ma in realtà stabilisce una cunnessione infinita cù u cliente entrante finu à ch'ellu rinuncia. Questu pò cuntinuà per parechji ghjorni o più finu à chì u cliente cascà.

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 iddu scrissi:chì u prugramma hè addictive. Avà hà 27 clienti intrappulati, alcuni di elli cunnessi per settimane. À u piccu di l'attività, i clienti 1378 sò stati intrappulati per 20 ore!

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 RFC 4253 à u protocolu SSH. Immediatamente dopu chì una cunnessione TCP hè stabilita, ma prima chì a criptografia hè appiicata, i dui partiti anu da mandà una stringa d'identificazione. È ci hè ancu una nota: "U servitore pò mandà altre file di dati prima di mandà a fila di versione". E senza limite nant'à u vulume di sta dati, vi basta à principiatu ogni linea cù 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 ùn sapia micca circa l'esistenza di l'asycio di Python è altri tarpits. S'ellu sapia di asycio, puderia implementà a so utilità in solu 18 linee in Python:

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 puderia pensà à vendetta è un attaccu DDoS miratu à u vostru IP. In ogni casu, finu à quì ùn ci sò micca stati tali casi, è i tarpits funzionanu assai.

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 honeypot da i guardiani di sicurità pudete stimà a scala di stu trafficu di basura. In fattu, nantu à u servitore mediu, u 99% di u trafficu pò esse maliziusi.

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é: Austria, Ukraine).

Unu di l'amministratori di u sistema chjamatu Chris Wellons apparentemente s'hè stancu di fighjà sta disgrazia - è hà scrittu un picculu prugramma. senza fine, un tarpit per SSH chì rallenta e cunnessione entranti. U prugramma apre un portu (u portu predeterminatu per a prova hè 2222) è finta di esse un servitore SSH, ma in realtà stabilisce una cunnessione infinita cù u cliente entrante finu à ch'ellu rinuncia. Questu pò cuntinuà per parechji ghjorni o più finu à chì u cliente cascà.

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 iddu scrissi:chì u prugramma hè addictive. Avà hà 27 clienti intrappulati, alcuni di elli cunnessi per settimane. À u piccu di l'attività, i clienti 1378 sò stati intrappulati per 20 ore!

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 RFC 4253 à u protocolu SSH. Immediatamente dopu chì una cunnessione TCP hè stabilita, ma prima chì a criptografia hè appiicata, i dui partiti anu da mandà una stringa d'identificazione. È ci hè ancu una nota: "U servitore pò mandà altre file di dati prima di mandà a fila di versione". E senza limite nant'à u vulume di sta dati, vi basta à principiatu ogni linea cù 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 ùn sapia micca circa l'esistenza di l'asycio di Python è altri tarpits. S'ellu sapia di asycio, puderia implementà a so utilità in solu 18 linee in Python:

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 puderia pensà à vendetta è un attaccu DDoS miratu à u vostru IP. In ogni casu, finu à quì ùn ci sò micca stati tali casi, è i tarpits funzionanu assai.

Trap (tarpit) per e cunnessione SSH entranti

Source: www.habr.com

Add a comment