1.1.1. Medios técnicos y digitales
Medios técnicos y digitales de las redes informáticas
En un primer nivel se encuentra los medios materiales: conjuntos de máquinas y accesorios que identificamos como antenas, satélites, equipos informáticos, conmutadores, routers… Todos ellos son hardware más o menos complejo que operan con transistores, conmutadores electrónicos, chips, cables y circuitos sobre los que se funda la tecnología digital (almacenamiento, procesamiento, trasmisión información en formato de lógica binaria, empleando sistemas de tensión eléctrico).
Este hardware está controlado por lo que se denomina el firmware, que es el conjunto de instrucciones (software) de más bajo nivel que controla la interacción de los chips y permite operar de una forma determinada. Este firmware puede encontrarse comúnmente en las placas base de los ordenadores y sus procesadores, en los coches, televisores y otros aparatos de cualquier índole.
Además del firmware, los procesadores principales de las máquinas (CPU) pueden efectuar operaciones complejas para procesar información cuando reciben instrucciones provenientes de un software específico. No obstante, mientras que los procesadores de las máquinas están diseñados para comprender en sistema binario (1 y 0 empleando sistemas de tensión eléctrica), este sistema resulta incomprensible para los seres humanos y sería improbable desarrollar un software o conjunto de instrucciones concretas con solo unos y ceros. Es por ello que de acuerdo a diferentes sistemas de abstracción, se han definido lenguajes de más medio y alto nivel para poder definir con claridad las instrucciones y datos que las máquinas deben procesar a través de un software.
1.1.1.1. Compilación de software: Arquitectura de CPU (32, 64 bits)
Entre el lenguaje binario de máquina y los lenguajes de alto nivel mencionados, existen las operaciones que efectúan el software de compilación y los lenguajes ensambladores que permiten delinear un grado de traducibilidad entre seres humanos y máquinas (es decir, entre lenguajes). Son los programadores, los que empleando los lenguajes de más alto nivel que se enseñan en los grados de informática (C/C++, Visual Basic, Java, Cobol…) desarrollan el código fuente que compone el software, que una vez compilado en lenguaje máquina controla las instrucciones que la máquina debe ejecutar. No obstante, las CPU modernas compuestas por microchips, están definidas por arquitecturas de funcionamiento diferentes en función del tamaño de los bloques de información que son procesados.
Principalmente, estos bloques pueden ser de 32 o 64 bit. A la hora de compilar un código fuente elaborado en un lenguaje de alto nivel, es un requisito indispensable, en función del tipo de compilador, indicar para que arquitectura vamos a crear el software que va a ser ejecutado en la CPU. Así pues, todo el software que deba ser procesado en la CPU deberá estar compilado de acuerdo a su arquitectura. A la hora de crear o alterar un software para llevar a cabo un ataque informático, deberá pensarse cuál es la arquitectura del dispositivo u ordenador de la víctima potencial. Los tipos principales que se encuentran:
- 32 bits: Software que se identifica principalmente por x86, x32, i386, i686
- 64 bits: Software que se identifica principalmente por x64, AMD64, x86_64.
1.1.1.2. Tipos de software
La siguiente clasificación del software es genérica y se refiere a la importancia dentro del contexto de las funciones globales o particulares que se espera desarrolle un software en relación al dispositivo que procesa datos. Se puede distinguir entre:
Software de Sistema
- El software de sistema más importante es el sistema operativo (SO). Este software es en realidad un conjunto de software que se encarga, entre otras muchas tareas, de gestionar y administrar la información que procesa el hardware (CPU, disco duro, memoria RAM…), proporcionar servicios y librerías a otro software y en última instancia ofrecer una interfaz gráfica a los usuarios para que puedan hacer uso de una forma amigable de todo el conjunto de recursos.
- Los sistemas operativos más conocidos para ordenadores personales son Microsoft Windows, macOS, las diferentes variantes de GNU/Linux y Android e iOS para teléfonos móviles. Además, existen otros muchos sistemas operativos especializados que se han programado desde cero o específicamente para máquinas particulares.
Software de Aplicación
- Pertenece a esta categoría todo el software que no es nativo del sistema operativo y que normalmente el usuario ha ido incorporando para realizar determinadas tareas: bases de datos, software empresarial, videojuegos, navegadores de internet, paquetes ofimáticos, software de encriptación de comunicación entre redes informáticas, etc. En función del ámbito se puede llamar programas (informáticos) o aplicaciones.
- El software de aplicación emplea las librerías y recursos que proporciona el sistema operativo, es por ello que este es diseñado específicamente para un determinado sistema operativo con algunas excepciones.
Este epígrafe sirve para indicar que al realizar un ataque informático y proceder a corromper un determinado software que sea potencialmente dañino para la víctima, el atacante deberá prever el sistema operativo del objetivo. Adicionalmente, mencionar que el vector de ataque se puede producir bien desde un software nativo que proporcione el sistema operativo, o bien empleando un programa o aplicación que pueda ser ejecutado en la máquina para este sistema operativo.
1.1.1.3. Estructura y distribución del software: archivos, memoria y formatos
Las nociones abstractas acerca del software tienen una implicación física directa. El software está contenido en paquetes de información (conjunto de bytes) almacenados como datos en dispositivos de memoria física que emplean sistemas de grabación magnética. Los dispositivos más comunes de almacenamiento de datos son los discos duros. Puede interpretarse la forma en que un disco duro aloja el software de una computadora como una extensa cinta de ceros y unos que van alternándose (en función de su capacidad de almacenamiento: 200 GB, 1TB, etc.). El sistema operativo se encarga de segmentar la serie de ceros y unos en paquetes de bytes por tamaños homogéneos (clústers), los cuales también les corresponde una suerte de dirección de almacenamiento o secciones en donde ubicar el software de forma lógica (como los edificios numerados en las calles en una ciudad). Así pues, gracias al sistema operativo la información del disco duro cobra un sentido cuando es asignada e interpretada por el procesador y el resto de instrucciones inherentes al sistema operativo.
Los sistemas operativos también disponen de la capacidad para ordenar y gestionar la memoria y hacer efectiva la correlación con un archivo concreto, es decir, el uso de un sistema de archivos que administra la disposición de los ficheros que conforman un software los cuales tienen unos espacios de memoria reservados en diferentes secciones del disco duro. A su vez, este sistema es representable a través de la interface de usuario que proporciona el sistema operativo, de modo que podemos distinguir claramente en formato compacto los archivos que componen un software a través de una estructura jerárquica de directorios o carpetas que puede reconocer cualquier usuario medio de informática: carpeta1/subcarpeta1/archivo
Aunque el sistema de archivos de un sistema del sistema operativo permita establecer un orden jerárquico de archivos y carpetas, lo cierto es un software no es una unidad monolítica compuesto de un solo fichero. Los archivos que se pueden encontrar en cualquier sistema son de una extensa gama de tipos. En Microsoft Windows son identificados a través de la extensión (.png para imágenes, .exe para archivos ejecutables, .html para páginas web, .dll para bibliotecas de enlace dinámica, etc.). Aunque otros sistemas operativos puede que no hagan uso del sistema de extensiones de la misma forma, en todo caso es un patrón bastante común que permite al sistema operativo identificar con que aplicación o programa va a abrir (ejecutar) el archivo.
A continuación una clasificación de tipos de archivos con algunas de sus características, enfocada a la práctica de un ataque informático con el fin de comprender como operan estos archivos dentro de un sistema operativo y su interrelación:
- Archivos de formato estándar: Formatos universales como son texto plano (.txt), imágenes (.png, .jpg, etc.), audio (.mp3, .wav, etc.), vídeo… Los sistemas operativos suelen proporcionar aplicaciones y software básico nativo que permiten abrir el archivo y obtener su información, por lo que son intercambiables entre sistemas operativos. No suelen ser un vector de ataque común.
- Archivos de aplicación: Se encuentran dentro de estos otros tipos de formato estándar relacionados con aplicaciones de ofimática, bases de datos, etc. así como archivos derivados de programas informáticos de diversa índole. Los primeros son por antonomasia un vector de ataque clásico; por ejemplo los ficheros con formato de texto que contiene macros (.doc, o .docx para Microsoft Office). Requieren de un programa que permita abrir este tipo de archivos.
- Archivos de código ejecutable: Es resultado de la compilación de un código fuente, normalmente enlazado a otros archivos que le sirven de soporte. Como indica el nombre, proporcionan el acceso principal a una aplicación o programa, es decir, permiten una ejecución directa desde el sistema operativo que la máquina sabe interpretar, por eso se dicen binarios también. El tipo de archivo por antonomasia son los que tienen la extensión .exe para Microsoft Windows. En un software complejo, estos archivos deben recurrir a rutinas y bibliotecas complementarias que proporciona el sistema operativo u otros archivos adjuntos (librerías de funciones) para optimizar los recursos de la memoria del sistema y que el espacio que pueda ocupar el archivo ejecutable sea menor una vez compilado el código fuente. Sobre este tipo de archivos se pueden efectuar varias técnicas útiles como vectores de ataque: desde insertar un software malicioso oculto sobre un ejecutable benigno que se activa al ejecutar el archivo o hallar una vulnerabilidad que pueda comprometer el sistema (sobre todo cuando se trata de software de redes).
- Archivos de biblioteca, librería o extensión de aplicación: Son ficheros independientes al programa ejecutable que se hallan en repositorios particulares del sistema operativo o bien se han creado específicamente para un programa. Se cargan bajo demanda del ejecutable cuando es requerido. Contienen funciones adicionales que requiere el archivo ejecutable. Como se ha indicado arriba, el uso de estas librerías redunda en determinadas ventajas. En Microsoft Windows se pueden reconocer algunos de estos archivos por su extensión .dll. Aunque estos archivos no son ejecutables de forma directa, es posible crear archivos de biblioteca como malware específico que puede ejecutarse en la máquina víctima con las técnicas adecuadas.
- Archivos de funciones de código e internet: Algunos programas o software con capaces de interpretar y por lo tanto ejecutar el contenido de archivos compuestos por líneas de código escrito en un lenguaje de alto nivel (Python, Ruby, JavaScript, etc.). A diferencia del proceso que se ha explicado en el que se compila un código para obtener un binario ejecutable (.exe), estos intérpretes compilan el código mientras las instrucciones de este son procesadas (es decir, no requiere un paso previo de compilación intencionado por el programador). Dentro de esta categoría están también el amplio abanico de archivos que permiten componer las páginas web y que están escritos en diferentes lenguajes y derivados: HTML, CSS, PHP, ASP.NET, etc. Conviene reconocer los diferentes archivos a través de sus extensiones (.html, .py, .css, .rb, .php…) y su funcionamiento concreto, pues permiten ampliar el rango de vectores de ataques disponibles de manera considerable.
Aunque existen muchísimos más tipos de ficheros con funciones específicas, librerías para lenguajes de programación que amplían funcionalidades, etc., esta vaga clasificación sirve para mostrar que un programa o software determinado, en realidad está compuesto por un conjunto de archivos que interactúan de forma conjunta con otros recursos del sistema operativo a través de llamadas recíprocas cuando se cargan en la memoria principal de la CPU.
1.1.1.4. Software para redes
El software para redes lo componen los diferentes programas y aplicaciones cuyo objetivo es suministrar una serie de funcionalidades relacionadas con las operaciones en la red. Entre estas funciones se encuentran el acceso remoto a otro dispositivo, subministrar diferentes servicios (transferencias de archivos entre máquinas, un servidor que aloja una aplicación web, correo electrónico, etc.) y proporcionar las direcciones de los dispositivos conectados para asegurar que la información llega a destino.
La comunicación en las redes se guía por los estándares de los protocolos de conexión de red, que han sido elaborados como normas reconocidas internacionalmente. La comunicación que se produce entre los equipos de una red se resuelve en el intercambio de paquetes de bytes que a través de los protocolos de redes cobran un sentido al contener información acerca de la dirección y el contenido que la máquina destinataria debe saber interpretar. Algunas de las características del software de redes:
- Software de aplicación: Puede ser proporcionado por el sistema operativo o bien debe adquirirse a través de medios comerciales o gratuitos. Se puede distinguir principalmente dos tipos de software para redes:
- Software de control: Hallamos cortafuegos en versión software, proxys, etc. que regulan las comunicaciones habilitando o restringiendo el acceso a unos determinados recursos o máquinas.
- Software de gestión de servicios: Este software se encarga de proporcionar la comunicación entre máquinas conectadas a una red, permitiendo el acceso a los recursos o información a través de los diferentes protocolos.
- Cliente/Servidor: Cuando se habla de proporcionar un recurso o servicio, se debe establecer una distinción en cuanto al software de red empleado en las máquinas que operan en el intercambio de información. Es software de tipo cliente el que solicita un determinado servicio a través de peticiones a un software servidor. El software servidor es el que se encarga de proveer la información o servicio correspondiente.
- Grandes Servidores: Es habitual en jerga informática, referirse a servidores a las máquinas u ordenadores que por sus características de hardware y software de alta potencia, permiten gestionar un elevado número de peticiones de clientes. Este tipo de arquitectura es válida para diferentes tipos de protocolos de comunicación como se verá en diferentes secciones (SSH, HTTP, FTP…). Los grandes servidores puede ser de acceso público o privado, en función de si el acceso a ellos está restringido a redes locales (por ejemplo, una red informática empresarial) o bien son accesibles a través de redes de acceso general como es internet (por ejemplo, un servidor que aloja una web).