SNMP Enumeration
Simple Network Management Protocol (SNMP) cho phép quản lý các thiết bị mạng từ xa. Tuy nhiên, SNMP có nhiều lỗ hổng bảo mật, chẳng hạn như thiếu kiểm tra, xác thực. Attacker có thể lợi dụng các lỗ hổng này để liệt kê accounts và devices. Bài viết này này mô tả cách liệt kê SNMP, thông tin được trích xuất thông qua liệt kê SNMP và các công cụ liệt kê SNMP khác nhau.
SNMP là một giao thức tầng ứng dụng chạy trên nền UDP mặc định là port 161, nó duy trì cũng như quản lý các thiết bị routers, switchs, hubs trên mạng, kể cả các thiết bị khác hỗ trợ SNMP. Lưu ý phạm vi bài viết này tập trung chủ yếu vào SNMP Enumeration chứ không tập trung vào cách triển khai, thực hành quản lý thiết bị sử dụng SNMP.
Giới thiệu giao thức SNMP
SNMP enumeration là quá trình xây dựng danh sách tài khoản và thiết bị của người dùng trên máy mục tiêu bằng SNMP. SNMP sử dụng hai loại thành phần SNMP agent và SNMP management. Hầu như tất cả các thiết bị mạng như router và switch đều tích hợp sẵn SNMP agent. SNMP management gửi yêu cầu đến agent; sau khi nhận được yêu cầu, agent trả lời. Cả thông điệp yêu cầu và thông điệp trả lời đều là các biến cấu hình mà management có thể truy cập. SNMP management gửi yêu cầu đặt giá trị cho một số biến. SNMP trap cho management biết nếu có sự kiện bất thường xảy ra ở phía agent như agent bị khởi động lại hoặc lỗi giao tiếp mạng.
SNMP chứa hai loại mật khẩu sau để định cấu hình và truy cập SNMP agent:
- Read Community String: có thể xem thông tin nếu có mật khẩu này.
- Read/Write Community String: có thể chỉnh sửa cấu hình nếu biết mật khẩu này.
Khi ta cấu hình community strings để mặc định, attacker có thể sử dụng chuỗi public mặc định này để thay đổi hoặc xem cấu hình thiết bị hoặc hệ thống. Attacker có thể liệt kê SNMP để trích xuất thông tin về tài nguyên như servers, routers, devices và tài nguyên chia sẻ cũng như những thông tin mạng như bảng ARP, bảng định tuyến, thông tin dành riêng cho thiết bị hay thống kê lưu lượng truy cập.
Cách hoạt động của SNMP
SNMP sử dụng một kiến trúc xáo trộn bao gồm các SNMP managers, SNMP agents và một số thành phần liên quan. Sau đây là một số lệnh liên quan đến SNMP:
- GetRequest: được sử dụng bởi trình SNMP manager để yêu cầu thông tin từ SNMP agent
- GetNextRequest: được trình SNMP manager sử dụng liên tục để truy xuất tất cả dữ liệu được lưu trữ trong một mảng hoặc một bảng
- GetResponse: được sử dụng bởi SNMP agent để đáp ứng yêu cầu của SNMP manager
- SetRequest: được trình SNMP manager sử dụng để sửa đổi giá trị của tham số trong cơ sở thông tin quản lý (MIB) của SNMP agent
- Trap: được sử dụng bởi SNMP agent để thông báo cho SNMP manager thông tin một sự kiện nhất định
Quá trình giao tiếp giữa trình SNMP manager và SNMP agent như sau:
- SNMP manager (host X, 10.10.2.1) sử dụng lệnh
GetRequest
để gửi yêu cầu tới SNMP agent (host Y, 10.10.2.15). Để thực hiện bước này, manager sử dụng thư viện dịch vụ SNMP chẳng hạn như thư viện Microsoft SNMP Management API (Mgmtapi.dll) hoặc thư viện Microsoft WinSNMP API (Wsnmp32.dll). - Agent nhận thông báo và xác minh xem giá trị community string (Compinfo) có trên MIB của nó hay không.
- Nếu agent không tìm thấy community string, nó sẽ gửi một SNMP error trap đến đích được chỉ định đó là host Z.
- SNMP tạo một thông báo SNMP trả về có chứa số phiên hoạt động và địa chỉ IP đích (10.10.2.1) của trình SNMP manager là host X.
- Host Y gửi phản hồi cho Host X.
Management Information Base (MIB)
MIB là một cơ sở dữ liệu chứa mô tả về tất cả các đối tượng mạng (network objects) mà giao thức SNMP quản lý. Nó là một tập hợp các thông tin được tổ chức theo thứ bậc. Các phần tử MIB được nhận dạng bằng cách sử dụng mã định danh đối tượng (OID – object identifiers). Một OID là tên được đặt cho một đối tượng. OID có thể xác định duy nhất một đối tượng trong hệ thống phân cấp MIB.
Các đối tượng do MIB quản lý bao gồm các đối tượng vô hướng, xác định một đối tượng đơn lẻ hoặc các đối tượng dạng bảng. OID bao gồm loại đối tượng (object type) chẳng hạn như counter, string hoặc address, mức truy cập (access-level) (chẳng hạn như read hoặc read/write), giới hạn kích thước và phạm vi.
Một số MIBs chính:
- DHCP.MIB: theo dõi lưu lượng mạng giữa máy chủ DHCP và máy remote
- HOSTMIB.MIB: theo dõi và quản lý tài nguyên
- LNMIB2.MIB: chứa các loại đối tượng cho các dịch vụ máy trạm và máy chủ
- MIB_II.MIB: quản lý Internet dựa trên TCP/IP
- WINS.MIB: dành cho Windows Internet Name Service (WINS)
SNMP Enumeration
Sử dụng SnmpWalk
SnmpWalk là một công cụ dòng lệnh giúp attacker quét nhiều node SNMP agent nhanh chóng và xác định nhanh các biến có sẵn. Sử dụng công cụ này, attacker nhắm mục tiêu vào node gốc để có thể tìm nạp thông tin từ tất cả các node phụ như router và switch.
Attacker chạy lệnh sau để lấy thông tin SNMP từ thiết bị đích:
snmpwalk -v1 -c <community string> <Target IP Address>
Kết quả như hình bên dưới:
Lệnh để thực hiện SNMP enumeration trong trường hợp sử dụng phiên bản SNMPv2:
snmpwalk -v2c -c <community string> <Target IP Address>
Lệnh để tìm kiếm ứng dụng đã được cài:
snmpwalk -v2c -c <community string> <Target IP Address> hrSWInstalledName
Lệnh để xác định dung lượng bộ nhớ RAM trên máy đích:
snmpwalk -v2c -c <community string> <Target IP Address> hrMemorySize
Lệnh để thay đổi OID thành một giá trị khác:
snmpwalk -v2c -c <community string> <Target IP Address> <OID> <New Value>
Lệnh thay đổi sysContact OID:
snmpwalk -v2c -c <community string> <Target IP Address> sysContact <New Value>
Sử dụng nmap
Attacker sử dụng tập lệnh snmp-processes
của Nmap Scripting Engine (NSE) để truy xuất thông tin từ SNMP.
nmap -sU -p 161 --script=snmp-processes <Target IP Address>
Lưu ý: port 161 là port của SNMP.
Sử dụng snmp-check
snmp-check là một công cụ mã nguồn mở được phân phối theo GNU General Public License (GPL). Mục tiêu của nó là tự động hóa quá trình thu thập thông tin trên thiết bị nào hỗ trợ SNMP (Windows, Unix, thiết bị mạng, máy in, …). snmp-check liệt kê và xuất đầu ra ở dạng con người có thể đọc được. Nó có thể áp dụng cho tấn công thâm nhập thử nghiệm hoặc giám sát hệ thống.
Attacker sử dụng công cụ này để thu thập thông tin về mục tiêu, như thông tin liên hệ, thông tin mô tả, quyền ghi, tên miền, thông tin phần cứng, thông tin lưu trữ, tên máy chủ, thống kê IIS, IP forwarding, lắng nghe port UDP, cổng mạng, dịch vụ mạng, thông tin định tuyến, thời gian hoạt động của hệ thống, kết nối TCP, tổng dung lượng RAM, thời gian hoạt động, tài khoản người dùng, …
SoftPerfect Network Scanner
SoftPerfect Network Scanner có thể ping máy tính, quét port, truy xuất thông tin về thiết bị mạng thông qua Windows Management Instrumentation (WMI), SNMP, HTTP, SSH và PowerShell. Nó cũng có thể quét các dịch vụ từ xa, quét registry, file và bộ đếm hiệu suất; cung cấp các tùy chọn lọc và hiển thị linh hoạt; và xuất kết quả NetScan sang nhiều định dạng khác nhau, như XML hay JSON.
Ngoài ra, SoftPerfect Network Scanner có thể kiểm tra port và hiển thị kết quả port đó đang mở hay là không. Ngoài ra, nó có thể phân giải máy chủ và tự động phát hiện các dải IP. Nó còn hỗ trợ tắt máy từ xa và Wake-on-LAN.
Ngoài ra còn có một số công cụ khác:
- Network Performance Monitor (https://www.solarwinds.com)
- OpUtils (https://www.manageengine.com)
- PRTG Network Monitor (https://www.paessler.com)
- Engineer’s Toolset (https://www.solarwinds.com)
LDAP Enumeration
Lightweight Directory Access Protocol (LDAP) là một giao thức Internet để truy cập các dịch vụ thư mục phân tán. LDAP truy cập danh sách thư mục trong Active Directory hoặc từ các dịch vụ thư mục khác. LDAP là một dạng thư mục phân cấp hoặc logic, tương tự như sơ đồ tổ chức của công ty. Dịch vụ thư mục có thể cung cấp ở cấu trúc phân cấp và logic, ví dụ như email công ty. LDAP sử dụng DNS để tra cứu nhanh và xử lý nhanh các truy vấn.
Máy khách bắt đầu phiên LDAP bằng cách kết nối với Directory System Agent (DSA), thường là trên port TCP 389 và gửi yêu cầu tới DSA. Định dạng Basic Encoding Rules (BER) được sử dụng để truyền thông tin giữa máy khách và máy chủ. Attacker có thể truy vấn ẩn danh dịch vụ LDAP để biết thông tin nhạy cảm như username, địa chỉ, …
LDAP Enumeration thủ công
Attacker có thể liệt kê LDAP thủ công bằng Python. Các bạn có thể thực hiện theo các bước dưới đây để thực hiện liệt kê LDAP thủ công bằng Python:
Sử dụng Nmap, kiểm tra xem máy chủ LDAP có đang lắng nghe port 389 đối với LDAP và cổng 636 đối với secure LDAP hay không? Nếu có thì chúng ta thực hiện việc enumeration bằng câu lệnh:
pip3 install ldap3
Tạo một đối tượng máy chủ (server). Nếu máy chủ đích đang lắng nghe trên secure LDAP, thì ta chỉ định use_ssl = True
. Truy xuất Directory System Agent (DSA) bằng cách chỉ định get_info = ldap3.ALL
. Sau đó tạo một connection object tên là connection
, gọi tới hàm bind()
. Nếu kết nối thành công, thì sẽ hiển thị True
.
import ldap3
server = ldap3.Server('Target IP Address’, get_info=ldap3.ALL, port=389)
connection = ldap3.Connection(server)
connection.bind ()
True
Sau đó ta có thể tìm nạp thông tin như domain name cách gõ server.info
.
Sau khi có naming context, ta truy xuất tất cả các đối tượng thư mục bằng cách sử dụng:
connection.search(search_base='DC=D0MAIN,DC=DOMAIN’, search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*’)
True
connection.entries
Kết quả:
Bây giờ, ta sử dụng đoạn mã sau để kết xuất toàn bộ LDAP:
connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope=’SUBTREE’, attributes='userPassword')
True
connection. entries
LDAP Enumeration tự động
Attacker sử dụng ldap-brute
NSE script để brute-force LDAP. Theo mặc định, nó sử dụng danh sách username/password tích hợp sẵn. Các đối số userdb và passdb có thể được sử dụng để sử dụng danh sách tùy chỉnh.
Công cụ Softerra LDAP Administrator
Có nhiều công cụ liệt kê LDAP truy cập vào Active Directory (AD) hoặc các dịch vụ thư mục khác. Softerra LDAP Administrator là một công cụ quản trị LDAP hoạt động với các máy chủ LDAP như Active Directory (AD), Novell Directory Services và Netscape/iPlanet. Nó duyệt và quản lý các thư mục LDAP.
Bài viết đến đây là kết thúc, các bạn có thể xem trọn bộ Series CEH Tiếng Việt tại đây.
Comments 1