Este documento presenta una introducción a la gestión remota de equipos con Python. Explica brevemente quién es el autor y su experiencia. Luego proporciona una introducción al lenguaje de programación Python, incluida su filosofía, influencias y cronología. Finalmente, discute cómo Python se puede aplicar a redes, permitiendo la configuración remota de equipos de manera más rápida que mediante línea de comandos o SNMP.
1. Gestión Remota de Equipos
con Python
ING. JUAN RODRÍGUEZ
NOISE CIBER SEGURIDAD
2. ¿Quién es Juan Rodríguez?
• 4 años programando PHP Freelance (tenía que hacer
algo en mis tiempos libres de la U)
• 2 años como programador senior PHP.
• 7 años como encargado de middleware en un
procesador de tarjetas.
– Inicio en el área de la seguridad.
– Implementador y facilitador de soluciones para PCI DSS.
– Creación de políticas, aplicación de controles y verificación
de los mismos.
• Mas de un año de trabajo con NOISE.
3. ¿Qué es Python?
Python es un lenguaje de programación
interpretado, su filosofía es basada en hacer un
énfasis en la sintaxis ordenada para poder
obtener un código legible.
7. Python aplicado a redes
Python y las redes nacen como una solución a
los tiempos largos de respuesta de equipos
puesto que se configuran remotamente por La
línea de Comando (CLI) o mensajes MIB bajo el
protocolo SNMP comúnmente utilizado en los
sistemas de gestión remota.
8. Antes de continuar unas preguntas
• ¿Cuántos son Sysadmin?
• ¿Cuántos son Netadmin?
• ¿Cuántos son Programadores?
• ¿Quiénes ya han programado en Python?
11. Antes de continuar
• ¿Tienen Python instalado?
• Usuarios de Linux lo poseen por defecto ya
que viene preinstalado en la mayoría de
distibuciones.
• Usuarios de Windows se proporcionará el
instalador.
12. Palabras Clave
Python posee dos tipos de palabras reservadas
las palabras clave y las funciones, la gran
diferencia es que las palabras fueron concebidas
cuando fue escrito el núcleo del lenguaje y
algunas no necesitan parámetros, y las
funciones han sido agregadas al núcleo de
Python y necesitan parámetros o al menos
ponerle "()" al final.
13. Ejemplo de palabras clave
Palabra Clave Descripción
True Valor booleano
False Valor booleano
None Valor
and Operador booleano
or Operador booleano
not Operador booleano
as Sirve para “renombrar” una librería o sub-librería
assert Evalúa una variable o una condición y si el valor el
False imprime o muestra un error
if Inicia una estructura if o switch/case
else Continúa la estructura if o termina la estructura case
elif Continua la estructura switch/case
14. Ejemplos de funciones
Función Descripción
abs() Devuelve el valor absoluto de un numero
all() Devuelve verdadero si todos los elementos en un objeto
iterable son verdaderos
any() Devuelve verdadero si cualquier elemento en un objeto
iterable es verdadero
ascii() Devuelve una versión legible de un objeto
bool() Devuelve el valor booleano de un objeto
dict() Devuelve un arreglo de un diccionario
dir() Devuelve una lista de propiedades y métodos de un objeto
divmod() Devuelve el cociente y el sobrante cuando el argumento “a” es
dividido entre el argumento “b”
enumerate() Toma una colección (lista, tupla,etc) y la devuelve como objeto
enumerado
eval() Evalúa y ejecuta una expresión
exec() Ejecuta el código especificado
15. Identificadores
Los identificadores son los nombres que pueden
tener las variables, como en todo lenguaje de
programación, Python tiene ciertas reglas para
los identificadores de las variables:
• No puede comenzar con digito
• Es case sensitive (distingue entre mayúsculas y
minúsculas)
• No pueden ser palabras reservadas
26. Librería Scapy
Una herramienta poderosa de manipulación de
paquetes que permite forjar paquetes de una
amplia variedad de protocolos.
27. ¿Que podemos hacer con esto?
Utilizar la librería Scapy de Python para:
• Crear paquetes personalizados.
• Verificar la salud de los paquetes de la red.
• Esconde información en los campos no
utilizados de las cabeceras.
• Escaneo de red y descubrimiento de equipos.
• Pero solo tenemos 4 horas, asi que subiremos
a la capa 7
32. Llamadas de sistema
Si no deseamos utilizar librerías adicionales y
poseemos otras aplicaciones instaladas que
pueden realizan la operación solicitada,
podemos invocarlos por medio de una llamada
de sistema.
33.
34.
35. RETO
Crear un script que escanee una red e
identifique todos los equipos que posean el
puerto TCP(80) abierto.
38. Ejecutar un comando remoto por SSH
Para ejecutar un comando remoto no es
necesario mantener una sesion persistente.
39. ¿Es necesario utilizar siempre un
password?
No, se pueden implementar llaves de cifrado sin
contraseña.
40. Contraseña vs Llaves en SSH
Contraseña Llave
Definición Una frase secreta creada
por un usuario
Una frase creada por un
sistema para bloquear o
desbloquear funciones
criptográficas
Usado en Cifrado, autenticación Cifrado, autenticación,
certificados digitales,
comunicaciones seguridad
Aleatoriedad Puede contener datos no
aleatorios como palabras
de diccionarios
Usualmente cercano a lo
aleatorio
Fuente: https://simplicable.com/new/password-vs-key
41. Creación de llaves en linux
• Crear un usuario al cual se estará conectando el equipo.
• Aplicar reglas de control administrativo (sudo) según sea
necesario.
• Crear par de llaves.
• Deshabilitar el uso de contraseña para el inicio de sesion
(solo llave) para el usuario dado.
• Intercambiar la llave con el cliente (o usuario que se
conectará).
• …
• Profit!!
43. ADVERTENCIA
La siguiente configuración representa un falla de
seguridad, sin embargo, se utilizará de esta
forma para facilitar los fines educativos de la
ejecución de comando administrativos.
Nunca utilizar de dicha forma en ambientes
productivos.
46. El correcto uso de sudo
• Únicamente permitir los comando necesarios.
• Utilizar rutas completas para especificar
comandos.
• Especificar los switches (parámetros) que podrá
ejecutar con ese comando.
• Nunca utilizar un usuario con todos los privilegios
para conexiones remotas.
Recomendado: http://toroid.org/sudoers-syntax
58. ¿Cuál es la ventaja de ejecutar
comandos remotos?
Se pueden automatizar tareas acorde a la
necesidad y ambientes del negocio como:
• Enrutamiento.
• Reglas de firewall.
• Configuración de VPN.
• Estadísticas de uso de recursos.
• Reinicios programados, etc.
59. Procesando la salida de comandos
En Python es posible ejecutar funciones sobre
cadenas para poder procesar la salida de texto,
realizar cortes y obtener subcadenas:
60. RETO
Obtener la IP privada de alice y bob y ejecutar
un ping (-c 1) al Gateway para obtener el tiempo
de respuesta.
61. Los comandos remotos son útiles,
pero…
• Es necesario realizar un parsing por comando
generado de lo devuelto.
• Debemos considerar todos los posibles casos
de uso.
65. ¿Cuál es la gran ventaja de fabric?
Muchas, pero una de ellas es que nos permite
ejecutar un comando en múltiples equipos (lo
siguiente es de la documentación):
66. API’s de fabricantes
La adopción de Python ha sido tal que muchos
fabricantes han creado sus API’s para conectarse
directamente, entre ellos tenemos:
• Fortinet
• Cisco
• Juniper
68. Python en los equipos de red
Cisco incluye Python en sus equipos para la
creación de scripts por medio del “Cisco Python
Module”.
https://www.cisco.com/c/en/us/td/docs/ios-
xml/ios/prog/configuration/166/b_166_progra
mmability_cg/python_api.html
70. ¿Dónde más puedo utilizar Python?
El internet of things y el mundo maker nos ha
traído muchas cosas interesante:
71. Micropython
Una versión reducida de Python 3 diseñana para
correr de forma nativa en microcontrolador. En
uso con ESP8266 y ESP32 se puede crear un
sistema de monitoreo conectado a WiFi o de
visualización de alertas con modelos que poseen
LCD.
72. En conclusión
• Cada ambiente es diferente a otro, asi como cada
fabricante es diferente, debemos hacer planes de
acuerdo a cada infraestructura.
• Puntos clave a monitorear en la red: uso de
recursos, carga en CPU, cantidad de conexiones
recurrentes, eventos de error, etc.
• Python es un lenguaje multiplataforma por lo que
no debemos enfocarnos a que es algo atado a
Linux.