Вы находитесь на странице: 1из 24

INYECCIÓN SQL EN LAS

BASES DE DATOS
*PROGRAMACIÓN DE
SOFTWARE
*TECNOLOGÍAS WEB

Ponentes:
Ing. Vásquez Ramírez, Noé M.
Principios de Seguridad para la
programación.

 Definir los objetivos y características del producto con


respecto a la seguridad.
 Considerar los aspectos de seguridad como características
adicionales de los productos.
 Trabajar siempre con el nivel mínimo de privilegios.
 Emplear configuraciones predeterminadas seguras.
 Tener presente que las características de seguridad de un
producto no determinan que este sea seguro.
Aspectos a tener en cuenta

 Desbordamiento de buffer (Stack, Indexado de arreglos,


formateo de cadenas de caracteres, conversión de ANSI a
UNICODE).

 Uso de funciones de copia de bloques de memoria.

 Operador >> de la librería Standard de C++.

 CreateProcess(NULL, …), CreateProcessAsUser,


CreateProcessWithLogon, WinExec y ShellExecute.
Aspectos a tener en cuenta

 El segundo parámetro no debe tener espacios en blancos,


a menos que se especifique entre comillas.

 LoadLibrary y LoadLibraryEx.

 Siempre se debe especificar el camino completo de la dll.

 Funciones relacionadas con las secciones críticas.

 Funciones de impersonalización.
Programación segura en redes.
Técnicas de seguridad usando sockets

A cualquier servicio se le debe poder configurar:

IP en que escucha.


Puerto en que escucha.
Quién se puede conectar.

Programar para cortafuegos:

Usar una sola conexión.


El servidor no inicia conexiones al cliente.
Usar protocolos orientados a conexión (TCP).
No incluir direcciones IP en los datos (permitir NAT).
No multiplexar protocolos.
Puertos configurables en cliente y servidor.
Programación segura en redes
Protección contra denegación de servicio

 No confiar en nada que llega por la red.

 Validar todas las entradas que llegan por la red.

 Si es posible, implementar mecanismos de autenticación


y autorización.

 Solamente enviar los datos necesarios por la red. Por


ejemplo, mensajes de error.

 Nunca responder a direcciones broadcast.


Programación segura en redes
Protección contra denegación de servicio

 Usar protocolos orientados a conexión.

 Identificar y reducir al mínimo, las zonas de código que


toman recursos de CPU.

 No reservar memoria hasta no estar seguros de que se


necesita.

 Implementar mecanismos que permitan fallar de forma


elegante ante limitaciones de recursos (sin esperar a que
se agoten).
Programación segura en redes
Evitando la Suplantación de identidad

 La seguridad basada en servidores (nombre, IP, etc.) es


muy débil.

 La seguridad basada en número de puerto, es más débil


aún.

 No confíe en nombres obtenidos por DNS (El servicio de


DNS es fácil de atacar).

 Si necesita autenticar a un cliente utilice un


secreto compartido, un certificado, o un
mecanismo seguro de autenticación.
Seguridad para acceso a BD

 Nunca confiar en datos entrados por usuarios.


 Definir en qué consiste una entrada correcta y validarla
(expresiones regulares).
 Nunca construir peticiones
concatenando cadenas.
 Usar solamente procedimientos
almacenados desarrollados con
seguridad.
 No retornar o imprimir errores explicativos.
 Conectarse a la BD con los mínimos privilegios requeridos.
Seguridad para aplicaciones web
Principales problemas

 XSS (Cross site scripting).

 SQL injection (inyección de comandos sql).

 Inyección de comandos de sistema.

 Divulgación de información (por


ejemplo: mal manejo/manipulación
de errores, páginas de manual,
robots.txt, phpinfo ).
Seguridad para aplicaciones web
Principales problemas

 Autenticación en texto plano (por ejemplo: en páginas de


autenticación de usuarios para acceder a la sesión).

 Contraseñas débiles, mala validación de las mismas.

 Flags de seguridad no activados (Headers no configurados


o incorrectamente configurados).

 Librerías, CMSs y frameworks


desactualizados o con
vulnerabilidades reportadas.
Seguridad para aplicaciones web
Algunas recomendaciones

 Garantizar la actualización de la infraestructura en la que


se soportan los sitios y aplicaciones Web.

 Mantener actualizados los CMS/Framework, así como las


librerías y plugins empleados.

 Al programar, tener en cuenta una adecuada validación de


las entradas de datos para evitar la posible inyección de
código.
Seguridad para aplicaciones web
Algunas recomendaciones

 Preparar páginas de error que no divulguen información


del código, base de datos, versión, camino de la
aplicación, etc.

 Publicar sobre HTTPS las aplicaciones webs y sitios que


emplean sesiones de usuario.

 Emplear WAF (web application firewall) para proteger el


sitio de ataques y monitorear éstos.
Seguridad para aplicaciones web
Algunas recomendaciones

 No publicar interfaces administrativas de cara a la red


externa o filtrar por IP su acceso.
 Si se van a subir archivos, validar correctamente los
mismos para evitar la introducción de webshells.
 Eliminar banners que describan los servicios y
aplicaciones.
Seguridad para aplicaciones web
Algunas recomendaciones

 Validar la fortaleza de las contraseñas. Obtener hash de las


mismas en el momento en que se entran. Nunca
almacenarlas o transmitirlas.
 No almacenar información sensible en código web (asp,
php, cookies, hidden fields etc.)
 Configurar adecuadamente los headers http (flags de
seguridad), solo confiar en los imprescindibles.
Seguridad para aplicaciones web
Algunas recomendaciones

 Auditar con frecuencia los logs de los servicios,


estadísticas, tráfico, CMS y WAF para llevar un
seguimiento de la actividad del sitio web y poder detectar a
tiempo problemas que lo afecten.
 Planificar y realizar regularmente consultorías Web para
detectar posibles vulnerabilidades y errores de
configuración.
Sistemas Contables Financieros en Cuba
Caso específico
 Deben contar con claves de acceso robustas (8 caracteres
como mínimo y requisitos de complejidad).

 No visualizar las contraseñas mientras se teclean.

 No almacenar las contraseñas en las BD en texto claro.


 No transmitir las claves en
texto claro en el proceso de
autenticación.
 Tener en cuenta la historia de
la contraseña.
 Concebir el cambio periódico
de la contraseña.
Sistemas Contables Financieros en Cuba
Caso específico

 Obligar al cambio de la contraseña durante el primer inicio


de sesión.

 Bloquear cuenta de usuario tras varios intentos fallidos de


conexión.

 Contar con opción de bloqueo


de sesión por inactividad del
sistema.
 El acceso a las opciones del
sistema tiene que estar en
correspondencia con los
perfiles de usuario.
Sistemas Contables Financieros en Cuba
Caso específico
 No permitir conexiones simultáneas desde diferentes
equipos con un mismo usuario.

 Alertar cuando se modifiquen las bases de datos por fuera


del sistema.
 Que no se pueda modificar su código ejecutable y alertar
cuando ocurra.

 Inhabilitar el trabajo cuando se


detecte una modificación no
autorizada de la Base de Datos
y/o del Ejecutable.
Sistemas Contables Financieros en Cuba
Caso específico

 Contemplar mecanismos de salvas y restaura.

 Las opciones de salva y restaura deben estar restringidas


sólo al administrador del sistema.

 Registrar las actividades de


uso y acceso realizadas por
los usuarios para poder
contar con trazas o rastros de
seguimiento que posibiliten
las investigaciones más
comunes.
Sistemas Contables Financieros en Cuba
Caso específico

 Garantizar los registros de las acciones realizadas por los


usuarios, como mínimo por un año.

 El sistema de gestión de base de datos y los sistemas


operativos no han vencido su ciclo de vida y cuentan con
actualizaciones de seguridad.

 Están diseñados sobre BD


robustas.

 Permiten trabajar en red y son


multiusuario.
Ten presente que

Un producto seguro es aquel que


protege la confidencialidad, integridad y
disponibilidad de la información de los
usuarios, así como la integridad y
disponibilidad de los recursos de
procesamiento bajo el control del
propietario o administrador del sistema.
Ten presente que

Una vulnerabilidad de seguridad


es una falla en un producto que
hace que sea inviable para
evitar que un atacante usurpe
privilegios en el sistema del
usuario, regule su
funcionamiento, comprometa
datos o asuma una confianza
no permitida.
Muchas Gracias…