No és cap secret que Internet és un entorn molt hostil. Tan bon punt aixequeu un servidor, és sotmès instantàniament a atacs massius i múltiples exploracions. Per exemple
Tarpit és un port trampa que s'utilitza per frenar les connexions entrants. Si un sistema de tercers es connecta a aquest port, no podreu tancar la connexió ràpidament. Haurà de malgastar els recursos del seu sistema i esperar fins que s'acabi el temps d'espera de la connexió o cancel·lar-la manualment.
Molt sovint, les lones s'utilitzen per protegir-se. La tècnica es va desenvolupar per primera vegada per protegir-se dels cucs informàtics. I ara es pot utilitzar per arruïnar les vides dels emissors de correu brossa i dels investigadors que es dediquen a una exploració extensa de totes les adreces IP seguides (exemples a Habré:
Un dels administradors del sistema anomenat Chris Wellons sembla que es va cansar de veure aquesta desgràcia i va escriure un petit programa
Instal·lació de la utilitat:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Una tarpit correctament implementada necessitarà més recursos de l'atacant que de tu. Però ni tan sols és qüestió de recursos. Autor
En mode operatiu, el servidor Endlessh s'ha d'instal·lar al port habitual 22, on els hooligans trucen en massa. Les recomanacions de seguretat estàndard sempre aconsellen moure SSH a un port diferent, la qual cosa redueix immediatament la mida dels registres en un ordre de magnitud.
Chris Wellons diu que el seu programa explota un paràgraf de l'especificació SSH-
.
Això és exactament el que fa el programa Endlessh: això envia interminable flux de dades generades aleatòriament, que compleixen amb RFC 4253, és a dir, enviar abans de l'autenticació, i cada línia comença per SSH-
i no supera els 255 caràcters, inclòs el caràcter de final de línia. En general, tot està d'acord amb la norma.
Per defecte, el programa espera 10 segons entre enviament de paquets. Això evita que el client s'esgoti el temps d'espera, de manera que el client quedarà atrapat per sempre.
Com que les dades s'envien abans d'aplicar la criptografia, el programa és extremadament senzill. No necessita implementar cap xifrat i admet diversos protocols.
L'autor va intentar assegurar-se que la utilitat consumeix un mínim de recursos i funciona completament desapercebuda a la màquina. A diferència dels antivirus moderns i altres "sistemes de seguretat", no hauria d'alentir el vostre ordinador. Va aconseguir minimitzar tant el trànsit com el consum de memòria gràcies a una implementació de programari una mica més astuta. Si simplement va llançar un procés independent en una nova connexió, els atacants potencials podrien llançar un atac DDoS obrint múltiples connexions per esgotar els recursos de la màquina. Un fil per connexió tampoc és la millor opció, perquè el nucli malgastarà recursos gestionant els fils.
És per això que Chris Wellons va triar l'opció més lleugera per a Endlessh: un servidor d'un sol fil poll(2)
, on els clients de la trampa pràcticament no consumeixen recursos addicionals, sense comptar l'objecte socket al nucli i altres 78 bytes per al seguiment a Endlessh. Per evitar haver d'assignar buffers de recepció i d'enviament per a cada client, Endlessh obre un sòcol d'accés directe i tradueix els paquets TCP directament, obviant gairebé tota la pila TCP/IP del sistema operatiu. El buffer d'entrada no és necessari en absolut, perquè no estem interessats en les dades entrants.
Ho diu l'autor en el moment del seu programa
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 és ideal per escriure tarpits. Per exemple, aquest ganxo congelarà Firefox, Chrome o qualsevol altre client que estigui intentant connectar-se al vostre servidor HTTP durant moltes hores:
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 és una gran eina per castigar els assetjadors en línia. És cert que hi ha algun risc, per contra, de cridar-los l'atenció sobre el comportament inusual d'un servidor determinat. Algú
Hubs:
Python, seguretat de la informació, programari, administració de sistemes
Etiquetes:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trampa (tarpit) per a connexions SSH entrants
No és cap secret que Internet és un entorn molt hostil. Tan bon punt aixequeu un servidor, és sotmès instantàniament a atacs massius i múltiples exploracions. Per exemple
Tarpit és un port trampa que s'utilitza per frenar les connexions entrants. Si un sistema de tercers es connecta a aquest port, no podreu tancar la connexió ràpidament. Haurà de malgastar els recursos del seu sistema i esperar fins que s'acabi el temps d'espera de la connexió o cancel·lar-la manualment.
Molt sovint, les lones s'utilitzen per protegir-se. La tècnica es va desenvolupar per primera vegada per protegir-se dels cucs informàtics. I ara es pot utilitzar per arruïnar les vides dels emissors de correu brossa i dels investigadors que es dediquen a una exploració extensa de totes les adreces IP seguides (exemples a Habré:
Un dels administradors del sistema anomenat Chris Wellons sembla que es va cansar de veure aquesta desgràcia i va escriure un petit programa
Instal·lació de la utilitat:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Una tarpit correctament implementada necessitarà més recursos de l'atacant que de tu. Però ni tan sols és qüestió de recursos. Autor
En mode operatiu, el servidor Endlessh s'ha d'instal·lar al port habitual 22, on els hooligans trucen en massa. Les recomanacions de seguretat estàndard sempre aconsellen moure SSH a un port diferent, la qual cosa redueix immediatament la mida dels registres en un ordre de magnitud.
Chris Wellons diu que el seu programa explota un paràgraf de l'especificació SSH-
.
Això és exactament el que fa el programa Endlessh: això envia interminable flux de dades generades aleatòriament, que compleixen amb RFC 4253, és a dir, enviar abans de l'autenticació, i cada línia comença per SSH-
i no supera els 255 caràcters, inclòs el caràcter de final de línia. En general, tot està d'acord amb la norma.
Per defecte, el programa espera 10 segons entre enviament de paquets. Això evita que el client s'esgoti el temps d'espera, de manera que el client quedarà atrapat per sempre.
Com que les dades s'envien abans d'aplicar la criptografia, el programa és extremadament senzill. No necessita implementar cap xifrat i admet diversos protocols.
L'autor va intentar assegurar-se que la utilitat consumeix un mínim de recursos i funciona completament desapercebuda a la màquina. A diferència dels antivirus moderns i altres "sistemes de seguretat", no hauria d'alentir el vostre ordinador. Va aconseguir minimitzar tant el trànsit com el consum de memòria gràcies a una implementació de programari una mica més astuta. Si simplement va llançar un procés independent en una nova connexió, els atacants potencials podrien llançar un atac DDoS obrint múltiples connexions per esgotar els recursos de la màquina. Un fil per connexió tampoc és la millor opció, perquè el nucli malgastarà recursos gestionant els fils.
És per això que Chris Wellons va triar l'opció més lleugera per a Endlessh: un servidor d'un sol fil poll(2)
, on els clients de la trampa pràcticament no consumeixen recursos addicionals, sense comptar l'objecte socket al nucli i altres 78 bytes per al seguiment a Endlessh. Per evitar haver d'assignar buffers de recepció i d'enviament per a cada client, Endlessh obre un sòcol d'accés directe i tradueix els paquets TCP directament, obviant gairebé tota la pila TCP/IP del sistema operatiu. El buffer d'entrada no és necessari en absolut, perquè no estem interessats en les dades entrants.
Ho diu l'autor en el moment del seu programa
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 és ideal per escriure tarpits. Per exemple, aquest ganxo congelarà Firefox, Chrome o qualsevol altre client que estigui intentant connectar-se al vostre servidor HTTP durant moltes hores:
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 és una gran eina per castigar els assetjadors en línia. És cert que hi ha algun risc, per contra, de cridar-los l'atenció sobre el comportament inusual d'un servidor determinat. Algú
Font: www.habr.com