반응형
ி SNMP 개요
네트워크 장비 상태 모니터링을 위한 프로토콜이다.
이전에는 간단하게 ICMP의 ping만으로 장비를 관리할 수 있었지만
네트워크 규모가 성장함에 따라 이러한 프로토콜이 개발되었다.
ி SNMP 용어 정리
NMS(Network Management System)
는 네트워크 환경에 연결된 장비, 시스템에 대한 실시간 이벤트 내용을 수집하는 시스템으로서 관리시스템인 매니저(NMS)와
관리대상(Agent)간에 정보를 전달하는 역할을 하기 위해 SNMP가 사용된다.
SNMP의 구성 요소는 아래와 같다.
SNMP 에이전트(관리시스템 관리자), SNMP 매니저(관리대상)
Community String
snmp 매니저와 에이전트 간에 인증하기 위해 사용되는 메시지 값으로
서로 같은 String으로 인증한다.
SNMP v1,v2의 문제점은 암호화되지 않은 Community String을 사용하기 때문에
패킷 도청을 통해 쉽게 확인 가능하다.
SNMP v3는 Community String이 MD5나 SHA 알고리즘으로 암호화되고
인증 방식이 username으로 변경되며 통신하는 모든 정보는 DES로 암호화된다.
MIB(Management Information Base)
정보를 모아놓은 객체를 말하며 트리 구조로 되어 있다.
정보에는 CPU 정보나 트래픽량, 인터페이스 등이 포함된다.
OID(Object Identifier)
객체 값을 숫자로 표현한다.
NMS에서 네트워크 장비를 관리하는 방법은
크게 SNMP와 syslog 방식인데 SNMP는 MIB에 정의된
객체들의 OID 값을 전달받아 해당 장비의 상태를 나타낸다.
보통 장비 벤더마다 MIB 및 OID 값들은 다르다.
SNMP 통신을 위해 사용하는 메시지는 다음과 같다
Get Request : 매니저가 에이전트에게 관리 정보를 보내달라고 요청한다.
Get Next Request : 동일한 에이전트가 다른 관리 정보를 연속으로 보내달라고 지시한다.
Response : Request에 대한 응답이다.
Trap : 에이전트에 문제가 생긴 경우 에이전트는 매니저에게 관리 정보를 전달한다.
SNMP의 동작 방식은 두 가지가 있다.
폴링(Polling)
매니저가 에이전트에게 요청을 보내면 에이전트가 응답하는 방식이다.
트랩(Trap)
에이전트에 무슨 일이 발생하면 에이전트가 매니저에게 정보를 전송하는 방식이다.
즉, 폴링처럼 매니저가 요청(Request)하면 그때서야 관리 정보를 보내는게 아니라
에이전트에 문제가 생기면 자기가 알아서 보고하러 가는 것이 트랩 방식이다.
사용하는 udp 포트는 각각 161,162번이다.
트랩 방식은 라우터에서 많이 사용하는 방식으로
관리하던 네트워크 장비의 tcp 연결이 해제가 된 경우 트랩방식을 통해 보고하는 경우다.
ி SNMP 보안 취약점 테스트
(꼭 자신만의 구축된 환경에서 실습하기를 당부함)
Centos7에 snmp를 설치하고 Kali에서 사전 대입 공격을 이용하여 Community String 값을 획득한 이후 시스템 정보를 얻는다.
community String 기본 값은 public 혹은 private로 설정된다.
SNMP 패키지 설치 및 활성화(Centos7)
# service snmpd start
# service snmpd status
# chkconfig snmpd on
공격 진행(kali)
kali ip : 192.168.111.132
centos ip : 192.168.111.136
대상 시스템의 snmp 포트가 열려있는지 확인하는 것이 우선이다.
# nmap -sU -p 161 192.168.111.136
Community String 획득을 위해 SNMP scanner 도구인 onesixtyone를 이용한다.
아래 경로로 이동하여 사전 공격을 위한 dict.txt 파일을 확인한다.
# cd /usr/share/doc/onesixtyone
아래 경로로 이동하여 사전 공격을 위한 dict.txt 파일을 확인한다.
# cd /usr/share/doc/onesixtyone
사전 파일(dict.txt)에 Community String으로 자주 쓰이는 값이 들어있는지 검색한다.
# egrep '(public|private)' dict.txt
아래 명령을 수행하여 사전 공격을 수행한다.
# onesixtyone -c dict.txt 192.168.111.136
Community String이 public인 것을 알아냈다.
사전 공격을 했을 때 와이어샤크 패킷에서 어떤 일이 있었는지 확인해보자.
사전에 있던 패스워드로 여러 개의 request를 보내고 있다.
아까 언급하였듯이 같은 Community String이면 요청에 대한 응답을 해준다.
# egrep '(public|private)' dict.txt
아래 명령을 수행하여 사전 공격을 수행한다.
# onesixtyone -c dict.txt 192.168.111.136
Community String이 public인 것을 알아냈다.
사전 공격을 했을 때 와이어샤크 패킷에서 어떤 일이 있었는지 확인해보자.
사전에 있던 패스워드로 여러 개의 request를 보내고 있다.
아까 언급하였듯이 같은 Community String이면 요청에 대한 응답을 해준다.
34번 패킷이 그 결과이다.
획득한 Community String을 가지고 대상의 시스템 정보를 확인한다.
ி 예방 방법
리눅스의 경우 /etc/snmp/snmpd.conf 파일에서 Community String 값을 설정할 수 있다.
(수정 전) com2sec notConfigUser default
public
(수정 후) com2sec notConfigUser default
<변경 값>
반응형
'해킹-보안' 카테고리의 다른 글
Blind SQL Injection 공격 시연 (0) | 2020.07.02 |
---|---|
Union SQL Injection 공격 시연 (0) | 2020.07.02 |
Security Onion 설치하기 (0) | 2020.06.16 |
리눅스 snort 설치 및 악성 트래픽 탐지 룰 학습 (0) | 2020.06.07 |
hping3 명령어 사용법 (1) | 2020.06.03 |