# Windows Services 란?
- Windows Services는 시스템 부팅 시 자동으로 실행되거나, 수동으로 실행될 수 있는 백그라운드 프로세스.
- 일반적인 GUI 프로그램과 다르게 사용자 로그온 없이도 동작할 수 있으며, 주로 시스템 핵심 기능 또는 백그라운드 작업을 담당한다.
- 서비스는 **Service Control Manager (SCM)** 라는 Windows 컴포넌트에 의해 관리된다.
# Service Control Manager (SCM)
- `services.exe`로 실행되는 SCM은:
- 서비스 `시작/중지`
- 상태 `모니터링`
- 설정 `변경/저장`
- 실행 파일, 실행 계정 정보 등을 `참조`
```bash
sc qc apphostsvc
```
```bash
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: apphostsvc
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k apphost
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Application Host Helper Service
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
```
| 항목 | 설명 |
| -------------------- | ------------------------------------------------------------- |
| `SERVICE_NAME` | 서비스의 내부 이름 (예: apphostsvc) |
| `TYPE: 20` | `WIN32_SHARE_PROCESS`: 다른 서비스들과 프로세스를 공유 (svchost.exe와 같은 경우) |
| `START_TYPE: 2` | `AUTO_START`: 시스템 부팅 시 자동 시작 |
| `ERROR_CONTROL: 1` | 실패 시 처리 수준 (`NORMAL`: 오류 발생 시 경고만) |
| `BINARY_PATH_NAME` | 실행 파일 경로 + 인자 → `svchost.exe`를 사용해서 그룹(`-k apphost`)으로 실행 |
| `SERVICE_START_NAME` | 서비스를 실행하는 계정 → `LocalSystem`은 **가장 높은 권한** |
# DACL (Discretionary Access Control List)
- 각 서비스는 DACL을 가진다.
- 누가 서비스를 시작, 중지, 설정 변경할 수 있는지를 정의함.
- 공격자가 일반 사용자로서 서비스 DACL을 열람하거나 쓰기 권한이 있을 경우:
- 서비스 실행 파일을 교체하거나 설정을 바꿔 권한 상승 가능.
- GUI 도구인 **Process Hacker**로 확인 가능:
- 서비스 속성 -> 보안 탭에서 DACL 확인 및 수정 가능 (관리자 권한 필요)
![[Pasted image 20250621104638.png]]
# 서비스가 저장되는 레지스트리 경로
```bash
HKLM\SYSTEM\CurrentControlSet\Services\<서비스 이름>\
```
![[Pasted image 20250621104550.png]]
| 값 | 설명 |
| ------------ | ------------------------------------ |
| `ImagePath` | 실제 실행 경로 (`BINARY_PATH_NAME`과 동일) |
| `ObjectName` | 서비스 실행 계정 (`SERVICE_START_NAME`과 동일) |
| `Security` | DACL 정보 (이진 데이터로 저장됨) |