현재 아래와 같이 구성하여 운영중 몇 가지 불편한점에 대한 개선책
구성
보안 이벤트 로그(F/W, IPS, WAF, 중요 보안장비) -> Arcsight -> ELK Stack (일일 평균 약 400G)
불편한점
1. kibana 검색 화면으로 특정 Query에 대한 결과를 볼때 스크롤에 대한 압박 (row 수가 많을때)
특정 시간대를 기준으로 검색시 (예: 1시간 이전 부터, 5분 전부터)
2. 결과 값에 대한 text 형태로 file 저장이 필요할때가 많음
3. 특정 Query에 대해 저장 후 불러오기는 가능하나, 스케쥴 등록 기능으로 지속적으로 특정
쿼리를 실행하고 결과를 보고 싶을때 (무료 버전은 불가)
위와 같이 몇 가지 불편한 사항에 대하여 리눅스 스크립트 + elktail 을 활용하면 개선책을 찾을수 있다.
해결책
1. 1시간 동안의 특정 쿼리에 대한 결과값을 CLI 에서 보기
시간을 변수로 받고 -> 실행할 쿼리 입력 -> 결과값 result.log 파일로 저장
Point : elktail 실행시 아래와 같이 첫번째 필드가 UTC 기준으로 timestamp가 출력되므로 -> localtime 으로 변환 해야한다.
시간 localtime 으로 변경 -> 스크립트 내용중 awk + perl 사용
실행 예
시간 입력 , 실행 쿼리 입력
(목적지가 한국,미국,일본 이 아니고 특정 대역을 제외한 특정 포트를 제외, 그리고 icmp를 제외한것만 출력)
결과
결과 출력 (4112 건) 및 result.log 파일에 저장
이와 같이 스크립트로 처리하면 다소 불편한 점을 해결할수 있으며,
지속적인 모니터링이 필요한 Query 들에 대해서는 cron (스케쥴)에 등록하여
결과 값에 대하여 임계치에 부합되면 자동으로 Notification 까지 가능하며,
보안 관제 일선에서는 원하고자 하는 부분에 대하여 응용 범위를 확대 할수있다.
실제 사례를 들자면,
쿼리 : !destination.country_code2:(KR || US || JP) && deviceAction:(Permit || accept) && !destinationAddress:(“10.0.0.0/8” || “192.168.0.0/16” || “172.0.0.0/8”) && !destinationPort:(80 || 25 || 2048 || 53 || 161 || 443 || 445 || 137 || 123) && !transportProtocol:ICMP
설명 : 목적지가 한국,미국,일본 이 아니고 특정 대역을 제외한 특정 포트를 제외, 그리고 icmp를 제외한것만 출력
위와 같은 쿼리를 5분 기준으로 cron에 등록하여 특정 임계치에 부합하여 알림을 받고 있었다.
결과는 대만족
APT 장비나 기타 다른 보안 장비 시그니처에도 탐지 되지 않고 있었다. (탐지 못함)
outbound 통신 -> 특정 포트로 불가리아, 러시아, 우크라이나 등으로 지속적으로 통신중인 서버들을 찾을수 있었다.
이상 트래픽을 유발 시키는 서버 담당자와 협의 후 상세 분석 결과
여러대의 서버가 악성코드에 감염된 것으로 파악 되었다.
요점은
성능 좋은 보안 장비, 보안 솔루션이 많다고하여 보안이 더 잘되고 실시간 사이버 위협에 덜 노출된다는
잘못된 생각은 일찌 감치 버려야한다.
필자도 모의 해킹 과정중 취약한 부분을 통하여 악성코드를 실제 서버에 올려도 보고
SQL Injection, XSS, 스캔성 공격등 다양한 공격을 시도한다.
이처럼 앞단에 수많은 보안장비, 솔루션들이 있어도 우회하는것은 일도 아니며 (보안 장비에 탐지 안됨)
요즘 진화된 해킹 툴들은 몇가지 옵션 조정만으로도 보안 장비를 우회하는 기능이 대부분 포함되어 있다.
필자가 근무중인 현 회사는 보통 일일 평균 “1억 7천건” 정도의 보안 이벤트가 발생한다.
이런 방대한 보안 이벤트 로그를 일일이 사람이 본다는건 어불성설 이다.
누구나 관심을 가진다면 보안장비, 보안 솔루션도 좋지만 위와 같이 어렵지 않은 방법으로도
자동화 하여 실시간 위협에 대한 탐지가 가능하며,
나아가 업무 프로세스로 정립하여 현업에서 활용 한다면
많은 부분에서 플러스가 될거라 생각 된다.
추가
Elastalert 오픈소스를 활용하여도 다양한 notification을 설정할수 있다.
https://github.com/Yelp/elastalert