프로젝트 / 실시간 추론 및 운영
4014번 팀 · 네트워크 이상징후 탐지 시스템 구축 — 정답 라벨 없이 이상을 찾기 동료검토
AI 종합평가
네트워크 이상징후 탐지 시스템 구축 — 정답 라벨 없이 이상을 찾기
프로젝트 설명
네트워크 접속·인증 로그에서 이상징후를 찾아내는 탐지 시스템을 구축한다. 지도학습을 쓸 수 없는 문제다. 공격 사례가 거의 없고, 있어도 라벨이 붙어 있지 않다.
이런 문제를 다루는 방식이 이 프로젝트의 주제다. 정상 행동의 기준선을 세우고 그것에서 벗어난 것을 찾는다. 그런데 "벗어남"의 대부분은 공격이 아니라 정상적인 변화다. 야근하는 사람, 새로 부임한 인원, 점검 작업. 이 잡음 속에서 실제 위협을 골라내는 것이 어려운 부분이다.
규칙 기반 탐지에서 시작해 통계적 이상 탐지, 비지도 학습 모델까지 올라가며 각 방식의 강점과 한계를 측정으로 확인한다. 그리고 탐지 결과를 분석관이 실제로 처리할 수 있는 형태로 만든다. 하루 500건의 경보를 내는 탐지기는 탐지기가 아니다.
3인 1팀. 데이터·모델·운영으로 역할을 나눈다.
미션 1. 1. 위협 모델링 — 무엇을 잡으려 하는가
미션 설명
탐지 대상 위협을 정의한다. 막연히 "이상"을 찾는 것이 아니라 구체적인 위협 시나리오를 놓고 각각 어떤 흔적을 남기는지 정리한다.
이 정리 없이 이상 탐지를 시작하면 통계적으로 특이한 것들만 잔뜩 나오고, 그중 무엇이 문제인지 아무도 판단할 수 없다.
1.1 위협 시나리오 정의 (퀴즈-장문형) — 수행완료
문제 지시문
탐지 대상 위협 시나리오를 5개 이상 정의하라. 각각 누가 무엇을 어떤 순서로 하는지 행위 수준으로 쓰라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
1.2 로그 흔적 매핑 (행동) — 수행완료
문제 지시문
각 시나리오가 로그의 어느 필드에 어떤 값으로 나타날지 매핑한 표를 만들어 첨부하라.
제출 응답
- test11
(제출 내용 없음)
- test12
(제출 내용 없음)
1.3 탐지 불가 위협 식별 (퀴즈-장문형) — 수행완료
문제 지시문
제공된 로그로는 탐지할 수 없는 위협을 찾아 제시하고, 무엇이 추가로 수집되어야 하는지 쓰라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
1.4 운영 한도 산정 (퀴즈-단답형) — 수행완료
문제 지시문
분석관 1명이 하루에 검토할 수 있는 경보 건수를 산정해 적고 근거를 한 줄 덧붙여라.
제출 응답
- test11
하루 80건 (건당 5분 기준 근무 6시간)?
- test12
하루 80건 (건당 5분 기준 근무 6시간)
1.5 이상과 위협의 구분 (퀴즈-장문형) — 수행완료
문제 지시문
"통계적으로 이상하지만 위협이 아닌" 사례를 5개 이상 제시하라. 이 목록이 나중에 오탐 분류의 기준이 된다.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
1.6 탐지 우선순위 (퀴즈-장문형) — 수행완료
문제 지시문
정의한 시나리오를 탐지 우선순위로 정렬하고 근거를 쓰라. 발생 가능성과 피해 규모를 함께 고려하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
1.7 시나리오 특성 판정 (퀴즈-다항선택) — 수행완료
문제 지시문
내부자에 의한 이상 접근이 외부 공격보다 탐지하기 어려운 이유를 모두 고르시오. ① 정당한 자격증명을 사용한다 ② 평소 접근 패턴과 겹친다 ③ 업무상 필요와 구분이 어렵다 ④ 로그에 기록되지 않는다 ⑤ 발생 빈도가 낮아 학습 표본이 없다
제출 응답
- test11
선택: 정당한 자격증명을 사용한다 선택: 평소 접근 패턴과 겹친다 선택: 업무상 필요와 구분이 어렵다 선택: 발생 빈도가 낮아 학습 표본이 없다
- test12
선택: 정당한 자격증명을 사용한다 선택: 평소 접근 패턴과 겹친다 선택: 업무상 필요와 구분이 어렵다 선택: 로그에 기록되지 않는다
1.8 법적·윤리적 경계 검토 (퀴즈-장문형) — 수행완료
문제 지시문
구성원 행동을 상시 분석하는 시스템의 윤리적·법적 경계를 검토하라. 어디까지가 보안이고 어디부터가 감시인지 자기 기준을 세워 쓰라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
미션 2. 2. 로그 수집과 정규화
미션 설명
여러 출처의 로그를 하나의 스키마로 정규화한다. 이상 탐지의 기반 작업이다.
출처마다 시각 형식이 다르고, 같은 개념이 다른 필드명으로 들어 있고, 시간대가 섞여 있다. 특히 시각 정렬이 틀리면 이후 모든 시계열 분석이 무의미해진다.
2.1 공통 스키마 설계 (퀴즈-장문형) — 수행완료
문제 지시문
여러 로그 출처를 담을 공통 스키마를 설계하라. 어떤 필드를 공통으로 두고 어떤 것을 출처별 확장으로 남길지 판단해 근거를 쓰라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
2.2 로그 파서 구현 (코딩) — 수행완료
문제 지시문
각 출처의 로그를 공통 스키마로 변환하는 파서를 구현하라. 파싱 실패 행은 버리지 말고 별도로 보관하라.
제출 응답
- test11
# 로그 파서 구현 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 로그 파서 구현 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
2.3 시간대 정규화 (코딩) — 수행완료
문제 지시문
모든 시각을 단일 기준(UTC 또는 KST)으로 변환하고, 변환 전 값을 함께 보존하라. 서머타임이 없는 지역이라도 원본을 남기는 것이 원칙이다.
제출 응답
- test11
# 시간대 정규화 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 시간대 정규화 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
2.4 시각 이상 탐지 (코딩) — 수행완료
문제 지시문
미래 시각, 지나치게 과거인 시각, 순서가 뒤바뀐 구간을 찾아내라. 서버 시각 오차를 추정할 수 있으면 함께 제시하라.
제출 응답
- test11
# 시각 이상 탐지 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 시각 이상 탐지 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
2.5 대용량 저장 구조 (코딩) — 수행완료
문제 지시문
90일 2억 건 규모를 감당할 저장·조회 구조를 만들라. 파티셔닝 또는 컬럼 지향 포맷을 사용하고, 대표 조회의 소요 시간을 측정하라.
제출 응답
- test11
# 대용량 저장 구조 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 대용량 저장 구조 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
2.6 수집 누락 감지 (코딩) — 수행완료
문제 지시문
시간 단위 로그 건수를 집계해 갑자기 0 이 되거나 급감한 구간을 찾아내라. 수집이 멈춘 것을 모르면 탐지도 멈춘다.
제출 응답
- test11
# 수집 누락 감지 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 수집 누락 감지 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
2.7 가명 처리 확인 (코딩) — 수행완료
문제 지시문
계정명·IP 등 식별 정보가 가명 처리되었는지 검증하고, 원본이 남아 있으면 처리하라.
제출 응답
- test11
# 가명 처리 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 가명 처리 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
2.8 정규화 검증 (행동) — 수행완료
문제 지시문
무작위 로그 30건을 원본과 정규화 결과를 대조해 검수하고, 불일치 유형을 정리해 첨부하라.
제출 응답
- test11
(제출 내용 없음)
- test12
(제출 내용 없음)
미션 3. 3. 정상 기준선 세우기 — 무엇을 정상이라 할 것인가
미션 설명
이상을 찾으려면 정상을 정의해야 한다. 사용자별·시간대별·자원별 정상 행동 범위를 데이터로 산출한다.
어려운 지점이 있다. 학습 데이터에 이미 공격이 섞여 있으면 그 공격이 정상으로 학습된다. 그리고 정상 범위는 시간에 따라 변한다. 조직 개편이 있으면 기준선을 다시 세워야 한다.
3.1 기준선 차원 설계 (퀴즈-장문형) — 수행완료
문제 지시문
어떤 차원으로 정상 기준선을 세울지 정하라. 사용자별, 부서별, 자원별, 시간대별 중 무엇을 조합할지와 그 이유를 쓰라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
3.2 사용자별 접속 패턴 산출 (코딩) — 수행완료
문제 지시문
사용자별 접속 시간대·접속 위치·접근 자원의 분포를 산출하라. 평균만 쓰지 말고 분포의 형태를 확인하라.
제출 응답
- test11
# 사용자별 접속 패턴 산출 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 사용자별 접속 패턴 산출 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
3.3 기준선 오염 검토 (코딩) — 수행완료
문제 지시문
기준선 산출 기간에 이미 이상 행위가 섞여 있을 가능성을 검토하라. 극단값을 제외하고 다시 산출해 차이를 비교하라.
제출 응답
- test11
# 기준선 오염 검토 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 기준선 오염 검토 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
3.4 표본 부족 대상 처리 (퀴즈-장문형) — 수행완료
문제 지시문
접속 기록이 적은 사용자의 기준선을 어떻게 다룰지 정하고 근거를 쓰라. 소속 집단의 기준선으로 대체하는 방법의 장단점도 논하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
3.5 기준선 변화 감지 (코딩) — 수행완료
문제 지시문
기준선을 여러 기간으로 나눠 산출해 시간에 따라 얼마나 변하는지 측정하라. 변화가 큰 대상을 찾아내라.
제출 응답
- test11
# 기준선 변화 감지 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 기준선 변화 감지 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
3.6 갱신 정책 수립 (퀴즈-장문형) — 수행완료
문제 지시문
기준선을 얼마마다 어떻게 갱신할지 정하라. 자동 갱신의 위험(공격이 점진적으로 정상화되는 것)도 함께 다뤄라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
3.7 기준선 유효성 확인 (코딩) — 수행완료
문제 지시문
산출한 기준선을 다음 기간 데이터에 적용해 정상 로그가 얼마나 기준선 안에 들어오는지 측정하라.
제출 응답
- test11
# 기준선 유효성 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 기준선 유효성 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
3.8 기준선 방식 판정 (퀴즈-단항선택) — 수행완료
문제 지시문
점진적으로 강도를 높이는 공격에 대해 자동 갱신 기준선이 취약한 이유는? ① 계산량이 많다 ② 공격 패턴이 서서히 정상 범위로 편입된다 ③ 기준선이 너무 좁아진다 ④ 표본이 부족해진다
제출 응답
- test11
선택: 공격 패턴이 서서히 정상 범위로 편입된다
- test12
선택: 계산량이 많다
3.9 예외 등록 절차 (퀴즈-장문형) — 수행완료
문제 지시문
정당한 예외(점검 작업, 야간 근무)를 사전에 등록해 경보를 줄이는 절차를 설계하라. 이 절차가 악용될 위험도 함께 짚어라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
미션 4. 4. 규칙 기반 탐지 — 먼저 아는 것부터 잡는다
미션 설명
위협 모델에서 도출한 흔적을 규칙으로 구현한다. 머신러닝보다 먼저 할 일이다.
규칙은 설명 가능하고 빠르고 유지보수가 명확하다. 알려진 위협에 대해서는 어떤 모델보다 낫다. 기준선을 세운 다음 규칙을 짜면 "이 사용자 기준으로 이상한 접속"처럼 개인화된 규칙도 가능하다.
4.1 단순 규칙 구현 (코딩) — 수행완료
문제 지시문
연속 인증 실패, 비정상 시간대 접속, 신규 위치에서의 접속 등 단순 규칙을 구현하라. 각 규칙은 독립 함수로 만들어라.
제출 응답
- test11
# 단순 규칙 구현 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 단순 규칙 구현 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
4.2 기준선 연동 규칙 (코딩) — 수행완료
문제 지시문
사용자 개인 기준선을 벗어난 접속을 탐지하는 규칙을 구현하라. 전체 평균이 아닌 개인 기준으로 판정해야 한다.
제출 응답
- test11
# 기준선 연동 규칙 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 기준선 연동 규칙 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
4.3 규칙별 발생 건수 측정 (코딩) — 수행완료
문제 지시문
90일 로그에 각 규칙을 적용해 일평균 발생 건수를 측정하라. 운영 한도를 넘는 규칙을 표시하라.
제출 응답
- test11
# 규칙별 발생 건수 측정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 규칙별 발생 건수 측정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
4.4 임계값 조정 (코딩) — 수행완료
문제 지시문
발생 건수가 과다한 규칙의 임계값을 조정하고, 조정에 따른 시나리오 탐지율 변화를 함께 측정하라.
제출 응답
- test11
# 임계값 조정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 임계값 조정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
4.5 규칙 조합 (코딩) — 수행완료
문제 지시문
단독으로는 오탐이 많은 규칙 두 개를 조합해 정밀도를 높여라. 조합 후 시나리오 탐지율이 떨어지지 않는지 확인하라.
제출 응답
- test11
# 규칙 조합 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 규칙 조합 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
4.6 시나리오 탐지 확인 (코딩) — 수행완료
문제 지시문
주입된 공격 시나리오 8종에 대해 어느 규칙이 몇 개를 탐지했는지 표로 정리하라. 탐지되지 않은 시나리오를 명시하라.
제출 응답
- test11
# 시나리오 탐지 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 시나리오 탐지 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
4.7 우회 가능성 분석 (퀴즈-장문형) — 수행완료
문제 지시문
각 규칙을 우회하는 방법을 방어 관점에서 분석하라. 우회가 쉬운 규칙에는 어떤 보완이 필요한지 제시하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
4.8 규칙 관리 체계 (퀴즈-장문형) — 수행완료
문제 지시문
규칙이 50개로 늘어났을 때의 관리 문제를 예상하고 대응 체계를 설계하라. 중복 규칙, 효과 없는 규칙, 상충하는 규칙 문제를 다뤄라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
4.9 규칙 기반의 한계 (퀴즈-단답형) — 수행완료
문제 지시문
규칙 기반 탐지가 원리적으로 잡을 수 없는 위협 유형을 한 줄로 적어라.
제출 응답
- test11
사전에 정의되지 않은 신종 공격 패턴
- test12
사전에 정의되지 않은 신종 공격 패턴
미션 5. 5. 비지도 이상 탐지 — 모르는 것을 잡아 보기
미션 설명
규칙으로 잡지 못하는 것을 찾기 위해 비지도 학습 기법을 적용한다. Isolation Forest, One-Class SVM, 오토인코더 등을 시도한다.
기대치를 조정해야 한다. 이 방식들은 "무엇이 이상한지"는 알려 주지만 "왜 이상한지"는 잘 알려 주지 않고, 오탐률이 규칙보다 훨씬 높다. 그래도 알려지지 않은 패턴을 잡을 가능성이 있다.
5.1 행동 특성 설계 (코딩) — 수행완료
문제 지시문
사용자-일자 단위로 행동 특성을 만들라. 접속 횟수, 시간대 분포, 접근 자원 수, 실패율, 전송량 등을 포함하라.
제출 응답
- test11
# 행동 특성 설계 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 행동 특성 설계 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.2 Isolation Forest 적용 (코딩) — 수행완료
문제 지시문
Isolation Forest 로 이상 점수를 산출하고 상위 점수 대상을 확인하라. 상위 20건이 실제로 이상해 보이는지 로그를 열어 확인하라.
제출 응답
- test11
# Isolation Forest 적용 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# Isolation Forest 적용 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.3 알고리즘 비교 (코딩) — 수행완료
문제 지시문
One-Class SVM 또는 LOF 등 다른 기법을 같은 특성으로 적용해 결과를 비교하라. 상위 탐지 대상이 얼마나 겹치는지 확인하라.
제출 응답
- test11
# 알고리즘 비교 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 알고리즘 비교 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.4 특성 변경 실험 (코딩) — 수행완료
문제 지시문
특성 집합을 바꿔 가며 시나리오 탐지율 변화를 측정하라. 알고리즘 교체보다 특성 변경의 효과가 큰지 확인해 결과로 답하라.
제출 응답
- test11
# 특성 변경 실험 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 특성 변경 실험 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.5 이상 점수 설명 (코딩) — 수행완료
문제 지시문
이상으로 판정된 대상에 대해 어느 특성이 얼마나 기여했는지 산출해 사람이 읽을 문장으로 변환하라.
제출 응답
- test11
# 이상 점수 설명 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 이상 점수 설명 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.6 오탐 사례 확인 (행동) — 수행완료
문제 지시문
상위 이상 점수 대상 30건의 로그를 직접 열어 확인하고, 실제 이상 / 정상인데 특이 / 판단 보류로 분류해 첨부하라.
제출 응답
- test11
(제출 내용 없음)
- test12
(제출 내용 없음)
5.7 규칙과의 중복 분석 (코딩) — 수행완료
문제 지시문
모델이 잡은 것과 규칙이 잡은 것의 교집합·차집합을 구하라. 모델만 잡은 것 중 의미 있는 것이 있는지 확인하라.
제출 응답
- test11
# 규칙과의 중복 분석 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 규칙과의 중복 분석 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.8 시간 흐름 반영 (코딩) — 수행완료
문제 지시문
단일 시점 특성이 아니라 최근 N일 추세를 반영한 특성을 추가해 효과를 측정하라. 점진적 변화를 잡는 데 도움이 되는지 확인하라.
제출 응답
- test11
# 시간 흐름 반영 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 시간 흐름 반영 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
5.9 비지도 방식 판정 (퀴즈-장문형) — 수행완료
문제 지시문
이 방식을 실제 운영에 넣을 가치가 있는지 결론을 내려라. 오탐 부담, 설명 어려움, 새로운 위협 탐지 가능성을 함께 저울질하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
미션 6. 6. 경보 통합과 우선순위 — 500건을 20건으로
미션 설명
규칙과 모델이 만든 탐지 결과를 하나로 모아 정리한다. 중복을 합치고, 상관 관계를 묶고, 위험도로 순위를 매긴다.
이 미션이 시스템을 쓸 수 있게 만드는 지점이다. 개별 탐지기가 아무리 좋아도 분석관 앞에 500건이 쌓이면 아무 소용이 없다.
6.1 탐지 결과 표준화 (코딩) — 수행완료
문제 지시문
규칙과 모델의 출력을 공통 경보 형식으로 통일하라. 탐지기 종류, 대상, 시각, 근거, 점수가 들어가야 한다.
제출 응답
- test11
# 탐지 결과 표준화 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 탐지 결과 표준화 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.2 중복 병합 (코딩) — 수행완료
문제 지시문
같은 대상·같은 시간창에서 같은 탐지기가 반복 발생한 경보를 하나로 병합하라. 발생 횟수는 보존하라.
제출 응답
- test11
# 중복 병합 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 중복 병합 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.3 상관 묶음 (코딩) — 수행완료
문제 지시문
같은 사용자·같은 시간창에서 서로 다른 탐지기가 울린 경보를 하나의 사건으로 묶어라. 묶인 사건에는 개별 경보의 근거를 모두 남겨라.
제출 응답
- test11
# 상관 묶음 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 상관 묶음 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.4 위험도 산정 (코딩) — 수행완료
문제 지시문
경보에 위험도 점수를 부여하라. 탐지기 신뢰도, 동시 발생 탐지기 수, 대상의 권한 수준 등을 반영하고 가중치 근거를 문서화하라.
제출 응답
- test11
# 위험도 산정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 위험도 산정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.5 건수 감소 측정 (코딩) — 수행완료
문제 지시문
통합 전후 일평균 경보 건수를 비교해 감소율을 제시하라. 미션 1의 운영 한도를 만족하는지 확인하라.
제출 응답
- test11
# 건수 감소 측정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 건수 감소 측정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.6 시나리오 순위 확인 (코딩) — 수행완료
문제 지시문
주입된 공격 시나리오가 위험도 상위 몇 번째에 들어오는지 확인하라. 상위 20건 안에 들어오지 않으면 우선순위 로직을 고쳐라.
제출 응답
- test11
# 시나리오 순위 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 시나리오 순위 확인 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.7 묶음 부작용 확인 (퀴즈-장문형) — 수행완료
문제 지시문
경보를 묶는 과정에서 중요한 신호가 가려질 위험을 검토하라. 서로 무관한 두 사건이 우연히 묶이는 경우도 다뤄라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
6.8 위험도 조정 실험 (코딩) — 수행완료
문제 지시문
가중치를 바꿔 가며 시나리오의 순위 변화를 측정하라. 어떤 가중치가 결과를 크게 움직이는지 확인하라.
제출 응답
- test11
# 위험도 조정 실험 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 위험도 조정 실험 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
6.9 경보 억제 정책 (퀴즈-장문형) — 수행완료
문제 지시문
이미 확인해 정상으로 판정한 경보가 반복 발생할 때의 처리 정책을 설계하라. 무기한 억제의 위험도 함께 다뤄라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
- test12
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
6.10 통합 성능 요약 (퀴즈-단답형) — 수행완료
문제 지시문
통합 후 일평균 경보 건수, 시나리오 탐지율, 상위 20건 내 시나리오 포함 수를 적어라.
제출 응답
- test11
일평균 42건, 시나리오 탐지율 91%, 상위 20건 중 17건 포함
- test12
일평균 42건, 시나리오 탐지율 91%, 상위 20건 중 17건 포함
미션 7. 7. 분석관 화면 — 설명할 수 있는 탐지
미션 설명
경보를 받은 분석관이 판단할 수 있는 화면을 만든다. 탐지 근거, 관련 로그, 대상의 평소 패턴을 함께 보여 준다.
경보만 던지는 시스템은 일을 넘기는 것이지 돕는 것이 아니다. 판단에 필요한 정보를 모아 주는 것까지가 시스템의 몫이다.
7.1 경보 목록 화면 (코딩) — 수행완료
문제 지시문
위험도 순으로 정렬된 경보 목록 화면을 만들라. 상태(미확인/조사중/정상판정/위협확인)를 관리할 수 있어야 한다.
제출 응답
- test11
# 경보 목록 화면 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 경보 목록 화면 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
7.2 탐지 근거 표시 (코딩) — 수행완료
문제 지시문
각 경보에 대해 어떤 탐지기가 왜 울렸는지 문장으로 표시하라. "이상 점수 0.91" 만으로는 부족하다.
제출 응답
- test11
# 탐지 근거 표시 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 탐지 근거 표시 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
7.3 관련 로그 제공 (코딩) — 수행완료
문제 지시문
경보 대상의 해당 시간창 전후 로그를 함께 보여 주라. 분석관이 다른 화면을 열지 않아도 되게 하라.
제출 응답
- test11
# 관련 로그 제공 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 관련 로그 제공 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
7.4 평소 패턴 대비 표시 (코딩) — 수행완료
문제 지시문
대상의 평소 기준선과 이번 행동을 나란히 비교해 보여 주라. 그림으로 보여 주면 판단이 빨라진다.
제출 응답
- test12
# 평소 패턴 대비 표시 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test11
# 평소 패턴 대비 표시 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
7.5 판정 되먹임 수집 (코딩) — 수행완료
문제 지시문
분석관이 정상/위협으로 판정한 결과를 저장하라. 이 데이터가 이후 탐지 개선의 근거가 된다.
제출 응답
- test12
# 판정 되먹임 수집 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test11
# 판정 되먹임 수집 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
7.6 조사 기록 (코딩) — 수행완료
문제 지시문
조사 과정의 메모와 조치 내역을 남길 수 있게 하라. 같은 대상이 다시 잡히면 과거 조사 기록이 보여야 한다.
제출 응답
- test11
# 조사 기록 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
- test12
# 조사 기록 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
7.7 처리 시간 측정 (행동) — 수행완료
문제 지시문
팀원이 실제로 경보 10건을 처리해 건당 소요 시간을 측정하라. 화면 개선 전후를 비교할 수 있으면 함께 제시하라.
제출 응답
- test11
(제출 내용 없음)
- test12
(제출 내용 없음)
7.8 오탐 사례집 정리 (행동) — 수행완료
문제 지시문
판정 결과에서 오탐으로 확인된 사례를 모아 원인별로 정리해 첨부하라. 각 원인에 대한 개선안도 적어라.
제출 응답
- test11
(제출 내용 없음)
- test12
(제출 내용 없음)
7.9 설명 품질 평가 (퀴즈-선형배율) — 수행완료
문제 지시문
"경보 화면만 보고 30초 안에 확인 필요 여부를 판단할 수 있다"에 몇 점인가(1~5). 부족한 정보를 적어라.
제출 응답
- test11
선택: 그렇다
- test12
선택: 그렇다
미션 8. 8. 운영 설계와 최종 평가
미션 설명
시스템을 운영 가능한 상태로 정리하고 최종 성능을 측정한다. 그리고 운영 절차를 문서로 만든다.
탐지 시스템은 만들고 끝나는 것이 아니다. 기준선을 갱신하고, 규칙을 손보고, 오탐을 줄이는 고리가 계속 돌아야 한다. 그 고리를 설계하는 것이 마지막 미션이다.
8.1 최종 성능 측정 (코딩) — 수행완료
문제 지시문
전체 시스템으로 시나리오 8종에 대한 탐지율, 일평균 경보 건수, 상위 20건 내 포함율을 측정하라.
제출 응답
- test11
# 최종 성능 측정 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
8.2 미탐 시나리오 분석 (퀴즈-장문형) — 수행완료
문제 지시문
탐지하지 못한 시나리오를 분석하라. 왜 놓쳤는지, 무엇을 추가하면 잡을 수 있는지, 그것을 추가하면 오탐이 얼마나 늘지 추정하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
8.3 자체 감시 구현 (코딩) — 수행완료
문제 지시문
로그 수집 중단, 탐지 파이프라인 실패, 경보 발생량 급감·급증을 감지해 알리는 감시를 구현하라.
제출 응답
- test11
# 자체 감시 구현 # 문제 설명과 수행 가이드를 참고하여 아래에 코드를 작성하세요. def main(): pass if __name__ == "__main__": main()PYTHON
8.4 기준선 갱신 절차 (퀴즈-장문형) — 수행완료
문제 지시문
기준선을 언제 어떻게 갱신할지 절차를 쓰라. 자동 갱신 범위와 사람이 승인해야 하는 범위를 나눠라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
8.5 규칙 튜닝 절차 (퀴즈-장문형) — 수행완료
문제 지시문
오탐 판정 데이터를 이용해 규칙을 개선하는 주기적 절차를 설계하라. 누가 무엇을 보고 무엇을 결정하는지 명시하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
8.6 대응 절차 연계 (퀴즈-장문형) — 수행완료
문제 지시문
위협으로 확인된 경보에 대한 대응 절차를 설계하라. 시스템이 자동으로 할 것과 사람이 결정할 것을 구분하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
8.7 성능 저하 감지 (퀴즈-단답형) — 수행완료
문제 지시문
탐지 성능이 시간이 지나 떨어지는 것을 어떻게 감지할 것인가. 지표를 쉼표로 나열하라.
제출 응답
- test11
정확도 추이, 입력분포 변화, 신뢰도 점수 분포
8.8 한계·잔여위험 문서 (퀴즈-장문형) — 수행완료
문제 지시문
이 시스템이 잡을 수 없는 위협과 그 이유를 정리하라. 시스템을 도입한 뒤 오히려 생기는 위험(과신, 감시 부작용)도 포함하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
8.9 윤리 검토 마무리 (퀴즈-장문형) — 수행완료
문제 지시문
미션 1의 윤리 검토를 다시 읽고, 구축 과정에서 생각이 바뀐 부분을 쓰라. 이 시스템에 필요한 통제 장치를 제안하라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
8.10 팀 협업 회고 (퀴즈-장문형) — 수행완료
문제 지시문
3인 역할 분담과 통합 과정을 회고하라. 데이터·모델·운영 사이에서 어긋난 지점과 그 해결 과정을 남겨라.
제출 응답
- test11
이번 미션을 수행하며 겪은 시행착오와 배운 점을 정리합니다. 초기 접근이 예상과 달라 중간에 방식을 바꿨고, 최종적으로는 요구사항을 충족하는 결과물을 만들 수 있었습니다.
댓글 17
test02 2026-09-02 11:43
test11 2026-08-15 11:08
test11 2026-08-15 11:07
test11 2026-08-15 11:06
test11 2026-08-15 11:05
test11 2026-08-15 11:05
test11 2026-08-15 11:03
test11 2026-08-15 11:02
test11 2026-08-15 11:02
test11 2026-08-15 11:02
test11 2026-08-15 11:02
test11 2026-08-15 11:02
test11 2026-08-15 11:02
test11 2026-08-15 11:01
test11 2026-08-15 10:59
test11 2026-08-15 10:55
test11 2026-08-15 10:53