
네트워크 인프라를 인수인계받거나 긴급 장애 처리를 위해 고객사에 방문했을 때, 가장 난감한 상황 중 하나는 바로 시스코(Cisco) 스위치의 접속 패스워드를 알지 못하는 경우입니다. 이전 작업자가 퇴사하며 문서를 남기지 않았거나, 보안 규정에 의해 패스워드가 변경된 후 공유되지 않았다면 엔지니어는 장비에 접근할 수 있는 모든 권한을 상실하게 됩니다.
이때 장비를 공장 초기화(Factory Reset) 해버리면 패스워드 문제는 해결되지만, 기존에 설정되어 있던 VLAN, 라우팅 테이블, ACL, 포트 보안 등의 모든 설정(Configuration)이 날아가 버려 막대한 서비스 장애를 초래하게 됩니다. 따라서 실무 네트워크 엔지니어에게 "기존 설정(Config)은 그대로 유지한 채 비밀번호만 초기화 및 변경하는 기술"은 반드시 숙지해야 할 필수 역량입니다.
이번 포스팅에서는 애드센스 승인 및 IT 실무자들의 검색 유입을 고려하여, 시스코 IOS 및 IOS-XE 환경에서 Configuration Register(구성 레지스터) 값을 조작하여 패스워드를 안전하게 복구하는 방법을 단계별로 상세히 알아보겠습니다.
1. 패스워드 복구의 핵심 원리: Configuration Register와 부팅 프로세스의 이해
패스워드를 복구하는 절차를 무작정 암기하기 전에, 시스코 장비가 부팅되는 원리와 Configuration Register의 역할을 이해하는 것이 중요합니다.
시스코 스위치와 라우터 내부는 크게 RAM(현재 구동 중인 설정), NVRAM(저장된 설정), Flash(운영체제 이미지 보관), ROM(하드웨어 초기화 및 ROMMON)으로 나뉩니다. 장비가 정상적으로 부팅될 때, 장비는 Flash에서 IOS 이미지를 RAM으로 로드한 뒤, NVRAM에 저장된 startup-config(시작 설정 파일)를 읽어와 RAM의 running-config로 덮어씌웁니다. 패스워드 역시 이 NVRAM의 설정 파일 안에 암호화되어 저장되어 있습니다.
Configuration Register(구성 레지스터)란?
구성 레지스터는 장비가 부팅될 때 어떤 방식으로 부팅할지 결정하는 16비트 소프트웨어 레지스터 값입니다.
- 0x2102 (정상 부팅): 일반적인 부팅 값입니다. 장비가 켜지면 NVRAM에서
startup-config를 읽어옵니다. 따라서 패스워드를 모르면 접근이 차단됩니다. - 0x2142 (패스워드 복구 모드): 이 값의 핵심은 "부팅 시 NVRAM의 startup-config를 무시(Bypass)하라"는 명령입니다. 이 값으로 부팅하면 스위치는 마치 공장 출고 상태인 것처럼 아무런 설정이 없는 빈 상태로 부팅되며, 패스워드 입력 과정 없이 최고 관리자 권한(Privileged EXEC mode)으로 진입할 수 있습니다.
엔지니어의 목표는 물리적 콘솔 접근을 통해 부팅 과정을 가로채어(ROMMON 진입), 레지스터 값을 0x2142로 변경하여 패스워드 검증을 우회한 뒤, 기존 설정을 다시 불러와 패스워드만 수정하고 레지스터 값을 원상복구(0x2102)하는 것입니다.
※ 실무 참고 (장비별 차이점): 전통적인 시스코 라우터와 최신 IOS-XE 스위치(Catalyst 3850, 9200, 9300 등)는 Configuration Register(0x2142) 변경 방식을 주로 사용합니다. 반면 구형 Catalyst 스위치(2960, 3560, 3750 등)는 ROMMON 모드에서
config.text파일의 이름을config.old로 일시적으로 변경(Rename)하여 NVRAM 설정을 우회하는 방식을 사용합니다. 본 글에서는 검색 빈도가 높은 Configuration Register 우회 방식(IOS-XE 및 라우터 기준)을 중점적으로 다룹니다.
2. 실무 엔지니어를 위한 패스워드 복구 단계별 완벽 가이드
패스워드 복구를 위해서는 반드시 스위치에 물리적으로 연결할 수 있는 콘솔(Console) 케이블이 필요합니다. 네트워크 원격 접속(SSH, Telnet) 상태에서는 부팅 과정을 제어할 수 없기 때문입니다. 콘솔 접속 프로그램(SecureCRT, PuTTY 등)을 보드레이트(Baud rate) 9600으로 맞추고 준비합니다.
Step 1. 장비 재부팅 및 ROMMON 모드 진입
스위치의 전원을 껐다가 켭니다(Power Cycle). 장비가 부팅되는 초기 화면(메모리를 체크하고 압축을 푸는 과정)에서 키보드의 [Break] 키를 여러 번 누르거나, 스위치 전면부의 [Mode] 버튼을 10초~15초 이상 꾹 누르고 있습니다.
정상적으로 부팅 프로세스 인터럽트(Interrupt)가 걸리면 장비는 일반 IOS가 아닌, 하드웨어 진단 및 긴급 복구를 위한 rommon 1 > 프롬프트로 떨어집니다.
Step 2. Configuration Register 값 변경 (NVRAM 우회 설정)
ROMMON 모드에 진입했다면, 이제 장비에게 다음 부팅 시 설정 파일을 무시하라고 명령해야 합니다. 프롬프트에 다음과 같이 입력합니다.
rommon 1 > confreg 0x2142
rommon 2 > reset
(참고: 장비 모델에 따라 SWITCH_IGNORE_STARTUP_CFG=1 명령어를 사용해야 하는 경우도 있습니다.)
reset 명령어를 입력하면 스위치가 재부팅됩니다. 이번에는 레지스터 값이 0x2142로 적용되었기 때문에, 스위치는 NVRAM에 저장된 기존 설정(패스워드 포함)을 로드하지 않고 빈 깡통 상태로 부팅됩니다. 부팅 완료 후 System Configuration Dialog (초기 설정 마법사) 창이 뜨면 반드시 "no"를 입력합니다.
Step 3. 기존 설정(Config) 메모리로 호출 및 패스워드 재설정
이제 스위치에 로그인 프롬프트 없이 곧바로 접근할 수 있습니다. enable 명령어를 치면 패스워드를 묻지 않고 Switch# (특권 모드)로 진입합니다.
여기서 절대 주의해야 할 실무 팁이 있습니다. 현재 장비는 설정이 하나도 없는 빈 상태입니다. 여기서 무심코 write memory나 copy run start를 입력해버리면, 빈 설정이 NVRAM에 덮어씌워져 기존 설정이 영구적으로 삭제(초기화)되어 버립니다.
우리의 목적은 '설정 유지'이므로, NVRAM에 고스란히 남아있는 예전 설정을 현재 동작 중인 RAM으로 조심스럽게 불러와야 합니다.
Switch# copy startup-config running-config
Destination filename [running-config]? (엔터)
이 명령어를 치는 순간, 스위치의 호스트네임(Hostname)이 원래 이름으로 바뀌며 기존 설정이 스위치에 로드됩니다. 이제 현재 구동 중인 환경(RAM)에 설정이 올라왔으니 패스워드를 마음껏 바꿀 수 있습니다.
Core-Switch# configure terminal
Core-Switch(config)# enable secret [새로운 특권모드 암호]
Core-Switch(config)# username admin privilege 15 secret [새로운 관리자 암호]
Core-Switch(config)# line vty 0 4
Core-Switch(config-line)# password [새로운 텔넷/SSH 암호]
이전 암호가 무엇이었는지 알 필요 없이, secret 명령어를 덮어씌움으로써 강력한 새로운 암호로 갱신되었습니다.
3. 원상 복구 및 저장: 레지스터 값 환원과 실무 마무리 점검
패스워드를 성공적으로 변경했다면 가장 중요한 마지막 작업이 남아있습니다. 현재 스위치는 여전히 '부팅 시 설정 파일을 무시하라'는 0x2142 상태입니다. 이대로 현장을 떠나면, 추후 정전 등으로 장비가 재부팅될 때 또다시 설정이 날아간 초기 상태로 부팅되는 대형 사고가 발생합니다.
Step 1. Configuration Register 원상 복구 (0x2102)
글로벌 설정 모드(Global Configuration Mode)에서 레지스터 값을 원래의 정상 부팅 값으로 되돌려 놓아야 합니다.
Core-Switch(config)# config-register 0x2102
Core-Switch(config)# exit
Step 2. 변경된 설정 최종 저장 (저장 필수!)
이제 새롭게 설정한 패스워드와 정상 레지스터 값(0x2102)을 NVRAM에 완전히 저장해야 합니다.
Core-Switch# write memory
(또는 copy running-config startup-config)
Building configuration...
[OK]
Step 3. 레지스터 값 적용 확인 (Verification)
정상적으로 값이 돌아왔는지 확인하기 위해 show version 명령어를 입력합니다. 출력 결과의 맨 아랫부분을 확인해야 합니다.
Core-Switch# show version
... (중략) ...
Configuration register is 0x2142 (will be 0x2102 at next reload)
위와 같이 "현재는 0x2142로 부팅되었지만, 다음 재부팅 시에는 정상적인 0x2102로 작동할 것이다"라는 문구가 뜬다면 완벽하게 작업이 끝난 것입니다.
필요에 따라 포트 상태를 점검합니다. copy startup-config running-config를 수행하는 과정에서 일부 인터페이스가 관리 목적으로 셧다운(Administratively Down) 되는 모델들이 있습니다. show ip interface brief 명령어로 주요 업링크 및 다운링크 포트가 정상적인 up/up 상태인지 확인하고, 셧다운된 포트가 있다면 no shutdown 명령어로 살려주어야 트래픽 단절을 막을 수 있습니다.
마치며: 물리적 보안의 중요성과 엔지니어의 철칙
위의 과정을 통해 알 수 있듯, 시스코 장비는 "장비에 물리적으로 접근(콘솔 케이블 연결)할 수 있는 사람은 해당 장비의 최고 관리자 권한을 탈취할 수 있다"는 철학을 가지고 설계되었습니다. 아무리 강력한 복잡도 체계의 패스워드를 사용하고 AAA(TACACS+, RADIUS) 서버를 연동해 두었다고 하더라도, 서버실이나 통신 랙(Rack)의 물리적 잠금장치가 뚫리면 누구나 Configuration Register 값을 우회하여 설정을 장악할 수 있습니다.
따라서 네트워크 인프라 보안의 최우선은 '물리적 보안 통제'이며, 부가적으로 콘솔 접속에 대한 보안을 강화하기 위해 AAA 설정 및 콘솔 패스워드 관리에 만전을 기해야 합니다.
실무 현장에서 패스워드 분실로 인한 장애 상황을 마주하셨을 때 당황하지 마시고, 본 블로그의 Configuration Register 복구 가이드를 참조하여 차분하게 기존 설정 유실 없이 트러블슈팅을 완수하시기 바랍니다. 네트워크 엔지니어 여러분의 성공적인 실무를 응원합니다.