Terminología
FRAMEWORK
La palabra inglesa «framework» define, en términos generales, un conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular que sirve como referencia, para enfrentar y resolver nuevos problemas de índole similar.
En el desarrollo de software, un framework o infraestructura digital, es una estructura conceptual y tecnológica de soporte definido, normalmente con artefactos o módulos de software concretos, con base a la cual otro proyecto de software puede ser más fácilmente organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas, y un lenguaje interpretado, entre otras herramientas, para así ayudar a desarrollar y unir los diferentes componentes de un proyecto.
Representa una arquitectura de software que modela las relaciones generales de las entidades del dominio, y provee una estructura y una especial metodología de trabajo, la cual extiende o utiliza las aplicaciones del dominio.
VENTAJAS
Las principales ventajas de la utilización de un framework son:
1. El desarrollo rápido de aplicaciones. Los componentes incluidos en un framework constituyen una capa que libera al programador de la escritura de código de bajo nivel.
2. La reutilización de componentes software al por mayor. Los frameworks son los paradigmas de la reutilización.
3.Otra ventaja de los frameworks, y en especial de esta acepción amplia, es la portabilidad de aplicaciones de una arquitectura a otra. Por ejemplo, los bytecodes generados a partir del código fuente de clases en Java pueden ser ejecutados sobre cualquier máquina virtual, independientemente de la arquitectura hardware y software subyacente.
DESVENTAJAS
Las desventajas de los frameworks son:
1. La dependencia del código fuente de una aplicación con respecto al framework. Si se desea cambiar de framework, la mayor parte del código debe reescribirse.
2. La demanda de grandes cantidades de recursos computacionales debido a que la característica de reutilización de los frameworks tiende a generalizar la funcionalidad de los componentes. El resultado es que se incluyen características que están «de más», provocando una sobrecarga de recursos que se hace más grande en cuanto más amplio es el campo de reutilización.
3.La mayor desventaja es que un framework es conocido y si alguien sabe que tipo de framework se usa, tu sitio se vuelve vulnerable
PROGRAMACIÓN POR CAPAS
La programación por capas es un estilo de programación en la que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño, un ejemplo básico de esto es separar la capa de datos de la capa de presentación al usuario.
La ventaja principal de este estilo, es que el desarrollo se puede llevar a cabo en varios niveles y en caso de algún cambio sólo se ataca al nivel requerido sin tener que revisar entre código mezclado.
Además permite distribuir el trabajo de creación de una aplicación por niveles, de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, simplemente es necesario conocer la API que existe entre niveles.
En el diseño de sistemas informáticos actual se suele usar las arquitecturas multinivel o Programación por capas. En dichas arquitecturas a cada nivel se le confía una misión simple, lo que permite el diseño de arquitecturas escalables (que pueden ampliarse con facilidad en caso de que las necesidades aumenten).
Capas o niveles
1.- Capa de presentación: es la que ve el usuario, presenta el sistema al usuario, le comunica la información y captura la información del usuario dando un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). Esta capa se comunica únicamente con la capa de negocio.
2.- Capa de negocio: es donde residen los programas que se ejecutan, recibiendo las peticiones del usuario y enviando las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) pues es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de él.
3.- Capa de datos: es donde residen los datos. Está formada por uno o más gestor de bases de datos que realiza todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.
Todas estas capas pueden residir en un único ordenador (no sería lo normal), si bien lo más usual es que haya una multitud de ordenadores donde reside la capa de presentación (son los clientes de la arquitectura cliente/servidor). Las capas de negocio y de datos pueden residir en el mismo ordenador, y si el crecimiento de las necesidades lo aconseja se pueden separar en dos o mas ordenadores. Así, si el tamaño o complejidad de la base de datos aumenta, se puede separar en varios ordenadores los cuales recibirán las peticiones del ordenador en que resida la capa de negocio.
Si por el contrario fuese la complejidad en la capa de negocio lo que obligase a la separación, esta capa de negocio podría residir en uno o mas ordenadores que realizarían solicitudes a una única base de datos. En sistemas muy complejos se llega a tener una serie de ordenadores sobre los cuales corre la capa de datos, y otra serie de ordenadores sobre los cuales corre la base de datos.
Script
Es un guión, archivo de órdenes o archivo de procesamiento por lotes, vulgarmente referidos con el barbarismo script (del latín scriptum, escrito), es un programa usualmente simple, que por lo regular se almacena en un archivo de texto plano. Los guiones son casi siempre interpretados, pero no todo programa interpretado es considerado un guion. El uso habitual de los guiones es realizar diversas tareas como combinar componentes, interactuar con el sistema operativo o con el usuario. Por este uso es frecuente que los shells sean a la vez intérpretes de este tipo de programas.
Perl
Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.
Hosts
El término host («anfitrión», en español) es usado en informática para referirse a las computadoras conectadas a una red, que proveen y utilizan servicios de ella. Los usuarios deben utilizar anfitriones para tener acceso a la red. En general, los anfitriones son computadores monousuario o multiusuario que ofrecen servicios de transferencia de archivos, conexión remota, servidores de base de datos, servidores web, etc. Los usuarios que hacen uso de los anfitriones pueden a su vez pedir los mismos servicios a otras máquinas conectadas a la red. De forma general un anfitrión es todo equipo informático que posee una dirección IP y que se encuentra interconectado con uno o más equipos. Un host o anfitrión es un ordenador que funciona como el punto de inicio y final de las transferencias de datos. Comúnmente descrito como el lugar donde reside un sitio web. Un anfitrión de Internet tiene una dirección de Internet única (dirección IP) y un nombre de dominio único o nombre de anfitrión.
Telnet
Telnet (TELecommunication NETwork) es el nombre de un protocolo de red que nos permite viajar a otra máquina para manejarla remotamente como si estuviéramos sentados delante de ella. También es el nombre del programa informático que implementa el cliente. Para que la conexión funcione, como en todos los servicios de Internet, la máquina a la que se acceda debe tener un programa especial que reciba y gestione las conexiones. El puerto que se utiliza generalmente es el 23.
SSH
SSH (Secure SHell, en español: intérprete de órdenes segura) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X (en sistemas Unix y Windows) corriendo.
Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto archivos sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.
Web
En informática, la World Wide Web (WWW) o Red informática mundial1 comúnmente conocida como la web, es un sistema de distribución de documentos de hipertexto o hipermedios interconectados y accesibles vía Internet.Con un navegador web, un usuario visualiza sitios web compuestos de páginas web que pueden contener texto, imágenes, vídeos u otros contenidos multimedia, y navega a través de esas páginas usando hiperenlaces
NTP
Network Time Protocol (NTP) es un protocolo de Internet para sincronizar los relojes de los sistemas informáticos a través del enrutamiento de paquetes en redes con latencia variable. NTP utiliza UDP como su capa de transporte, usando el puerto 123. Está diseñado para resistir los efectos de la latencia variable.
STP
En comunicaciones, STP (del inglés Spanning Tree Protocol) es un protocolo de red de nivel 2 del modelo OSI (capa de enlace de datos). Su función es la de gestionar la presencia de bucles en topologías de red debido a la existencia de enlaces redundantes (necesarios en muchos casos para garantizar la disponibilidad de las conexiones). El protocolo permite a los dispositivos de interconexión activar o desactivar automáticamente los enlaces de conexión, de forma que se garantice la eliminación de bucles. STP es transparente a las estaciones de usuario.
VTP
VTP son las siglas de VLAN Trunking Protocol, un protocolo de mensajes de nivel 2 usado para configurar y administrar VLANs en equipos Cisco. Permite centralizar y simplificar la administración en un domino de VLANs, pudiendo crear, borrar y renombrar las mismas, reduciendo así la necesidad de configurar la misma VLAN en todos los nodos. El protocolo VTP nace como una herramienta de administración para redes de cierto tamaño, donde la gestión manual se vuelve inabordable.
VTP opera en 3 modos distintos:
- Servidor
- Cliente
- Transparente
HSRP
El Hot Standby Router Protocol es un protocolo propiedad de CISCO que permite el despliegue de routers redundantes tolerantes a fallos en una red. Este protocolo evita la existencia de puntos de fallo únicos en la red mediante técnicas de redundancia y comprobación del estado de los routers. Es un protocolo muy similar a VRRP, que no es propietario. Es por ello que CISCO reclama que VRRP viola una serie de patentes que le pertenecen.
DTP
DTP (Dynamic Trunking Protocol) es un protocolo propietario creado por Cisco Systems que opera entre switches Cisco, el cual automatiza la configuración de trunking (etiquetado de tramas de diferentes VLAN’s con ISL o 802.1Q) en enlaces Ethernet.
Dicho protocolo puede establecer los puertos ethernet en cinco modos diferentes de trabajo: AUTO, ON, OFF, DESIRABLE y NON-NEGOTIATE.
CDP
CDP (Cisco Discovery Protocol, ‘protocolo de descubrimiento de Cisco’, es un protocolo de red propietario de nivel 2, desarrollado por Cisco Systems y usado en la mayoría de sus equipos. Es utilizado para compartir información sobre otros equipos Cisco directamente conectados, tal como la versión del sistema operativo y la dirección IP. CDP también puede ser usado para realizar encaminamiento bajo demanda (ODR, On-Demand Routing), que es un método para incluir información de encaminamiento en anuncios CDP, de forma que los protocolos de encaminamiento dinámico no necesiten ser usados en redes simples.
DHCP
CDP (Cisco Discovery Protocol, ‘protocolo de descubrimiento de Cisco’, es un protocolo de red propietario de nivel 2, desarrollado por Cisco Systems y usado en la mayoría de sus equipos. Es utilizado para compartir información sobre otros equipos Cisco directamente conectados, tal como la versión del sistema operativo y la dirección IP. CDP también puede ser usado para realizar encaminamiento bajo demanda (ODR, On-Demand Routing), que es un método para incluir información de encaminamiento en anuncios CDP, de forma que los protocolos de encaminamiento dinámico no necesiten ser usados en redes simples.
ISL
Inter Switch Link (ISL) es un protocolo propietario de Cisco que mantiene información sobre VLANs en el tráfico entre routers y switches.
Este método de encapsulación sólo es soportado en los equipos Cisco a través de los enlaces Fast y Gigabit Ethernet. El tamaño de las tramas ISL puede variar entre 94 bytes y 1548 bytes debido a la sobrecarga (campos adicionales) que el protocolo crea en la encapsulación.
Es el método de encapsulación de Cisco para las VLAN que compite con el protocolo libre (no propietario) de IEEE 802.1Q. A pesar de que en los últimos equipos de Cisco se ha dejado de incluir este protocolo en favor del protocolo de la IEEE.
FUZZING:
El fuzzing, un termino empleado para referirse a las técnicas de software automatizadas, capaces de generar y enviar datos secuenciales o aleatorios a una o varias áreas o puntos de una aplicación, con el objeto de detectar defectos o vulnerabilidades existentes en el software auditado.
Los sistemas empleados para el ‘Fuzzing’ se llaman ‘Fuzzers’ como no podría ser de otra manera.
‘Fuzz’, desarrollado en 1990 por Barton Miller en la Universidad de Wisconsin en Madison, pasa por ser el primer fuzzer, pero hoy en día se cuentan por decenas los programas de este tipo, utilizados generalmente en tests de penetración.
En resumen, los Fuzzers son herramientas automáticas que realizan pruebas secuenciales de datos seudo-aleatorios (basados muchos de ellos en diccionarios de palabras) contra aplicaciones (tanto de cliente como servidor).
Los Fuzzers son a nivel de aplicación, no de sistemas y cubren detecciones de vulnerabilidades frente a inyecciones SQL, descubrimiento de directorios ocultos, validaciones por fuerza bruta, etc….
Existen diferentes aplicaciones del concepto de Fuzzing,…. así mismo los hay que lanzan automáticamente el navegador y prueban peticiones validas del navegador con generadores de peticiones de forma que detectan la posible vulnerabilidad del navegador, dichas vulnerabilidades, algunas pueden ser de ‘zero day’, pueden ser empleadas en creación de troyanos o gusanos que la empleen para infectar nuestros sistemas.
Aunque como os comento existen multitud de Fuzzers os voy a presentar uno de los más conocidos:
“Se llama wfuzz y es un web fuzzer, vamos, una tool para bruteforcear el protocolo HTTP, ya sea para hacer pruebas de path discovery (recursivas) o bien para bruteforcear variables, ya sean pasadas por GET o POST, headers…”
Básicamente emplea diccionarios (incluidos en la descarga) para sustituir el parámetro “FUZZ” lo pongamos donde lo pongamos por las palabras del diccionario (en el caso de las inyecciones SQL el diccionario está ya preparado con los patrones SQL más empleados y efectivos por ejemplo). Dependiendo de la prueba que estemos haciendo emplearemos un diccionario u otro.