제가 만든 오픈소스 프로젝트를 소개해요. Windows 10/11 PC에서 USB 저장장치 접근을 차단, 읽기 전용, 허용으로 관리하는 작은 매체제어 도구예요.
GitHub: kh20134/usb-access-control (MIT 라이선스)
왜 만들었나
USB 저장장치는 지금도 정보유출과 악성코드 유입의 대표 경로예요. 그래서 공공·기업 환경에서는 매체제어를 기본 통제로 둬요.
전산시스템을 총괄하다 보면 상용 매체제어 제품이 내부에서 어떤 정책 모델로 움직이는지 궁금할 때가 많아요. 그 구조를 로컬 PC에서 직접 확인해 보려고 만들었어요.
- 상용 DLP, 도메인 그룹 정책, Intune을 대체하는 도구는 아니에요.
- 한 대 또는 소수 PC에서 정책을 시험하고 이해하는 용도예요.
주요 기능
- 정책 모드: 차단, 읽기 전용, 허용
- 화이트리스트: VID/PID/일련번호. 일련번호를 비우면 그 제품 전체 승인
- 선택적 차단: 차단 + 승인 장치가 있으면 전역 거부는 끄고, 일치하지 않는 USBSTOR 장치만 비활성화
- 감시: USB 연결·분리를 기록
- 감사 로그: JSON Lines 저장, UTF-8 BOM CSV 내보내기
- 보호: 변경 시 관리자 권한 필요, 선택형 관리자 암호(PBKDF2)
- ACL: 정책 폴더는 Administrators와 SYSTEM만 접근
- UI: 한국어 Avalonia 창과
usbacCLI
구조
.NET 8로 만들었고, 플랫폼 중립 Core 뒤에 Windows 계층을 두었어요. 정책 판단, 화이트리스트 대조, 감사 로그는 Windows API 없이 동작해요.
(출처: 본인 깃허브, docs/architecture.svg를 PNG로 변환)
- Core: 정책, 화이트리스트, 적용 계획, 감사 로그
- Windows: 정책 레지스트리, SetupAPI 열거, cfgmgr32 장치 노드, WMI 이벤트
- CLI·앱: 같은 정책 파일을 함께 사용
테스트는 38개(Core 33, CLI 3, UI 2)예요. Windows API는 가짜 구현으로 대체해서, GitHub Actions의 Ubuntu와 Windows에서 모두 돌아요. 러너의 USB 정책은 바꾸지 않아요.
실제 화면
(출처: 본인 깃허브. 화면의 장치 두 대는 미리보기용 예시 데이터이고, 캡처 중 레지스트리는 변경하지 않았어요)
차단 정책에서 승인된 SanDisk는 허용, 미승인 Kingston은 차단으로 판정되는 모습이에요. 아래에는 감사 로그가 바로 보여요.
설치·사용법
.NET 8 SDK가 필요해요. 먼저 테스트와 빌드를 해요(PowerShell 기준).
dotnet test `
UsbAccessControl.sln `
-c Release
dotnet build `
UsbAccessControl.sln `
-c Release
Windows 배포용 CLI는 이렇게 만들어요.
dotnet publish `
src/UsbAccessControl.Cli `
-c Release -r win-x64 `
--self-contained false `
-o artifacts/cli
정책 확인과 변경이에요. 저장과 적용은 분리돼 있어요.
usbac policy show
usbac policy set block
usbac policy apply --yes
policy set은 파일에 저장만 해요.policy apply가 실제 레지스트리와 장치 노드를 바꿔요.- 차단 적용은
--yes가 있어야 해요.
승인 장치 등록과 로그 내보내기예요.
usbac whitelist add `
--vid 0781 --pid 5581 `
--name "SanDisk Ultra"
usbac whitelist list
usbac logs --limit 20
usbac logs export `
--out audit.csv
선택적 차단을 유지하려면 감시 작업을 등록해요.
usbac task install
- 시스템 시작 때 SYSTEM 권한으로
usbac.exe monitor가 실행돼요. - 창만 보려면
UsbAccessControl.exe --preview를 써요. 레지스트리를 쓰지 않아요.
한계와 주의사항
- 로컬 관리자 우회: 관리자는 레지스트리와 정책 파일을 직접 고칠 수 있어요. 암호와 ACL은 OS 권한을 대신하지 못해요.
- DLP가 아님: 파일 시스템 필터 드라이버가 없어요.
- 그룹 정책 경합: 도메인 GPO가 같은 키를 관리하면 gpupdate 뒤 되돌아가요. 도메인 PC는 GPO나 Intune이 기준이에요.
- 선택적 차단: 감시 프로세스가 없으면 새로 꽂은 장치가 열릴 수 있어요.
- 읽기 전용은 PC 전역: 화이트리스트가 쓰기 예외가 되지 않아요. 승인 장치만 쓰게 하려면 차단 + 화이트리스트를 써요.
- 범위: CD/DVD, 일부 카드리더, MTP 휴대폰, 네트워크·블루투스 전송은 장치 노드 제어 대상이 아니에요.
- 감사 로그: 로컬 파일이라 중앙 수집과 위변조 방지가 없어요.
- 처음 실행만으로는 USB가 막히지 않아요. 적용을 눌러야 해요.
앞으로 할 일
아래는 계획이에요. 일정은 정해지지 않았어요.
- 감사 로그 중앙 수집(syslog 등) 연동 검토
- 감사 로그 위변조 탐지(해시 체인) 검토
- 서명된 배포 파일과 설치 안내 정리
- 실제 Windows 장비 기준 동작 검증 사례 보강
FAQ
회사 PC에 바로 써도 되나요?
도메인에 가입된 PC는 GPO나 Intune을 기준으로 하세요. 이 도구는 소수 PC 시험용에 가까워요.
읽기 전용에서 승인 USB만 쓰기 가능하게 할 수 있나요?
아니요. 읽기 전용은 PC 전역이라, 기본 정책을 차단으로 두고 화이트리스트를 쓰셔야 해요.
키보드나 마우스도 막히나요?
아니요. 장치 노드를 끄는 건 인스턴스 ID가 USBSTOR로 시작하는 저장장치뿐이에요.
마무리
매체제어가 내부에서 어떻게 동작하는지 직접 보고 싶어서 만든 도구예요.
코드와 문서는 모두 공개돼 있으니 이슈와 의견을 편하게 남겨 주세요.