hhkb.dev

BLOG

2025-12-26 / 레드팀풀체인 · 05

거점 확보와 방어 회피

1. 거점 확보(Persistence) 실습

초기 침투 이후에는 지속적으로 접근할 수 있도록 거점을 확보해야 한다. 단순 실행 한 번으로 끝내지 않고, 시스템이 재부팅되거나 세션이 끊겨도 연결이 다시 살아나게 만드는 단계다.

1.1. DLL 사이드로딩(DLL Sideloading) 활용

예시로는 Notepad++ 업데이터인 GUP.exe가 실행될 때, 같은 경로의 악성 DLL(libcurl.dll)을 읽게 만드는 방식이 있다.

구성 요소는 아래처럼 본다.

  • GUP.exe: 서명된 정상 실행 파일(Trigger)
  • libcurl.dll: 악성 쉘코드를 로드하는 C2 로더
  • robots.txt: 암호화된 쉘코드

실행 흐름은 GUP.exe 실행 -> libcurl.dll 로드 -> robots.txt 복호화 및 메모리 실행 -> C2 서버 연결 순서다.

1.2. 작업 스케줄러(Scheduled Task) 등록

매번 수동 실행하는 방식은 눈에 잘 띈다. 그래서 윈도우 작업 스케줄러를 이용해 단발성 트리거를 만드는 편이 낫다.

OpSec 관점에서는 아래를 같이 본다.

  • 이름 위장: Update Task, Chrome Updater처럼 정상 작업처럼 보이게 이름을 잡는다. 실습에서는 Run Group Choi 같은 이름도 썼지만, 실무에서는 이런 티 나는 이름을 그대로 쓰지 않는 편이 낫다.
  • 일회성 실행: 매분, 매시간처럼 반복 실행하면 패턴으로 잡히기 쉬우니, 한 번만 실행하고 스케줄을 지우는 방식이 안전하다.

2. 방어 회피(Defense Evasion)의 핵심 원칙

2.1. 방어 회피의 역설(The Defense Evasion Paradox)

"방어 회피 기법을 많이 사용할수록, 그 행위 자체가 또 다른 탐지 시그니처나 비정상(Anomaly)을 만들어낸다."

  • 괴물 바이너리: Call Stack Spoofing, ROP Gadgets, Module Stomping 같은 회피 기술을 지나치게 붙이면, 오히려 너무 이질적인 바이너리가 되어 AI/ML 기반 탐지나 숙련된 위협 헌터 눈에 더 잘 띈다.
  • 시스템 부하: 과도한 후킹 우회나 커널 조작은 불안정성을 키워 BSOD를 만들 수 있고, 그 자체가 즉각적인 발각으로 이어진다.

2.2. Blend-In(녹아들기) 전략

가장 강한 회피는 고급 기술 하나보다, 정상 사용자 행위와 구별되지 않게 녹아드는 것이다.

  • 정상 프로세스 위장: 서명된 정상 바이너리(GUP.exe, Teams.exe 등) 아래에서 사이드로딩 방식으로 동작하게 만든다.
  • 트래픽 위장: 일반 HTTPS 웹 트래픽처럼 패킷 크기와 주기를 맞춘다. 필요하면 AWS CloudFront, MS Azure 계열 도메인을 C2 채널처럼 활용한다.
  • 문맥(Context) 고려: 개발자 PC에서는 python.exe, git.exe가 자연스럽고, 인사팀 PC에서는 excel.exe 하위 동작이 덜 튄다.

2.3. 완벽한 회피는 없다

  • 로그는 남는다: EDR 알람을 피했더라도 Sysmon, NetFlow, 방화벽 로그, 인증 로그 어딘가에는 흔적이 남는다.
  • 목표 재설정: 방어 회피의 목표는 완전 은폐가 아니라, 블루팀 대응 역량 기준에서 현실적인 위협을 재현하는 것이다. 결국 탐지를 조금 늦춰 목표 달성 시간을 버는 쪽이 더 현실적이다.

3. 최신 보안 환경의 이해

  • EDR, XDR의 진화: 엔드포인트뿐 아니라 클라우드, 네트워크, 계정(Identity) 로그를 함께 분석해 상관관계를 본다. CrowdStrike, SentinelOne 같은 제품군이 이런 흐름을 대표한다.
  • 다층 방어: 엔드포인트를 우회해도 IDS, IPS, UEBA, MDR 같은 방어선이 남아 있다.
  • 레드팀의 자세: "뚫었다"는 성취보다, 블루팀이 놓친 갭을 찾아 메워주는 가치 제공에 더 집중해야 한다.