DEV Community

Vay3t
Vay3t

Posted on • Originally published at vay3t.Medium

WTF es el Hacking?

Image description

WTF es un Hacker? (Opinión del autor)

Hacker es un título que te lo dan las mismas personas o la comunidad, por tus logros y/o habilidades en la materia. Autoproclamarse Hacker sin estas características es caer en la arrogancia. Además, ningún Hacker se llama así mismo Hacker.

Pentesting

Una prueba de penetración, o pentest, es un ataque a un sistema informático con la intención de encontrar las debilidades de seguridad y todo lo que podría tener acceso a ella, su funcionalidad y datos. [Fuente: Wikipedia]

Ciclo de vida de un ataque

  1. Reconocimiento: Es la primera fase de un ataque, en donde se obtiene información superficial del sistema o arquitectura a atacar, como descubrimiento de hosts, dominios y/o páginas web de cualquier objetivo el cual pueda ser atacado. Debemos Identificar los lenguajes de programación en el que está programado la página web que se va a atacar.

  2. Enumeración: En esta fase se identifica qué función cumple y qué tipo de servicios corren en el servidor u objetivo. También obtenemos el tipo de sistema operativo y versiones de puertos por medio de escaneos, en caso de las páginas web identificar las versiones de las tecnologías usadas. Todo esto con el fin de encontrar vulnerabilidades.

  3. Explotación: Luego de obtener información suficiente del sistema a atacar y también sus versiones, se buscan las posibles vulnerabilidades existentes, junto con eso se buscan los exploits o se fabrican pruebas de concepto para así explotar la vulnerabilidad (aprovechar el bug) y sacar provecho de ello.

  4. Post-Explotación: Ya cuando estás dentro del sistema, después de haber explotado las vulnerabilidades que te permitan hacerlo, necesitas ganar acceso persistente en el sistema para luego capturar las contraseñas guardadas, obtener llaves de acceso, acceso a la red interna de un servidor expuesto en internet, aprovechar los recursos del servidor para beneficio propio como ataques de denegación de servicio, phishing, y por último después de hacer todo esto se realiza un borrado de huellas.

Tipos de pentestings

  • Black Box: Es el tipo de pentesting donde no tienes información previa del objetivo (target).

  • Grey Box: Cuando tienes cuentas de usuario del objetivo (target) el cual facilita la explotación interna cuando empiezas a realizar el ataque.

  • White Box: Significa que tienes información de la infraestructura o el código fuente del objetivo (target) al iniciar el pentesting.

Inteligencia en el ataque

Es la información que obtienes y de cómo le puedes sacar provecho a ello.

  • Ejemplo práctico: Existe un formulario en una página web donde puedes poner un RUT/DNI y te devuelve un correo.

  • Acción criminal: En Chile, años atrás, el Servel de vez en cuando liberaba la información de todas las personas mayores de 18 (Nombre, RUT, sexo, dirección, comuna). Entonces tú al consultar el RUT asumes que te devuelve el correo del respectivo RUT. Además, el RUT es un entero de 7 a 8 dígitos más un dígito verificador, este dígito verificador es una fórmula conocida, por lo cual no es necesario conocerlo. Conociendo el correo de una persona es posible realizar un spear phishing aprovechando la información del Servel.

Phishing

Se produce un ataque de suplantación de identidad (phishing) cuando alguien trata de conseguir que reveles información personal en línea.

¿Cómo suele hacerse la suplantación de identidad?

Por lo general, la suplantación de identidad se realiza por correo electrónico, anuncios o sitios que tienen un aspecto similar a los que usas. Por ejemplo, alguien que te envía un correo electrónico que parece proceder de tu banco para que le des información sobre tu cuenta bancaria. Los correos electrónicos o sitios de suplantación de identidad podrían solicitar lo siguiente:

  • Nombres de usuario y contraseñas, incluidos los cambios de contraseña
  • Números de identificación personal Números de cuentas bancarias
  • PIN (Números de identificación personal)
  • Números de tarjetas de crédito
  • Apellido de soltera de tu madre
  • Tu fecha de nacimiento

Fuente: https://support.google.com/mail/answer/8253?hl=es-419

Para atacar al enemigo debes conocerlo

Una forma efectiva de poder tener mejores nociones de seguridad y entender mejor cómo atacar un sistema, es usar la tecnología o haber programado en tal lenguaje, por ejemplo, para saber cómo atacar mejor un Wordpress, es conocimiento útil ya haber instalado y configurado anteriormente el CMS porque sabes cómo está estructurado.

Cómo funciona la red e internet

Al acceder a una página web, tu sistema operativo utiliza al navegador como cliente, el cual se conecta al del dominio o dirección IP e interpreta el servicio que provee el servidor.

  • MAC address: La dirección MAC (siglas en inglés de Media Access Control) es un identificador único de 6 bloques de dos caracteres hexadecimales de una tarjeta o dispositivo de red. Se la conoce también como dirección física, y es única para cada dispositivo. Ej: 1A:2B:CB:D4:EE:F6

  • IP address: La dirección IP es un conjunto de números que identifica, de manera lógica y jerárquica, a una interfaz en red de un dispositivo. Ej: 1.1.1.1, 255.255.255.0

  • IP privada: Es la IP que te asigna el router para poder navegar de forma interna en la red local.

  • IP pública: Es la IP que es accesible desde cualquier lugar del mundo desde un proveedor de servicios de internet.

  • puerto: Es el número de identificación de un servicio en concreto. Cada host tiene disponible 65536 puertos enumerados desde el 0 al 65535. Cuando estableces conexión con un servidor es fundamental que el servidor tenga un puerto disponible para su entrada. Cuando te conectas a una página web, el cliente que vendría siendo el navegador, se conecta al puerto 80 o 443 del servidor. Pero también ocurre otra cosa, cuando te conectas a un servidor, el cliente usa un puerto que es superior al 1024 para conectarse a él. Más abajo existe un ejemplo gráfico de cómo funciona. Existen puertos conocidos como los siguientes:

    • ftp: 21
    • ssh: 22
    • http: 80
    • https: 443

Algunos conceptos necesarios para seguir entendiendo las redes son:

  • router: El artefacto que está en tu casa que permite que tengas internet y esté todo conectado a la misma red.
    red local (LAN): Por dar un ejemplo es la red del router de tu casa, no del internet en general, solo de tu casa.

  • wifi: Protocolo de conexión inalámbrica a la red.
    ethernet: Conexión por cable a la red.

  • host: Es un dispositivo como computadora, laptop, teléfono inteligente, servidor, que esté conectado a la red.
    cliente-servidor: Un cliente realiza peticiones a otro host, el servidor, quien le da la respuesta de esa petición.

  • dominio: Es la traducción de una IP a un nombre, usualmente este está compuesto por 2 partes, el nombre y el tld. Ej: midominiounicoyespecial.com (dominio.tld)

  • subdominio: Es una subdivisión del dominio. Se compone por 3 partes, el nombre de la subdivisión, el nombre del dominio, y el tld. Ej: subdom.midom.com

Esquema de conexión Cliente — Servidor

+-----------+                               +------------+
|           |        172.16.18.2:80         |            |
|           |  +------------------------->  |            |
|           |                               |            |
|  Cliente  |                               |  Servidor  |
|  Firefox  |                               |    web     |
|           |      172.16.20.34:36894       |            |
|           |  <-------------------------+  |            |
|           |                               |            |
+-----------+                               +------------+
*172.16.20.34*                              *172.16.18.2*
Enter fullscreen mode Exit fullscreen mode

Protocolos de internet

TCP y UDP son dos protocolos fundamentales para las comunicaciones a través de Internet.

TCP (Transmission Control Protocol) es un protocolo orientado a la conexión, lo que significa que antes de enviar datos, se establece una conexión entre dos dispositivos. Es un protocolo confiable que garantiza que los datos se transmitan de manera segura y completa a través de la red. TCP incluye mecanismos de retransmisión de paquetes perdidos, control de flujo y control de congestión. Es ampliamente utilizado en aplicaciones que requieren una transmisión de datos precisa y confiable, como correo electrónico, transferencias de archivos y transacciones bancarias en línea.

UDP (User Datagram Protocol) es un protocolo sin conexión, lo que significa que los dispositivos no necesitan establecer una conexión antes de transmitir datos. Es un protocolo más rápido y eficiente que TCP, ya que no incluye los mecanismos de control de errores y congestión. UDP es utilizado principalmente en aplicaciones donde la velocidad es más importante que la precisión, como juegos en línea, transmisiones de video en vivo y voz sobre IP.

En resumen, la principal diferencia entre TCP y UDP es que TCP es un protocolo orientado a la conexión y confiable, mientras que UDP es un protocolo sin conexión y no confiable pero más rápido. La elección del protocolo depende de las necesidades específicas de la aplicación y la red en la que se utiliza.

Image description

Software y lenguajes de programación

El software es un conjunto de programas que se ejecutan en un ordenador o dispositivo electrónico, dividido en software de sistema y software de aplicación. Algunos lenguajes de programación son los siguientes:

  • C/C++ en el hacking es usado para la creación de backdoors que pueda evadir AV/EDR o exploits de escalada de privilegios local. Es un lenguaje difícil de aprender y de bajo nivel.

  • Python es un lenguaje de programación de alto nivel, fácil de leer y escribir. En el hacking se usa para casi cualquier cosa, desde servidores para recibir conexiones en casi todos los protocolo, desarrollo de exploits por lo general webs y Buffer Overflows, herramientas de redes, bots de Telegram, análisis estático de binarios, automatización de enumeración/ataques y así podría seguir hasta aburrirlos.

  • Go es tan flexible como Python, pero requiere un poco más de esfuerzo para aprender debido a su nivel de dificultad ligeramente superior. La gracia de este lenguaje es el fácil manejo de concurrencia y la compilación cruzada.

  • Javascript es un lenguaje de programación esencial para el desarrollo web moderno. También existe su formato Backend que es NodeJS y su derivado Typescript. Muchos sitios están en Javascript tanto Frontend como Backend por lo cual siempre es útil conocerlo.

  • Bash es un lenguaje de programación utilizado en sistemas operativos *Nix (Unix y Linux) para automatizar tareas mediante scripts y para interactuar con el sistema operativo mediante la línea de comandos, da mayor flexibilidad para realizar funciones de administración de sistema operativo, por lo que tienes un mayor control del sistema operativo por lo cual optimiza los tiempos de programación usando más recursos.

  • PowerShell permite a los usuarios interactuar con el sistema operativo de Windows mediante la línea de comandos, y también permite la automatización de tareas mediante la escritura de scripts. En el hacking sirve para vulnerar Windows más fácilmente.

  • Java es un lenguaje de programación popular y versátil utilizado en una amplia variedad de aplicaciones de software. Sirve para desarrollar módulos para Burpsuite y es ampliamente usado por lo que se recomienda aprenderlo para entender como funciona las tecnologías.

  • Rust puede ser considerado el reemplazo moderno y seguro de C/C++, aun así el compilador de Rust ocupa gcc. Es usado para backdoors que evadan AV/EDR y herramientas de post-explotación como volcador de memoria y herramientas de red.

Lenguajes compilados, interpretados y administrados

Los lenguajes de programación se dividen en tres categorías: compilados, interpretados y administrados. Los lenguajes compilados traducen el código a lenguaje de máquina antes de la ejecución, mientras que los lenguajes interpretados lo hacen en tiempo de ejecución. Los lenguajes administrados utilizan una máquina virtual para ejecutar el código en lenguaje de bajo nivel. C/C++, Go, Rust y C# son compilados, Python, Javascript, Bash y PowerShell son interpretados, y Java con C# son administrados.

Lenguajes recomendados

Los lenguajes que sirven para temas de hacking y seguridad ofensiva de propósitos generales son: Python, Bash, Go, C/C++ en ese orden de importancia dado a que con esto tendrás la suficiente libertad para ser independiente de las herramientas creadas o tener la suficiente flexibilidad de modificarlas y mejorarlas. Un plus seria aprender PowerShell y C# para la explotación de redes Microsoft.

Conclusión

En el area del hacking es fundamental contar con sólidos conocimientos en redes, sistemas operativos y programación, ya que al ser multidisciplinario proporciona las herramientas necesarias para destacar en la mayoría de las áreas. En esta disciplina es necesario la habilidad, versatilidad, creatividad y genialidad del adversario, capaz de resolver problemas informáticos para lograr vulnerar el componente objetivo usando solo el conocimiento actual a la fecha, sus herramientas e Internet.

Top comments (0)