Non è un segreto che Internet sia un ambiente molto ostile. Non appena si solleva un server, questo viene immediatamente sottoposto ad attacchi massicci e scansioni multiple. Per esempio
Tarpit è una porta trap utilizzata per rallentare le connessioni in entrata. Se un sistema di terze parti si connette a questa porta, non sarai in grado di chiudere rapidamente la connessione. Dovrà sprecare le risorse del sistema e attendere fino al timeout della connessione o terminarla manualmente.
Molto spesso, i teloni vengono utilizzati per la protezione. La tecnica è stata inizialmente sviluppata per proteggere dai worm informatici. E ora può essere utilizzato per rovinare la vita agli spammer e ai ricercatori impegnati nella scansione ad ampio raggio di tutti gli indirizzi IP di seguito (esempi su Habré:
Apparentemente uno degli amministratori di sistema di nome Chris Wellons si è stancato di guardare questa disgrazia e ha scritto un piccolo programma
Installazione dell'utilità:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Un tarpit correttamente implementato richiederà più risorse all'attaccante che a te. Ma non è nemmeno una questione di risorse. Autore
In modalità operativa, il server Endlessh deve essere installato sulla solita porta 22, dove gli hooligan bussano in massa. Le raccomandazioni di sicurezza standard consigliano sempre di spostare SSH su una porta diversa, il che riduce immediatamente la dimensione dei log di un ordine di grandezza.
Chris Wellons afferma che il suo programma sfrutta un paragrafo delle specifiche SSH-
.
Questo è esattamente ciò che fa il programma Endlessh: it invia infinito flusso di dati generati casualmente, che sono conformi alla RFC 4253, ovvero inviati prima dell'autenticazione e ogni riga inizia con SSH-
e non supera i 255 caratteri, compreso il carattere di fine riga. In generale, tutto è secondo lo standard.
Per impostazione predefinita, il programma attende 10 secondi tra l'invio dei pacchetti. Ciò impedisce il timeout del client, quindi il client rimarrà intrappolato per sempre.
Poiché i dati vengono inviati prima dell'applicazione della crittografia, il programma è estremamente semplice. Non è necessario implementare alcuna cifratura e supporta più protocolli.
L'autore ha cercato di garantire che l'utilità consumi un minimo di risorse e funzioni completamente inosservata sulla macchina. A differenza dei moderni antivirus e di altri “sistemi di sicurezza”, non dovrebbe rallentare il tuo computer. È riuscito a ridurre al minimo sia il traffico che il consumo di memoria grazie a un'implementazione software leggermente più astuta. Se lanciasse semplicemente un processo separato su una nuova connessione, i potenziali aggressori potrebbero lanciare un attacco DDoS aprendo più connessioni per esaurire le risorse sulla macchina. Anche un thread per connessione non è l'opzione migliore, perché il kernel sprecherà risorse nella gestione dei thread.
Ecco perché Chris Wellons ha scelto l'opzione più leggera per Endlessh: un server a thread singolo poll(2)
, dove i client nella trap non consumano praticamente alcuna risorsa aggiuntiva, senza contare l'oggetto socket nel kernel e altri 78 byte per il tracciamento in Endlessh. Per evitare di dover allocare buffer di ricezione e invio per ciascun client, Endlessh apre un socket di accesso diretto e traduce direttamente i pacchetti TCP, bypassando quasi l'intero stack TCP/IP del sistema operativo. Il buffer in entrata non è affatto necessario perché non siamo interessati ai dati in entrata.
L'autore lo dice al momento del suo programma
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 è ideale per scrivere tarpit. Ad esempio, questo hook bloccherà Firefox, Chrome o qualsiasi altro client che sta tentando di connettersi al tuo server HTTP per molte 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 è un ottimo strumento per punire i bulli online. È vero, al contrario, c'è il rischio di attirare la loro attenzione sul comportamento insolito di un determinato server. Qualcuno
Hub:
Python, Sicurezza delle informazioni, Software, Amministrazione di sistema
tag:
SSH, Endlessh, tarpit, tarpit, trappola, asycio
Trap (tarpit) per le connessioni SSH in entrata
Non è un segreto che Internet sia un ambiente molto ostile. Non appena si solleva un server, questo viene immediatamente sottoposto ad attacchi massicci e scansioni multiple. Per esempio
Tarpit è una porta trap utilizzata per rallentare le connessioni in entrata. Se un sistema di terze parti si connette a questa porta, non sarai in grado di chiudere rapidamente la connessione. Dovrà sprecare le risorse del sistema e attendere fino al timeout della connessione o terminarla manualmente.
Molto spesso, i teloni vengono utilizzati per la protezione. La tecnica è stata inizialmente sviluppata per proteggere dai worm informatici. E ora può essere utilizzato per rovinare la vita agli spammer e ai ricercatori impegnati nella scansione ad ampio raggio di tutti gli indirizzi IP di seguito (esempi su Habré:
Apparentemente uno degli amministratori di sistema di nome Chris Wellons si è stancato di guardare questa disgrazia e ha scritto un piccolo programma
Installazione dell'utilità:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Un tarpit correttamente implementato richiederà più risorse all'attaccante che a te. Ma non è nemmeno una questione di risorse. Autore
In modalità operativa, il server Endlessh deve essere installato sulla solita porta 22, dove gli hooligan bussano in massa. Le raccomandazioni di sicurezza standard consigliano sempre di spostare SSH su una porta diversa, il che riduce immediatamente la dimensione dei log di un ordine di grandezza.
Chris Wellons afferma che il suo programma sfrutta un paragrafo delle specifiche SSH-
.
Questo è esattamente ciò che fa il programma Endlessh: it invia infinito flusso di dati generati casualmente, che sono conformi alla RFC 4253, ovvero inviati prima dell'autenticazione e ogni riga inizia con SSH-
e non supera i 255 caratteri, compreso il carattere di fine riga. In generale, tutto è secondo lo standard.
Per impostazione predefinita, il programma attende 10 secondi tra l'invio dei pacchetti. Ciò impedisce il timeout del client, quindi il client rimarrà intrappolato per sempre.
Poiché i dati vengono inviati prima dell'applicazione della crittografia, il programma è estremamente semplice. Non è necessario implementare alcuna cifratura e supporta più protocolli.
L'autore ha cercato di garantire che l'utilità consumi un minimo di risorse e funzioni completamente inosservata sulla macchina. A differenza dei moderni antivirus e di altri “sistemi di sicurezza”, non dovrebbe rallentare il tuo computer. È riuscito a ridurre al minimo sia il traffico che il consumo di memoria grazie a un'implementazione software leggermente più astuta. Se lanciasse semplicemente un processo separato su una nuova connessione, i potenziali aggressori potrebbero lanciare un attacco DDoS aprendo più connessioni per esaurire le risorse sulla macchina. Anche un thread per connessione non è l'opzione migliore, perché il kernel sprecherà risorse nella gestione dei thread.
Ecco perché Chris Wellons ha scelto l'opzione più leggera per Endlessh: un server a thread singolo poll(2)
, dove i client nella trap non consumano praticamente alcuna risorsa aggiuntiva, senza contare l'oggetto socket nel kernel e altri 78 byte per il tracciamento in Endlessh. Per evitare di dover allocare buffer di ricezione e invio per ciascun client, Endlessh apre un socket di accesso diretto e traduce direttamente i pacchetti TCP, bypassando quasi l'intero stack TCP/IP del sistema operativo. Il buffer in entrata non è affatto necessario perché non siamo interessati ai dati in entrata.
L'autore lo dice al momento del suo programma
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 è ideale per scrivere tarpit. Ad esempio, questo hook bloccherà Firefox, Chrome o qualsiasi altro client che sta tentando di connettersi al tuo server HTTP per molte 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 è un ottimo strumento per punire i bulli online. È vero, al contrario, c'è il rischio di attirare la loro attenzione sul comportamento insolito di un determinato server. Qualcuno
Fonte: habr.com