SNMP — Simple Network Management Protocol

간이 네트워크 관리 프로토콜(SNMP)에 대한 소개

정재욱
PentaSecurity Labs
13 min readOct 26, 2023

--

Simple Network Management Protocol

현대 사회에서 네트워크에 속하지 않는 장비를 찾는 것은 매우 드물 것입니다. PC를 통해 인터넷에 접속하고, 네트워크를 통해 프린터에서 문서를 출력하고, 하물며 집 안의 조명도 네트워크를 통해 관리하는 시대이기 때문입니다. 만약 네트워크가 정상적으로 작동하지 않는다면 매우 불편할 것입니다. 따라서 네트워크 장비를 관리하는 것은 매우 중요하다고 할 수 있습니다.

하지만 네트워크는 생명체가 아니기 때문에 자신에게 문제가 있다고 해도 우리에게 말해주지 않습니다. 또한 일반적으로 네트워크 장비는 한 두대가 아닙니다. 대규모 네트워크에서 사용하는 네트워크 장비는 수백 ~ 수천 대에 달하며 이를 일일이 확인하는 것은 불가능에 가깝습니다. 그뿐만 아니라 네트워크 장비를 확인하더라도 네트워크 장비의 문제가 아니라 다른 원인으로 생긴 문제일 수도 있습니다.

이러한 이유로 엔지니어들은 네트워크 장비들을 모니터링하고 장애/이벤트의 발생 시에 능동적으로 관리자에게 상황을 전달하는 프로토콜을 만들게 되었고, 이것이 바로 Simple Network Management Protocol, SNMP입니다.

목적

모든 물건에는 목적이 있습니다. 무언가에 대해 알아보고자 한다면 그 물건이 만들어진 목적을 보면 그 물건에 대해서 이해하기 쉬워집니다. SNMP도 마찬가지로 목적이 있을 것입니다. 따라서 SNMP에 관해 설명을 하기 전에 SNMP가 만들어지게 된 목적을 알아보고자 합니다.

SNMP의 목적은 크게 세 가지로 나눌 수 있습니다. 현재 상태를 통해 장비의 건강 상태를 유지하기 위한 상태 모니터링의 목적, 모니터링을 통해 성능 문제를 식별하고 문제를 조기에 파악하기 위한 시스템 문제 진단의 목적, 잠재적인 문제가 발생하기 전에 경고 및 알림을 통한 장애 예방의 목적을 가집니다.

먼저 상태 모니터링의 목적은 SNMP를 사용하여 네트워크 장비의 현재 상태를 파악하는 것을 의미합니다. 이 상태 정보는 CPU / 메모리 사용률, 대역폭 사용률, 장비의 온도 등 양한 지표를 포함합니다. 관리자는 이러한 정보를 통해 필요한 조치를 할 수 있습니다. 예를 들어, 모니터링 도중 메모리 부족을 감지하면 이를 조기에 인식하여 장애를 방지할 수 있을 것입니다.

두 번째로 시스템 문제 진단의 목적은 SNMP를 사용하여 성능 문제를 식별하고 시스템 문제를 진단하는 것을 의미합니다. 예를 들어, 네트워크 장비의 대역폭 사용률이 급증하면 이에 따라 성능 저하가 발생할 것입니다. 관리자는 SNMP를 통해 성능 저하의 원인을 분석할 수 있을 것이며 이에 맞는 조치를 해 문제를 조기에 해결할 수 있습니다.

마지막으로 장애 예방의 목적은 SNMP의 경고와 알림 기능을 통해 장애를 미리 예방할 수 있다는 것을 의미합니다. SNMP는 특정 수치가 일정 수준에 도달하거나 특정 이벤트가 발생할 때 관리자에게 경고 메시지를 전송할 수 있으며, 이를 통해 잠재적인 문제에 대한 조치를 빠르게 취할 수 있습니다.

이러한 목적을 머릿속에 생각해 두고 SNMP에 대해서 알아본다면 SNMP를 더 쉽게 이해할 수 있을 것입니다.

역사

네트워크 관리의 진화 과정

SNMP는 인터넷의 초창기부터 만들어진, 완성된 프로토콜이 아닙니다. 따라서 SNMP는 여러 역사를 가지는데, 이를 순서대로 따라가면 SNMP에 대해서 알아보기 쉬울 것입니다.

1980s: ICMP

SNMP가 탄생하기 이전인 1980년대에도 서버/네트워크 장비 관리는 필요했습니다. 이때는 장비가 복잡하지 않았기 때문에 서버가 작동만 하고 있으면 된다는 생각으로 운영했습니다. 따라서 이를 위한 관리 및 진단의 방식도 ICMP를 통해 간단하게 진행했습니다.

먼저 ICMP 하면 대표적인 ping으로 장비의 상태를 진단했습니다. ping을 장비에 보내고 응답하는지 확인하는 것으로 장비가 온라인인지 여부를 확인할 수 있었으며, 응답하지 않으면 장애로 간주했습니다. 또한 traceroute 명령을 통해 데이터 패킷이 어떤 경로를 통해 전달되는지 확인하고 네트워크 경로의 문제를 확인하였습니다.

엔지니어들은 이 외에도 ICMP의 다양한 기능을 통해 장비를 점검했습니다. 하지만 네트워크 장비의 종류와 기능이 늘어나게 되자 ICMP 만으로는 한계에 다다랐고, 새로운 프로토콜이 필요해지게 되었습니다.

1989: SNMPv1

ICMP만으로 네트워크 장비를 관리할 수 없게 되자 여러 업체가 새로운 통신 규격을 만들거나 SSH/Telnet을 통해 장비를 관리하고자 했습니다. 하지만 방식이 여러 가지가 되니 관리에 어려움이 생기고 효율성이 떨어지게 되었고, 이에 컴퓨터 과학자들과 엔지니어들은 표준화된 프로토콜을 만들려 했습니다. 이때 여러 프로토콜이 후보로 올랐는데 여러 논의 끝에 IETF(Internet Engineering Task Force)에서 만든 SNMP가 국제 표준으로 채택되었고, 이때 만들어진 SNMP를 현재는 SNMPv1이라고 부르게 됩니다.

SNMPv1의 특징은 현재의 SNMP의 특징과 매우 유사합니다. Request와 Response의 단순한 구조를 가지고 데이터를 읽고 설정합니다. 또한 정보를 계층적인 구조로 저장하였고, 커뮤니티 기반의 인증 기능과 이벤트 기반의 알림 기능을 가지고 있었습니다. 이는 현대의 SNMP와 크게 다르지 않으며, 따라서 SNMPv1에서는 현재 SNMP의 기본 구조의 대부분을 완성하였다고 할 수 있습니다.

1993: SNMPv2

SNMP의 탄생 이후 얼마 되지 않아서 커뮤니티 인증 기능에 보안 취약점이 발견됩니다. 커뮤니티 인증을 위해 Community String이라는 문자열을 통해 인증을 진행하는데, 해당 문자열이 평문으로 전송되어 누구나 시스템의 정보를 알 수 있게 된다는 점입니다. 또한 정보를 수집하는 Get 명령의 비효율성이 부각되었습니다. 요청하는 데이터마다 각각의 Get Request를 보내야 하고, 이에 맞게 장비는 그에 맞는 Response를 보내야 하는데 데이터가 많을수록 네트워크에 영향을 준다는 것입니다.

이러한 이유로 기존의 SNMP를 개선한 새로운 버전이 SNMPv2입니다. SNMPv2는 SNMPv1을 개선한 버전이기 때문에 대부분의 기능은 SNMPv1과 같은데, SNMPv2의 특징은 새로운 데이터 타입의 지원과 새로운 데이터 조회 명령 추가, 보안 취약점 개선이 있습니다.

첫 번째로 새로운 데이터 타입들이 생겼습니다. SNMPv1은 32bit의 데이터(-2,147,483,648 ~ 2,147,483,647)까지 밖에 표현할 수 없었습니다. 하지만 더 큰 숫자를 표현하는 방법이 필요해지자, 이를 위해 Unsigned32라는 부호가 없는 int 자료형을 만들었고, 64bit의 데이터를 표현할 수 있는 Counter64 라는 자료형을 만들었습니다.

두 번째로 Get 명령어를 개선한 새로운 데이터 조회 명령을 추가했습니다. Bulk라고 하는 새로운 명령은 Request와 Response 양쪽에 모두 추가되었으며 많은 데이터를 요청하는 하나의 Request와 해당 데이터를 모두 담은 하나의 Response가 가능해졌습니다. 예를 들어 50개의 데이터를 요청한다면 Get으로 요청하면 50개의 Request와 50개의 Response가 필요했지만 Bulk는 50개를 요청하는 1개의 Request와 50개의 데이터를 담은 1개의 Response가 가능해진 것입니다.

마지막으로 평문으로 전송되던 Community String을 암호화하여 전송하도록 하고 사용자 기반 접근 제어 기능을 추가하여 SNMPv1의 보안 취약점을 개선하고 추가적인 보안성을 강화하였습니다.

1996: SNMPv2c

SNMPv2는 SNMPv1의 보안 취약점을 해결하였지만, 그로 인해 효율성이 저하됐습니다. 사용자들은 이러한 변경 점이 실사용에 너무 복잡하다고 생각하여 SNMPv2가 발표되자마자 SNMPv2에서 보안 기능을 제거한 커뮤니티 버전을 개발하는데 착수합니다. 이후 같은 해에 SNMPv2에서 보안 기능을 제거한 SNMPv2c를 만들었고, SNMPv2의 보안 기능 역시 보안 취약점은 SNMPv1과 별다르지 않다고 판단되어 1996년에 SNMPv2 대신 SNMPv2c가 표준으로 채택되었습니다.

2004: SNMPv3

SNMPv2c 이후 1998년, 다시 한번 SNMP의 보안 취약점이 부각됐습니다. 특히 이번에는 기존의 Community String의 보안 취약점뿐 아니라 알림 기능인 Trap에도 보안 취약점이 발견됐습니다. Trap은 누구나 생성할 수 있었기 때문에 상대 네트워크의 리소스를 고갈시키거나 잘못된 정보를 담은 Trap을 해당 시스템을 사칭하여 보낼 수도 있었습니다.

SNMPv3는 이러한 보안 결함을 보완하고, 안전한 관리 및 감시 기능을 제공하도록 디자인되었습니다. SNMPv3은 이전 버전의 SNMP에 비해 보안 강화, 엑세스 컨트롤, 메시지 무결성, 보안 모델 사용 등의 변경 사항을 도입했습니다.

SNMPv3는 SNMPv1 및 SNMPv2의 보안 취약점을 극복하기 위해 사용자 이름과 암호를 사용하여 인증을 수행합니다. 사용자는 엔진 ID, 사용자 이름, 인증 알고리즘을 사용하여 메시지에 디지털 서명을 적용하고, 메시지의 무결성을 검증합니다. 또한, SNMPv3는 기밀성을 제공하기 위해 메시지를 암호화합니다. 이로써 SNMPv3는 통신의 안전성을 확보하고 중요 정보의 노출을 방지합니다.

두 번째로 SNMPv3는 엑세스 제어를 위한 View-based Access Control Model (VACM)을 제공합니다. 이 모델을 사용하면 관리자가 특정 사용자나 그룹에 대한 엑세스 권한을 세밀하게 구성할 수 있습니다. 사용자는 특정 MIB 개체 또는 하위 트리에 대한 읽기 또는 쓰기 권한을 지정할 수 있으며, 이로써 불필요한 정보 노출과 무단 수정을 방지합니다.

세 번째로 SNMPv3는 메시지 무결성을 제공하여 변조나 위조된 메시지를 탐지할 수 있습니다. 이를 위해 메시지에 디지털 서명이 적용되고, 수신 측에서는 메시지의 무결성을 확인합니다. 이로써 메시지가 변경되거나 위조되는 것을 방지하고 신뢰성 있는 통신을 보장합니다.

마지막으로 SNMPv3는 여러 가지 보안 모델을 제공합니다. 가장 일반적인 보안 모델은 User-based Security Model (USM)와 View-based Access Control Model (VACM)입니다. USM은 사용자 인증과 데이터 기밀성을 다루며, VACM은 엑세스 제어를 담당합니다. SNMPv3는 이러한 모델을 조합하여 네트워크 관리 환경에 맞는 보안 수준을 설정할 수 있습니다.

이러한 변경 사항들은 SNMPv3를 이전 버전의 SNMP와 비교했을 때 보안, 인증, 그리고 민감한 정보 보호 측면에서 크게 향상되었으며, 이로써 SNMPv3는 네트워크 관리와 모니터링에 안전하고 신뢰할 수 있는 프로토콜로 사용됩니다.

구성

SNMP는 네트워크 및 시스템 관리를 효과적으로 수행하기 위해 몇 가지 구성 요소를 가집니다. 이러한 요소들은 네트워크 관리자와 관리되는 장치 간의 상호작용을 단순하게 만들어 주고, 복잡한 네트워크 인프라를 효과적으로 관리하는 도구로 사용됩니다. 이제 SNMP의 구성 요소와 역할을 자세히 살펴보겠습니다.

SNMP 관리자 (SNMP Manager)

SNMP 관리자는 네트워크 및 시스템 관리의 중심 역할을 수행합니다. 이것은 네트워크 관리자 또는 관리 소프트웨어로서, 네트워크 인프라와 연결된 다양한 장치 및 시스템의 상태 및 성능 정보를 수집하고 모니터링합니다.

SNMP 관리자는 네트워크 장비의 관리를 위해 다음과 같은 역할을 갖습니다.

  • 제어 : 장치를 모니터링하고 관리하기 위한 제어 지점
  • 수집 : 장치의 정보를 수집 및 모니터링
  • 분석 : 수집된 데이터를 저장 및 분석
  • 수신 : 이벤트나 문제 발생 시, 장치로부터 메시지 수신
  • 설정 : 장치의 설정을 수정하기 위한 메시지 전달

이러한 역할을 토대로 SNMP 관리자는 안정적인 네트워크 운영을 지원하고 효율적으로 대응할 수 있도록 합니다.

SNMP 에이전트 (SNMP Agent)

SNMP 에이전트는 네트워크 장치에 설치된 소프트웨어 구성요소 또는 모듈로, SNMP 관리자와의 상호 작용을 가능하게 합니다. 이러한 SNMP 에이전트는 라우터, 스위치, 서버, 프린터 및 기타 네트워크 장비에서 동작하고 있습니다.

SNMP 에이전트 역시 네트워크 장비의 관리를 위해 다음과 같은 역할을 갖습니다.

  • 모니터링 : 장치의 성능 지표 및 작동 상태 등을 수집
  • 응답 : 관리자의 Request 요청에 알맞은 Response 제공
  • 보고 : 오류 또는 이벤트 발생 시 관리자에게 알맞은 메시지 전달
  • 데이터베이스 : 관리자가 필요한 정보를 확인할 수 있도록 데이터베이스 생성
  • 보안 : 비인가된 사용자를 막기 위해 보안 기능 제공

SNMP 에이전트는 위의 역할을 수행하여 SNMP 관리자가 장비 관리를 효율적으로 할 수 있게 하고, 안정적인 네트워크 운영에 도움을 줍니다.

SNMP 트랩 (SNMP Trap)

SNMP 트랩은 예외적인 상황이나 이벤트가 발생할 때 SNMP 에이전트에서 SNMP 관리자로 보내는 메시지입니다. 이 메시지는 주로 경고 및 알림의 형태로 사용됩니다. 예를 들어, 장치의 고장, 장애, 또는 기타 주요 이벤트가 발생하면 에이전트가 트랩을 생성하여 관리자에게 알립니다. 트랩은 실시간으로 관리자에게 이벤트 정보를 전달하며, 빠른 대응을 가능하게 합니다. 이것은 네트워크 문제의 조기 발견 및 해결을 지원합니다.

MIB (Management Information Base)

MIB Tree

MIB는 네트워크 장치 및 시스템의 정보를 정의하는 데이터베이스 또는 테이블의 집합입니다. 이 정보는 관리자가 네트워크 및 시스템을 모니터링하고 구성하는 데 사용됩니다. MIB는 계층 구조로 구성되어 있으며, 각 항목은 고유한 OID (Object Identifier)로 식별됩니다. SNMP 에이전트는 MIB에 저장된 정보를 관리하고, 이를 SNMP 메시지를 통해 관리자에게 제공합니다. MIB를 통해 관리자는 네트워크 장치 및 시스템의 특정 정보를 요청하고 모니터링할 수 있으며, 네트워크 구성 및 성능을 최적화할 수 있습니다.

OID (Object Identifier)

장비의 모든 정보는 MIB에 저장되어 고유의 이름을 갖습니다. 하지만 이러한 이름을 모두 기억할 수는 없습니다. 예를 들어 Cisco 사의 장비에서 1분간 CPU 사용률을 알고 싶다면 다음과 같은 방식으로 Tree 구조를 순회해야 합니다.

root - iso - org - dod - internet - private - enterprise - cisco
- ciscoMgmt - ciscoProcessMIB - ciscoProcessMIBObject - cpmCPU
- cpmCPUTotalTable - cpmCPUTotalEntry - cpmCPUTotal1min

이러한 내용을 모두 외울 수는 없기 때문에 우리는 각각의 이름에 번호를 붙여서 사용하기 쉽게 만들었고, 이를 OID라고 하는 것입니다. 이제 똑같은 1분간 CPU 사용률을 OID로 표현해 보겠습니다.

.1.3.6.1.4.1.9.9.109.1.1.1.1.4

이 처럼 OID를 사용하면 같은 내용을 더 쉽게 사용할 수 있습니다.

마무리

요약하면, SNMP는 네트워크 관리의 필수 요소로서, 복잡한 네트워크 인프라를 효과적으로 관리하고 모니터링하기 위한 강력한 도구입니다. 그리고 끊임없이 발전하고 보안을 강화하여 네트워크 관리의 요구에 부응하고 있습니다. SNMP는 현대적인 IT 환경에서 관리자들을 지원하는 필수적인 도구 중 하나로 사용되고 있으며 SNMP는 네트워크 관리자들이 네트워크를 안전하게 운영하고 최적화하는 핵심적인 파트너라고 할 수 있습니다. 네트워크 및 시스템 관리를 더욱 효율적으로 수행하기 위해 SNMP를 배우고 활용하는 것이 중요할 것입니다.

--

--