====== Usar SCTP con cualquier aplicación gracias a socat ======
[[https://es.wikipedia.org/wiki/Stream_Control_Transmission_Protocol|SCTP]] es una alternativa a los protocolos de transporte TCP y UDP pues provee confiabilidad, control de flujo y secuenciación como TCP. Sin embargo, SCTP opcionalmente permite el envío de mensajes fuera de orden y a diferencia de TCP, SCTP es un protocolo orientado al mensaje (similar al envío de datagramas UDP).
**Ventajas de SCTP**.
* Capacidad de Multihoming, en la cual uno (o dos) de los extremos de una asociación (conexión) pueden tener más de una dirección IP. Esto permite reaccionar en forma transparente ante fallos en la red.
* Entrega de los datos en trozos que forman parte de flujos independientes y paralelos eliminando así el problema de head of the line blocking que sufre TCP.
* Es capaz de seleccionar y monitorizar caminos, seleccionando un camino "primario" y verificando constantemente la conectividad de cada uno de los caminos alternativos.
* Mecanismos de validación y asentimiento como protección ante ataques por inundación, proveyendo notificación de trozos de datos duplicados o perdidos.
Puede ser muy útil para esquivar firewalls o IDS en auditorias de seguridad debido a que no es un protocolo que se suela tener en mente o incluso tener soportado por muchos dispositivos. Permitiendo el uso de shell / SSH reversas, saltar pasarelas de pago a Internet (aeropuertos / estaciones / etc), etc.
Veamos una comunicación SCTP entre un host destino y un host origen (local).
Host_Destino:8080 <-- TCP --> Puerto 80 <------- SCTP ------> Host_Local:1234 <-- TCP --> Aplicación
Host_Destino: Escucha peticiones SCTP en el puerto 80 y las redirige (TCP) al puerto 8080 (donde está el servidor web).
socat SCTP-LISTEN:80,fork TCP:localhost:8080
Host Local: El puerto local 1234 se comunica mediante SCTP a Host_Destino. La aplicación que lo quiera usar debe poder conectar al puerto 1234 en localhost (se podría publicar también en 0.0.0.0).
socat TCP-LISTEN:1234,fork SCTP:Host_Destino:80
NOTA: Lógicamente, si la aplicación tiene soporte nativo para SCTP sólo sería necesario adaptar el Host_Destino.
Creación de un Proxy Socks5 con SSH y SCTP para esquivar posibles portales de pago que permitan, debida a una laxa configuración, acceder a Internet (Normalmente 80 / 443 y 53). Aquí SCTP haría la función de túnel, el cual en muchas ocasiones no es controlado y puede permitir a la conexión ssh pasar desapercibida.
Sistema remoto donde se tiene cuenta SSH, la cual se publica por SCTP en el puerto 443 (HTTPS).
socat SCTP-LISTEN:443,fork TCP:localhost:22
Sistema local donde se realiza la comunicación mediante SCTP con el destino.
socat TCP-LISTEN:1234,fork SCTP:SERVER_IP:443
Si puede conectar con el host destino solicitará la password y creará un proxy Socks5 a través del puerto local 6666.
ssh -lusername localhost -D 6666 -p 1234
Aplicación <-- Socks5 --> Host_Local:6666 <-- TCP--> Host_Local:1234 <-- SCTP --> Host_destino:443 <-- Socks5 --> Host_destino:22 <-- TCP --> Internet