1년 전 log4j 취약점으로 난리가 났었다. log4j는 JAVA 언어로 개발되는 거의 모든 어플리케이션에서 사용하고 있었고 패치가 없었기 때문에 무방비로 취약점이 노출됐었다. 로그로 자주 출력되는 HTTP 헤더 같은 곳에 악성 서버 주소를 입력하면 해당 주소에서 명령어를 받아와 실행이 되는 취약점이었다.
악성코드를 분석하고 ip, port, url, hash 기반으로 차단하는 방식은 완벽할 수 없음을 인정하고 다양한 로그를 수집하고 자동으로 의미를 해석하고 분석해서 대응하는 방법이 필요하다. 기업, 부서마다 주고받는 데이터와 네트워크 구성이 다르기 때문에 단순한 방식으로는 세밀한 접근제어를 구현할 수가 없다.
보안 장비가 너무 많아도 관리가 안 되면 안 쓰는것만 못할 수 있다. 이러한 문제 해결을 위해 여러 보안 장비에서 수집, 탐지된 데이터를 종합적으로 분석해서 살펴보는게 ESM이 등장했고 로그를 분석해 위협을 탐지하고 사후 추적을 위한 상관 분석과 포렌식 기능을 제공하는 시스템(SIEM)으로 발전됐다. 그리고 보안 위협을 사전에 예방하고 탐지하는 노력만으로는 위협으로부터 벗어날 수 없음을 인지하면서 등장한 것이 바로 보안 운영 자동화 및 대응(Security Orchestration, Automation and Response, SOAR)이다.
soar를 이용하면 여러 장비에서 수집된 데이터를 자동 분석해서 의미있는 데이터를 추출해주기 때문에 숙련된 보안 데이터 분석가가 아니더라도 적절한 보안 대응을 할 수 있다.
soar는 하나의 대책이 될 수 있지만 회사마다 운영/제공하는 서비스가 다르고 공격 방법 및 보안 대책 또한 달라질 수 밖에 없기 때문에 상용 솔루션이 아닌 회사의 cert 담당자가 직접 제어할 수 있는 장비, 솔루션이 필요하다.
네트워크 중간에 위치해서 보안 데이터, 로그를 생성해주는 기능
로그를 한 곳에서 수집해서 cert가 사고조사 시 분석할 수 있는 데이터를 제공하는 기능
룰을 걸어 실시간 대응을 할 수 있게 해주는 기능
차단하기에는 확실하지 않지만 악성사이트로 분류된 주소에 대해 접속할 경우 알람을 주능 기능
여기에 활용할 수 있는유명한 OSS (Open Source Software)를 살펴보고 제공해주는 기능과 활용할 수 있는 방법들에 대해 알아보자.
snort
snort는 IP 네트워크에서 실시간 트래픽 분석 및 로깅을 수행할 수 있는 침입탐지 시스템이다. 프로토콜 분석, 컨텐츠 검색, 버퍼 오버플로우, 스텔스 포트스캔과 같은 공격 탐지 등을 할 수 있다.
다음과 같은 모드를 제공한다.
스니퍼모드: 실시간으로 네트워크에서 패킷을 읽어 콘솔로 표시
패킷 로거: 패킷을 디스크에 저장
n-ids: 네트워크 트래픽에 대해 탐지 및 분석
snort rule의 구조는 헤더+옵션으로 되어있고
헤더에서는 패킷의 ip/port 대역대, 프로토콜, 방향, 로그를 기록할지 말지와 차단 여부를 설정하고
옵션에서는 상세 탐지 기능을 제공하며 크게 3개로 분류된다.
General Rule Options: 권한 탈취, 권한상승, 실행 코드...
Payload Detection Rule Options: 웹 요청 분석 방법(헤더, 쿠키, 주소, 메소드 ...)
Non-Payload Detection Rule Options: TCP/IP 프로토콜 기반
오래된 도구이기 때문에 기능 분석이 잘 된 사이트가 많다.
ELK (엘라스틱 서치, 로그스태시, 키바나)
엘라스틱 서치:
데이터베이스 역할을 한다. 기존의 데이터베이스와의 차이점은 특정 조건으로 데이터를 검색할 때 전체를 full scan 해야 했는데 엘라스틱서치는 역색인으로 검색을 위한 자료구조를 만들고 이를 통해 더 빠른 검색을 지원한다.
index라는 공간(database)에 mapping이라는 구조(schema)를 미리 지정하고 rest api를 이용해 json 형태의 데이터를 조회/생성/업데이트/삭제를 한다. 데이터가 생성되면 index에 하나의 document가 생성된다. 데이터베이스의 row와 비슷하다. json형태이기 때문에 document는 key를 가지고 있는데 여기서는 field라고 불린다.
로그스태시:
데이터를 수집하여 변환한 뒤 엘라스틱서치로 보내는 역할을 한다. 크게 3개의 플러그인으로 구성된다.
입력: 다른 소스로부터 데이터를 가져오는 역할을 한다. syslog, log4j 등 다양한 소스들을 읽을 수 있다.
변환: 중간처리 장치로 이벤트의 이름을 변경하거나 원하는 형태로 데이터를 변형한다. 필터링도 가능하다.
출력: 처리된 데이터를 엘라스틱서치로 보내는 역할을 한다.
보통 로그를 보내려는 서버에 filebeat를 설치하고 로그스태시의 입력에 filebeat주소와 포트를 설정한다.
변환에는 엘라스틱서치에 들어가는 로그 포맷을 지정하고
출력에는 엘라스틱서치 서버의 주소를 설정한다.
가끔 엘라스틱서버가 죽을 경우 로그가 날라갈 수 있기 때문에 파일비트와 로그스태시 중간에 카프카와 같은 메세지 큐서버를 중간에 두게 된다. 이럴 때 로그스태시는 파일비트가 아닌 카프카 정보를 입력에 넣게 된다.
키바나:
데이터를 시각화하고 검색을 지원한다. 히스토그램, 막대그래프, 위치 데이터 등을 지원한다.
skadi
분석가 입장에서는 매번 도구들을 설치하고 설정하는 것이 귀찮을 수 있다. 앞서 설명한 plaso, timesketch, docker, grafana와 같은 도구를 한번에 설치할 수 있게 도와주는 프로젝트가 있다. 데프콘 팔표이후 최근에는 업데이트가 멈춰서 아쉽지만 링크로 소개를 대신한다.
GitHub - orlikoski/Skadi: Collect, Process, and Hunt with host based data from MacOS, Windows, and LinuxCollect, Process, and Hunt with host based data from MacOS, Windows, and Linux - GitHub - orlikoski/Skadi: Collect, Process, and Hunt with host based data from MacOS, Windows, and Linux
github.com
Splunk
앞서 설명한 ELK와 매우 유사하나 몇가지 차이가 있다. 500MB까지는 무료이지만 상용 솔루션이기 때문에 사용에 부담이 발생한다. 로그의 형태를 지정하지 않아도 key, value 형태라면 알아서 분석하고 저장한다. (key - value 형태가 아니면 포맷을 지정해줘야 한다.) 계정을 관리할 수 있고 로그 조회가 좀 더 자유롭다. 그리고 알아서 필드 분석 및 인덱싱을 지원하기 때문에 이러한 구축 및 설정의 번거로움이 줄어들 수 있다.
다음은 보안에서 많이 쓰이는 oss이다
함께 구성해서 쓰면 상용 솔루션만큼의 성능을 기대할 수 있을것이라고 생각한다
suricata
zeek (bro)
arkime
maltrail
Grafana