SEGURIDAD EN LA PROGRAMACIÓN DE SOFTWARE

1 SEGURIDAD EN LA PROGRAMACIÓN DE SOFTWAREPonentes: Franc...
Author: Rafael Arroyo Iglesias
0 downloads 2 Views

1 SEGURIDAD EN LA PROGRAMACIÓN DE SOFTWAREPonentes: Francisco Avila González Roldán Rodriguez Ramírez Juan Carlos Moro Hernández

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

3 Aspectos a tener en cuentaDesbordamiento 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.

4 Aspectos a tener en cuentaEl 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.

5 Programación segura en redes. Técnicas de seguridad usando socketsA 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.

6 Programación segura en redes Protección contra denegación de servicioNo 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.

7 Programación segura en redes Protección contra denegación de servicioUsar 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).

8 Programación segura en redes Evitando la Suplantación de identidadLa 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.

9 Seguridad para acceso a BDNunca 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.

10 Seguridad para aplicaciones web Principales problemasXSS (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 ).

11 Seguridad para aplicaciones web Principales problemasAutenticació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.

12 Seguridad para aplicaciones web Algunas recomendacionesGarantizar 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.

13 Seguridad para aplicaciones web Algunas recomendacionesPreparar 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.

14 Seguridad para aplicaciones web Algunas recomendacionesNo 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.

15 Seguridad para aplicaciones web Algunas recomendacionesValidar 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.

16 Seguridad para aplicaciones web Algunas recomendacionesAuditar 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.

17 Sistemas Contables Financieros en CubaCaso 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.

18 Sistemas Contables Financieros en CubaCaso 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.

19 Sistemas Contables Financieros en CubaCaso 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.

20 Sistemas Contables Financieros en CubaCaso 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.

21 Sistemas Contables Financieros en CubaCaso 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.

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

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

24 Muchas Gracias…