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 흔적이 없음 |
드라이버 열거
로드된 드라이버와 등록된 서비스를 둘 이상의 독립 도구로 수집한다. 한 도구의 목록이 다른 도구와 다르면 그 자체가 리드(재검증이 필요한 탐지 단서, 용어집)다.
| 도구 | 명령·경로 | 보는 것 |
|---|---|---|
| driverquery | driverquery /v | 로드된 드라이버 + 모듈 경로·시작 모드·상태. /fo csv로 저장 가능 |
| driverquery (서명) | driverquery /si | 드라이버 서명 여부. /v와 함께 사용 |
| sc | sc query type= driver state= all | 커널 서비스 등록 상태·상태값. state=를 생략하면 실행 중인 서비스만 나온다 |
| Autoruns | Drivers 탭 | 자동 시작 드라이버·서명·경로·타임스탬프 |
| System Informer | 관리자 권한 실행 → Kernel 또는 Modules | 로드된 커널 모듈·드라이버·베이스 주소 |
| pnputil | pnputil /enum-drivers | 드라이버 스토어에 등록된 타사 드라이버 패키지(oem*.inf) |
| pnputil (장치) | pnputil /enum-devices | 장치 열거. Windows 10 1903 이상 |
| fltmc | fltmc 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 탐지 절차
- 현재 로드된 드라이버 목록 수집(
driverquery /v, Autoruns Drivers 탭). - 각 항목의 파일 경로·서명 상태 확인(아래 "서명 상태"·"경로와 시간" 참조).
- 발견된
.sys의 SHA256 수집. - LOLDrivers 카탈로그와 해시 대조(절차는 LOLDrivers 조회).
- 서비스 생성·삭제 타임라인 확인(System 로그 이벤트 7045).
- Code Integrity Operational 로그에서 서명 검증 실패·차단 이벤트 확인.
- 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 바깥 경로의 .sys | AppData, Temp, 게임 폴더 내 드라이버 |
| CI 이벤트 3004·3033·3077과 동일 파일명 | 로드 시도·차단이 로그에 남은 상태 |
echo_driver.sys가 이번 검사나 이전 SS의 Echo 실행 이력과 맞지 않는 시각·경로에 있음 | SS 스캐너의 취약 드라이버를 가져다 쓴 BYOVD 후보 |
자주 나오는 취약 드라이버
| 드라이버 | 벤더(원래 목적) | CVE | 악용 이유 |
|---|---|---|---|
| RTCore64.sys | MSI(오버클럭·모니터링) | CVE-2019-16098 | 커널 임의 메모리 R/W |
| WinRing0x64.sys | OpenLibSys(하드웨어 IO) | — | 커널 IO 포트 접근 |
| gdrv.sys | GIGABYTE(시스템 관리) | CVE-2018-19320 | 임의 메모리 접근 |
| dbutil_2_3.sys | Dell(펌웨어 업데이트) | CVE-2021-21551 | 권한 상승 |
| AsUpIO.sys | ASUS(오버클럭) | — | 커널 메모리 읽기 |
| ene.sys | ENE Technology(RGB) | — | 커널 IO |
| Speedfan.sys | Speedfan(팬 제어) | CVE-2007-5633 | 커널 R/W |
| echo_driver.sys | Inspect 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과 대응) |
| 3111 | HVCI 정책 미충족 |
| 상태 | 의미 |
|---|---|
| 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 / dir | MFTECmd(raw $MFT) |
불일치가 나오면 은닉 의심이다. 단일 도구에서의 "깨끗함"은 약한 근거다. 불일치가 없다는 것이 은닉이 없다는 증명도 아니다. 탐지 도구 자체가 우회될 수 있으므로 다른 층 증거와 합산한다.
정상 vs 이상
| 구분 | 정상 | 이상 |
|---|---|---|
| 드라이버 서명 | Microsoft·GPU·오디오 벤더 | 서명 없음, 만료, 해지 |
| 드라이버 경로 | System32\drivers | Temp, 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- 번호를 새로 만들지 않는다.
- 드라이버 목록(
driverquery /v /fo csv전체 출력,sc query type= driver state= all)과System32\drivers수정 시각 정렬 목록, 서비스 키 대조 결과. - 서명 검증 결과(
Get-AuthenticodeSignature또는 Sigcheck 출력). - 해시 CSV(
Get-FileHash결과)와 LOLDrivers 대조 결과. pnputil /enum-drivers·fltmc filters출력(해당 시).- HVCI·CI 상태 캡처(Windows 드라이버 정책 모드 포함).
- CodeIntegrity 이벤트 로그(해당 이벤트 스크린샷 또는 보내기).
- 발견물 요약(타임라인, 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
- MS App Control 이벤트 ID 설명
- Code Integrity 진단 로그 이벤트
- PnPUtil 명령 구문
- sc query 구문
- MS 권장 드라이버 차단 규칙
- Authenticode
- Autoruns
- Sysmon
- System Informer
- 취약 드라이버 공격 모니터링 전략 (MS TechCommunity)
- LOLDrivers 카탈로그
- MS The Windows Driver Policy (2026-08-07) (평가·강제 모드, 전환 조건, 3076·3077 정책 ID)
- MS Windows IT Pro Blog: Removing trust for the cross-signed driver program (2026-03-26) (적용 버전)
- MS CiTool 명령 (Windows 11 22H2 이상, Windows Server 2025)
- MS Services 레지스트리 트리 (Start·Type·ImagePath 값)
- LOLDrivers: echo_driver.sys (2023-07-14) · NVD CVE-2023-38817 (disputed, 제작사 입장 NOTE 포함)
Next
- DMA 체크 → DMA / L0 안전 깊이
- 해시 대조 → LOLDrivers 조회
- FP 확인 → FP 베이스라인
- 판정 → 판정 루브릭
