161,162,10161,10162/udp - Pentesting SNMP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
SNMP - Simple Network Management Protocol는 네트워크의 다양한 장치(라우터, 스위치, 프린터, IoT 등)를 모니터링하는 데 사용되는 프로토콜입니다.
SNMP는 162/UDP 포트를 트랩에 사용합니다. 이는 명시적으로 요청되지 않은 SNMP 서버에서 클라이언트로 전송되는 데이터 패킷입니다.
SNMP 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **관리 정보 베이스(MIB)**가 생성되었습니다. MIB는 장치 정보를 저장하기 위한 독립적인 형식입니다. MIB는 표준화된 트리 계층 구조에서 모든 쿼리 가능한 SNMP 객체가 나열된 텍스트 파일입니다. 여기에는 고유 주소와 이름 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보를 제공하는 **최소 하나의 객체 식별자
(OID
)**가 포함되어 있습니다.
MIB 파일은 추상 구문 표기법 1
(ASN.1
) 기반 ASCII 텍스트 형식으로 작성됩니다. MIB는 데이터를 포함하지 않지만, 어떤 정보를 어디서 찾을 수 있는지와 그것이 어떤 모습인지, 특정 OID에 대한 반환 값 또는 사용되는 데이터 유형을 설명합니다.
**객체 식별자(OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 관리 정보 베이스(MIB) 내에서 객체를 관리하기 위해 설계되었습니다.
MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조직에 할당됩니다. 이러한 최상위 수준 내에서 글로벌 관리 관행 및 표준을 위한 프레임워크가 설정됩니다.
또한, 공급업체는 개인 브랜치를 설정할 수 있는 자유를 부여받습니다. 이러한 브랜치 내에서 그들은 자신의 제품 라인과 관련된 관리 객체를 포함할 수 있는 자율성을 가집니다. 이 시스템은 다양한 공급업체와 표준 간에 광범위한 객체를 식별하고 관리하기 위한 구조적이고 조직적인 방법을 보장합니다.
여기에서 웹을 통해 OID 트리를 탐색할 수 있습니다: http://www.oid-info.com/cgi-bin/display?tree=#focus 또는 OID의 의미를 확인할 수 있습니다 (예: 1.3.6.1.2.1.1
) http://oid-info.com/get/1.3.6.1.2.1.1에서 접근하여 확인하세요.
일부 잘 알려진 OID가 있으며, 1.3.6.1.2.1 내의 OID는 MIB-2에서 정의한 간단한 네트워크 관리 프로토콜(SNMP) 변수를 참조합니다. 그리고 이 OID에서 파생된 OID를 통해 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다.
여기에서 예시를 확인하세요:
1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7
이 주소의 세부 사항은 다음과 같습니다.
1 – 이것은 ISO라고 하며, 이것이 OID임을 나타냅니다. 그래서 모든 OID는 "1"로 시작합니다.
3 – 이것은 ORG라고 하며, 장치를 만든 조직을 지정하는 데 사용됩니다.
6 – 이것은 dod 또는 국방부로, 인터넷을 처음으로 설립한 조직입니다.
1 – 이것은 인터넷의 값을 나타내어 모든 통신이 인터넷을 통해 이루어질 것임을 나타냅니다.
4 – 이 값은 이 장치가 정부가 아닌 민간 조직에 의해 만들어졌음을 나타냅니다.
1 – 이 값은 장치가 기업 또는 비즈니스 엔티티에 의해 만들어졌음을 나타냅니다.
이 첫 여섯 값은 모든 장치에 대해 동일하며, 장치에 대한 기본 정보를 제공합니다. 이 숫자 시퀀스는 모든 OID에 대해 동일하지만, 장치가 정부에 의해 만들어진 경우는 제외됩니다.
다음 숫자 세트로 넘어갑니다.
1452 – 이 장치를 제조한 조직의 이름을 제공합니다.
1 – 장치의 유형을 설명합니다. 이 경우, 알람 시계입니다.
2 – 이 장치가 원격 터미널 장치임을 나타냅니다.
나머지 값들은 장치에 대한 구체적인 정보를 제공합니다.
5 – 개별 알람 포인트를 나타냅니다.
1 – 장치 내의 특정 포인트
3 – 포트
21 – 포트의 주소
1 – 포트의 디스플레이
4 – 포인트 번호
7 – 포인트의 상태
SNMP에는 2개의 중요한 버전이 있습니다:
SNMPv1: 주요 버전으로, 여전히 가장 빈번하게 사용되며, 인증은 문자열(커뮤니티 문자열)에 기반하고 평문으로 전송됩니다(모든 정보가 평문으로 전송됨). 버전 2 및 2c도 평문으로 트래픽을 전송하며 커뮤니티 문자열을 인증으로 사용합니다.
SNMPv3: 더 나은 인증 형태를 사용하며 정보는 암호화되어 전송됩니다( 사전 공격이 수행될 수 있지만, SNMPv1 및 v2보다 올바른 자격 증명을 찾기가 훨씬 더 어려워집니다).
앞서 언급했듯이, MIB에 저장된 정보에 접근하려면 버전 1 및 2/2c의 커뮤니티 문자열과 버전 3의 자격 증명을 알아야 합니다. 커뮤니티 문자열에는 2가지 유형이 있습니다:
public
주로 읽기 전용 기능
private
읽기/쓰기 일반적으로
OID의 쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르므로, **"public"**이 사용되고 있더라도 일부 값을 쓸 수 있을 수 있습니다. 또한, 항상 "읽기 전용"인 객체가 존재할 수 있습니다.
객체를 쓰기 시도하면 noSuchName
또는 readOnly
오류가 발생합니다**.**
버전 1 및 2/2c에서는 잘못된 커뮤니티 문자열을 사용하면 서버가 응답하지 않습니다. 따라서 응답이 있다면 유효한 커뮤니티 문자열이 사용된 것입니다.
SNMP 에이전트는 UDP 포트 161에서 요청을 수신합니다.
관리자는 포트 162에서 알림(트랩 및 InformRequests)을 수신합니다.
전송 계층 보안 또는 데이터그램 전송 계층 보안와 함께 사용할 때 요청은 포트 10161에서 수신되고 알림은 포트 10162로 전송됩니다.
커뮤니티 문자열을 추측하기 위해 사전 공격을 수행할 수 있습니다. SNMP에 대한 무차별 대입 공격을 수행하는 다양한 방법은 여기에서 확인하세요. 자주 사용되는 커뮤니티 문자열은 public
입니다.
장치에서 수집된 각 OID의 의미를 확인하기 위해 다음을 설치하는 것이 좋습니다:
유효한 커뮤니티 문자열을 알고 있다면, SNMPWalk 또는 SNMP-Check를 사용하여 데이터를 액세스할 수 있습니다:
확장 쿼리(download-mibs) 덕분에 다음 명령어로 시스템에 대한 더 많은 정보를 열거할 수 있습니다:
SNMP는 호스트에 대한 많은 정보를 가지고 있으며, 흥미로운 것들은 다음과 같습니다: 네트워크 인터페이스 (IPv4 및 IPv6 주소), 사용자 이름, 가동 시간, 서버/OS 버전, 및 프로세스
실행 중 (비밀번호를 포함할 수 있음)....
네트워크 관리 영역에서 특정 구성 및 매개변수는 포괄적인 모니터링 및 제어를 보장하는 데 핵심적입니다.
전체 OID 트리에 대한 접근을 가능하게 하는 두 가지 주요 설정이 있습니다. 이는 네트워크 관리에서 중요한 구성 요소입니다:
**rwuser noauth
**는 인증 없이 OID 트리에 대한 전체 접근을 허용하도록 설정됩니다. 이 설정은 간단하며 제한 없는 접근을 허용합니다.
보다 구체적인 제어를 위해 접근을 부여할 수 있습니다:
**rwcommunity
**는 IPv4 주소에 대해, 및
**rwcommunity6
**는 IPv6 주소에 대해 사용됩니다.
두 명령 모두 커뮤니티 문자열과 관련 IP 주소를 요구하며, 요청의 출처에 관계없이 전체 접근을 제공합니다.
일련의 관리 정보 베이스 (MIB) 값이 SNMP를 통해 Windows 시스템의 다양한 측면을 모니터링하는 데 사용됩니다:
시스템 프로세스: 1.3.6.1.2.1.25.1.6.0
를 통해 접근되며, 이 매개변수는 시스템 내의 활성 프로세스를 모니터링할 수 있게 합니다.
실행 중인 프로그램: 1.3.6.1.2.1.25.4.2.1.2
값은 현재 실행 중인 프로그램을 추적하는 데 지정됩니다.
프로세스 경로: 프로세스가 어디에서 실행되고 있는지를 확인하기 위해 1.3.6.1.2.1.25.4.2.1.4
MIB 값을 사용합니다.
저장 장치: 저장 장치의 모니터링은 1.3.6.1.2.1.25.2.3.1.4
에 의해 용이해집니다.
소프트웨어 이름: 시스템에 설치된 소프트웨어를 식별하기 위해 1.3.6.1.2.1.25.6.3.1.2
가 사용됩니다.
사용자 계정: 1.3.6.1.4.1.77.1.2.25
값은 사용자 계정을 추적할 수 있게 합니다.
TCP 로컬 포트: 마지막으로, 1.3.6.1.2.1.6.13.1.3
는 TCP 로컬 포트를 모니터링하는 데 지정되어 있으며, 활성 네트워크 연결에 대한 통찰력을 제공합니다.
Cisco 장비가 있는 경우 이 페이지를 확인하세요:
Cisco SNMPSNMP 서비스 내에서 값을 쓸 수 있는 문자열이 있다면, 이를 악용하여 명령을 실행할 수 있을지도 모릅니다:
SNMP RCEBraa 는 대량 SNMP 스캐너입니다. 이러한 도구의 의도된 사용은 물론 SNMP 쿼리를 만드는 것이지만, net-snmp의 snmpwalk와는 달리 수십 또는 수백 개의 호스트를 동시에, 단일 프로세스에서 쿼리할 수 있습니다. 따라서 시스템 자원을 매우 적게 소모하며 스캔을 매우 빠르게 수행합니다.
Braa는 자체 SNMP 스택을 구현하므로 net-snmp와 같은 SNMP 라이브러리가 필요하지 않습니다.
구문: braa [커뮤니티 문자열]@\ [SNMP 서버의 IP]:[iso id]
이것은 수동으로 처리할 수 없는 많은 MB의 정보를 추출할 수 있습니다.
그래서, 가장 흥미로운 정보를 찾아봅시다 (출처: https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/):
이 과정은 각 파일에서 sysDesc MIB 데이터 (1.3.6.1.2.1.1.1.0)를 추출하여 장치를 식별하는 것으로 시작됩니다. 이는 grep 명령어를 사용하여 수행됩니다:
중요한 단계는 조직에서 사용하는 비공식 커뮤니티 문자열을 식별하는 것입니다. 이 문자열은 라우터에서 실행 중인 구성을 추출할 수 있게 해줍니다. 식별은 종종 grep 명령을 사용하여 "trap"이라는 단어에 대한 SNMP Trap 데이터를 분석하는 데 의존합니다.
MIB 테이블에 저장된 로그는 로그온 시도 실패를 검사하며, 이 과정에서 사용자 이름으로 입력된 비밀번호가 우연히 포함될 수 있습니다. fail, failed, 또는 _login_과 같은 키워드를 검색하여 유용한 데이터를 찾습니다:
마지막으로, 데이터에서 이메일 주소를 추출하기 위해, 이메일 형식과 일치하는 패턴에 초점을 맞춘 정규 표현식을 사용한 grep 명령이 사용됩니다:
_NetScanTools_를 사용하여 값을 수정할 수 있습니다. 그렇게 하려면 비공식 문자열을 알아야 합니다.
ACL이 SMNP 서비스에 쿼리할 수 있는 IP만 허용하는 경우, UDP 패킷 내에서 이 주소 중 하나를 스푸핑하고 트래픽을 스니핑할 수 있습니다.
snmp.conf
snmpd.conf
snmp-config.xml
해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다! (유창한 폴란드어 구사 필수).
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)