No es ningún secreto que Internet es un entorno muy hostil. Tan pronto como inicia un servidor, éste se ve instantáneamente sujeto a ataques masivos y múltiples análisis. Por ejemplo
Tarpit es un puerto trampa que se utiliza para ralentizar las conexiones entrantes. Si un sistema de terceros se conecta a este puerto, no podrá cerrar la conexión rápidamente. Tendrá que desperdiciar los recursos de su sistema y esperar hasta que se agote el tiempo de conexión o finalizarla manualmente.
La mayoría de las veces, las lonas se utilizan como protección. La técnica se desarrolló por primera vez para proteger contra gusanos informáticos. Y ahora se puede utilizar para arruinar la vida de los spammers e investigadores que realizan un amplio escaneo de todas las direcciones IP seguidas (ejemplos de Habré:
Uno de los administradores del sistema, llamado Chris Wellons, aparentemente se cansó de ver esta desgracia y escribió un pequeño programa.
Instalación de la utilidad:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Un tarpit correctamente implementado requerirá más recursos del atacante que de usted. Pero ni siquiera es una cuestión de recursos. Autor
En modo operativo, el servidor Endlessh debe instalarse en el puerto 22 habitual, donde los hooligans llaman en masa. Las recomendaciones de seguridad estándar siempre recomiendan mover SSH a un puerto diferente, lo que reduce inmediatamente el tamaño de los registros en un orden de magnitud.
Chris Wellons dice que su programa explota un párrafo de la especificación SSH-
.
Esto es exactamente lo que hace el programa Endlessh: envía sin fin flujo de datos generados aleatoriamente, que cumplen con RFC 4253, es decir, envían antes de la autenticación, y cada línea comienza con SSH-
y no excede los 255 caracteres, incluido el carácter de final de línea. En general todo según el estándar.
De forma predeterminada, el programa espera 10 segundos entre envíos de paquetes. Esto evita que se agote el tiempo de espera del cliente, por lo que quedará atrapado para siempre.
Dado que los datos se envían antes de que se aplique la criptografía, el programa es extremadamente simple. No necesita implementar ningún cifrado y admite múltiples protocolos.
El autor intentó asegurarse de que la utilidad consumiera un mínimo de recursos y funcionara completamente desapercibida en la máquina. A diferencia de los antivirus modernos y otros "sistemas de seguridad", no debería ralentizar su computadora. Logró minimizar tanto el tráfico como el consumo de memoria gracias a una implementación de software un poco más astuta. Si simplemente iniciara un proceso separado en una nueva conexión, los atacantes potenciales podrían lanzar un ataque DDoS abriendo múltiples conexiones para agotar los recursos de la máquina. Un subproceso por conexión tampoco es la mejor opción, porque el kernel desperdiciará recursos administrando subprocesos.
Es por eso que Chris Wellons eligió la opción más liviana para Endlessh: un servidor de un solo subproceso. poll(2)
, donde los clientes en la trampa prácticamente no consumen recursos adicionales, sin contar el objeto socket en el kernel y otros 78 bytes para el seguimiento en Endlessh. Para evitar tener que asignar buffers de recepción y envío para cada cliente, Endlessh abre un socket de acceso directo y traduce paquetes TCP directamente, evitando casi toda la pila TCP/IP del sistema operativo. El búfer entrante no es necesario en absoluto porque no estamos interesados en los datos entrantes.
El autor dice que en el momento de su 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 es ideal para escribir tarpits. Por ejemplo, este gancho congelará Firefox, Chrome o cualquier otro cliente que intente conectarse a su servidor HTTP durante muchas horas:
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 es una gran herramienta para castigar a los acosadores en línea. Es cierto que, por el contrario, existe cierto riesgo de llamar su atención sobre el comportamiento inusual de un servidor en particular. Alguien
Concentradores:
Python, Seguridad de la información, Software, Administración de sistemas
Etiquetas:
SSH, Endlessh, tarpit, tarpit, trampa, asycio
Trampa (tarpit) para conexiones SSH entrantes
No es ningún secreto que Internet es un entorno muy hostil. Tan pronto como inicia un servidor, éste se ve instantáneamente sujeto a ataques masivos y múltiples análisis. Por ejemplo
Tarpit es un puerto trampa que se utiliza para ralentizar las conexiones entrantes. Si un sistema de terceros se conecta a este puerto, no podrá cerrar la conexión rápidamente. Tendrá que desperdiciar los recursos de su sistema y esperar hasta que se agote el tiempo de conexión o finalizarla manualmente.
La mayoría de las veces, las lonas se utilizan como protección. La técnica se desarrolló por primera vez para proteger contra gusanos informáticos. Y ahora se puede utilizar para arruinar la vida de los spammers e investigadores que realizan un amplio escaneo de todas las direcciones IP seguidas (ejemplos de Habré:
Uno de los administradores del sistema, llamado Chris Wellons, aparentemente se cansó de ver esta desgracia y escribió un pequeño programa.
Instalación de la utilidad:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Un tarpit correctamente implementado requerirá más recursos del atacante que de usted. Pero ni siquiera es una cuestión de recursos. Autor
En modo operativo, el servidor Endlessh debe instalarse en el puerto 22 habitual, donde los hooligans llaman en masa. Las recomendaciones de seguridad estándar siempre recomiendan mover SSH a un puerto diferente, lo que reduce inmediatamente el tamaño de los registros en un orden de magnitud.
Chris Wellons dice que su programa explota un párrafo de la especificación SSH-
.
Esto es exactamente lo que hace el programa Endlessh: envía sin fin flujo de datos generados aleatoriamente, que cumplen con RFC 4253, es decir, envían antes de la autenticación, y cada línea comienza con SSH-
y no excede los 255 caracteres, incluido el carácter de final de línea. En general todo según el estándar.
De forma predeterminada, el programa espera 10 segundos entre envíos de paquetes. Esto evita que se agote el tiempo de espera del cliente, por lo que quedará atrapado para siempre.
Dado que los datos se envían antes de que se aplique la criptografía, el programa es extremadamente simple. No necesita implementar ningún cifrado y admite múltiples protocolos.
El autor intentó asegurarse de que la utilidad consumiera un mínimo de recursos y funcionara completamente desapercibida en la máquina. A diferencia de los antivirus modernos y otros "sistemas de seguridad", no debería ralentizar su computadora. Logró minimizar tanto el tráfico como el consumo de memoria gracias a una implementación de software un poco más astuta. Si simplemente iniciara un proceso separado en una nueva conexión, los atacantes potenciales podrían lanzar un ataque DDoS abriendo múltiples conexiones para agotar los recursos de la máquina. Un subproceso por conexión tampoco es la mejor opción, porque el kernel desperdiciará recursos administrando subprocesos.
Es por eso que Chris Wellons eligió la opción más liviana para Endlessh: un servidor de un solo subproceso. poll(2)
, donde los clientes en la trampa prácticamente no consumen recursos adicionales, sin contar el objeto socket en el kernel y otros 78 bytes para el seguimiento en Endlessh. Para evitar tener que asignar buffers de recepción y envío para cada cliente, Endlessh abre un socket de acceso directo y traduce paquetes TCP directamente, evitando casi toda la pila TCP/IP del sistema operativo. El búfer entrante no es necesario en absoluto porque no estamos interesados en los datos entrantes.
El autor dice que en el momento de su 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 es ideal para escribir tarpits. Por ejemplo, este gancho congelará Firefox, Chrome o cualquier otro cliente que intente conectarse a su servidor HTTP durante muchas horas:
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 es una gran herramienta para castigar a los acosadores en línea. Es cierto que, por el contrario, existe cierto riesgo de llamar su atención sobre el comportamiento inusual de un servidor en particular. Alguien
Fuente: habr.com