2019-11-20 20:10 (수)
[김진국의 디지털포렌식-2] 침해사고와 라이브 포렌식
상태바
[김진국의 디지털포렌식-2] 침해사고와 라이브 포렌식
  • 길민권
  • 승인 2012.03.09 06:00
이 기사를 공유합니다

라이브 포렌식, 현장에서의 증거 수집과 관련된 활동들
흔히 사건이 발생하면 현장 출동을 하게 된다. 이때 현장에서 이루어지는 초기 활동은 매우 중요하다. 전통적인 법의학에서는 폴리스 라인을 이용해 사건 현장의 지문, 혈흔, 발자국 등 아날로그 증거가 외부의 영향으로 훼손되지 않도록 보존한다. 로카르드 교환 법칙(Locard’s exchange principle)에 따라 현장 보존을 얼마나 잘 하느냐에 따라 사건 해결이 판가름 날 수도 있다.
 
디지털포렌식도 마찬가지다. 초기 사건 현장에서 디지털 증거를 어떻게 수집하냐가 큰 관건이다. 초기 대응을 잘 하지 못할 경우, 증거로서의 가치를 잃어버릴 수도 있기 때문이다.(이미지. www.flickr.com / by Tony Webster)
 
개인과 관련된 사건의 경우, 노트북, 데스크톱, 스마트폰 등과 같은 개인용 디지털기기를 현장에서 인계 받거나 영장에 의해 압수한다. 이때 사건과 관련한 디지털 기기를 정확히 판단하고 빠르게 압수하여 증거 훼손을 최소화해야 한다. 개인용 디지털기기의 경우 대부분 전원이 꺼진 상태로 수집되어 분석이 이루어진다. 그럼 전원이 켜져 있는 디지털기기를 접했을 때는 어떻게 해야 하는가?
 
관점을 침해 사고로 바꿔보자. 침해 사고의 대상은 보통 개인용 기기 보다는 업무용 컴퓨터나 엔터프라이즈 장비와 같은 회사 자산이다. 엔터프라이즈 장비의 경우, 24시간 가동되는 장비이기 때문에 침해 사고를 발생했다고 하더라도 쉽게 가동을 중단시킬 수 없다. 회사의 매출과 직접적으로 연관된 장비의 경우, 가동이 잠시만 중지되어도 엄청난 금전적인 손실이 발생할 수 있기 때문이다. 이런 상황에서는 어떻게 해야 하는가?
 
전원이 꺼져있는 상태라면 디지털기기에서 저장매체를 분리하여 안전하게 분석하면 된다. 하지만 전원이 켜져 있는 상태라면 물리메모리(RAM)에 전원이 꺼진 후 사라지는 휘발성 정보가 유지되고 있다. 사건이 발생한 이후 신속한 대응이 이루어졌다면 휘발성 정보가 사건 해결에 큰 실마리가 될 수 있다. 그리고 침해 행위가 현재도 계속 이루어지고 있다면 더욱 휘발성 정보가 중요하다.
 
보통 전원이 꺼지면 사라지는 휘발성 정보를 활성 데이터라고 하고 전원이 꺼진 후에도 사라지지 않는 정보는 비활성 데이터라고 한다. 현장 대응 시 대상 시스템이 켜져 있다면 활성 데이터를 수집한 후 전원을 끄는 것이 바람직하다.(간혹 전원을 끌 수 없는 상황도 있다.) 이런 현장에서의 증거 수집과 관련된 활동을 라이브 포렌식(Live Forensics)이라고 한다.
 
라이브 포렌식은 현장의 증거 수집만을 대상으로 하지만, 초기 현장에서 시스템을 접했을 때 취해야 하는 대응 방안을 일컬어 초기 대응(First Response), 실시간 대응(Live Response), 사고 대응(Incident Response) 등의 용어를 사용한다. 여기서는 주제가 너무 넓기 때문에 라이브 포렌식만을 다룬다. 라이브 포렌식은 크게 활성 데이터 수집과 비활성 데이터 수집으로 나눌 수 있다.

 
◇활성 데이터 수집
활성 데이터 수집 순서는 휘발성 정도에 따라 달라진다. 휘발성 순서에 대해 참고할 만한 문서는 다음과 같다.
-RFC 3227, Guidelines for Evidence Collection and Archiving
-NIST Special Publication 800-86, Guide to Integrating Forensic Techniques into Incident Response
 
위 문서에서 정의하는 순서가 있지만, 기관에 따라 바라보는 관점이 다를 수 있다. 다음은 필자가 생각하는 활성 데이터 수집 순서이다. ARP 캐시와 같이 휘발성이 매우 높은 네트워크 연결 정보를 먼저 수집하고 휘발성이 낮은 정보는 뒤쪽에 배치하였다.
 
이 중 가장 많은 시간이 소비되는 작업은 물리메모리 덤프이다. 가장 많은 시간에도 불구하고 물리메모리를 앞쪽에 배치한 이유는 뒤에서 수집하는 모든 정보가 결국은 물리메모리에서 나오기 때문이다. 물리메모리 덤프가 뒤쪽에 위치하면 수집 명령을 실행하면서 물리메모리의 흔적이 손상될 수도 있기 때문이다. 그리고 현재 진행형인 사건의 영향을 정확히 판단하기 위해 마지막에 네트워크 패킷을 수집하는 것이 필요하다.
 
1. 네트워크 연결 정보
2. 물리메모리 덤프
3. 프로세스 정보
4. 로그온 사용자 정보
5. 시스템 정보
6. 네트워크 인터페이스 정보
7. 자동실행 항목
8. 클립보드, 작업 스케줄러 정보
9. 네트워크 패킷 수집
 
이론적으로 모든 정보는 물리메모리 상에 유지되므로 물리메모리 덤프에서 모든 정보를 가져올 수 있어야 한다. 하지만 현재까지 연구된 내용은 물리메모리에서 모든 정보를 가져오지 못한다. 운영체제나 버전에 따라 차이는 있지만 보통 70% 정도는 물리메모리에서 얻어 낼 수 있다.
 
나머지 30%도 물리메모리에 있지만 아직까지 구조가 정확히 파악되지 않았다. 각 운영체제가 계속 새롭게 출시되고 있기 때문에 아마도 모든 구조가 정확히 파악되기는 쉽지 않아 보인다.
 
다음으로 활성 데이터 수집 시 고려해야 할 항목들이 몇 가지 있다.
첫 번째로, 활성 데이터는 공개되고 검증된 CLI 도구를 사용해 수집해야 한다는 점이다. 활성 데이터를 수집하는 행위는 시스템의 잠재적인 증거를 훼손시킬 수도 있기 때문에 시스템에 최소한의 영향만 주어야 한다. 그래서 보통 GUI 도구보다 CLI 도구 사용을 권장한다.
 
두 번째로, 단일 도구만 사용하기 보다는 도구의 장단점이 존재하기 때문에 여러 도구로 중복 수집한다. 예를 들어, 프로세스 정보를 출력하는 CLI 도구는 윈도우 기본 명령을 비롯하여 Sysinternals나 Nirsoft에서 제공하는 다양한 도구가 있다. 각 도구마다 정보를 가져오는 방식과 출력 형식이 다르기 때문에 여러 도구를 사용해 서로의 단점을 보완해야 한다. 그렇다고 무작정 많은 도구를 사용해 수집하는 행위는 수집 시간이나 증거 훼손 입장에서 좋지 않다. 따라서, 미리 테스트하여 꼭 필요하고 안정적인 도구만 선택하도록 한다.
 
세 번째로, 모든 명령어는 독립적으로 실행되어야 한다. 시스템에 있는 기본 명령이나 라이브러리는 악성코드에 의해 감염되어 있을 수도 있으므로 반드시 미리 정적으로 컴파일한 직접 가져간 명령을 사용한다. 주의할 점은 대상 운영체제의 버전이 다양할 수 있으므로 사전에 각 운영체제 버전에 맞게 테스트하여 잘 동작하는지 확인한 후 적합한 명령어 목록을 준비해 둬야 한다.
 
네 번째로, 수집한 활성 데이터와 덤프한 물리메모리를 비교해보는 작업이 필요하다. 루트킷이 설치되어 있는 경우 활성 데이터 수집 도구로 수집한 결과가 올바르지 않을 수 있다. 예를 들어, DKOM 기법을 통해 프로세스를 은닉한 경우, 기본 명령으로는 은닉된 프로세스를 알아낼 수 없으므로 덤프한 물리메모리에서 패턴매칭으로 뽑아낸 프로세스 목록과 교차 검증을 해봐야 한다.
 
마지막으로, 수집 명령은 운영체제에서 기본으로 지원하는 인터프리터를 이용하는 것이 좋다. 그래서 유닉스 기반 운영체제는 쉘 스크립트를 이용하고 윈도우는 배치 스크립트를 이용한다. 파이썬, 펄, 루비 등을 사용하게 되면 실행 환경을 위해 추가 파일을 설치해야 할 수도 있다. 이 경우, 잠재적인 증거를 훼손할 수도 있으므로 바람직하지 않다.
 
◇비활성 데이터 수집
최근에는 라이브 포렌식 시 비활성 데이터 수집도 고려되고 있다. 원래 비활성 데이터는 전원을 끈 이후에도 유지되기 때문에 저장매체 이미징이 완료된 후 분석하는 것이 일반적이다. 하지만 최근 대용량의 저장매체가 보편화되면서 저장매체 이미징이 완료될 때까지 기다리는 것은 신속한 사고 대응에 적합하지 않다.
 
비활성 데이터 중 데이터 크기는 크지 않지만 분석에 매우 중요하게 활용되는 데이터가 있다. 이런 데이터를 라이브 포렌식 시 함께 수집하면 저장매체 이미징 동안 사전 분석 작업을 수행할 수 있다. 시스템이 활성 상태가 아닐 경우에도 이미징 전에 쓰기 방지장치를 장착한 상태에서 주요 비활성 데이터를 먼저 수집한다면 전체 분석 시간을 많이 단축시킬 수가 있다.
 
윈도우 시스템을 대상으로 사전 수집이 필요한 주요 비활성 데이터는 다음과 같다.
-MBR, GPT
-파일시스템 메타데이터 (NTFS의 MFT, FAT의 디렉터리 엔트리 등)
-레지스트리 하이브 파일
-프리패치/슈퍼패치 파일
-각종 로그 파일 (이벤트 로그, IIS 로그, Setupapi 로그, 작업 스케줄러 로그, 방화벽 로그 등)
-휴지통 정보
-브라우저 사용 흔적
 
로그 파일이 매우 크지 않다면 주요 비활성 데이터를 수집하는데 많은 시간이 필요하지 않다. 그리고 수집된 비활성 데이터는 윈도우의 주요 흔적을 모두 포함하고 있기 때문에 타임라인 분석을 비롯한 거의 모든 분석이 가능하다.
 
사전 분석을 마치면 이미징된 저장매체를 대상으로 악성 분석(AV 엔진, 해시 비교, 슬랙 탐지 등)을 수행하여 악성코드에 의한 침해 여부를 우선 파악한다. 다음으로 사전 분석에서 도출된 정밀 분석 대상을 추출하여 분석을 수행한다. 이와 같은 방법은 이미징이 완료된 이후에 분석을 시작했던 기존 방법에 비해, 전체 분석 시간을 단축시켜줄 뿐만 아니라 사건을 좀 더 객관적으로 바라볼 수 있게 해준다.
 
최근 빅데이터(Big Data)가 IT 업계의 화두이다. 포렌식 분야에서도 신속한 분석이 이루어져야 하기 때문에 빅데이터를 어떻게 다뤄야 할지에 대해 많은 논의가 되고 있다. 하드웨어·소프트웨어 성능을 높여 빅데이터를 해결하는 것도 하나의 방법이지만, 그보다 더 효과적인 방법은 프로세스를 개선시키는 것일 것이다.
 
간략하게 라이브 포렌식에 대해 살펴보았다. 관련 내용에 대한 질문이나 의견이 있다면 주저하지 말고 proneer@ahnlab.com으로 보내주기 바란다. 
 
< 필자소개 >

김진국(@pr0neer): 現 AhnLab A-FIRST 연구원
강원대학교와 고려대학교 정보보호대학원을 졸업하고 현재는 안철수연구소 A-FIRST 팀에서 침해사고 포렌식 분석 업무를 담당하고 있다. 국내의 디지털포렌식과 관련된 정보 공유를 위해 개인 블로그인 FORENSIC-PROOF와 디지털포렌식 커뮤니티인 FORENSIC INSIGHT를 운영하고 있다.