¿Qué es el código Shell?
Continuamos con nuestra sección Aprende Tech 💻 en Bobbli. En este artículo descubrimos ¿Qué es el código Shell?
Shellcode es un conjunto de código de máquina o instrucciones ejecutables que se inyecta en la memoria de un ordenador para tomar el control de un programa en ejecución. En tal ataque, uno de los pasos es tomar el control del contador del programa, que define la siguiente instrucción a ejecutar. Luego, el flujo del programa se puede redirigir al código agregado. El código de máquina intrusivo se denomina carga útil del ataque y es a lo que a menudo se hace referencia con el término código shell. Este método a menudo se usaba para otorgar acceso a un atacante abriendo un shell de comandos del sistema operativo, por lo que los ataques de inyección de código se conocieron comúnmente como código shell.
La vulnerabilidad explotada generalmente involucra cómo un programa asigna memoria, verifica la validez de los datos de entrada y maneja los errores de memoria. Los desarrolladores de software a menudo pueden prevenir esta amenaza definiendo con precisión los datos de entrada y rechazando los valores inapropiados. Si no está marcado, los valores que requieren más almacenamiento que la memoria asignada para ese valor son aceptables. Esto provoca una brecha de seguridad llamada desbordamiento de búfer, en la que algunos de los datos se escriben en ubicaciones de memoria adyacentes al área asignada del valor. Cuando se manipula con cuidado, esta anomalía puede permitir la inserción de código intrusivo.
Shellcode normalmente se escribe en un lenguaje de programación con acceso al sistema de bajo nivel, como Assembly, C o C++. Sin embargo, dependiendo de la vulnerabilidad objetivo, se puede lograr el mismo resultado agregando código para un lenguaje de secuencias de comandos interpretado como PERL o código de bytes para una máquina virtual como JAVA. El código se puede colocar antes, durante o después de la captura del contador del programa. Por lo tanto, el código intrusivo puede residir en un archivo en la máquina de destino o transmitirse a través de una conexión de red en tiempo real.
Las vulnerabilidades nativas de shellcode están diseñadas para dar a un atacante control sobre una máquina con acceso físico. En este caso, un objetivo podría ser crear una cuenta con privilegios administrativos, por ejemplo. De manera similar, si un proceso en ejecución tiene un alto nivel de privilegios, una explotación exitosa otorgará temporalmente al intruso el mismo nivel de acceso.
Los procesos que se ejecutan en una máquina remota se pueden usar para comunicarse con el ordenador de destino usando protocolos de red estándar. El shellcode del vínculo de retroceso le indica a la máquina de destino que inicie una conexión con el ordenador del intruso. Si el intruso inicia la conexión, el código se llama bindshell porque intenta tomar el control de una conexión de red llamada puerto en la máquina remota. Dado que los cortafuegos rara vez prohíben las conexiones salientes, el método de vínculo de retroceso se usa más comúnmente.
Ojalá este artículo te haya servido para aprender algo nuevo hoy. Muchísimas gracias por descubrir los mejores trucos y tutoriales tecnológicos en Bobbli.