heron

발단

소프트웨어공학과의 졸업 작품이다.

3인 팀으로 작업을 진행했다. 이시헌, 김지윤, 김서현.

본론

프로젝트 개요

고도화되는 사이버 위협과 AI 기술 발달이 맞물리며, AI를 활용한 자동화 사이버 위협 탐지 시스템 구축이 늘어나고 있다. 하지만 이러한 시스템의 도입은, 발달한 기술에도 불구하고 너무 큰 컴퓨팅 자원과 비용을 요구한다. 그러므로 본 프로젝트는, 개인 사용자도 쉽게 설치하여 사용 가능한 범용 로그 해석 도구를 개발하는 것을 목표로 한다.

일반적으로 대량의 자본을 투자하기 어려운 많은 기업과 개인(이하 소비자)의 소형 웹서버에 손쉽게 결합할 수 있는, GUI 기반의 로그 분석 도구를 개발해야 한다. 이에 Team CLEAR는 소비자의 웹 서비스에 서브도메인을 설정하여 사용 가능한, 리버스 프록시 요청을 처리하여 로그 분석 도구 웹 페이지를 제공하는 Docker container를 구현하기로 결정하였다. 이는 최근의 기술 동향과도 잘 맞아 떨어진다. 가상화 기술이 보편화 되고, 오픈소스 소형 LLM이 우후죽순 쏟아지는 상황 말이다.

구체적으로는, 역할을 분리한 다수의 컨테이너를 통하여 목표를 달성할 예정이다. 리버스 프록시 요청을 처리하는 핵심 컨테이너로 Next.js를 사용하고, 해당 컨테이너와 동일 네트워크로 연결된 다수의 컨테이너로 서비스를 구현한다. Ollama를 사용하여 Llama3.2:1b 모델을 구동시키고, 해당 모델에 입력하기 위한 로그와 Next.js 웹 페이지에서 호출할 수 있는 로그 전처리 모듈을 php-apache 컨테이너로 구축한다. 추가로 Next.js에서 사용할 수 있는 RDBMS container 또한 구축한다. 이를 다이어그램으로 표현하면 다음과 같다.

Project container diagram


개발 범위

프로젝트는 3개의 계층으로 이루어진다.

계층 3부터 1까지 순차적으로 데이터가 이동한다. 사용자는 계층 3으로만 접근할 수 있으며, 계층 2의 서버에 다양한 요청을 보낸다. 핵심적인 요청들은 다음과 같다.

위의 요청들을 처리하기 위하여, 계층 2의 Next.js server는 계층 1에 준비된 API를 호출한다. 해당 API들은 PHP-Apache container 내부에서 작동하며, 호스트 시스템의 로그를 자동으로 수집하고 처리하여 제공한다.

이때 세부 기능명세는 다음과 같다.

계층 기능명세
계층 3
  • 로그인 페이지
  • 종합 보고서 출력 페이지 (메인페이지)
  • 위험도별 로그 분류 페이지
  • 상태코드별 로그 분류 페이지
  • 설정 페이지
  • 검색 페이지
  • AI 검색 페이지
계층 2
  • 검색 요청
  • LLM 호출
  • 계층 3의 개별 페이지에 필요한 여러 백엔드 처리
계층 1
  • 자동 로그 수집 (호스트 시스템의 로그를 감시하며, 변경사항이 생길 시 복사)
  • 로그 전처리
  • LLM 호출 API 제공
  • 검색 API 제공
  • 보안 보고서 생성 API 제공
  • 위험도별 로그 분류 결과 반환 API 제공
  • 상태코드별 로그 분류 결과 반환 API 제공

역할과 기여

각 계층을 한 사람이 주도하여 개발하기로 결정하였다. 계층 3을 김서현 학우가, 계층 2를 김지윤 학우가, 계층 1을 이시헌이 개발하였다.

이때 본인이 전체 프로젝트의 책임자로서 팀원들의 작업을 관리하였다. 구체적인 작업 지시, 작업 가이드 문서 제작, 형상관리 규칙 지정, 작업 내용 문서화(일지 작성, 작업 진행도 문서화) 등의 작업을 수행하였다.


기술 스택


GitHub

LogAnalyzer


시스템 이미지 및 소개 영상

01-MainPage.png 02-AIChatPage.png 03-SearchPage.png 04-SuspiciousPage.png 05-SuspiciousPage(2).png 06-SuspiciousPage(3).png 07-StatusPage.png 08-SettingsPage.png 09-CombinedLogs.png
졸업전시 해설 영상

개발 기간

작업 시작일: 2024-12-20

작업 종료일: 2025-05-22 (졸업전시회 당일)


소감

꽤나 재미있게 작업했다. 팀원들이 작업 지시를 잘 따라준 것이 너무도 고맙다. 좋은 사람들과 함께 작업할 수 있는 것은 축복이다.

CLEAR는 어찌 되었든 정규식으로 로그를 검사하는 것이고, 보안 보고서는 LLM이 로그를 기반으로 생성하니, 웹 로그가 아니어도 된다. 그런데 작업 시간이 부족하여, 다양한 로그 종류에 대한 정규식을 준비하지 못했다.

현재 준비된 웹 로그용 정규식 또한 형편없다. 이것은 졸업 전까지 최대한 개선할 예정이다.

코드의 품질도 썩 좋지 못하다. 작동은 잘 하지만... Next.js에서 작동하는 React 페이지들은, 상태가 여럿 선언되며 비효율적으로 작동하고, 내가 구현한 PHP API 부분도, 지금은 사용되지 않는 함수들이 너저분하게 남아있다.

그래도 동작한다! 추후 대대적인 리팩터링을 할 예정이다.

어떤 교수님께서는, 이 시스템을 논리회로 수준으로 변환하여, 칩으로 만들어 보라고 제안하셨다. 물론 가능한 일이지만... 문제는 내가 논리회로에 정통하지 못하다는 것이다! 기껏해야 가산기, 감산기, 플립플롭 정도만 기억이 나는데, FPGA 설계를 어찌 한단 말인가? (애초에 나는 시간표 문제로 해당 수업을 수강하지 못했다.)

그래도 확실히 의미 있는 제안이다. 방화벽 뒤에서 작동하는 능동 감지 시스템이, 이렇게 하이레벨에서 동작할 이유는 없는 것이다. 그러나 우리 시스템의 의의가 무엇인가? '개인 사용자도 쉽게 설치하여 사용 가능'하다는 것이다. 우리 시스템은 지금 당장도 전체 파일을 git pull 하여 서브도메인에 장착할 수 있다. 단순히 docker compose up 명령으로, 즉시 호스트 시스템의 모든 로그를 복사 및 백업하여 격리하고, 분석 결과를 받아볼 수 있다는 것이 핵심이다. 그러므로 칩 수준의 전환은 우리 목표와 너무 멀다. 그리고 그런 능동 감지 시스템은 이미 많이 있다. (우리 시스템만의 장점을 잃어버리고, 이미 있는 시스템보다 낮은 성능의 칩이 되는 것이다.)


2025-06-12 기록