프로젝트 개요
현대오토에버 Mobility SW School에서 팀 Shell We Secure (5인)와 함께 진행한 프로젝트입니다. 인프라 구축, Ansible 자동화 구성, 가용성 기능 구현을 담당했습니다.
KISA 2026 주요정보통신기반시설 취약점 진단 가이드라인을 기반으로, Linux 서버 취약점 진단 전 과정을 자동화했습니다. 단순한 점검 자동화를 넘어, 진단 중 대상 서버의 가용성을 실시간으로 보호하는 기능까지 구현했습니다.
배경 및 동기
보안 점검은 항목이 많고 반복적이지만, 담당자 숙련도에 따라 결과가 달라질 수 있습니다. 더 현실적인 문제는, 점검 스크립트가 실행되는 동안 대상 서버에 부하가 걸려 운영 중인 서비스의 가용성이 침해될 수 있다는 점입니다.
이 두 가지 문제를 해결하는 것을 목표로 개발을 시작했습니다.
- 수작업 점검을 자동화하여 일관된 기준과 결과 확보
- 다중 서버를 단일 대시보드에서 통합 관리
- 진단 중 CPU/메모리 임계치를 실시간 감시하고 초과 시 자동 중단하여 가용성 보장
기술 스택
시스템 구조

점검 항목
KISA 주요정보통신기반시설 취약점 진단 가이드라인(2026)을 기반으로, OS별로 67개 항목을 점검합니다.
OS(Rocky 9 / Rocky 10 / Ubuntu)별로 별도의 Bash 스크립트(U-01.sh ~ U-67.sh)를 작성하여 버전 차이를 처리했습니다.
| 카테고리 | 대표 점검 항목 |
|---|---|
| 계정 관리 | root 원격 접속 제한(U-01), 비밀번호 정책 설정(U-02), 계정 잠금 임계값(U-03), 비밀번호 파일 보호(U-04), root 외 UID 0 금지(U-05), su 기능 제한(U-06) |
| 파일 및 디렉토리 관리 | /etc/passwd 권한(U-16), /etc/shadow 권한(U-18), /etc/hosts 권한(U-19), syslog 파일 권한(U-21), /etc/profile 설정(U-12) |
| 서비스 관리 | 불필요한 서비스 비활성화, SSH 설정 점검(/etc/ssh/sshd_config) |
| 패치 관리 | 최신 보안 패치 적용 여부 |
| 로그 관리 | syslog 설정 및 로그 파일 권한 |
점검 결과는 양호 / 취약 / 수동 확인 세 가지 상태로 분류됩니다.
가용성 모드
진단 중 대상 서버가 받는 부하를 실시간으로 모니터링하여, 임계치 초과 시 점검을 자동 중단하는 기능입니다.
# 가용성 모드 임계값 설정 (check.yml)
max_cpu_threshold: 50.0 # CPU 사용률 50% 초과 시 중단
max_memory_threshold: 70.0 # 메모리 사용률 70% 초과 시 중단
max_load_average: 2.0 # Load Average 2.0 초과 시 중단
script_nice_level: 19 # 진단 스크립트를 최저 우선순위로 실행
enable_slack_notification: true
임계치 초과로 진단이 중단되면 Slack Webhook을 통해 즉시 알림을 발송합니다. 알림에는 중단 시점의 CPU/메모리/Load 수치, 완료된 항목 수, 중단된 항목 코드가 포함됩니다.
자동 조치 및 롤백
취약 항목은 대시보드에서 원클릭으로 자동 조치를 실행할 수 있습니다. 조치 전 설정 파일을 백업해두었다가, 문제가 생기면 롤백 실행으로 원래 상태를 복원할 수 있습니다.
롤백 가능한 항목 예시:
- U-01:
/etc/ssh/sshd_config복원 - U-03: faillock/PAM 설정 복원
- U-12:
/etc/profile복원 - U-13: 암호화 정책 설정 복원
- U-16/U-18/U-19/U-21: 파일 권한 복원
롤백 후 부분 재점검 기능으로 롤백된 항목만 선택적으로 재진단할 수 있습니다.
구현 포인트
팀 내에서 인프라 셋업과 Ansible 자동화를 담당하면서, 두 가지 기술적 문제를 해결했습니다.
가용성 모드 신뢰성 확보: 진단 스크립트가 CPU 부하를 유발하면서 동시에 그 부하를 측정해야 하는 구조였습니다. nice 레벨 19로 스크립트 우선순위를 최저로 낮추고, 샘플링 간격을 조정하면서 반복 테스트를 통해 안정적인 임계치 기준을 도출했습니다.
OS별 스크립트 분리: Rocky Linux 9/10과 Ubuntu는 명령어, PAM 설정 경로, 패키지 관리 방식이 다릅니다. 각 OS별로 별도의 Bash 스크립트를 작성하여 배포판 간 차이를 처리했고, 이 과정에서 Linux 배포판 간의 실질적인 차이를 깊이 이해하게 되었습니다.
Ansible 보안 점검 자동화 시스템 실제 동작 데모
주요 성과
- 서버당 67개 항목 자동 진단 (KISA 주요정보통신기반시설 가이드라인 기준)
- 6대 다중 서버 통합 점검 및 결과 시각화 구현
- 자동 조치 → 롤백 → 부분 재점검까지 전 사이클 구현
- XLSX 보고서 자동 생성 및 AI 어시스턴트 기반 진단 결과 질의응답 기능 포함