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.
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