프로젝트 개요
KISA(한국인터넷진흥원) 기술적 취약점 분석·평가 방법 상세가이드를 기반으로 Windows 시스템의 보안 설정을 자동 점검하는 개인 프로젝트입니다.
실행 파일을 더블클릭하면 5개 카테고리 64개 항목을 순차 점검하고, 결과를 JSON으로 저장한 뒤 로컬 웹 대시보드로 시각화합니다.
외부 서버나 추가 설치 없이 .exe 단독 실행만으로 동작하며, 이 프로젝트는 이후 Ansible 기반 보안 점검 자동화 시스템의 기반이 됐습니다.
배경 및 동기
보안 공부를 하면서 KISA 취약점 점검 가이드를 접했는데, 이 가이드에 나온 항목들을 실제 시스템에서 직접 확인해보고 싶었습니다. 수작업으로 레지스트리를 열고 보안 정책을 확인하는 것은 비효율적이라 판단해, PowerShell로 전 항목을 자동화하고 결과를 한눈에 볼 수 있는 대시보드까지 직접 만들었습니다.
$
기술 스택
PowerShellPS2EXEHTML/CSS/JSChart.js.NET HttpListener
$
시스템 구조
▸ 실행 레이어
[SecurityChecker.exe (PS2EXE 패키징)]
▸ 점검 레이어
[계정 관리 (W-01~W-14)][서비스 관리 (W-15~W-37)][패치 관리 (W-38~W-39)][로그 관리 (W-40~W-43)][보안 관리 (W-44~W-64)]
▸ 데이터 수집
[Get-LocalUser / Get-LocalGroupMember][net accounts][secedit /export][레지스트리 (HKLM:\\SYSTEM, HKLM:\\SOFTWARE)]
▸ 결과 저장
[JSON 파일 (%APPDATA%\\SecurityChecker\\Results)]
▸ 시각화 레이어
[.NET HttpListener (로컬 HTTP 서버)][브라우저 자동 실행][Chart.js 도넛 차트][필터 / 검색 / CSV·보고서 내보내기]
↓ ↓ ↓ ↓
실행 파일 클릭 → 점검 수행 → JSON 저장 → 로컬 서버 구동 → 브라우저 대시보드 표시
점검 항목 (총 64개)
KISA 가이드의 항목 코드(W-01 ~ W-64)를 그대로 적용했습니다.
| 카테고리 | 항목 수 | 주요 점검 내용 |
|---|---|---|
| 계정 관리 | 14개 | Administrator 계정 이름 변경, Guest 비활성화, 비밀번호 정책, 계정 잠금 임계값 |
| 서비스 관리 | 23개 | 불필요한 서비스(FTP/Telnet/SNMP/NetBIOS) 비활성화, 기본 공유(C$) 제거, RDP 암호화 |
| 패치 관리 | 2개 | 최신 Windows 빌드 적용, 백신 정의 업데이트 상태 |
| 로그 관리 | 4개 | 이벤트 로그 설정, NTP 시각 동기화, 로그 파일 접근 통제 |
| 보안 관리 | 21개 | SAM 파일 보호, 레지스트리 원격 접근 제한, 자동 로그온 비활성화, 방화벽 설정 |
점검 방식 예시
| 항목 | 확인 방법 |
|---|---|
| Administrator 계정 이름 변경 (W-01) | Get-LocalUser — SID 끝번호 -500 계정 이름 확인 |
| 비밀번호 복잡성 정책 (W-09) | secedit /export → PasswordComplexity 값 파싱 |
| 계정 잠금 임계값 (W-04) | net accounts 출력 파싱 |
| EveryoneIncludesAnonymous (W-07) | HKLM:\SYSTEM\CurrentControlSet\Control\Lsa 레지스트리 조회 |
| LAN Manager 인증 수준 (W-59) | HKLM:\SYSTEM\CurrentControlSet\Control\Lsa — LmCompatibilityLevel 값 |
웹 대시보드
점검 완료 후 결과 JSON 파일을 대시보드에 드래그앤드롭하면 아래 정보를 확인할 수 있습니다.
- 요약 카드: 양호 / 관리 필요 / 수동 확인 필요 / 점검 불가 항목 수 한눈에 표시
- Chart.js 도넛 차트: 상태별 분포, 카테고리별 분포 시각화
- 상세 테이블: 코드, 카테고리, 항목명, 상태, 심각도(상/중/하), 현재 상태값, 상세 모달
- 필터 & 검색: 상태 / 카테고리 / 심각도 필터 + 키워드 검색
- CSV·보고서 내보내기: 점검 결과 즉시 CSV와 보고서 형태로 생성
Ansible 프로젝트와의 차이점
이 프로젝트를 만들면서 쌓은 경험이 이후 Ansible 기반 보안 점검 자동화 시스템으로 이어졌습니다.
| 윈도우 보안 점검 툴 | Ansible 자동화 시스템 | |
|---|---|---|
| 대상 | 로컬 윈도우 단일 시스템 | 다수 서버 (원격) |
| 실행 방식 | .exe 더블클릭 | Ansible Control Node (웹 대시보드) |
| 언어 | PowerShell | Ansible YAML + API |
| 결과 조회 | 로컬 웹 대시보드 (JSON 로드) | REST API + 웹 대시보드 |
배운 점
- 직접 구현하며 체득한 Windows 보안 구조: 각 점검 항목을 하나씩 직접 PowerShell로 작성하고, 실행하여 반환값을 확인하고, 레지스트리 편집기와 보안 정책 창에서 실제 값을 대조하는 과정을 반복했습니다. 단순히 API 문서를 읽는 것과 달리, 값이 어떻게 바뀌는지 직접 눈으로 확인하면서 각 설정이 시스템에서 어떤 의미를 갖는지 체감할 수 있었습니다.
- secedit 활용: 암호 복잡성 등 그룹 정책 값은 레지스트리에 직접 노출되지 않아
secedit /export로 정책 파일을 추출해 파싱하는 우회 방식을 찾아야 했습니다. 이 과정에서 Windows 보안 정책이 저장되는 구조를 실질적으로 이해하게 됐습니다. - .NET HttpListener: 외부 서버 없이 PowerShell에서 직접 HTTP 서버를 구동하는 방법을 배웠습니다.
- PS2EXE 패키징: 스크립트를
.exe로 패키징하면서 배포 편의성과 사용자 경험을 함께 고려하게 됐습니다.