Recomendaciones básicas para asegurar infraestructura
Igor Támara
Senior Software Engineer
Mantener un sitio con decenas de miles de usuarios que está abierto las 24 horas y que permite que ciertas transacciones sean llevadas a cabo en cualquier momento del día es uno de los ejemplos de aplicaciones que desplegamos para nuestros clientes.
Para fechas como el 20 de Julio o el 7 de Agosto es usual que los sitios de las entidades gubernamentales sean más atacados, nuestros sitios han estado activos para nuestros clientes y dado que permanecen en línea más del 99%, nos han preguntado cuáles son las recomendaciones que podemos ofrecer a quienes están encargados de mantener abiertas infraestructuras.
A continuación ofrecemos algunas recomendaciones con experiencias de primera mano para toda persona que quiera abrir un sitio en Internet pueda tenerlas presentes
- Un framework: Un framework no es solamente el lenguaje de programación, decir que se va a usar Java,C#, PHP, Python o Ruby no es suficiente, cuando se piensa en glassfish o .NET también podría quedarse un poco corto. La ventaja de estar apoyado en un framework es que programadores muy inteligentes ya han encontrado y resuelto muchos problemas que una persona hallaría la primera vez que va a hacer una aplicación: manejo de usuarios, manejo de sesiones de usuario, operaciones CRUD, separar en alguna medida la lógica del negocio del modelo de datos y la capa de presentación. En general una aplicación web como cualquier programa a nivel de código fuente tiene que estar escrita de forma tal que pueda leerse con la mayor facilidad posible. Quien lee código que otro haya escrito, como regla general tiene que ser más inteligente que el que lo escribió. Si alguien es capaz de escribir código funcional que sea legible por muchos, tal programador es muy inteligente. Aunque suene paradógico, un programador debería escribir código del cual se sienta orgulloso al volverlo a leer. Un framework será realmente bueno si es posible auditarlo y si no hay un cerramiento de proveedor, esto significa que no hay restricción para poder hacer un arreglo del mismo en caso de ser necesario. Un framework sin el código fuente disponible no cumple esta necesidad para que pueda ser arreglado en caso de ser necesario.
- Protocolos de comunicación seguros: Un framework poderoso que permita que los desarrolladores hagan un trabajo magnífico de forma rápida y cuyos tiempos de entrega estén en los términos estipulados no garantiza que el sitio en producción va a estar disponible. Se requiere que el código fuente, así como los datos sea siempre enviado por canales seguros de comunicación; en el siglo 21 usar ftp plano o telnet es un atentado a la seguridad de cualquier sistema, por lo tanto es indispensable que todo código fuente y binarios que se desplieguen a servidores viajen a través de SSH y cuando se envíen claves siempre haya un SSL de por medio u otro esquema que garantice que no hay un tercero en la mitad "escuchando".
- Proceso de inscripción de usuarios: Las claves NUNCA se almacenan en texto plano, si hoy en día hay un sistema que almacene sus claves en texto plano, esto se constituye directamente en un atentado contra la seguridad de las personas, un usuario normalmente reusa claves en distintos sitios y es fácil comenzar a usar las combinaciones de usuario/clave en otros sistemas para lograr acceder a datos más importantes, por ejemplo, cuentas de banco, tarjetas de crédito, fechas de nacimiento, saldos bancarios. Un sistema debe permitir que los usuarios puedan por sí mismos hacer restauración de clave sin que otra persona tenga que intervenir.
- Uso de roles: Permitir que los usuarios compartan claves impide que haya asignación adecuada de responsabilidades, sobre todo cuando hay pérdida o fuga de información, por lo tanto es indispensable que cada persona tenga su usuario y que a los usuarios se les pueda asignar los permisos necesarios y suficientes para hacer sus labores, de lo contrario por error o por compromiso de una cuenta o una clave muy sencilla, un atacante podría hacer que datos importantes se pierdan.
- Alertas automatizadas: El sistema debe comunicar de forma directa a los administradores del sitio o los encargados del arreglo de fallos cuando un error sucede al interior de la aplicación. Es usual que los errores sean disparados por alguien que esté haciendo pruebas sobre el sitio, esta sería la primera señal de alerta para que los administradores puedan identificar un posible ataque. De la mano con esto es indispensable que haya un mecanismo para restringir la cantidad de intentos fallidos al ingresar al portal cuando se intenta una autenticación con clave. Finalmente de acuerdo al presupuesto es posible colocar sistemas que identifiquen comportamientos en los cuales se está intentando acceder a la plataforma de forma repetida en intervalos muy cortos de tiempo.
- Medición de tráfico: Con estas mediciones es posible identificar el uso que se da a la herramienta, por ejemplo, un portal del gobierno de consulta pública es usual que entre semana de 8 de la mañana a 6 de la tarde tenga la mayoría de su tráfico y que la tendencia en fines de semana o días festivos sea mínima comparable con el flujo diario.
- Personal de confianza:Este es el apartado más importante, puesto que tener un sistema espectacular, una infraestructura envidiable y un presupuesto con buena asignación requiere que quienes custodian la información entiendan la importancia del funcionamiento, sean responsables y además tengan la capacidad de reaccionar frente a eventualidades. Esto incluye las políticas de respaldo de información y los sitios de almacenamiento adecuados para garantizar que ante un fallo de hardware o una brecha fatal sea necesario hacer una restauración completa del sistema. Los estudios de seguridad a las personas contratadas para esta labor y las pruebas técnicas son indispensables para minimizar el impacto y evitar que la información caiga en manos equivocadas
Todos los aspectos mencionados anteriormente los tenemos en cuenta para todos nuestros desarrollos, de esta forma contamos con la plena certeza de entregar soluciones seguras y confiables.
Como nota final, la seguridad es evolutiva y por lo tanto no llegaremos a un punto final y siempre habrá oportunidad de hacer mejoras sabiendo que un sistema no es 100% seguro, siempre habrá posibles puertas de entrada no perceptibles o descubiertas en primera instancia pero que con suficiente tiempo y paciencia pueden llegar a ser abiertas. Un ejemplo importante e implacable es Cydia
Ve usted que hace falta enumerar algunos otros aspectos importantes para tener en cuenta cuando un sistema está abierto y disponible las 24 horas al día?
Written by Igor Támara
A seasoned developer, Igor brings expertise in designing and building complex software systems. With a focus on quality and performance, they lead projects that drive innovation and deliver reliable solutions to meet user needs.