|
Hacking Bajo la Lupa |
NIVEL
TÉCNICO  |
|  |
SNMP, un
protocolo tan práctico como inseguro
Consulting
Director
Tecnopatagonia S.A. |
SNMP
(Simple Network Management Protocol) es un protocolo
utilizado para la gestión de los distintos dispositivos de red, que
utiliza la capa de transporte de TCP/IP mediante el envío de datagramas
UDP. Además, está cubierto por un gran número de RFCs (Request For Comments)
en sus versiones 1, 2 y 3.
¿Cómo
Funciona?
Las variables
ofrecidas para consulta por los agentes SNMP se definen a través de
una MIB (Management Information Base) que es una forma de determinar
la información que ofrece un dispositivo SNMP y la forma en que se representa.
Cada agente SNMP ofrece información dentro de una MIB, tanto de la general
(definida en los distintos RFCs) como de aquellas extensiones que desee
proveer cada uno de los fabricantes. Así, los fabricantes de routers
han extendido las MIBs estándar, incluyendo información específica de
sus equipos.
Los dispositivos
administrados son supervisados y controlados usando cuatro comandos
SNMP básicos:
-
Lectura:
para supervisar elementos de red.
-
Escritura:
para controlar elementos de red.
-
Notificación:
para reportar eventos cuando estos ocurren.
-
Operaciones
transversales: para saber qué variables soporta un dispositivo.
¿Qué
podemos hacer con SNMP?
-
Monitorear
el estado de un enlace para detectar cuándo está congestionado.
-
Que una
impresora alerte al administrador cuando no tenga más papel.
-
Que un
servidor envíe un alerta cuando la carga del sistema aumente a cierto
nivel.
-
Permite
la modificación remota de la configuración de los dispositivos,
es decir, permite modificar una IP y ejecutar un comando (si el
agente ofrece las funcionalidades necesarias).
¿Por qué este protocolo puede ser inseguro?
Como
generalmente ocurre la mayoría de las instalaciones de este servicio
queda por default es posible realizar la técnica "SNMP walk"
y obtener información que suele ser sensible, veamos en este ejemplo
que es posible obtener con snmp walk:
Enumeración
y Reconocimiento: Utilizaremos la comunidad “public” para enumerar
un host que corre SNMP.
|
#snmpwalk -c public 200.0.0.99
1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 = STRING:
Hardware: x86 Family 15 Model 3 Stepping 3 AT/AT COMPATIBLE
- Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor
Free)
SNMPv2-MIB::sysObjectID.0 = OID:
SNMPv2-SMI::enterprises.311.1.1.3.1.1
SNMPv2-MIB::sysUpTime.0 = Timeticks:
(10243556) 1 day, 4:27:15.56
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING:
CLIENTE
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER:
76 |
Nombres
de las Interfaces:
|
IF-MIB::ifDescr.1 = STRING: net0
IF-MIB::ifDescr.2 = STRING: lo0
IF-MIB::ifDescr.3 = STRING: atl0
IF-MIB::ifType.1 = INTEGER: iso88023Csmacd(7)
IF-MIB::ifType.2 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.3 = INTEGER: softwareLoopback(24) |
Reconocimiento
de Dispositivos y direcciones IP:
|
IF-MIB::ifPhysAddress.1 = STRING:
0:90:27:cb:58:a9
IF-MIB::ifPhysAddress.2 = STRING:
IF-MIB::ifPhysAddress.3 = STRING:
IP-MIB::ipAdEntAddr.127.0.0.1
= IpAddress: 127.0.0.1
IP-MIB::ipAdEntAddr.200.0.0.100
= IpAddress: 200.0.0.100 |
Enumeración
de Usuarios:
|
#snmpwalk
-c public 200.0.0.99 1.3.6.1.4.1.77.1.2.25
SNMPv2-SMI::enterprises.77.1.2.25.1.1.6.65.83.80.78.69.84 =
STRING: "ASPNET"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.7.67.108.105.101.110.116.101
= STRING: "Cliente"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.8.73.110.118.105.116.97.100.111
= STRING: "Invitado"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.12.73.85.83.82.95.67.76.73.69.78.84.69
= STRING: "IUSR_CLIENTE"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.12.73.87.65.77.95.67.76.73.69.78.84.69
= STRING: "IWAM_CLIENTE"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.13.65.100.109.105.110.105.115.116.114.97.100.111.114
= STRING: "Administrador"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.16.83.85.80.80.79.82.84.95.51.56.56.57.52.53.97.48
= STRING: "SUPPORT_388945a0"
SNMPv2-SMI::enterprises.77.1.2.25.1.1.18.65.115.105.115.116.101.110.116.101.32.100.101.32.97.121.117.100.97
= STRING: "Asistente de ayuda" |
Recursos
compartidos:
|
#snmpwalk -c public 200.0.0.99
1.3.6.1.4.1.77.1.2.27
SNMPv2-SMI::enterprises.77.1.2.27.1.1.1.68
= STRING: "D"
SNMPv2-SMI::enterprises.77.1.2.27.1.1.9.73.109.112.114.101.115.111.114.97
= STRING: "Impresora"
SNMPv2-SMI::enterprises.77.1.2.27.1.1.10.73.109.112.114.101.115.111.114.97.50
= STRING: "Impresora2"
SNMPv2-SMI::enterprises.77.1.2.27.1.1.12.68.111.99.117.109.101.110.116.111.115.32.99
= STRING: "Documentos c"
SNMPv2-SMI::enterprises.77.1.2.27.1.1.15.83.104.97.114.105.110.103.32.70.111.108.100.101.114.115
= STRING: "Sharing Folders"
SNMPv2-SMI::enterprises.77.1.2.27.1.1.22.68.111.99.117.109.101.110.116.115.32.97.110.100.32.83.101.116.116.
105.110.103.115 =
STRING: "Documents
and Settings" |
En estos ejemplos
es posible ver que se obtuvo una cantidad grande de información de reconocimiento,
sistemas operativos, mac address, direcciones ip internas, usuarios
y recursos compartidos. Con esta información sería posible intentar
comprometer el sistema.
Inclusive
en caso de que no se haya modificado el nombre predeterminado de escritura
“private” un intruso podría ser capaz de modificar algunos de los parámetros
para provocar una denegación de servicio o comprometer el sistema.
|
Para
tener en cuenta:
-
Detener
el servicio de SNMP en caso de no utilizarlo.
-
Configurarlo
correctamente utilizando nombre de comunidades que no sean
los predeterminados como “public” y “private”.
-
Desde
el exterior configure el firewall para filtrar el puerto
161 TCP/UDP.
|
Consulting Director
Tecnopatagonia
S.A.
|