4 de octubre de 2008

Seguridad en el acceso a dispositivos Cisco

Cisco IOS brinda múltiples formas de asegurar el acceso a las posibilidades de administración de los dispostivos (básicamente routes, switches y AP). Reseño a continuación las principales formas , y los tips de configuración más frecuentes.

Niveles de acceso
La interfaz de línea de comando de Cisco IOS utiliza una lógica de niveles jerárquicos: modo EXEC usuario y modo EXEC privilegiado. Esta división de modos permite establecer 2 niveles básicos de permisos de acceso: acceso de nivel usuario y acceso de nivel privilegiado.
El acceso a modo privilegiado puede ser bloqueado utilizando una clave denominada "clave de modo enable" que puede ser encriptada o no:

Router(config)#enable password
[clave]
Router(config)#enable secret [clave]


Ambas claves son requeridas para acceder al modo privilegiado. Sin embargo, la enable password se guarda en formato de texto plano en el archivo de configuración, mientras la enable secret se guarda encriptada utilizando MD5.
Por su parte, el acceso a modo usuario se asegura utilizando claves de acceso en las diferentes "líneas": consola, auxiliar o terminal virtual.
En estas líneas de acceso hay diferentes formas de configurar claves de acceso.

Clave simple de acceso al modo usuario
En cada uno de las líneas de acceso (consola, auxiliar, terminal virtual), se puede asegurar el acceso utilizando una clave simple.

Router(config)#line vty 0 4
Router(config-line)#password [clave]
Router(config-line)#login

El primer comando define una clave, y el comando login indica al dispositivo que debe mostrar el prompt requiriendo el ingreso de la clave cuando se intenta el acceso por terminal virutal (telnet).
La clave se guarda en el archivo de configuración en formato de texto plano.

Acceso utilizando usuario y clave
El acceso puede asegurarse también utilizando usuario y clave:

Router(config)#username [user] secret 0 [clave]
Router(config)#line vty 0 4
Router(config-line)#login local

Genera un usuario y una clave que se guarda encriptada utilizando MD5 en el archivo de configuración. Ese usuario y clave se aplican a la línea de acceso utilizando el comando login local.

Asignación de niveles de privilegio por usuario
Cisco IOS permite configurar 16 niveles de usuario diferente (0 a 15).
  • Usuario nivel 0 - Sólo accede a modo usuario.
  • Usuario nivel 1 a 14 - Se pueden asignar diferentes comandos para cada nivel.
  • Usuario nivel 15 - Acceso a modo privilegiado completo.
La configuración de diferentes niveles de acceso es particularmente útil en entornos en los que diferentes técnicos tienen asignadas diferentes tareas.
Para configurar un usuario con permiso de utilización de un conjunto limitado de comandos de nivel privilegiado, siga este procedimiento:

Router(config)#privilege exec level [nivel] [comando]

Router(config)#username [user] privilege [nivel] secret 0 [clave]
Router(config)#line vty 0 4
Router(config-line)#login local

También es posible generar niveles de privilegios diferentes y asociarlos directamente a una clave de acceso simple a modo privilegiado:


Router(config)#privilege exec level [nivel] [comando]

Router(config)#enable secret level [nivel] [clave]

Asignación de accesos basados en roles
Cisco IOS también permite definir plantillas o roles con conjuntos de comandos, cada uno asegurado con su clave de acceso.
Este feature de configuración requiere la habilitación previa de AAA (Authentication, Authorization, Accounting).

Router#enable view
Router#configure terminal
Router(config)#aaa new-model
Router(config)#parser view [nombre]
Router(config-view)#secret 0 [clave]
Router(config-view)#command exec include [comando]
Router(config-view)#command configure include [comando]

Una vez configurado el perfil deseado, el acceso a modo privilegiado es utilizando el siguiente procedimiento:
Router#enable view [nombre]
Password: [clave]
Router(config)#_

Al solicitar la ayuda contextual de IOS (?), el usuario solo visualizará los comandos habilitados para el perfil que utilizó para el login.

Comandos relacionados


  • Para encriptar las claves que se guardan en texto plano en el archivo de configuración:
    Router(config)#service password-encryption
  • Para establecer una longitud mínima en las claves:
    Router(config)#security password min-length [long]
  • Para establecer un límite de tiempo de inactividad al final de la cual se cerrará la seción:
    Router(config-line)#exec-timeout [min] [seg]
Prácticas sugeridas

  • Utilice claves robustas de al menos 10 caracteres alfanuméticos.
  • Es aconsejable incluir mayúsculas / minúsculas y símbolos.
  • Las claves no deben ser palabras de diccionario.
  • Para asegurar el acceso a modo privilegiado utilice siempre la enable secret.
  • Active el servicio de encriptación de claves para asegurarse que no queden claves en texto plano visibles en el archivo de configuración.
  • Cambie las claves periódicamente.
  • Incluya un mensaje de acceso (banner) advirtiendo que se monitoreará y perseguirá el acceso no autorizado.
Bibliografía recomendada:



¿Tenés algún tip para aportar en este tema....?
Perfecto!!!! agregá un comentario con el detalle.
Muchas gracias.

55 comentarios:

  1. muy buena tu guia hay cosas que no sabia
    gracias por eso

    ResponderEliminar
  2. muy buena la guia. Son muy claro con tus comentarios y ejemplos.
    gracias por todo.
    Hugo Zdanovich

    ResponderEliminar
  3. Muchas gracias :) lo que pusiste e slo que estaba buscando incluso con adicional!!!

    ResponderEliminar
  4. Pues nada mas agregar que los niveles de privilegios se utilizan para distintos fines, como hace mencion nuestro amigo Oscar Gerometta, por ejemplo otra opcion que hace uso de privilegios de nivel 15 es: SDM de cisco, ya que para poder habilitarlo es necesario crear un user de nivel 15.
    por cierto gracias por tu aporte Oscar.

    ResponderEliminar
  5. gracias muy buen material y muy entendible

    ResponderEliminar
  6. estimado una consulta cuando se configura con line vty 0 4 entiendo que cero se refiere a nivel usuario pero el 4?' haber si puedes detallar, con respecto a las demas configuracion de acceso me queda clarisimo

    ResponderEliminar
  7. Luis
    Creo que estás confundiendo el nivel de privilegios cuando se crean usuarios, con los líneas de terminal virtual.
    line vty 0 4 es el comando que permite ingresar a la configuración de las líneas de terminal virtual, y los números identifican las diferentes líneas. En este caso, se configuran las líneas 0 a 4, es decir un total de 5 líneas.
    No refiere a niveles de privilegio de acceso, sino a líneas de acceso.

    ResponderEliminar
  8. que significa EXEC y q se refiere cuando se habla de linea "line",.... line console, vty....

    ResponderEliminar
  9. El término EXEC refiere a uno de los 3 modos básicos de CLI de IOS: Modo ROMMON, Modo Setup y Modo EXEC.
    Respecto a las líneas, son los canales de acceso para operar a través de CLI: consola (line console), auxiliar (line aux) o puertos virtuales (line vty).

    ResponderEliminar
  10. Muchas Gracias por el aporte. Consulta, genere un usuario al cual le permito realizar un show running-config. Pero el usuario cuando lo ejecuta, no muestra mas que 3 o 4 linea y no muestra la configuración. Es decir, el comando se ejecuta pero no muestra la info. ¿hay que habilitar algo mas? ¿tiene que tener más permisos para realizar un show run? Gracias, Facundo

    ResponderEliminar
  11. Facundo.
    Debiera mostrarte la configuración completa, posiblemente allí tengas algún otro tema que lo esté limitando.

    ResponderEliminar
  12. Hola, como le va. Una consulta, ¿Es posible establecer un limite de tiempo de duravilidad de un Login local? LO que pretendo hacer es que un tal user Pedro pass CISCO solo sean validos por cierto tiempo. En Lineas SSH

    Muchas Gracias

    ResponderEliminar
  13. Pedro.
    Hasta donde conozco la implementación, no es posible establecer esa limitación con un username y clave locales (login local).
    Esto es posible hacerlo cuando utilizas el modelo AAA, con un servidor de autenticación TACACS o RADIUS.
    Para que puedas ver la configuración completa de SSH: http://www.cisco.com/en/US/tech/tk583/tk617/technologies_tech_note09186a00800949e2.shtml

    ResponderEliminar
  14. Saludos Oscar, amigo le cuento que su blog es el mejor que he visitado con respecto a informaicon de CISCO. Viendo este tema me surge una pregunta, como administro el pass de los user que tiene acceso por https?, a mi me sucede lo siguiente, uno de los switch que estoy administrando tiene user admin y pass xxxxx, pero resulta que el pass xxxxx no es el mismo si entro por web o si entro por ssh. sin embargo cuando listo los user en el archivo de conf solo figura un solo user admin.

    De antemano muchisimas gracias.

    ResponderEliminar
  15. Estimado
    Supongo que si están utilizando ssh también deben estar aplicando AAA.
    Si es así, en ese caso no sólo hay que verificar los usuarios confirmados en el mismo equipo, sino ver qué formato de autenticación se está utilizando en cada caso, ya que es posible que el acceso http esté utilizando una base de datos de usuario diferente del acceso ssh para autenticar usuarios.
    http://www.cisco.com/en/US/docs/ios/12_2/security/configuration/guide/scfathen.html

    ResponderEliminar
  16. A mi me da un error al configurar el login local, es una IOS security te copio el comando, por si me puedes ayudar.

    R1(config)#line vty 0 4
    R1(config-line)#login local
    ^
    % Invalid input detected at '^' marker.

    ResponderEliminar
  17. Muky
    Como se ha perdido la alineación de los caracteres, no se llega a percibir en qué punto te da el error en el comando.
    Pero ese es un comando válido:
    http://www.cisco.com/en/US/products/sw/iosswrel/ps1818/products_configuration_example09186a0080204528.shtml#config-local
    ¿Qué versión de IOS, en qué dispositivo estás utilizando?

    ResponderEliminar
  18. enable
    conf ter
    host S1
    no ip domain-lookup
    enab secre class
    line con 0
    pass cisco
    login
    line vty 0 15
    login
    end

    ... bueno despues de configurar en el S1 ya no puedo configurar pq me sale bad secrets, pese a que le pongo cisco y no me deja configurar mas pq a cada rato me pide el password

    ResponderEliminar
    Respuestas
    1. Con la descripción que hacés no queda claro qué estás haciendo y en qué dispositivo.
      Pero supongo que lo que copiás aquí es un script que copiás y pegás en la línea de comando del router o switch.
      Si es así... eso no es configurar, es copiar una serie de comandos :)
      Bueno, bromas aparte, el mensaje de error que estás recibiendo, supongo que en realidad corresponde al comando enable y lo que está indicando es que el dispositivo ya tiene una clave de modo enable configurada, que no estás ingresando.

      Eliminar
  19. Hola Oscar, gracias por compartir tus conocimientos en este blog. Te expongo una pequeña duda: ¿qué diferencia práctica hay entre estas dos formas de asegurar las líneas vty?

    Forma 1)
    R1(config)#username ccna password ciscoccna
    R1(config-lin)#line vty 0 4
    R1(config-lin)#login local

    Forma 2)
    R1(config)#username ccna password ciscoccna
    R1(config)#aaa new-model
    R1(config)#aaa authentication login LOCAL_AUTH local
    R1(config-lin)#line vty 0 4
    R1(config-lin)#login authentication LOCAL_AUTH

    Sé que en el segundo caso ha habilitado AAA pero en ambos casos lo que se consigue es que sólo se permita la conexión a usuarios definidos localmente en el router ¿no?

    Saludos y gracias

    ResponderEliminar
    Respuestas
    1. Es cierto, ambas configuraciones sólo permiten la conexión a usuarios definidos localmente.
      La diferencia radica en que al habilitar AAA, primero, puedo adicionalmente realizar autorización y registro de la actividad de los usuarios, cosa que no puedo hacer en la Forma 1.
      La segunda, es que al usar AAA modificando la lista de métodos LOCAL_AUTH puedo incorporar rápidamente servidores TACACS+ o RADIUS para centralizar la base de datos de autenticación.

      Eliminar
    2. Muchísimas gracias Oscar. Responder más rápido y claro es imposible ;-)

      Eliminar
  20. muy completa la información. pero como podría eliminar un usuario con privilegio 15
    que ya este creado en el router o como lo deshabilito.

    ResponderEliminar
    Respuestas
    1. Negando la línea de configuración que define el usuario y su clave.

      Eliminar
  21. hola Oscar, se puede establecer un user pero que este en el radius y no en el router. y despues como le doy provolege para ese useario'

    saludos
    excelente los aportes

    ResponderEliminar
    Respuestas
    1. Si ,es posible.
      Para eso es necesario implementar AAA, lo que te permite hacer autenticación, autorización y registro de actividad utilizando tanto RADIUS como TACACS+.
      Los privilegios, en el caso de RADIUS se hacen necesariamente en el mismo servidor que autentica.
      Es un modelo de seguridad en el acceso diferente y más avanzado que el que presento en este post.

      Eliminar
  22. donde puedo conseguir información sobre el tema referente a privilegios en el radius, consulta:
    en el router configura solo un nivel de privilege ejemplo 5 y al logearse por el radius el propio servidor agrega los privilege?

    saludos.
    exelente blog

    ResponderEliminar
  23. hola Oscar,
    yo realice la pregunta con fecha 19/7/2013 hora 9:48 p.m
    es para seguir el tema de privilege pero con login de radius.
    consulta: donde consigo un modelo de configuracion el cual el user que se loguea por raidus yo le asigno los nivel de privilege pero sin configurar el user en el router.
    me explique bien??
    saludos y te felicito por el libro lo compre (el de preparacion de ccna).
    saludos

    ResponderEliminar
  24. Hola soy nuevo en el simulador de packet tracer, tengo una duda con respecto a ponerle contraseña para tener acceso privilegiado (BASICAMENTE ES UNA CONFIGURACION BASICA DEL ROUTER RA)

    RA(config)#no ip domain-lookup
    RA(config)#enable secret cisco
    RA(config)#line console 0
    RA(config-line)#password 12345
    RA(config-line)#login
    RA(config-line)#loggin synchronous
    RA(config-line)#exit
    RA(config)#line vty 0 15
    RA(config-line)#password 54321
    RA(config-line)#login
    RA(config-line)#exit

    el problema es que cuando entro de nuevo atraves de CLI,
    habilito para poder entrar como privilegiado:

    SanSalvador>enable
    Password: 12345
    Password: 12345
    Password: 12345
    % Bad secrets

    SanSalvador>

    pero nunca puedo entrar, que es lo que me sugieren hacer o que estoy haciendo mal, se los agradeceria mucho

    ResponderEliminar
    Respuestas
    1. Oscar
      Se trata de un error conceptual habitual cuando nos iniciamos.
      La enable secret es la clave que habilita el paso de modo usuario a modo privilegiado. Es decir, es la clave que debes utilizar luego de ingresar el comando "enable".
      Tu enable secret, de acuerdo a la configuración que muestras, es "cisco" no "12345".
      Consejo para principiantes: lo importante no es ingresar comandos, sino saber qué hace cada comando exactamente. No ejecutes un comando sin saber exactamente qué hace. Esto te resolverá muchos problemas a futuro.

      Eliminar
    2. muchas Gracias, Oscar me sacaste de un buen problema, es que mi profesor no me explico bien esa parte, pero ahora ya lo se gracias otra vez!!!

      Eliminar
  25. Hola, una consulta sobre logiarse con un usuario de nivel 2 al cual se le asignaron cierta lista de comandos. La duda al estar logiado, como puedo saber que comandos puedo utilizar que comandos tengo disponible mas que nada. Saludos.

    ResponderEliminar
    Respuestas
    1. Depende de cómo ha sido configurado el usuario.
      Si simplemente han utilizado la asignación de niveles vinculados a un usuario tradicional, no hay modo de que el usuario visualice los comandos que tiene autorizados; el Administrador es el que debiera documentar esa información.
      En cambio, si se ha aplicado la asignación de roles, en ese caso el usuario utilizando la ayuda de IOS (?) solamente verá los comandos que tiene permitidos.

      Eliminar
  26. Muy buenos aportes... Felicidades

    ResponderEliminar
  27. Buenas Tardes Oscar. esta excelente tu blog Saludos desde Venezuela.
    mi pregunta es la siguiente.
    como hago para crear un usuario, con una lista de comandos predefinidos. y que este usuario no pueda usar otros a los cuales no este autorizado he aplicado una configuracion que vi aqui.

    Router#enable view
    Router#configure terminal
    Router(config)#aaa new-model
    Router(config)#parser view [nombre]
    Router(config-view)#secret 0 [clave]
    Router(config-view)#command exec include [comando]
    Router(config-view)#command configure include [comando]

    pero cuando intento darle acceso al usuario al comando "Configure Terminal" una vez iniciado sesion desde el Enable view User.... me acepta el comando pero una vez que lo acepta no puedo entrar a ninguna interfaz del router por ej.

    ResponderEliminar
    Respuestas
    1. Misael
      Eso es porque solo has incluido los comandos que incluyen el comando configure.
      En este tipo de configuración debes definir cuáles son los comando de configuración que quieres asignar al usuario.
      Puedes utilizar esta guía de configuración de Cisco: http://www.cisco.com/en/US/docs/ios/12_3t/12_3t7/feature/guide/gtclivws.html

      Eliminar
  28. hola Oscar!
    te hago una consulta...volvi a configuracion de fabrica a mi AP cisco Aironet 521g y con el usuario Cisco no puedo escribir en la configuracion...como hago para cambiar el usuario administrador? o los permisos para que pueda escribir? gracias y saludos!

    ResponderEliminar
    Respuestas
    1. Facundo.
      La respuesta más simple, quizás, es que utilices el procedimiento de recuperación de claves para definir tu propio usuario y clave:
      https://supportforums.cisco.com/thread/2037151

      Eliminar
  29. hola que tal Oscar muy interesante tu post y te molesto tengo una duda que he buscado en manuales y aun no encuentro resolver, como puedo ver los errores del sw en linea virtual los mismos que veo conectados a consola ?
    gracias y excelente aporte un saludo!
    misael.

    ResponderEliminar
    Respuestas
    1. Misael
      Para que los mensajes de estado se vean en los puertos virtuales (sesiones de Telnet o SSH) debes utilizar el comando "terminal monitor". Con prudencia ya que si la velocidad del acceso por terminal virtual es bajo, puede ocurrir por momentos que se sature la conexión.

      Eliminar
  30. Estimado Oscar y hay alguna manera de saber cual es el password no encryptado cuando se configura un router cisco con MD5 ( en el enable secret)


    Saludos

    ResponderEliminar
    Respuestas
    1. Supongo que te refieres a la enable secret, que está encriptada con MD5. Se trata de un algoritmo de hashing, por lo que no es reversible.

      Eliminar
    2. En cambio lo que he visto, si copio usuario y contraseña tal cual como aparece en el archivo de configuración, por ejemplo la siguiente linea:

      username RODRIGO privilege 15 password 7 0355692847220474085F4A5542405F5D53

      si la introduzco en un router en blanco, me respeta la contraseña no encriptada. Es esto normal?

      Eliminar
    3. Si.
      El "7" que está entre "password" y la cadena alfanumérica, le indica al sistema operativo que estás ingresando una clave ya encriptada con MD5.

      Eliminar
  31. Tengo un inconveniente con el comando security password min-length [long], el problema es que solo quiero que tome efecto la clave del modo EXEC y con este comando me afecta todas las claves, como podria usarlo para el modo EXEC solamente ???

    saludos,

    ResponderEliminar
    Respuestas
    1. Junior
      El comando que estás utilizando define una política general de claves en el dispositivo definiendo una longitud mínima de clave. Consecuentemente, afecta a todas las claves que se configuren en el dispositivo.
      Si lo que quieres es tener claves enable más extensas, solamente tienes que configurar claves más extensas en ese caso. El comando afecta la longitud mínima, no la máxima.

      Eliminar
    2. Gracias Sr Oscar por su pronta respuesta, Pero existe algun otro comando que pueda usar para lo que quiero

      Eliminar
    3. Que yo conozca no.
      Pero me resulta difícil comprender el objetivo de tu requerimiento.
      El objetivo de este comando es forzar el cumplimiento de una política de seguridad cuando múltiples operadores intervienen generando claves. Esto ocurre en la práctica cuando hay que dar de alta usuarios en los equipos.
      Pero si lo que buscás es una clave de modo enable más segura, las claves de modo enable no son generadas por cualquier operador, sino por quienes tienen todos los privilegios de administración, y en ese caso no parece necesario forzar una política de este tipo pues quien tiene acceso al modo enable, también tiene acceso a modificar la política.

      Eliminar
    4. Tienes Razon Sr. Oscar muchas gracias, toy haciendo una practica y me aparece este requimiento al parecer esta mal por que me especifica que sea solo para el modo EXEC.

      Eliminar
  32. estimado Oscar, una consulta: estoy utilizando en GNS3 un router 2691 con una version de ios 12.4, al momento de habilitar AAA con el comando aaa new-model ya no me permite definir el Login Local en las lineas VTY, esto es Normal???

    ResponderEliminar
    Respuestas
    1. Es que precisamente eso significa aaa new-model: aplicar el framework de autenticación, autorización y accounting.
      Por ese motivo, a partir de habilitar AAA deberás definir listas de servidores, listas de métodos de autenticación, y luego aplicar esas listas al punto en que deseas implementar autenticación, por ejemplo en las líneas de terminal virtual.
      Si quieres utilizar una base de credenciales de usuario definidas localmente, deberás incorporar ese método de autenticación en una lista de autenticación y luego aplicarla a las líneas de terminal virtual.

      Eliminar
  33. excelente explicacion, gracias estimado Oscar.

    ResponderEliminar
  34. Hola Óscar
    tengo un Switch 4507 y tenía esta configuración para sus accesos:
    line con 0
    stopbits 1
    line vty 0 4
    password cisco1234
    login

    lo quería estandarizar como todos los demás switches de este cliente y copié las últimas líneas de dos switches:
    line con 0
    login local
    stopbits 1
    line aux 0
    stopbits 1
    line vty 0 4
    login local
    length 0
    line vty 5 15
    login local


    line con 0
    password Mipassword2015
    logging synchronous
    line vty 0 4
    login local
    line vty 5 15
    login

    le di Wr... y cerré la conexión por VPN. vuelvo a entrar ya ahora me pide usuario (antes solo el password cisco1234, enable y el mismo password).
    no configuré ningún usuario y ahora no puedo entrar al switch porque no sé qué usuario poner!!!
    qué ´puedo hacer para entrar y configurar lo que tenía antes???? o ´ponerle un usuario???

    Gracias por tu apoyo!!

    ResponderEliminar
    Respuestas
    1. Carlos
      Al incluir en la configuración el comando "login local" indicaste que ya no desea utilizar la clave configurada explícitamente en la lína de acceso sino un usuario y clave configurados en una base de datos local.
      Por ese motivo, al volver a intentar ingresar al dispositivo te requiere usuario y clave. Como no configuraste usuario y no hay un usuario por defecto, ahora no tienes acceso. Deberías hacer un password recovery para ingresar y poder modificar la configuración.

      Eliminar

Gracias por tu comentario.
En este blog los comentarios están moderados, por lo que su publicación está pendiente hasta la revisión del mismo.