본인이 클라우드보안 국비과정을 이수하며 진행한 팀프로젝트이다.
ELK-Stack을 이용한 보안관제 시스템 운영
Security control system operationwith ELK-STACK(with, Docker)
1. 서론
⦁ 1.1 프로젝트 목적
우리는 ELK 스택을 활용하여 공격 탐지 및 분석을 위한 대시보드를 구축하는 것을 목표로 프로젝트를 시작했다. 이 대시보드는 실시간으로 공격 대상 서버의 데이터를 수집하고 시각화를 통해 보안 위협을 탐지하고 분석하는 데 도움을 주기 위해 설계되었다. 여러 서버에서 수집한 로그 데이터를 분석하여 다양한 공격 패턴을 식별하고 유추하며, 사용자 친화적인 UI를 통해 데이터를 쉽게 이해할 수 있도록 했다. 이 프로젝트는 사이버 보안 모니터링의 기본적인 이해를 돕고, 실습을 통해 기술적 경험을 쌓는 데 중점을 두었습니다. 대시보드를 통해 우리는 공격 탐지의 중요성을 직접 경험하고, 실제 환경에서 데이터를 다루는 기회를 가졌다.
⦁ 1.2 프로젝트 구성
사용할 장비 목록은 Elasticsearch, Kibana, Logstash,Filebeats, Metricbeats, Packetbeats, AhnLab_AIPS, AhnLab TrusGuard, DPX이다. 5대의 Victim 서버와 보안장비에서 logstash로 정보를 수집하여 필터링하고 elasticsearch에 저장하고 저장한 정보를 바탕으로 kibana를 이용해 시각화 하려고 한다.
각각의 Victim 서버와 IPS, DPX, TrusGuard에서 보내오는 로그들을 분석하고 평상시와 비교해서 특징을 찾아내고 분류하여 공격을 탐지하려고 한다.
2. 관련 기술
2.1 Docker & ELK
⦁ 2.1.1 SIEM
SIEM이란 보안 이벤트 데이터, 네트워크 스트림 데이터를 실시간으로 분석하여 위협관리, 모니터링, 탐지 및 대응하는 시스템이다. SIEM이 네트워크 보안 모니터링을 통해 위협을 식별할 때 경보를 생성하고 사전에 정해진 규칙을 바탕으로 위협 수준을 정의한다. SIEM의 데이터 시각화 맞춤형 대시보드를 통해 사용자와 사용하는 보안장비 및 기타 시스템에 적합한 화면을 제공한다. 즉, SIEM이 제공하는 보안 기능들은 기업이나 단체에서 보안과 관련한 중심 역할을 하는 보안운영센터의 핵심적인 역할을 담당하고 있다.
⦁ 2.1.2 가상화
가상화는 서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상 표현을 생성하는데 사용하는 기술로 가상 소프트웨어를 사용해서 물리적 하드웨어의 기능을 모방하여 하나의 물리적 머신에서 여러 가상 시스템을 동시에 실행할 수 있게 해준다.
⦁ 2.1.3 Docker의 개념
Docker는 Go언어로 작성된 리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼으로 리눅스 어플리케이션을 프로세스 격리 기술을 사용하여 컨테이너로 실행하고 관리할 수 있게 도와준다.
응용 프로그램을 서론 다른 환경에서도 일관되게 실행할 수 있으며 가볍고 확장성이 좋아 개발 및 배포 프로세스를 간소화 하는데 사용된다.
⦁ 2.1.4 Docker의 이점
Docker의 장점으로는 각각의 어플리케이션이 격리된 공간인 컨테이너에서 실행되기 때문에 그 자체에 특별한 권한을 주지 않으면 Host OS에는 영향을 끼치지 않는다. 배포를 할 때에도 배포하고 싶은 컨테이너를 docker image로 만들어서 전달하기만 하면 되고 다른 서버에서 복제해서 사용하면 되기 때문에 의존성을 걱정할 필요도 없다. 또한 커널을 공유해서 사용하기 때문에 컨테이너에는 라이브러리 및 실행파일만 있어도 되기 때문에 용량이 상대적으로 작다.
⦁ 2.2 ELK
⦁ 2.2.1 Elasticsearch
Elasticsearch는 Apache Lucene에 구축되어 배포된 JAVA 오픈소스 검색 및 분석 엔진이다.
Elasticsearch를 통해 Lucene 라이브러리를 단독으로 사용할 수 있게 되었으며 많은 양의 데이터를 신속하게 저장, 검색, 분석할 수 있다. JSON 문서 형식으로 데이터를 색인화하고 RESTful 엔드포인트를 통해 쿼리를 실행할 수 있다.
⦁ 2.2.2 Logstash
Logstash는 실시간 파이프라인 기능을 갖춘 오픈 소스 데이터 수집 엔진으로 다양한 종류의 소스에서 동시에 이벤트를 가져오는 다양한 입력을 지원한다. 로그, csv, 데이터 저장소 등 지속적으로 스트리밍 되는 방식으로 정보를 수집할 수 있다. 또한 수집된 정보의 형식이나 복잡성에 상환없이 데이터를 동적으로 변환하고 가공하여 분석할 수 있다. 게다가 가공한 정보를 다양한 출력으로 전송할 수 있고 Elasticsearch와 연동하여 사용할 수 있다.
⦁ 2.2.3 Kibana
Kibana는 브라우저 인터페이스를 사용하여 많은 데이터를 쉽게 검색하고 시각화하며 탐색할 수 있는 오픈소스 분석 및 시각화 도구이다. Elasticsearch 쿼리의 실시간 변경을 표시하는 대시보드가 존재하며 Elasticsearch 색인에 저장된 데이터를 검색 및 조회할 수 있다. 대시보드를 통해 변화상황을 한 눈에 알아보기 쉽다.
⦁ 2.2.4 Beats
Beats는 경량화되어 가볍고 사용하기 쉬운 데이터 수집기로 Go 언어로 작성되었으며 수집하여야 하는 대상 시스템에 설치하여 사용하며 대상 시스템에 큰 부담을 주지 않는다. 수집하고 싶은 정보에 따라서 다양한 Beats들이 존재하며 Filebeats, Packetbeats, Metricbeats, heartbeats등이 있다. 수집한 데이터는 Elasticseach로 바로 보내거나 logstash에서 가공을 거친 후 Elasticsearch로 보낼 수 있다.
⦁ 2.2.5 ELK의 이점
ELK를 활용하면 시스템 전반의 성능과 안전성을 모니터링할 수 있고 라이선스 비용이 발생하지 않으며 다양한 환경에 쉽게 배포 및 사용이 가능 하기 때문에 초기 구축 비용 및 유지 보수 비용을 줄일수 있다.
3. 환경 구축
⦁ 3.1 ELK 환경 구축(docker 사용 안하고)
⦁ 3.1.1 Elasticsearch 설치
Elasticsearch를 설치하기 전에 ELK 설치를 위한 컴포넌트들이 우분투의 기본패키지에 포함되어 있지 않기 때문에 apt로 설치하려면 엘라스틱 소스를 추가해주어야 한다.
먼저java -version 명령어로 설치가 되어있는지 확인하고 설치가 되어있지 않다면 설치를 실행한다. sudo apt install default-jre 명령어를 입력하고 계속 하시겠습니까 라는 물음에 yes를 누르면 된다.
설치가 완료되면 java-version으로 다시 잘 설치되었는지 확인한다.
Javac -version 명령어로 JDK가 설치되어 있는지 확인하고 sudo apt install default-jdk로 설치를 실행한다. 물음에 yes를 입력하면 설치가 완료된다.
마찬가지로 javac -version으로 설치가 잘 되었는지 확인할 수 있다.
JRE와 JDK가 잘 설치되었다면 apt를 이용해서 Elasticsearch를 설치할 수 있다.sudo apt install elasticsearch 명령어로 elasticsearch를 다운로드 받는다
root 권한으로 접속하여 /etc/elasticsearch로 이동하면 elasticsearch 관련된 여러 항목이 보이면서 설치가 잘 된 것을 확인할 수 있다.
그다음 systemctl 명령어를 통해서 elasticsearch를 실행하고 잘 실행되는지 확인한다.
Systemctl start elasticsearch 로 elasticsearch를 실행
Systemctl status elasticsearch로 elasticsearch의 현재 상태를 확인할 수 있다.
Systemctl enable elasticsearch로 컴퓨터가 켜지면서 자동으로 실행되게 설정할 수 있다.
위와 같이 초록색 불이 들어오면서 running이라고 표시되면 잘 작동되고 있는 것이다.
curl -X GET “localhost:9200” 명령어로 elasticsearch가 잘 실행중인지 확인 할 수 있다.
위와 같이 cluster의 이름과 uuid, version등이 출력되게 된다.
3.1.2 Logstash 설치
Logstash도 똑같이 sudo apt install logstash로 다운로드 받으면 된다.
Logstash는 /etc/logstash에 설치되며 /etc/logstash/con.d라는 디렉터리에 기본 파일이 있다.
나중에 설치할 beats를 통해 입력값을 받기 위해 beat.conf라는 파일을 생성하고 설정한다.
Logstash.conf 파일은 input,filter,output의 형식을 가지고 있다.
Input은 입력 값을 받아오는데 beats 로 받고 port는 5044로 받는다는 의미이다.
Filter는 데이터를 파싱할 때 어떤 형식으로 할지 설정해주는 것인데 생략이 가능하다.
Output은 데이터를 출력하는데 elasticsearch와 연동하기 위해서 hosts를 지정해주고 데이터가 들어온 것을 kibana에서 확인했을 때 어떻게 뜨는지를 설정한다.
Sudo -u logstash /usr/share/logstash/bin/logstash –path.settings /etc/logstash -t 명령어로 잘 실행이 되는지 확인한다.
맨 마지막 줄에 Using config.tes_and_exit mode. Config Validation Result: OK. Exiting Logstash가 뜨면 오류 없이 잘 실행된 것이다.
3.1.3 Kibana 설치
키바나를 다운로드 하는 명령어는 sudo apt install kibana이다.
다운로드 할 때는 root권한으로 해야 오류 없이 잘 설치 된다.
Kibana가 설치되고나서 localhost:5601로 접속하게 되면 kibana메인 페이지를 볼 수 있다.
처음에 접속할 때는 보안설정이 되어있지 않아서 그냥 접속하게 되지만 보안설정을 하면 id와 password를 입력하여 접속하도록 할 수 있다.
먼저vi /etc/elasticsearch/elasticseach.yml파일로 이동한다. Elasticseach.yml 파일은 elasticsearch의 실행 환경에 대한 대부분의 설정을 할 수 있는 파일이다.
위의 그림처럼 xpack.security.enabled: true 와 xpack.security.transport.ssl.enabled: true 명령어를 추가하고 저장한 다음 systemctl restart elasticseach로 elasticseach를 다시 실행한다.
그다음 /usr/share/elasticseach/bin/elasticsearch-setup-passwords interactive를 입력한다
그러면 계속할 것인지 물어보는데 yes 입력하고 system 별로 password를 지정할 수 있다.
모든 system에 대해 password를 지정해주면 된다.
다시 키바나로 돌아와서 kibana.yml 파일을 수정한다.
Elasticseach.username: “id”
Elasticseach.password: “elasticsearch에서 설정한 password”
이 두개를 주석 해제하고 설정, 저장 후 kibana를 재시작하면 로그인을 해야 kibana에 접속이 가능하게 된다.
위에서 설정한 id와 password를 입력하면 잘 접속된다.
3.1.4 Beats 설치
Filebeat 는 sudo apt install filebeat 명령어로 다운로드를 할 수 있다.
Sudo vi /etc/filebeat/filebeat.yml 파일로 이동해서 Elasticseach Output을 주석처리하고 logstash와 연동하기 위해 Logstash Output의 주석을 해제하고 hosts에 포트를 동일하게 작성해준다.
⦁ 3.2 Docker 환경 구축
3.2.1 설치
10.10.30.223 서버에 docker를 설치하기로 했다.
Docker를 설치하기 전에 먼저 업데이트를 최신화로 해주고 설치 해야할 것들이 있다.
sudo apt update
sudo apt install ca-certifivates curl로 업그레이드 및 curl 명령어를 사용할 수 있는지 확인한다.
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc /apt / keyrings/ docker.asc를 입력한다.
sudo chmod a+r /etc/apt/keyrings/docker.asc docer.asc에 모두 읽기 권한을 부여한다.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin로 docker를 다운로드 받는다.
docker version 명령어로 docker가 잘 설치 되었는지 확인할 수 있다.
3.2.2 Docker-compose 설치
Docker-compose는 여러개의 컨테이너를 하나의 서비스로 정의해서 컨테이너의 묶음으로 관리를 할 수있게 환경을 제공하는 도구이다. 아래에서 설치하는 ELK는 도커를 사용하지 않을 때 설치를 하는 방법이고 도커와 도커 컴포즈를 사용하면 얼마나 쉽게 설치하고 실행하고 관리 할 수 있는지 확인할 수 있다.
Sudo curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
명령어로 docker-compose 를 다운로드 받아준다.
3.2.3 Docker-compose로 elk 설치
sudo git clone https://github.com/deviantony/docker-elk.git 을 git을 통해서 다운로드 받는다.
Cd docker-elk 파일로 이동해서
ls -al 명령어로 숨겨진 파일도 리스트하고 vi 명령어로 .env 파일을 수정한다.
모든 비밀번호를 수정한 후 저장한다.
Docker-compose 파일에서 depend_on 설정이 있는데 elasticsearch가 실행되고 kibana가 실행되고 logstash가 실행된다는 의미이다.
Docker-compose up setup
도커 컴포즈 설정 실행
docker-compose up -d
도커 컴포즈를 실행하는데 background에서 실행한다는 의미이다.
Docker ps 명령어로 elk가 잘 실행되고 있는 것을 확인 할 수 있다.
10.10.30.223:5601로 접속하면 잘 되는것을 확인할 수 있다.
⦁ 3.3 Victim 서버에 Beats 설치 및 연동
다른 팀이 수행하는 공격을 탐지하고 분석하기 위해서 만들어진 Victim 서버에 Beats들을 설치해서 로그를 보내도록 설정했다.
10.10.30.223 의 /docker /logstash /pipeline 을 보면 항목별로 .conf 파일이 나뉘어져 있는 것을 확인 할 수 있다. logstash가 .conf 파일을 다 참조하기 때문에 항목별로 나누어 놓는것이 관리하기에 편리하다.
ELK가 설치되어 있는 10.10.30.223의 metricbeat.conf 파일이다.
Vitcim 서버인 10.10.30.201에 metricbeat를 설치
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.15.2-amd64.deb 명령어로 metricbeat를 다운로드 해주고
sudo dpkg -i metricbeat -8.15.2 -amd64.deb 명령어로 다운받은 metricbeat를 설치한다.
Cd /etc /metricbeat로 이동해서 sudo systemctl status metricbeat.service 명령어를 입력하면
metricbeat가 잘 작동 되고 있는것을 확인할 수 있다.
Systemctl enable metricbeat.service 로 metricbeat가 계속 실행되도록 설정한다.
Systemctl restart metricbeat.service로 재시작해주면 설정이 적용된다.
Cd /etc /metricbeat 로 이동해서 metricbeat.yml 파일을 수정하고 저장한다.
⦁ 3.4 장비 연동
⦁ 3.4.1 장비 로그 연동
아래의 보안 장비들로 부터 받는 로그를 syslog로 통합에서 514번 포트로 받기로 설정하였다.
syslog를 받아오기 위해서 포트를 514번으로 지정하고 filter에서 type이 syslog이면 timestamp라는 field를 추가하고 출력할 때 elasticsearch로 보내는데 index는 syslog-날짜 형식으로 보내고 id 와 password는 elastic으로 설정 했다.
4. 프로젝트 구현
4.1 SYSTEM 로그 탐지
⦁ 4.1.1 보안장비 로그 전송 설정
일단 ELK서버로 로그를 전송하려면 각 보안장비의 ‘로그서버’탭에 들어가서 전송해줄 서버의 ip를 설정하고 보내줄 로그 종류들을 직접 정해줘야 한다. (하단의 그림 참조할 것)
DPX(디도스 공격 대응 장비)의 경우에는 6가지 로그 종류 중 ‘운영 로그’, ‘시스템 상태 로그’, ‘공격 탐지 로그’ 등 총 3가지 로그를 선택하였다.
실제 DDoS 공격에 대한 주요 로그들 위주로 관찰하고 싶었기 때문이다.
모든 종류의 로그를 다 받으면 분석하는데에 있어, 혼란스러울 수도 있다.
Ahnlab AIPS 장비(침임 방지 시스템)
다음 장비는 ‘IPS(Intrusion Prevention System, 침입 방지 시스템)’이다.
IPS는 허용된 트래픽 내에서도 비정상적인 행동을 탐지하고 공격을 차단하는 침입 방지 장치이다.
DPX와 같은 이유로 수 많은 종류의 로그 중 침입 방지에 중요한 역할을 하는 로그들만 선별했다.
방화벽에서는 다양한 공격 시나리오에 대비하여 모든 로그 항목을 활성화했다.
공격팀에서 어떤 공격을 시도할지 모르기 때문이다.
포트는 TCP, UDP 514번을 통해 받아들이고 있다. 이 부분은 DPX, AIPS, TrusGaurd 셋 다 동일한데 포트와 관련된 부분은 후에 더 다루도록 하겠다.
⦁ 4.1.2 Syslog
Syslog는 시스템 로그 메시지를 네트워크를 통해 중앙 로그 서버로 전송하고 관리하는 표준 프로토콜이다. 주로 리눅스/유닉스 시스템에서 사용되지만, 많은 네트워크 장비와 보안 장비(예: 방화벽, IPS, IDS 등)에서도 Syslog를 통해 로그를 전송할 수 있다. RFC 5424에서 정의한 프로토콜로, IT 환경에서 중앙 집중형 로그 관리와 네트워크 장비 간의 통신에 매우 유용하다.
표준화된 형식으로 로그를 통합 관리하며, 경량의 텍스트 기반 프로토콜로 UDP, TCP, TLS 전송을 지원한다. 중앙 서버에 로그를 모아 효율적 관리가 가능하고, 중요도(우선순위)별 로그 분류로 빠른 보안 이벤트 탐지가 가능하다.
보안 모니터링에 활용돼 방화벽, IPS, IDS의 보안 이벤트를 실시간으로 수집하고 분석한다. 문제 해결에 사용돼 시스템 오류나 장애 발생 시 원인을 추적한다. 컴플라이언스 준수를 위해 로그를 중앙 집중적으로 보관하고 관리한다. 다양한 장비에서 수집된 로그를 한 곳에서 통합 분석해 네트워크 상태를 파악한다. Syslog 서버는 수신된 메시지를 저장하며, 대표적으로 rsyslog, syslog-ng 등을 사용한다. Syslog 클라이언트는 로그를 생성해 서버로 전송하는 장비로, 방화벽, 네트워크 장비 등이 이에 해당한다.
따라서 이러한 syslog의 특징을 활용해 보안장비에서 ELK서버로 발생한 각종 로그들을 전송하여 분석하는데 사용할 예정이다
4.2 LOGSTASH CONF 파일 파싱 설정
⦁ 4.2.1 syslog.conf 파일 작성
syslog.conf 기본형 코드
Docker-compose.yml로 docker를 실행하면 ‘/home/user/docker/logstash/pipeline’경로의
.conf 파일을 읽어들여 Logtsash및 elasticsearch와 연동하게 된다.
위 코드는 기본 형태의 코드이다.
먼저 아까 보안장비에서 설정해준것 처럼 514번 포트로 syslog 메세지를 수신한다.
이때 UDP, TCP를 통해 수신받는다. (보안장비 설정)
codec은 수신된 로그를 어떻게 인코딩할지에 대한 부분으로, plain은 특별한 변환 없이 기본 텍스트 그대로 수신한다는 것이다.
또 charset => “EUC-KR”은 plain 코덱 내부에서 문자셋(charset)을 “EUC-KR”로 설정하고 있는데, 이는 한국어 기반의 로그를 제대로 해석할 수 있게 해주기 위함이다.
다음으로는 ‘filter’ 부분을 살펴보겠다. 위의 그림을 보면 filter란은 공백인데 이렇게 될 경우 logstash의 기본 설정으로 필드명이 정해지게 되고 아래 그림 처럼 해당 필드명에 따라 데이터가 매핑된다.
마지막으로 ‘output’ 부분을 다루도록 하겠다.
Input으로 514 포트로부터 데이터를 전달받았다면, output으로는 elasticsearch로 데이터를 전송하려고 한다. 이때 elasticsearch의 주소는 ‘10.10.30.223’이며 기본적으로 elasticsearch의 포트번호는 ‘9200번’을 사용한다.
‘index’는 위 그림에서 볼 수 있는 것 처럼, logstash에서 전처리한 데이터를 Data view로 만들수 있도록 해주는 작업을 한다. “syslog-${+YYYY.MM.dd}”라고 돼있는데 이렇게 입력 하면 인덱싱 과정에서 ‘syslog-2024.10.31'과 같이 연/월/일을 인식해서 이름이 붙여진다.
이렇게 날짜가 붙음으로써 데이터 관리가 용이해진다.
user와 password부분은 elasticsearch에 연결할 때 보안 인증을 거치는 것이다.
ELK 환경 구축을 위한 docker-compose.yml 파일의 elasticsearch environment 부분을 보면
‘xpack.security.enabled=true’이라는 문구가 보이는데 이 부분이 elasticsearch에 접근할 때
보안 인증을 요구하는 부분이며 syslog.conf의 user와 password는 이에 영향을 받는다.
이 때, docker-compose.yml파일의 elasticsearch밑에 환경변수로 ‘ELASTIC_PASSWORD’가
정의돼있어야 한다. 이 값과 syslog.conf의 password가 동일해야 인증에 성공한다.
4.3 ELK DASHBOARD 구현
Kibana에서 Dashboard를 만들려면 앞서 4-2에서 다뤘던 인덱스로 데이터뷰를 생성해줘야한다.
키바나 좌측 메뉴탭을 누른 후 맨 아래에 ‘Management’ > Kibana 탭의 ‘Data views’순으로 눌러주면 된다.
그럼 위 그림과 같은 화면이 나오는데 맨 우측이 4-1 ~ 4-2의 과정을 통해 만들어진 인덱스들이고 쪽에서 데이터뷰의 이름을 사용자가 임의로 설정할 수 있으며, 밑에
‘index pattern’을 통해 인덱스들을 불러올 수 있다.
예를들어 filebeat 전체에 대한 인덱스를 불러오고 싶을 경우 filebeat* 라고 입력해주면 filebeat로 시작하는 이름의 모든 인덱스가 적용된다. 별표시(*)가 그 역할을 해준다.
데이터 뷰를 생성해줬다면 다음으로 왼쪽 상단 메뉴탭을 누르고 Analytics 탭의
‘Visualize library’ 를 누르면 위 그림처럼 ‘Create new visualization’ 버튼이 뜬다.
'Create new visualization'을 누르면 어떤 형태로 시각화를 할지 선택이 가능하다.
막대 그래프, 선형 그래프, 도넛(원)형 그래프, 지도, 클라우드 태그, 히트맵 등등 다양한 형태로
시각자료를 만들 수 있다.
먼저 맨 왼쪽 상단에 전에 생성했던 데이터뷰를 불러온다.
그러면 화면 좌측에는 데이터 값이 담긴 필드들이 나열돼있다. 가로축과 세로축에 보고싶은
데이터를 드래그 하면 된다. 예를들어 시간별로 ip마다 얼마나 많은 데이터가 들어왔는지
비교해보고 싶으면
가로축에 ‘@timestamp’ 세로축에 ‘client.ip.keyword’를 놓아주면 된다.
위 그림에서 볼 수 있다시피 세로축 데이터를 단순 갯수로 표현할껀지, 최소값, 최댓값, 합,
평균, 비율 등 사용자가 원하는 단위를 선택할 수 있다. 단, 데이터 형태에 따라 사용 불가능한
단위도 있다.
위의 과정들을 거쳐 시각자료를 나열하여 대시보드를 만들 수 있다.
대시보드의 컨셉은 어떤 메세지를 관제하는 사람에게 보여주고 싶은지에 따라 다양한 형태가 나올 수 있다. 예를 들어 해킹 공격을 감지하고 싶다면, 시간별로 어느 ip에서 데이터 양이 제일 많이 들어왔는지, 심각도를 통해 시스템에 문제가 발생하고 있는지 등 이외에도 여러가지 유추해볼 수 있는 데이터들을 시각화 함으로써 실시간으로 시스템의 상태 변화에 대해 관찰할 수 있다.
프로젝트 영상
5. 결론
5.1 프로젝트 효과 및 의의
프로젝트의 목적은 Docker를 이용해 손쉽게 환경을 구성하고, ELK 스택을 통해 장비 로그와 피해자 로그를 수집하여 공격을 탐지하고 분석하는 것이다. 다양한 공격 유형에 따라 그 특징도 다르기 때문에 , 상황에 맞는 규칙(Rule)을 작성하는 것이 필수적이다. 이를 위해 'message'라는 단일 필드로 수신된 로그를 분석하고, 이를 다양한 공격으로 인식할 수 있도록 필터를 설정하여 더 세분화된 필드로 나누어 향후 발생할 수 있는 공격을 예방하고 차단하는데 중점을 두었다.
5.2 프로젝트 한계점
2달이라는 짧은 시간 동안 조원들 모두 처음 해보는거기도 하고 관련 자료들도 인터넷에 많지 않았다. 그리고 학과 내 서버에서만 실습이 가능했기에 학과 건물이 닫는 시간(11시)까지만 프로젝트를 할 수 있었다. 이러한 환경들 때문에 꽤 애를먹었다. 정보가 부족하고 아는게 없다보니 최초에 5가지 종류의 비트(filebeat, metricbeat, auditbeat, heartbeat, packetbeat)를 모두 설치하려고 했다. 8개의 서버에 설치했어야 했는데 비츠를 설치하고 엘라스틱서치와 연동하는 과정에서 너무 많은 시간을 잡아먹었다.
정작 설치 및 연동에 많은 시간을 들인것이 beats 였는데 대시보드를 만들 때에는 보안장비에서 받아오는 syslog 데이터를 대부분 사용했으니 말이다.
물론 보안관제는 1차적인 탐지가 가장 중요한 업무라고는 하지만 앞서 준비과정이 너무 오래걸리는 바람에 가장 중요한
로그스태쉬 필터링 및 키바나 대쉬보드 제작, 패킷분석 등에 쓸 시간이 턱없이 적어서 너무 얕은 수준으로 완성한게 아쉬웠다.
그 와중에 조장님이 구직준비를 따로 하겠다고 이탈하고 본인이 조장을 받았는데 프로젝트 막바지에 조원들을 잘 융합시키지 못 한것 같아 아쉬움이 남는다.
작업간 조원들이 하나의 서버에서 작업을 하다보니 ELK가 작성된 Docker-compose를 수정하는데에 있어서 수정 사항을 공유하거나 또는 누군가 키바나 작업을 하는 중 docker를 내렸다가 올리는 등 의사소통에 혼선이 있어서 작업하기 어려웠다.
위에 언급한 조원들을 잘 융합시키지 못했다는 말이 여기서 나왔다고 볼 수 있는데 위와 같은 작업중 상황과 또 분업을 제대로 못 해준게 많이 아쉬웠다. 이러한 과정 때문에 진도가 전체적으로 미뤄졌기 때문이다.
5.3 향후 개선사항
Elk를 활용하여 정보를 수집하고 가공하고 시각화 하다 보니 많은 양의 로그를 받을 수 있었지만, 시간도 부족하고 로그에 대한 정보도 부족하여 많은 로그를 자세하게 분류해내지는 못하였다. Logstash의 filter 항목을 보완하면 보완할수록 더 정확하고 시각화하기에 편하게 나오는데, 그러지 못해서 아쉽다.
Kibana에는 시각화에 사용할 수 있는 표나 차트, 그래프 등이 많음에도 사용 방법 숙지 미숙 및 field의 부족으로 표현하고자 하는 대시보드의 내용이 부족하고 빈약했다.
나중에 ELK를 활용하여 분석을 하고 시각화를 하게 된다면 장비설정을 완벽하게 마무리해서 중간에 정보를 수집하지 못하는 불상사를 예방하고 정확하고 많은 정보를 확보한 상황에서 시작하고 싶다. 또한 field를 더 세분하게 나누고 Kibana에 있는 Dashboard를 공부해서 더 간단하고 이해하기 쉬운 대시보드를 만들어 보고 싶다.
참고 사이트
https://mvje.tistory.com/161
https://www.elastic.co/kr/elastic-stack
https://www.docker.com/
https://www.elastic.co/kr/beats/metricbeat