#01 2020 K-사이버 시큐리티
2021년 대회 후기를 먼저 적고, 2020년 대회 후기를 적는다.
1년만에!! 시간이 지나서 기억이 안나는 부분이 있어 같은 팀원이 써놓은 블로그를 참고합니다.
가지마세요.
먼저 대회소개를 간단히 하면, 웹로그 빅데이터 분석을 통해 공격행위를 식별하고, 식별한 공격행위의 특징을 통해 추가 이상행위 패턴을 탐지하는 알고리즘 도출이 도전과제였다. 팀원 구성은 데이터 분석 2명, 보안 분석 3명으로 구성하였다.
알고리즘 도출 과정은 다음과 같다.
① 전체 데이터 셋 내 개별 유저를 특정 지어 패킷을 묶음
② 대다수 유저와 상이한 패턴을 보이는 유저를 식별하고 유사도 점수가 높은 패킷을 묶음
③ 식별된 패킷을 집중 분석하여 공격 유형별 분류 및 1차 탐지 룰 설계
④ 분류된 패킷에 공격 유형별 번호(1~5번)를 부여하여 지도 학습에 필요한 답지 구축 및 기계학습 모델 설계
⑤ 1차 탐지 룰과 기계학습 간의 상이한 탐지 결과물을 분석하여 누락 탐지된 공격 시나리오(6번)를 감지
⑥ 새롭게 발견된 공격 시나리오(6번)를 감지할 수 있도록 1차 탐지 룰을 개선
⑦ 4~7번 과정을 반복하며 n차 탐지 룰 탐지 룰 및 n차 기계학습 모델을 생성하여 n번 개선된 최종 공격 탐지 룰 구축
① 전체 데이터 셋 내 개별 유저를 특정 지어 패킷을 묶음
가장 먼저 개별 유저를 분류하는 작업을 진행했다. 이 과정은 공격행위로 의심되는 데이터집단의 심층 분석을 용이하게 한다. 예를 들어 어떤 로그가 SQLi를 시도하는 내용이면, 그 로그에 해당하는 유저의 로그데이터 집단을 분석했을 때 다른 공격행위를 쉽게 찾을 수 있다. 또한, Credential Stuffing처럼 하나의 패킷은 단순 로그인시도의 정상 패킷이지만, 다른 계정 정보로 짧은 시간에 너무 많은 로그인시도가 있는 경우를 식별하기 용이해진다.
② 대다수 유저와 상이한 패턴을 보이는 유저를 식별하고 유사도 점수가 높은 패킷을 묶음
①을 진행했다면, 이상 패턴을 보이는 유저를 식별하는 과정으로 진행된다. 우리가 유의미하게 바라본 데이터 피처는 시간 당 패킷 수, 패킷 당 Status Code 종류이다.
X축은 유저별 1초당 평균 패킷 수, Y축은 유저별 1초당 패킷 수의 표준편차를 의미한다. 초록색 집단은 패킷 수가 적고 유입 속도가 일정하지만, 빨간색 집단은 패킷 수도 많고, 속도도 고르지 못하다. 이 부분에서 주목하는 점은 일반적인 유저와 봇 혹은 스크립트의 차이점이다. 일반적인 유저가 비현실적으로 많은 패킷을 보낼 수는 없으므로 해당 부분은 유의미한 데이터 피처라고 볼 수 있다.
다음은 유저별 Status Code 비율이다. 일반 유저는 페이지에 유도되어있는 링크대로 이동을 하기에 사실 에러 응답코드 비율이 높을 이유가 딱히 없다. 하지만, Web Scanning 같은 경우에는 어떤 HOST에 어떤 페이지들이 있는지 Scanning하는 경우가 있으므로 Not Found에 해당하는 404 코드의 비율이 높아지고, Credential Stuffing은 동일 경로에 로그인 시도를 과도하게해서 Client Closed Request인 499 코드의 비율이 높아진다.
또한 UserAgent에 Python이 포함했는지, Referer가 존재하는지 등 총 28개의 피처를 추출했다.
③ 식별된 패킷을 집중 분석하여 공격 유형별 분류 및 1차 탐지 룰 설계
의미있다고 판단 피처를 통해 몇 가지 공격 유형에 대한 룰을 정의하였고, 해당 룰을 다듬는 과정을 했다.
Web Scanning 같은 경우는 Not Found 코드 비율, 비정상적 접근 횟수, Dirbuster 툴을 사용한 흔적 등의 Feature를 활용하였다.
Credential Stuffing은 Client Closed Request 코드 비율, ID & PW와 같은 동일 인자의 반복, 비정상적 접근 횟수 Feature를 활용하였다.
Web Crawling은 Referer가 존재하지 않는 패킷의 비율, 동일 Path에 과도하게 접근한 비율 등의 Feature를 활용하였다.
Abnormal Administrator Service Access 비정상적 관리자 서비스 접근의 경우는 Path 내 관리자 권한의 세션 체결을 거치지 않은 채 관리자 페이지에 대한 접근이 비율이 높은 Feature를 활용하였다.
마지막으로 XML-RPC Web Scraping 같은 경우는 XML-RPC 프로토콜이 포함되고 Web Crawling과 동일한 Feature를 사용해 공격을 식별하였다.
④ 분류된 패킷에 공격 유형별 번호(1~5번)를 부여하여 지도 학습에 필요한 답지 구축 및 기계학습 모델 설계
이제 정의된 룰을 통해 분류된 정답지를 인공지능 모델을 통해 학습시키는 과정이 진행된다. 인공지능 모델은 'Random Forest'기법과 'CNN'기법을 활용했다. Random Forest 기법은 하위 샘플과 예측 변수를 사용하여 만들어진 Decision Tree에 대한 앙상블을 통해 평균 예측을 얻는 방법론이다. 해당 기법은 현업에서도 많이 사용되고, 오버피팅을 막을 수 있는 머신러닝 방법이기에 우리가 분류한 정답지 데이터에 대한 적중도가 더 높아지는 효과가 있다고 생각한다.
CNN 기법은 딥러닝 기법으로 데이터들 간 상관관계를 분석해 예측 값을 도출해주는데 최적화된 알고리즘이다. 이를 통해 어떤 공격을 했는지 도출할 수 있다.
개인적으로 일반적인 데이터 분석 대회처럼 정답데이터가 정해져있고, 점수에 따라 순위를 매기는 대회였다면 두 가지의 인공지능 모델이 오히려 혼란을 가져올 수도 있었을텐데 어떠한 알고리즘이 효과적일지 도출하는 대회기에 좀 더 좋은 결과를 냈다고 생각한다.
⑤ 1차 탐지 룰과 기계학습 간의 상이한 탐지 결과물을 분석하여 누락 탐지된 공격 시나리오(6번)를 감지
두 모델의 결과는 조금씩 다르게 나오게되는데 이를 분석하여 어떠한 점을 오탐한건지, 아니면 초기 룰 제작 환경에서 잘못된 것이 있는지 판단하는 과정을 거친다.
우리는 Web Scanning에서 301 Status Code에 해당하는 패킷을 고려하지 못했는데, 우리팀은 초기에 Web Scanning을 404 Not Found / 200만 고려했다. 하지만, 실제로 Scanning을 시도해본 결과 잘못된 사이트에 접근했을 때 서버 설정에 따라 올바른 페이지로 Redirect하게 되는 경우가 존재하였고, 이 부분을 누락 탐지 한것으로 확인했다.
⑥ 새롭게 발견된 공격 시나리오(6번)를 감지할 수 있도록 1차 탐지 룰을 개선
위 과정을 통해 찾아낸 누락 탐지 데이터를 다시 지도 학습을 위한 정답 데이터로 포함시키고 인공지능 모델로 학습에 활용을 시켜 새로운 탐지 룰을 개선한다.
⑦ 4~7번 과정을 반복하며 n차 탐지 룰 탐지 룰 및 n차 기계학습 모델을 생성하여 n번 개선된 최종 공격 탐지 룰 구축
그리고 이 과정을 n차 반복해서 두 모델 간 결과가 어느정도 동일함을 보일 때 이를 최적으 알고리즘으로 판단하여 탐지에 활용한다.
결과적으로 현업에서는 해당 알고리즘 모델을 주로 사용하고, 보안 전문가는 새로 수집되는 데이터를 분석하여 새로운 룰을 고민하고 AI모델의 상이한 결과 데이터를 분석하여 룰을 수정하는 과정을 거친다. 그리고 이는 IPS가 아닌 IDS에 적용해 서비스의 원활성을 해치지않는 방법을 고민할 수 있다.
너무 늦게 작성했지만, 다들 너무 열심히 해주셔서 감사한 마음으로 진행했던 대회이다.
1등으로 과기부 장관상을 수상한 것은 덤!