Create an IoC(Indicator of Compromise)

침해사고를 대응함에 있어 분석가가 접하게 되는 과제 중 하나가 손상 지표에 대한 정보를 구성하는 것이다. 일정한 형식을 갖추어 이 손상 지표에 관한 정보를 공유하면 서로의 위협 인텔리전스를 통해 타인의 조사를 지원하는 것이 가능할 것이다.

1. IOC란?

보안에 몸을 담고 있는 사람들은 침해사고를 접하며 IOC란 단어를 많이 들어보았을 것이다. IOC는 침해사고의 흔적을 문서나 파일로 만든 것을 뜻하며, 다양한 정보를 포함한다.

  • 시스템 내부의 알 수 없는 파일, 프로세스, 응용 프로그램
  • 관리자, 권한 있는 계정의 의심스러운 활동
  • 비정상적으로 사용되는 포트를 통과하는 네트워크 트래픽
  • 변조된 파일, DNS, 레지스트리 흔적
  • 기타 의심스러운 로그인, 접근 기록, 네트워크 활동 등
💡
IOC란 조직의 네트워크 혹은 시스템 내 잠재적 침해에 대한 정보를 일정한 형식의 파일이나 문서로 정리해 놓은 것을 뜻한다.

그렇다면 IOC를 어떻게 작성해 공유할 수 있을까?

2. IOC의 작성

IOC 파일은 xml 형식으로도 작성할 수 있지만, Mandiant (Fireeye)에서 OpenIOC 프로젝트에서 IOC Editor 도구를 개발했으며, 해당 도구를 활용하면 누구나 손쉽게 IOC 파일의 작성이 가능하다.
IOC Editor에는 이후 설명할 논리식에 대한 추가적인 정보나, Diffing을 통한 각 파일의 비교까지 여러 기능이 있지만, 본문에서는 IOC 파일의 정의에 관한 부분만 간략하게 설명한다.

OpenIOC 1.1 Editor | FireEye Market
Managing data and manipulating the logical structures of v1.1 OpenIOCs.

2-1. 메타데이터 작성

프로그램을 실행해 IOC를 저장한 폴더를 지정한다. 그리고 새로운 지표 생성 버튼을 눌러 새로운 IOC 파일을 만든다.

이후 좌측에서 현재 폴더의 ioc 파일의 요약을 확인할 수 있고, 중앙 상단에 몇 개의 텍스트 폼이 나오는 것을 확인할 수 있다. 해당 폼은 작성하게 될 침해지표의 기본 정보이며 각각의 요소는 다음과 같다.

  • Name : 작성할 침해지표의 이름
  • Author : 작성자 이름
  • GUID : 해당 파일의 고유 ID
  • Created : 파일 생성 날짜
  • Modified: 파일 변경 날짜
  • Description : 설명
[그림 3] IOC Metadata - 1

우상단 영역에서는 기본 정보 이외의 IOC에 관한 추가적인 정보, 참조 등을 추가할 수 있다. 해당 영역을 우클릭 후 추가할 데이터 타입을 고른 후 작성해주면 된다.

[그림 4] IOC Metadata-2

정보의 유형이 자유로운 만큼 해당 침해지표를 분석하며 얻은 다양한 기술이나 아이디어, 블로그와 같은 내용을 간편하게 공유할 수 있다. 파일 추가 후 화면 중상단에서 메타데이터의 작성과 추가를 할 수 있다. 작성 가능한 메타데이터의 종류는 자유로우니 원하는 정보를 작성하자.

2-2. IOC 정의

IOC는 AND-OR 논리 구조로 정의된다. 트리의 최상단은 OR 형태로 고정이 되어 있으며, Add 버튼이나 우클릭을 통해 원하는 조건의 식을 추가할 수 있다.
식의 종류는 크게 3가지로 나눌 수 있는데, 조건식의 경우 파일의 이름이나 컴파일 시간부터 시작해 매우 다양하니 직접 확인해 보는 것을 권장한다.

  • AND 논리연산자
  • OR 논리연산자
  • 조건식 (논리연산자의 피연산자)

예시를 2가지 들어보자.

[그림 5] IOC 정의-1

해당 IOC는 3가지의 조건이 OR로 묶여있다. 이 식을 의사코드로 작성한다면 다음과 같다.

(File MD5 is "098f ... 4f6") || (File Size is "1024768") || (File Name contains "Malware.exe")

세가지 조건이 OR 조건으로 묶여있어 어느 파일이 해당 조건 중 하나라도 해당하면 침해지표와 일치하게 되는 간단한 식이다. 그렇다면 여러개의 논리연산을 섞은 경우 도 확인해보자.

[그림 6] IOC 정의-2

OR 블록 아래에 조건식 블록 하나, 각각의 AND 논리연산 블록 2개로 이루어진 식이다. 처음 봤을 땐 헷갈리지만 구역을 나눠 의사코드로 작성해본다면 쉽게 이해할 수 있다.

(File MD5 is "098f...") || ((File Name contains "Malware.exe") && ((File Compile Time is "2023...") || (File Size is "1024768"))) || ((Service Name contains "svc0x24") && (Service DLL contains svc0x24_pgm.dll))

💡
논리식을 작성 할 때, 각각의 AND와 OR 연산자는 상위 → 하위 구조로 진행할 때 번갈아가며 사용해야 한다. 똑같은 조건을 굳이 상/하위 2개의 계층으로 나눠서 작성할 필요가 없기 때문이다.

3. 마무리하며

해당 프로젝트는 매우 오래되었음에도 불구하고 현재 대한민국 국내에서는 IOC 파일을 통한 침해지표 공유, 해결 사례가 없다.

똑같은 원인을 통해 동시다발적으로 일어나는 침해사고의 경우 각각의 케이스를 일일이 분석해야 하는 수고도 적지 않을 뿐더러, 그 대응 또한 분석가의 역량에 따라 크게 달라질 수 있다. 기관들의 적극적인 정보 공유가 이루어진다면 국내의 보안 수준은 좀 더 발전할 수 있을 것이라고 생각한다.

You've successfully subscribed to PLAINBIT
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.