¿O existen técnicas para obtener un shell?
Lo que me interesa es que si he compilado algún código C usando solo una pequeña biblioteca con posibles llamadas insignificantes, ¿esto restringe al atacante de hacer algo?
¿O existen técnicas para obtener un shell?
Lo que me interesa es que si he compilado algún código C usando solo una pequeña biblioteca con posibles llamadas insignificantes, ¿esto restringe al atacante de hacer algo?
Probablemente ayude un poco, elevar el listón y requerir un ataque más sofisticado, pero no colgaría mi sombrero de seguridad en esto.
La mejor manera de pensarlo es que, en el peor de los casos, tienen la capacidad de agregar código arbitrario a su programa. Pueden hacer cualquier cosa que pueda hacer el código C, incluyendo leer / escribir en archivos en su sistema de archivos (es decir, leer sus datos o insertar puertas traseras en otros programas) o llamar a exec()
para ejecutar otros programas. Entonces, sí, un desbordamiento de búfer puede hacer cualquier cosa que un shell pueda hacer.
Si quieres estar en el lado seguro, considera que un desbordamiento de búfer será un juego y en su lugar inviertes tu tiempo y esfuerzo en defensa en profundidad alrededor del servicio que podría ser vulnerable. Por ejemplo, limitar quién puede enviar datos a este servicio colocándolo detrás de un servidor de autenticación, firewalls y inspección profunda de paquetes ; siga el principio de privilegio mínimo para bloquear los privilegios del usuario que ejecuta el servicio, etc.
TL; DR : los buenos desarrolladores siempre deberían revisar dos veces su código para evitar desbordamientos de búfer o desreferencias de punteros nulos, mientras que los administradores de sistemas siempre deben asumir que los desarrolladores han sido descuidados y han cerrado el servicio En una cebolla de seguridad para minimizar el daño potencial.
Lea otras preguntas en las etiquetas linux buffer-overflow c