Plataforma
Informática:
Una Plataforma Informática es una potente herramienta de
gestión empresarial conformada por un conjunto de hardware (servidores de
bases de datos, servidores de aplicaciones, máquinas de respaldo, equipos de
conectividad, etc..), software (framework, aplicaciones empresariales,
módulos especializados, servicios, etc..), estándares
internacionales, metodologías, servicios y mucho más, sobrepasando todo lo
conocido hasta ahora como sistema informático tradicional.
TIPOS DE PLATAFORMAS:
¿cuantos tipos de plataforma
existen? y ¿cuáles son sus características más
representativas?
En informática, existen básicamente dos tipos de plataformas:
**Arquitectura de hardware (la arquitectura de una computadora)
**Framework de software (el sistema operativo, interfaces de usuario, lenguaje de programación)
Ejemplos de plataformas como sistemas operativos:
** Windows
** Linux
** AmigaOS
** Solaris
** Mac OS
Ejemplos de plataformas de software:
** Java - JDK y JRE
** .NET Framework
** Mozilla Prism XUL y XUL Runner
** Adobe AIR
** Mono
Ejemplos de plataformas de hardware:
** Arquitectura RISC (ej, Sun, DEC Alpha cluster, etc).** Macintosh** x86 (las típicas PC)** Arquitectura ARM** Cualquier variedad de consola de videojuego. Por ejemplo, Xbox, Playstation, etc.
Las 8 Mejores
Herramientas De Seguridad Y Hacking
Todas estas herramientas que describiremos a continuación
son herramientas de seguridad y hacking. Estas se utilizan para fines tanto
legales como ilegales, y por lo tanto, la mayoría de las personas piensan que
estas herramientas son solo utilizadas por hackers maliciosas (algo totalmente
fuera de la realidad), cuando en realidad están diseñadas para ayudar a los
administradores y profesionales de seguridad a asegurar las redes y los
sistemas de información.
Nmap:
Nmap (“Network Mapper”) es una herramienta gratuita de
código abierto para la exploración de la red o la auditoría de seguridad. Fue
diseñado para analizar rápidamente grandes redes, aunque funciona muy bien
contra equipos individuales. Nmap utiliza paquetes IP para determinar qué hosts
están disponibles en la red, qué servicios (nombre de la aplicación y la
versión) estos equipos ofrecen, qué sistemas operativos (y versiones del
sistema operativo) se están ejecutando, qué tipo de filtros de paquetes o
cortafuegos están en uso, y docenas de otras características. Nmap se ejecuta
en la mayoría de los ordenadores y la consola y versiones gráficas están
disponibles. Nmap es libre y de código abierto.
Nessus:
Nessus es el escáner de vulnerabilidades más popular y es
utilizado en más de 75.000 organizaciones en todo el mundo. Muchas
organizaciones alrededor del mundo están dando cuenta de los importantes
ahorros de costes que estas reciben mediante el uso de Nessus como herramienta
de auditoría de sistemas de información para la búsqueda de fallas críticas de
seguridad.
John the Ripper:
John the Ripper es esencialmente una herramienta de
descifrado de contraseñas que se desarrolló para sistemas tipo UNIX. También
sus desarrolladores han extendido su apoyo a los sistemas Windows y MAC.
El software es utilizado por muchos usuarios para probar la
fortaleza de la contraseña elegida. Obviamente, esta herramienta también puede
ser usada para descifrar las contraseñas y entrar en un sistema. Es compatible
tanto con ataque de diccionario (probando todas las palabras en el diccionario,
de ahí que nunca se debe elegir una palabra que se ha encontrado en el
diccionario) y ataque de fuerza bruta (en este caso todas las posibles
combinaciones son juzgados – por lo tanto, si usted elige una contraseña que es
alfanumérico y largo plazo, será difícil romperlo).
Nikto
Nikto es un software de código abierto (GPL) para escanear
vulnerabilidades en los servidores web. Esta herramienta tiene el potencial de
detectar más de 3200 archivos potencialmente peligrosos / CGIs, versiones sobre
más de 625 servidores, y los problemas específicos de la versión de más de 230
servidores. Los elementos de exploración y plugins pueden ser actualizado
automáticamente (si se desea).
Wireshark
Wireshark es un programa analizador de protocolos de red o
sniffer, que le permite capturar y navegar de forma interactiva por los
contenidos de los paquetes capturados en la red. El objetivo del proyecto fue
crear un analizador de calidad comercial para Unix. Funciona muy bien en Linux
y Windows (con una interfaz gráfica de usuario), fácil de utilizar y puede
reconstruir flujos TCP / IP y VoIP!
Putty
PuTTY es una implementación libre de Telnet y SSH para Win32
y Unix, junto con un emulador de terminal xterm.
NetStumbler
NetStumbler es una herramienta de detección de redes
inalámbricas para Windows. NetStumbler es una herramienta para Windows que
permite detectar redes de área local (WLAN), usando 802.11b, 802.11ay 802.11g.
Algunos de los usos de esta herramienta son:
**Verificar que su red esta configurada de la manera segura.
**Buscar lugares con baja cobertura en su WLAN.
**Detectar otras redes que puedan estar causando
interferencias en la red.
**Detectar AP no autorizados “rogue” en su lugar de trabajo.
**Ayudar a apuntar antenas direccionales para enlaces de
larga distancia WLAN.
El equivalente de NetStumbler para Linux se llama Kismet.
Metasploit
El Proyecto Metasploit es un proyecto de seguridad
informática que proporciona información sobre las vulnerabilidades, ayuda en
las pruebas de penetración y en la ejecución de la explotación de
vulnerabilidades de seguridad. Metasploit representa un conjunto de
herramientas que ayuda a los profesionales de seguridad y hacker a llevar a
cabo ataques informáticos de manera sistematizada y automatizada.
Su más conocido sub-proyecto es el marco de código abierto
Metasploit, una herramienta para el desarrollo y ejecución de código de
explotación en contra de un equipo o sistema de información destino remoto.
Otros importantes sub-proyectos son la base de datos Opcode, archivo shellcode,
e investigaciones de seguridad.
Aspectos Básicos de la Seguridad en Aplicaciones
Web
Introducción a la
seguridad en sistemas web
En la actualidad el crecimiento de internet ha impactado
directamente en la seguridad de la información manejada cotidianamente. Sitios
de comercio electrónico, servicios, bancos e incluso redes sociales contienen
información sensible que en la mayoría de los casos resulta ser muy importante.
Se puede decir que uno de los puntos más críticos de la
seguridad en Internet son las herramientas que interactúan de forma directa con
los usuarios, en este caso los servidores web. Es común escuchar sobre fallas
en los sistemas de protección de los servidores más frecuentemente utilizados,
por ejemplo Apache, NGINX, IIS, etc. (Build With, 2016) O
en los lenguajes de programación en que son escritas las aplicaciones. Sin
embargo, la mayoría de los problemas detectados en servicios web no son
provocados por fallas de ninguna de estas partes, si no que los problemas se
generan por malas prácticas de parte de los programadores.
Debemos entender que programar aplicaciones web seguras no
es una tarea fácil, ya que requiere por parte del programador, no sólo cumplir
con el objetivo funcional básico de la aplicación, sino una concepción general
de los riesgos que puede correr la información procesada por el sistema.
1. Problemas
principales en la programación de sistemas web
Gran parte de los problemas de seguridad en las aplicaciones
web son causados por la falta de seguimiento en dos rubros muy importantes de
los que depende cualquier aplicación, las entradas y salidas del sistema.
Además de verificar estos 2 rubros, es importante considerar
la exposición accidental de datos que pueden ser empleados en un posible ataque
sobre el sistema. Los mensajes de error enviados por el servidor, que suelen
ser de gran utilidad durante el proceso de desarrollo de la aplicación, pueden
ser empleados maliciosamente cuando siguen apareciendo en un entorno de
producción, por lo que es necesario deshabilitar todos estos mensajes y editar
algunos otros (como los que se envían cuando el servidor no encuentra algún
archivo en particular) los cuales también pueden ser utilizados por los
atacantes para obtener información sobre nuestro sistema.
2. Prácticas básicas
de seguridad web
2.1 Balancear riesgo
y usabilidad
Si bien la usabilidad y la seguridad en una aplicación web
no son excluyentes una de la otra, alguna medida tomada para incrementar la
seguridad con frecuencia afecta la usabilidad. Normalmente siempre se debe
pensar en las maneras en que usuarios ilegítimos nos pueden atacar y la facilidad
de uso para los usuarios legítimos.
Es conveniente emplear medidas de seguridad que sean
transparentes a los usuarios y que no resulten engorrosas en su empleo. Por
ejemplo, el uso de un login que solicita el nombre de usuario y
contraseña, permite controlar el acceso de los usuarios hacia secciones
restringidas de la aplicación. Este paso adicional, es una característica que
impacta en la rapidez de acceso a la información por parte del usuario, pero
que proporciona un elemento adicional de protección.
A mayor complejidad de nuestro sitio, aumenta el riesgo de
que se sufra un ataque debido a sus características más elaboradas, es por eso
que deben considerarse opciones de seguridad necesarias y sencillas pero
eficientes, que ayuden a mitigar cualquier característica que la haga
vulnerable.
2.2 Rastrear el paso
de los datos
Es muy importante mantener conocimiento de los pasos que ha
recorrido la información en todo momento. Conocer de dónde vienen los datos y
hacia dónde van. En muchas ocasiones lograr esto puede ser complicado,
especialmente sin un conocimiento profundo de cómo funcionan las aplicaciones
web.
En las aplicaciones web, existen maneras de distinguir los
orígenes de los datos y poder así reconocer cuando los datos pueden ser dignos
de confianza y cuando no.
Normalmente existen arreglos globales en la aplicación (por
ejemplo en PHP los arreglos $_GET, $_POST,
$_COOKIE y $_SESSION entre otros) que sirven para identificar de
forma clara las entradas proporcionadas por el usuario. Si esto lo combinamos
con una convención estricta para el nombrado de las variables podemos tener un
control sobre el origen de los datos usados en el código.
Además de entender los orígenes de la información se debe
dar la misma importancia a entender cuáles son las salidas que tiene la
aplicación y hacia a donde se devuelven los resultados.
2.3 Filtrar entradas
El filtrado es una de las piedras angulares de la seguridad
en aplicaciones web. Es el proceso por el cual se prueba la validez de los
datos. Si nos aseguramos que los datos son filtrados apropiadamente al entrar,
podemos eliminar el riesgo de que datos contaminados sean usados para provocar
funcionamientos no deseados en la aplicación.
Existen muchos puntos de vista diferentes sobre cómo
realizar el filtrado o proceso de limpieza. Lo que usualmente se recomienda es
ver al filtrado como un proceso de inspección, no debemos tratar de corregir
los datos, es mejor forzar a los usuarios a jugar con las reglas válidas.
Al usar listas blancas asumimos que los datos son inválidos
a menos que prueben ser validos al encontrarse patrones coincidentes. Una
limitante de usar este punto de vista es considerar inválidos datos que
debieron considerarse válidos pero que no fueron tomados en cuenta patrones
similares al construir la lista blanca.
Si llegamos a utilizar algún framework se debe tener
especial cuidado, ya que estos brindan tantas comodidades que muchos
desarrolladores inexpertos los utilizan sin preocuparse en entender el código
que están observando y por lo tanto implementan medidas de validación en
entradas, variables, entre otros, sin entender exactamente el funcionamiento de
la solución empleada.
Es importante notar que en los lenguajes de programación
existen una buena cantidad de filtros, pero evidentemente estos no llegan a cubrir todas
las necesidades que puede tener un desarrollador. En este caso, se llegan a
utilizar funciones creadas y adaptadas a nuestras necesidades a modo de filtro
especial, en la mayoría de estos casos es donde se puede encontrar el uso de
expresiones regulares.
Una vez concluido el paso del filtrado solo resta usar
convenciones apropiadas en el nombramiento de las variables para poder
distinguir las que ya han sido filtradas.
2.4 Escapado de
salidas
Otro punto importante de la seguridad es el proceso de
escapado y su contra parte para codificar o decodificar caracteres
especiales de tal forma que su significado original sea preservado. Si llegamos
a utilizar una codificación en particular es necesario conocer los caracteres
reservados los cuales serán necesarios escapar.
El proceso de
escapado debe estar compuesto a su vez por los siguientes pasos:
**Identificar las salidas.
**Escapar las salidas.
**Distinguir entre datos escapados y no escapados.
El proceso de escapado debe adecuarse al tipo de salida de
que se trate (si es al cliente, a la base de datos, etcétera). Para la mayoría
de los destinatarios, existen funciones nativas en los lenguajes de
programación para esta finalidad. En alguno de los casos como podría ser el de
base de datos es importante incluso observar la codificación en la que son
enviados.
Para distinguir entre los datos que han sido escapados de
los que no, es recomendable también usar una convención de nombres. Es
necesario una función de escapado para cada caso, como ejemplo en PHP se
tomarían las siguientes consideraciones para:
Correo electrónico, se puede usar la función filter_var()
con los argumentos de FILTER_VALIDATE_EMAIL.
Bases de datos SQL, es más recomendable utilizar consultas
parametrizadas pero podríamos utilizar mysql_real_escape_string.
Líneas de comandos, se puede hacer uso
dela función escapeshellarg().
Código en Javascript, PHP no tiene un método incorporado
para escaparlo, pero se puede utilizar json_encode() junto
con htmlspecialchars() si se quiere mostrar en HTML.
3. Clasificación de
ataques web.
3.1 Ataques URL de
tipo semántico
Este tipo de ataques involucran a un usuario modificando la
URL a modo de descubrir acciones a realizar que originalmente no están
planeadas para ser manejadas correctamente por el servidor. La implementación
de cualquier formulario debe contemplar validaciones necesarias para evitar las
esas acciones y se deben realizar adecuaciones de acuerdo a nuestras entradas.
En el ejemplo anterior los parámetros, que son enviados con
el método GET, se agregan directamente en la URL, lo que produce que atacantes
inexpertos puedan utilizarlos, ya que son solo un poco más fáciles de capturar
y modificar que los enviados de forma oculta desde el navegador (POST).
3.2 Ataques de
Cross-Site Scripting
Cross-Site Scripting (XSS) es un tipo de vulnerabilidad de
seguridad informática típicamente encontrada en aplicaciones web que permiten
la inyección de código por usuarios maliciosos en páginas web. Los atacantes
típicamente se valen de código HTML y de scripts ejecutados en el cliente. (OWASP,
2014)
3.3 Ataques de
Cross-Site Request Forgery
Este tipo de ataque permite al atacante enviar peticiones
HTTP a voluntad desde la máquina de la víctima. Es
difícil determinar cuándo una petición HTML se ha originado por un ataque de
este tipo.
Cuando un atacante conoce el formato que debe tener una URL
para lograr la ejecución de una acción en el sistema, ha logrado encontrar la
posibilidad de explotar este tipo de ataques. Ahora lo que necesita el atacante
es simplemente hacer que una víctima visite la URL.
Un recurso que se utiliza comúnmente para realizar este tipo
de ataques suele tener embebida la petición en una imagen. En este caso el
atacante sólo necesita crear alguna etiqueta HTML del siguiente tipo:
<img
src="http://ejemplo.org/compra.php?param=valor¶m2=valor"
/>
Existen acciones que podemos tomar para contrarrestar este
tipo de ataques, una de estas es preferir el método POST para el procesamiento
de formas en lugar del GET, otra posibilidad es solicitar confirmación por
parte del solicitante antes de realizar los procesos (a costa de reducir la
usabilidad en la aplicación).
3.4 Peticiones
HTTP falsificadas
Un ataque más sofisticado que el anterior es enviar
peticiones falsas empleando herramientas especiales para este propósito.
Para ello, se emplean herramientas de línea de comandos o
plugins agregados a los navegadores, con estos se pone a la escucha de los
servicios web que típicamente se conectan a través del puerto 80.
En realidad, un atacante puede confeccionar a gusto sus
peticiones HTTP, la fortaleza de nuestro sistema será medible por su capacidad
de detectar que peticiones recibidas deben ser escuchadas y procesadas de
acuerdo a los parámetros y valores que se vayan a recibir.
4. Seguridad de las
aplicaciones y su relación con las bases de datos
La mayoría de las aplicaciones web son usadas como un conducto
entre fuentes de información y el usuario, esto es, las aplicaciones web son
usadas para interactuar con una base de datos.
Muchos programadores no dan importancia al filtrado de datos
provenientes de una consulta a la base de datos, debido a que consideran a esta
fuente como confiable. Aunque el riesgo a primera vista parecería menor, es una
práctica recomendable no confiar en la seguridad de la base de datos e
implementar la seguridad a fondo y con redundancia. De esta manera, si algún
dato malicioso fue inyectado a la base de datos, nuestra lógica de filtrado
puede percatarse de ello.
4.1 Exposición de
Credenciales de Acceso
Uno de los asuntos principales a ser cuidados cuando se
utiliza una base de datos es el almacenamiento de las credenciales de acceso a
ella.
Los datos de usuario y password son considerados sensibles,
por lo que deben tener garantizada una atención especial. En archivos de
configuración es común encontrar estos datos los cuales se encuentran como
texto en claro.
La intercepción o acceso no autorizado de esta información
podría comprometer los servidores de bases de datos o gestores de contenidos en
donde estén alojados. Si por alguna razón no fuera posible localizar al archivo
que contiene esta información fuera del directorio raíz, es necesario
configurar el servidor web para rechazar las peticiones de recursos que no
deben ser accesibles.
4.2 SQL Injection
La inyección de código SQL es la vulnerabilidad número uno
en el top de OWASP (OWASP,
2015). Para que exista una vulnerabilidad de SQL Injection se requieren dos
fallas por parte del programador:
Fallas en el filtrado de los datos.
Fallas en el escapado de los datos al enviarlos a la base de
datos (escapado de salida).
Ninguno de estos pasos cruciales debe ser omitido, y los dos
pasos requieren especial atención para poder minimizar los errores.
Afortunadamente los ataques de SQL Injection son fácilmente evitables, mientras
filtremos y escapemos las salidas.
4.3 Exposición de
datos
Una de las preocupaciones más comunes relacionadas con las
bases de datos es la exposición de datos sensibles. Al almacenar números de
tarjetas de crédito, por ejemplo, es preferible asegurarse que los datos
almacenados en la base de datos se encuentran seguros e inaccesibles incluso
para los administradores de la base.
Para asegurar que no se almacenan datos como texto en claro
en la base de datos, se pueden
realizar procedimientos de hash a las cadenas almacenadas para
que no sea entendible la información a simple vista. Se debe considerar el
costo de esta implementación ya que habría que obtener el hash al
insertarlo y al extraerlo realizar la operación inversa, lo que conllevaría a
que la aplicación tarde un poco más en responder.
5. Páginas privadas y
los sistemas de autenticación
La autenticación consiste en verificar la identidad de un
usuario. Comúnmente el procedimiento involucra un nombre de usuario y una
contraseña a revisar. Muchas aplicaciones tienen recursos que son accesibles
sólo para los usuarios autenticados, así
como recursos totalmente públicos.
5.1 Ataques de fuerza
bruta
Este tipo de ataque es un método de ensayo y error utilizado
para obtener información de una contraseña, clave o número de identificación
personal, entre otros. Funciona mediante la generación de un gran número de
intentos consecutivos para el valor de los datos deseados. Un ataque de este
tipo agota todas las posibilidades sin preocuparse por cuales opciones tienen
mayor probabilidad de funcionar.
En los términos del control de acceso, generalmente
encontramos al atacante intentando ingresar mediante un gran número de pruebas.
En algunos casos el atacante puede conocer nombres de usuario válidos y la
contraseña es la única parte que se trata de adivinar.
5.2 Espionaje de
contraseñas (Password Sniffing)
Cuando un atacante tiene los medios para analizar el tráfico
entre los usuarios y el servidor de la aplicación, debemos preocuparnos por la
exposición que pueden tener los datos en el trayecto, sobre todo cuando se
trata de credenciales de acceso.
En la actualidad debido a la información que se transmite en
la web se recomienda establecer el uso del protocolo HTTPS para poder cifrar el
canal de comunicación por el que enviaremos nuestra información. (OWASP,
2016)
5.3 Cookies o
variables de sesión persistentes
Cuando un usuario permanece en el estado de registrado
después de un tiempo no razonable (por ejemplo, cuando no expira la sesión),
tenemos un problema de registros persistentes.
Este tipo de problemas disminuyen la seguridad de nuestro
mecanismo de autenticación. Generalmente son causados por una cookie
persistente, un ticket enviado al usuario o alguna variable de sesión
establecida que no se considera como expirado jamás o que no cambia en cada
nuevo registro establecido por el usuario.
Las cookies permanentes y variables de sesión ayudan a los
sitios web a recordar tu información y ajustes cuando los visitas más adelante.
Esto conlleva un acceso más rápido y sencillo ya que, por ejemplo, no tienes
que iniciar sesión de nuevo.
6. Referencias
Aguilar, A. & Hernández, A. (25 de Abril de 2014). Obtenido de Sugerencias de Seguridad para Sitios Web: http://www.seguridad.unam.mx/documento/?id=1143
Built With. (26 de Enero de 2016). Web Server Usage Statistics. Obtenido de http://trends.builtwith.com/Web-Server
Aguilar, A. (21 de Agosto de 2015). Obtenido de ¿Qué es y cómo opera un ataque de Cross-Site Scripting (XSS)?: http://www.seguridad.unam.mx/documento/?id=35
OWASP. (3 de Febrero de 2014). Obtenido de Top 10 2013-A3-Cross-Site Scripting (XSS): https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS)
OWASP. (21 de Agosto de 2015). Obtenido de Top 10 2013-Top 10: https://www.owasp.org/index.php/Top_10_2013-Top_10
No hay comentarios.:
Publicar un comentario