hhkb.dev

BLOG

2025-12-14 / 호스트기반모의해킹 · 38

윈도우 후속 공격

1. 개요

윈도우 후속 공격도 리눅스와 비슷하게 정보 수집(Information Gathering)부터 시작된다. 다만 윈도우는 권한 모델과 시스템 구조가 더 복잡해서, 목표를 어디에 둘지와 현재 시스템 상태를 먼저 정확히 이해해야 한다.

2. 윈도우 사용자 및 권한 모델

2.1 사용자 유형(User Types)

  1. 로컬 유저(Local User): 특정 호스트(단일 컴퓨터) 내에서만 존재하고 권한을 가지는 사용자.
    • Local Low Privilege: 일반 사용자(예: User, RedRaccoon).
    • Local Administrator: 호스트 관리자 계정.
  2. 도메인 유저(Domain User): Active Directory(AD) 환경에서 도메인 컨트롤러에 의해 관리되는 사용자. 네트워크 내의 여러 리소스에 접근 가능하다.(BHPT 범위 외지만 필수 개념).
  3. 서비스 계정(Service Account): 윈도우 서비스를 실행하기 위한 특수 계정.
    • LocalSystem(NT AUTHORITY\SYSTEM): 최고 권한.
    • NetworkService, LocalService: 제한된 권한.

2.2 시스템 권한(SYSTEM vs Administrator)

  • Local Administrator: Session 1+(GUI 사용 가능, AD 접근 가능).
  • SYSTEM(NT AUTHORITY\SYSTEM): Session 0(GUI 없음, AD 접근 제한).
  • 오해와 진실: "SYSTEM이 무조건 최고다?" -> 틀림.
    • 실제 공격에서는 로컬 관리자 권한이 GUI 접근 및 내부망 이동(Lateral Movement)에 더 유리할 수 있다.
    • 로컬 관리자 권한만 얻으면 PsExec 등을 통해 언제든 SYSTEM 권한으로 상승 가능하다.

2.3 자격 증명 덤핑(Credential Dumping) 타겟

  • SAM(Security Account Manager): 로컬 사용자 계정 및 비밀번호 해시(NT Hash).
  • LSA(Local Security Authority) Secrets: 서비스 계정 암호, 캐시된 도메인 자격 증명.
  • LSASS(Local Security Authority Subsystem Service): 메모리에 로드된 활성 사용자의 평문/해시 비밀번호.
  • DPAPI(Data Protection API): Chrome 비밀번호, 무선 네트워크 키 등을 암호화하는 마스터 키.

3. 정보 수집 실습(Information Gathering)

3.1 사용자 및 그룹 확인

  • whoami /priv: 현재 사용자의 권한(Privileges) 확인(예: SeShutdownPrivilege 등).
  • net user [username]: 특정 사용자 상세 정보(소속 그룹 확인).
    • Remote Desktop Users: RDP 접근 가능 그룹.
    • Remote Management Users: WinRM 접근 가능 그룹.
  • net localgroup: 로컬 그룹 목록 확인.
  • Get-LocalUser, Get-LocalGroup: PowerShell Cmdlet 활용.
  • C:\Users\: 사용자 홈 디렉토리 확인으로 이전 로그인 사용자 추적.

3.2 시스템 및 네트워크 정보

  • hostname: 호스트 이름(서버 용도 유추: Web01, Dev-DB).
  • systeminfo: OS 버전, Hotfix(보안 패치) 설치 여부(Kernel Exploit 가능성 판단).
  • winver: 윈도우 빌드 번호 확인(예: 1809, 22H2).
  • ipconfig /all: IP 주소, Gateway, DNS, NIC 개수(Dual-homed 여부 확인).
  • route print: 라우팅 테이블 확인(내부망 연결 확인).
  • arp -a: 동일 서브넷 내의 통신 기록 확인.

3.3 프로세스 및 서비스

  • Get-Process(ps): 실행 중인 프로세스 목록. EDR/백신 솔루션(Falcon, SentinelOne 등) 탐지.
  • Get-Service: 설치된 서비스 목록.
    • Get-Service | Where-Object {$_.Status -eq 'Running'}: 실행 중인 서비스만 필터링.
    • 타사 서비스(Web Server, DB 등) 식별.
  • netstat -ano: 열린 포트 및 연결 정보(PID와 매핑하여 어떤 프로세스가 포트를 열고 있는지 확인).

3.4 파일 및 소프트웨어

  • C:\Program Files, C:\Program Files(x86): 설치된 소프트웨어 확인.
  • C:\opt(드물지만 존재 가능), C:\Users\Public: 사용자 지정 설치 경로.
  • LastWriteTime: 최근 수정된 파일을 찾아 최근 활동 내역 파악.

3.5 하드코딩된 비밀(Hardcoded Secrets) 탐색

사용자나 관리자가 실수로 남긴 자격 증명을 찾는다.

  1. 설정 파일(.config, .ini, .xml):
    Get-ChildItem -Recurse -Include *.config,*.ini,*.xml -ErrorAction SilentlyContinue | Select-String "password"
    
  2. 사용자 파일(.txt, .xlsx): "비밀번호.txt", "서버접속.xlsx" 등.
  3. PowerShell 히스토리:
    • 경로: (Get-PSReadlineOption).HistorySavePath
    • 이전 명령어 기록에서 평문 비밀번호(예: net use 또는 스크립트 인자) 노출 여부 확인.