본문으로 건너뛰기

Ring0 안전 깊이 ​

커널 레이어에서 BYOVD·드라이버 숨김·코드 무결성 상태를 확인한다. Ring0 체크는 탐지 절차이며, exploit 재현이나 드라이버 로드 조작은 하지 않는다. Ring3 교차 없이 단독 Confirmed는 없다.

왜 중요한가 ​

Ring3 스캐너가 좋아지면서 치트 개발자들이 커널 레이어로 이동했다. BYOVD(정상 서명된 취약 드라이버 악용), 수동 맵(서비스·모듈 목록에 안 남는 커널 페이로드), 콜백 조작(프로세스·파일·레지스트리 은닉)이 대표적인 커널 경로 기법이다.

Ring0 체크의 목적은 이런 커널 레이어 흔적을 탐지하는 것이다. 취약점을 재현하거나 드라이버를 직접 로드하는 것은 SS 절차가 아니다.

BYOVD란 무엇인가 ​

BYOVD(Bring Your Own Vulnerable Driver) 는 공격자가 "이미 유효한 서명을 가진, 그러나 알려진 취약점이 있는 정상 드라이버"를 가져와 로드한 뒤, 그 드라이버의 취약 기능을 이용해 커널 읽기·쓰기 권한을 얻는 기법이다. Microsoft는 이를 "알려진 취약점을 가진 서명된 커널 드라이버를 악용해 커널을 손상시키는 기법"으로 정의한다.

핵심은 파일 자체가 합법적이라는 점이다. RTCore64.sys는 MSI Afterburner의 부속 드라이버이고, dbutil_2_3.sys는 Dell 펌웨어 업데이트 유틸리티의 구성 요소다. 서명은 유효하고 벤더도 실존한다. 그래서 다음 한계가 생긴다.

  • 서명 검증만으로는 잡히지 않는다. Authenticode 서명이 유효해도 그 드라이버가 왜 이 머신에, 왜 이 시각에 로드됐는지는 별개의 질문이다.
  • 해시 대조는 카탈로그에 있는 샘플만 잡는다. 변형·리빌드된 드라이버나 카탈로그에 없는 드라이버는 빠진다. Microsoft도 취약 드라이버 차단 목록이 "모든 취약 드라이버를 차단한다고 보장되지 않는다"고 명시한다.
  • 서명된 ≠ 로드됨 ≠ 악용됨. 디스크에 있는 것, 서비스로 등록된 것, 실제로 메모리에 로드된 것은 각각 다른 상태다. 해시·서비스 이벤트·CI 로그가 같은 시간축에서 수렴해야 "사용"을 말할 수 있다.

진입 조건 ​

Ring0 체크는 에스컬레이션 판단에서 Ring0 트리거가 있을 때만 진행한다. 트리거 없이 진행하면 오탐만 늘어난다.

조건예시
.sys 또는 드라이버 관련 파일 흔적Prefetch에 의심 드라이버
CI·HVCI 이상 + 행동 제보타임라인 안의 메모리 무결성 변경이나 CodeIntegrity 차단·감사 이벤트가 행동 제보와 겹침
도구 간 프로세스·모듈 불일치도구 A에 보이는 것이 도구 B에 없음
제보가 커널 우회를 가리킴 + Ring3 설명 부족"커널 드라이버로 읽는다"는 제보인데 Ring3 흔적이 없음

드라이버 열거 ​

로드된 드라이버와 등록된 서비스를 둘 이상의 독립 도구로 수집한다. 한 도구의 목록이 다른 도구와 다르면 그 자체가 리드(재검증이 필요한 탐지 단서, 용어집)다.

도구명령·경로보는 것
driverquerydriverquery /v로드된 드라이버 + 모듈 경로·시작 모드·상태. /fo csv로 저장 가능
driverquery (서명)driverquery /si드라이버 서명 여부. /v와 함께 사용
scsc query type= driver state= all커널 서비스 등록 상태·상태값. state=를 생략하면 실행 중인 서비스만 나온다
AutorunsDrivers 탭자동 시작 드라이버·서명·경로·타임스탬프
System Informer관리자 권한 실행 → Kernel 또는 Modules로드된 커널 모듈·드라이버·베이스 주소
pnputilpnputil /enum-drivers드라이버 스토어에 등록된 타사 드라이버 패키지(oem*.inf)
pnputil (장치)pnputil /enum-devices장치 열거. Windows 10 1903 이상
fltmcfltmc filters파일시스템 미니필터 드라이버 목록. 안티치트·EDR 미니필터와 익명 항목을 구분

driverquery /v는 모듈명·표시명·드라이버 파일 경로·시작 모드(BOOT/SYSTEM/AUTO/MANUAL/DISABLED)·실행 상태를 한 줄씩 준다. /fo csv로 저장해 08-escalation/에 보관한다. driverquery /si는 서명 여부 칸을 추가한다.

pnputil /enum-drivers는 실제 로드가 아니라 드라이버 스토어 등록 기준 목록이다. oemXX.inf 형태로 나오며 게시자·버전·서명자·클래스가 포함된다. 스토어에는 등록됐지만 로드되지 않은 것, 로드됐지만 스토어에 없는 것(비표준 경로에서 직접 로드)을 비교하면 이상이 보인다.

드라이버 폴더와 서비스 키 대조 ​

C:\Windows\System32\drivers의 .sys를 수정 시각 순으로 정렬해 본다. 윈도 업데이트로 한꺼번에 바뀐 묶음과 따로 떨어진 파일이 갈리고, 묶음 밖에서 게임 세션 가까이 생기거나 바뀐 파일이 리드가 된다.

그다음 서비스 키와 드라이버 파일을 대조한다. 드라이버 서비스는 HKLM\SYSTEM\CurrentControlSet\Services\<이름> 아래에 있고, Type 값 1은 커널 드라이버, 2는 파일 시스템 드라이버다. ImagePath는 바이너리 경로를, Start는 로드 시점(0 부트, 1 시스템, 2 자동, 3 요청 시, 4 사용 안 함)을 가리킨다.

Get-ChildItem C:\Windows\System32\drivers\*.sys | Sort-Object LastWriteTime -Descending | Select-Object -First 40 Name, LastWriteTime, Length
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\*' | Where-Object { $_.Type -in 1,2 } | Select-Object PSChildName, ImagePath, Start
상태읽는 법정상 설명
키는 있는데 ImagePath가 가리키는 파일이 없다파일을 지우거나 옮긴 흔적이다. USN에서 그 파일의 삭제·이름 바꾸기 기록을 찾는다제거가 덜 된 소프트웨어가 남긴 키
파일은 있는데 그 파일을 가리키는 키가 없다서비스 등록 없이 올렸거나(매퍼·수동 로드), 서비스만 지우고 파일은 남긴 정리다. CI 이벤트와 7045 이력을 본다제거된 소프트웨어가 남긴 파일

대조 결과는 무엇을 더 볼지 정하는 리드이고, 어느 쪽이든 단독으로 판정하지 않는다.

BYOVD 탐지 절차 ​

  1. 현재 로드된 드라이버 목록 수집(driverquery /v, Autoruns Drivers 탭).
  2. 각 항목의 파일 경로·서명 상태 확인(아래 "서명 상태"·"경로와 시간" 참조).
  3. 발견된 .sys의 SHA256 수집.
  4. LOLDrivers 카탈로그와 해시 대조(절차는 LOLDrivers 조회).
  5. 서비스 생성·삭제 타임라인 확인(System 로그 이벤트 7045).
  6. Code Integrity Operational 로그에서 서명 검증 실패·차단 이벤트 확인.
  7. Ring3 아티팩트와 교차: 매퍼·로더의 Prefetch·BAM 흔적, 로드 시각과 게임 세션 정렬.

파일 경로와 수정 시각 ​

정상 드라이버는 대개 C:\Windows\System32\drivers 또는 해당 벤더의 Program Files 아래에 있다. Temp, AppData, Downloads, 게임 설치 폴더 안의 .sys는 정상 설치 흐름에서 나오기 어려운 위치다.

시간 해석은 세 축을 겹친다.

  • 파일의 생성·수정 시각(dir 출력 또는 Get-Item으로 확인).
  • 서비스 등록·시작 시각(System 로그 7045).
  • 해당 드라이버가 실제로 로드된 시각(Code Integrity 이벤트, Sysmon 이벤트 6 DriverLoaded가 있는 환경이면 그 이벤트).

"방금 생긴 .sys + 직전 서비스 생성 + 게임 세션과 시간 일치"는 강한 조합이다. 반대로 파일만 있고 서비스·로드 흔적이 없으면 "존재"는 있으나 "사용"은 증명되지 않는다.

서명 상태 분류 ​

상태의미판정 기여
유효 서명Microsoft·하드웨어 벤더·소프트웨어 벤더의 정상 서명정상 방향. 그러나 BYOVD는 이 칸에 들어오므로 단독으로 Clean 근거는 못 된다
무서명서명 없음. CI가 로드를 막는 환경에서는 로드 자체가 불가로드 성공 흔적이 있다면 CI가 약해진 환경과 함께 해석
만료·해지서명은 있으나 인증서가 만료되거나 해지됨3033 계열 이벤트와 연결. BYOVD에서 해지된 인증서가 쓰이는 경우가 있음
테스트 서명TESTSIGNING 부팅 모드에서만 유효한 서명테스트 서명 모드 자체가 시스템 약화 신호. 부팅 로고·msinfo32에서 확인

Get-AuthenticodeSignature(또는 Sigcheck)로 서명 상태를 확인하고, 상태 값만으로 끝내지 않는다. "서명됨"은 "유효한 인증서가 붙어 있다"는 뜻이지 "정상 소프트웨어가 정상 목적으로 설치했다"는 뜻이 아니다.

서비스 생성·삭제 ​

드라이버 로드는 대개 서비스 등록을 통해 이뤄진다. sc create로 만들고, 로드 뒤 sc delete로 지우는 패턴이 BYOVD에서 흔하다.

  • System 로그 이벤트 7045(Service Control Manager, "A service was installed in the system"): 서비스 이름·이미지 경로·시작 모드가 들어간다. 임시 경로의 .sys를 가리키는 7045는 강한 리드다.
  • 서비스가 만들어졌다가 짧은 시간 안에 지워지면(7045 직후 해당 서비스 레지스트리 키·서비스 목록에서 사라짐) "로드 후 정리" 패턴으로 본다.
  • sc query type= driver state= all로 등록된 드라이버 서비스를 실행 여부와 관계없이 본다. 이미 삭제된 서비스는 목록에 없으므로, 삭제는 USN·레지스트리·이벤트 쪽에서 복원한다.

주요 신호 ​

신호의미
LOLDrivers 목록 해시 일치 + 게임 세션 타임라인세션 중 취약 드라이버 로드
서비스 생성 후 빠른 삭제(이벤트 7045 + USN)로드 후 정리 패턴
드라이버 벤더와 설치된 소프트웨어 불일치RTCore64.sys가 있는데 MSI Afterburner 없음
System32\drivers 바깥 경로의 .sysAppData, Temp, 게임 폴더 내 드라이버
CI 이벤트 3004·3033·3077과 동일 파일명로드 시도·차단이 로그에 남은 상태
echo_driver.sys가 이번 검사나 이전 SS의 Echo 실행 이력과 맞지 않는 시각·경로에 있음SS 스캐너의 취약 드라이버를 가져다 쓴 BYOVD 후보

자주 나오는 취약 드라이버 ​

드라이버벤더(원래 목적)CVE악용 이유
RTCore64.sysMSI(오버클럭·모니터링)CVE-2019-16098커널 임의 메모리 R/W
WinRing0x64.sysOpenLibSys(하드웨어 IO)—커널 IO 포트 접근
gdrv.sysGIGABYTE(시스템 관리)CVE-2018-19320임의 메모리 접근
dbutil_2_3.sysDell(펌웨어 업데이트)CVE-2021-21551권한 상승
AsUpIO.sysASUS(오버클럭)—커널 메모리 읽기
ene.sysENE Technology(RGB)—커널 IO
Speedfan.sysSpeedfan(팬 제어)CVE-2007-5633커널 R/W
echo_driver.sysInspect Element Ltd.(SS 스캐너 Echo)CVE-2023-38817(제작사가 이의를 제기한 CVE)접근 제어 결함으로 임의 메모리 R/W, 토큰 탈취로 권한 상승

이 이름이 나왔다고 자동으로 치트는 아니다. 전부 정상 소프트웨어의 구성 요소이기도 하다. 조회 절차와 히트 판정 흐름은 LOLDrivers 조회에 있다.

Code Integrity / HVCI 상태 ​

HVCI(Hypervisor-Protected Code Integrity)가 켜져 있으면 서명 없는 드라이버 로드가 제한된다. 꺼져 있으면 제한이 풀린다.

확인 항목방법
메모리 무결성Windows 보안 → 코어 격리
VBS 상태msinfo32 → Virtualization-based security
CI 이벤트CodeIntegrity → Operational 로그

CodeIntegrity → Operational 로그의 주요 이벤트(Microsoft 문서 기준):

이벤트의미
3001무서명 드라이버 로드 시도
3004잘못된 서명으로 커널 드라이버 로드 시도(WHQL 미충족 등)
3023정책 요구를 충족하지 못한 드라이버
3033서명 해지·Lifetime Signing EKU 만료·정책 미충족. CIG 충돌도 포함
3076감사 모드: 정책이면 차단됐을 파일. Windows 드라이버 정책의 평가 기록도 이 ID로 남는다(아래)
3077강제 모드: 정책 위반으로 차단된 파일(주요 차단 이벤트). Windows 드라이버 정책의 차단도 이 ID다
3089차단 이벤트와 묶이는 서명 정보(Correlation ActivityID로 3004·3033·3076·3077과 대응)
3111HVCI 정책 미충족
상태의미
HVCI 활성 + 위반 없음서명 없는 드라이버 로드가 어려운 환경
HVCI 비활성로드 가능한 환경. 단독 신호는 아님
HVCI 비활성 + LOLDrivers 흔적조합으로 판정 가중
CI 이벤트 3076/3077/3001 + 해당 드라이버로드 시도 또는 차단 증거
3076의 정책 ID가 Windows 드라이버 정책 평가 ID뿐교차 서명 드라이버를 쓰는 PC의 평가 기록. 단독 신호는 아님

HVCI는 게임 호환성 때문에 꺼진 경우가 많다. 꺼져 있다는 사실만으로는 판정 재료가 되지 않는다.

Windows 드라이버 정책 ​

2026년 4월 보안 업데이트부터 Windows 11 24H2·25H2·26H1과 Windows Server 2025는 만료된 교차 서명(cross-signed) 프로그램으로 서명된 커널 드라이버를 기본으로 신뢰하지 않는다. 이후 버전의 Windows 11·Windows Server도 같은 정책을 강제한다. 로드가 허용되는 것은 WHCP 인증으로 서명된 드라이버와, 정책의 허용 목록에 오른 평판 있는 교차 서명 드라이버다. 정책은 두 단계로 켜지고, 이벤트 상세의 Policy ID 필드로 이 정책의 기록을 가려낸다.

단계동작CodeIntegrity 이벤트와 정책 ID
평가(감사) 모드정책에 막힐 드라이버를 기록만 하고 로드는 허용한다3076, {784C4414-79F4-4C32-A6A5-F0FB42A51D0D}
강제 모드정책을 넘지 못하는 드라이버의 로드를 막는다3077, {8F9CB695-5D48-48D6-A329-7202B44607E3}

평가 모드에서 가동 250시간과 재부팅 3회(서버는 2회)를 위반 없이 채우면 강제 모드로 자동 전환한다. 평가 중에 막힐 드라이버가 로드되면 두 계수가 0으로 돌아가고, Windows를 재설정하거나 다시 설치하면 평가부터 다시 시작한다. 이벤트 상세에는 드라이버 이름과 그 드라이버를 로드하려 한 프로세스 이름이 들어간다.

  • 3076 + 평가 정책 ID. 이 정책의 평가 기록이다. 오래된 하드웨어·유틸리티 드라이버를 쓰는 PC에서는 반복해서 남을 수 있으므로 이것만으로 조작을 읽지 않는다. 드라이버 이름·로드한 프로세스·시각이 남으므로 로드 타임라인의 재료로 쓴다.
  • 3077 + 강제 정책 ID. 정책을 넘지 못한 드라이버의 로드 시도가 막힌 기록이다. 드라이버는 로드되지 않았고, 시도한 시각과 프로세스가 남는다.
  • 모드 확인. CiTool --list-policies(Windows 11 22H2 이상, Windows Server 2025)의 정책 목록에서 두 정책 ID의 적용 여부를 보고 환경 기록에 남긴다. 목록 조회만 하고 정책은 바꾸지 않는다.

숨김·불일치 탐지 ​

커널 치트가 프로세스·드라이버·파일을 숨기면 도구마다 보이는 결과가 달라진다. 이중 도구 열거로 불일치를 찾는다.

비교도구 A도구 B
프로세스작업 관리자System Informer 또는 tasklist
드라이버Autoruns Drivers 탭driverquery /v
파일Explorer / dirMFTECmd(raw $MFT)

불일치가 나오면 은닉 의심이다. 단일 도구에서의 "깨끗함"은 약한 근거다. 불일치가 없다는 것이 은닉이 없다는 증명도 아니다. 탐지 도구 자체가 우회될 수 있으므로 다른 층 증거와 합산한다.

정상 vs 이상 ​

구분정상이상
드라이버 서명Microsoft·GPU·오디오 벤더서명 없음, 만료, 해지
드라이버 경로System32\driversTemp, AppData, 게임 폴더
서비스 타임라인부팅 시 로드, 지속게임 직전 생성 → 직후 삭제
도구 열거도구 간 일치불일치
HVCI활성 또는 비활성(설정 차이)타임라인 내 변경

오탐 ​

Ring0 오탐 드라이버 목록은 FP 베이스라인의 Ring0 섹션을 참조한다.

  • RTCore64.sys: MSI Afterburner 사용자. 설치 확인과 타임라인 확인으로 FP 판정.
  • WinRing0x64.sys: HWiNFO64, HWMonitor, CPU-Z. 해당 프로그램 설치 여부를 본다.
  • 하드웨어 제조사 유틸리티: ASUS(AsUpIO 등)·GIGABYTE·Dell·MSI 등 각 제조사의 모니터링·업데이트 유틸리티가 자체 커널 드라이버를 둔다. 설치된 소프트웨어 목록과 대조한다.
  • 안티치트 자체 드라이버(mhyprot2.sys, bedaisy.sys, xhunter1.sys 등): 게임 설치 여부가 1차 필터다. 다만 이 셋은 LOLDrivers 등재 드라이버이므로 설치 확인만으로 종결하지 않는다. 로드 시각이 게임 세션과 정렬되는지, 서비스 이벤트 7045가 설치 시점과 맞는지 함께 본다.
  • 가상화·보안 드라이버: VMware·VirtualBox·Hyper-V, 백신의 자기보호 드라이버, EDR 센서. 해당 제품이 설치돼 있는지 확인한다.
  • echo_driver.sys: SS 스캐너 Echo(제작사 Inspect Element Ltd.)의 드라이버이고, LOLDrivers에 취약 드라이버로 등재돼 있다(LOLDrivers 조회). 이번 검사에서 Echo를 돌렸다면 검사자 자신의 흔적이다. 이전 SS에서 Echo를 쓴 적이 있으면 그 잔재일 수 있으므로 검사 이력과 서비스 생성(7045)·파일 시각을 맞춰 본다. 이력과 맞지 않는 시각이나 사용자 경로에 있으면 BYOVD 후보로 올린다.

판정 기준 ​

Ring0 발견물은 반드시 Ring3나 타임라인과 교차한 뒤에 판정한다.

패턴판정 방향
Ring3 실행 흔적 + 취약 드라이버 타임라인 일치 + 서비스 이벤트루브릭 Confirmed 검토
취약 드라이버 + 관련 소프트웨어 설치됨, 서비스 생성·로드 시각과 경로가 설치 이력과 맞음FP. 증거에 기록
취약 드라이버 + 관련 소프트웨어 설치됨, 서비스 생성이 게임 세션 직전이거나 경로가 설치 경로 밖리드. Ring3 로더 흔적과 교차 확인
취약 드라이버 + 관련 소프트웨어 없음, Ring3 교차 없음Suspicious. 단독 Confirmed 불가
HVCI 꺼짐 + 드라이버 이상 없음환경 메모 후 Clean(조건부)
도구 불일치 + Ring3 안티포렌식 패턴Suspicious 상향 검토

Ring0에서 Confirmed를 내리려면 Ring3 흔적, Ring0 드라이버 증거, 타임라인 교차 세 요소가 모두 있어야 한다.

증거 캡처 ​

evidence/<case-id>/08-escalation/에 저장한다. 증거 패키지 템플릿에서 06-은 안티포렌식 슬롯이므로, Ring0 발견물에 06- 번호를 새로 만들지 않는다.

  1. 드라이버 목록(driverquery /v /fo csv 전체 출력, sc query type= driver state= all)과 System32\drivers 수정 시각 정렬 목록, 서비스 키 대조 결과.
  2. 서명 검증 결과(Get-AuthenticodeSignature 또는 Sigcheck 출력).
  3. 해시 CSV(Get-FileHash 결과)와 LOLDrivers 대조 결과.
  4. pnputil /enum-drivers·fltmc filters 출력(해당 시).
  5. HVCI·CI 상태 캡처(Windows 드라이버 정책 모드 포함).
  6. CodeIntegrity 이벤트 로그(해당 이벤트 스크린샷 또는 보내기).
  7. 발견물 요약(타임라인, FP 여부, Ring3 교차).

흔한 실수 ​

  • BYOVD exploit을 재현하거나 취약 드라이버를 설치해 실험한다.
  • Ring0 단독으로 Confirmed를 내린다. Ring3 실행 흔적, Ring0 드라이버 증거, 타임라인 교차가 모두 있어야 한다.
  • 메모리 전체 덤프를 SS 절차로 수행한다.
  • LOLDrivers 히트 하나로 Confirmed를 내린다. FP 배제가 먼저다.
  • "서명됨"을 "안전함"으로 읽는다. BYOVD는 유효한 서명 위에서 동작한다.

Community. 커뮤니티에서는 BYOVD가 Ring3 스캐너를 우회하는 주요 수단으로 논의된다. RTCore64.sys, gdrv.sys, dbutil_2_3.sys 같은 이름이 반복 등장하지만, 이름만으로 판단하면 MSI Afterburner·GIGABYTE 유틸리티 사용자를 오탐한다. 해시 대조와 타임라인 교차가 필수라는 점이 강조된다.

Sources ​

Next ​