개요


 USB와 관련된 아티팩트를 공부하며 직접 실습을 해보면서 어느 부분이 제대로 동작하는지, 이번 실습을 통하여 추후에 다시 학습을 할 수 있도록 하기 위하여 포스팅을 진행한다. 많은 USB 관련 Registry가 존재하지만 여기서는 몇개만 선출하여서 어떻게 동작하는지를 확인할 것이다.

  전체적인 타임라인은 아래와 같다. 크게 세 부분으로 나누었으며 USB를 최초 연결한 시간과 최초 연결로부터 분리한 시간, 그리고 마지막으로 USB의 마지막 접근 시간을 파악하기 위하여 재연결 시간 또한 확인을 하였다. 해당 포스팅은 아래의 타임라인을 중심으로 진행이 되며 이러한 타임스탬프가 변조되지 않았다는 전제하에 분석을 계속 진행할 것이다.


최초 연결 시간


 USB를 최초 연결하여 기존의 레지스트리에 변화가 있는지를 확인해보자. 여기선 최초 연결이라는 사항이 중요하기에 기존의 PC가 아닌 다른 PC 환경을 제공받아서 진행을 하였다. 진행된 PC의 환경은 WIndows 7 x86으로 본인의 PC인 Windows 10 x64와는 차이가 다소 있지만 아티팩트에 대한 접근 방법은 같기에 아무 이상은 없을 것이라 생각한다.

Setupapi.dev.log

 USB를 연결할 경우 흔히 언급되는 아티팩트로는 바로 %SystemRoot%\INF\Setupapi.dev.log를 말할 수가 있다. 해당 로그는 USB가 최초에 연결될 때에만 해당 로그를 남기며 이를 통하여 대상 PC에 USB가 연결이 되었는지, 만약 연결되었다면 어떠한 USB인지 대략적인 정보를 얻을 수가 있다.

  위의 그림을 보면 분석 이전의 log 파일에서는 존재하지 않았던 부분이 생긴 것이다. 이전의 로그기록은 9.14MB의 크기를 가지고 있지만 최초 연결 이후 로그파일의 크기는 9.20MB로 해당 로그에 내용이 추가되었음을 알 수가 있었고, 해당 로그의 내용은 위와 같이 [Device Install (Hardware Initated) - USB\{VID}&{PID}\{Serial Number}]의 형태로 나타난다. 

 로그에 기록된 Section Start를 확인해보면 2015/10/01 16:32:23으로 나타나있는 것을 확인할 수가 있다. 위 타임라인에서 보았던 연결시간과의 약간의 차이는 USB를 꽂는 수동적인 작업으로 인하여 몇초 정도 오차가 나타난 것이므로 같다고 생각하자. 그러므로 타임라인과 USB 연결시간이 같은 것을 확인할 수가 있다. 이를 통해 결국 USB를 최초 연결할 경우 setupapi.dev.log에 기록이 남는 것을 확인할 수가 있다.

Portable Devices - Registry

 USB연결과 관련하여 수많은 아티팩트들이 존재한다. 하지만 이러한 많은 아티팩트 중에서 하나만 살펴볼 것인데 바로 Portable Devices키이다. 해당 키의 서브 키들과 값을 출력해보면 왼쪽의 reg_4.16과 같다. USB를 연결한 이후의 값은 오른쪽과 같다.

 이를 통해 맨 위에 KALI LIVE라는 값이 추가된 것을 확인할 수가 있다. 이처럼 다른 레지스트리 키를 확인해도 비슷한 결과를 얻을 수가 있기에 최초연결에 관한 설명은 아래의 레지스트리로만 실습을 진행하였다. 그 외에 값들은 변화가 없이 유지되어 있는 것을 확인할 수가 있다.


마지막 연결 시간


 USB와 관련된 아티팩트에 있어서 최초 연결시간을 알면 도움이 되지만, 이것만으로는 어떠한 PC에서 두번째로 연결된 시간을 확인할 수가 없다. 최초 연결 시간만으로도 포렌식 분석에 있어서 도움이 되지만 이 뿐만으로는 더 구체적인 타임라인을 형성하기에 부족하다. 그렇기에 추가적인 아티팩트가 필요하다.

 이러한 추가적인 아티팩트로는 바로 마지막 연결시간을 말할 수가 있는데, 이에 대하여 진행해보자. 우선 여기서도 위의 타임라인을 참고하여 타임스탬프를 확인하면 된다. 이제 아래를 통해 확인해보자.

Registry

 위 그림은 REGA를 통하여 해당 레지스트리를 수집한 다음 분석을 한 것이다. REGA를 통하여 특정 시간대로 정렬을 한 다음 그 중에서 연결된 것만을 확인한 것이다. 우선 총 3개의 레지스트리는 모두 마지막으로 쓰인 시간이 16:32:22로 USB를 꽂았을 때 생성된 시간이랑 같다. 그리고 여기서 더 자세히 보아야 할 것은 LogConf를 보아야 한다. 

 해당 키의 마지막 쓰인 시간은 16:45:15로 최근에 USB를 연결한 시간과 동일하다는 것을 알 수가 있다. 이를 통해 우리는 마지막 연결시간이 언제인지를 확인할 수가 있다. 이외에도 다른 방법을 통하여 확인할 수 있겠지만, 필자는 저 방법을 선택하였다. 그리고 이를 통하여 필자는 USB의 마지막 연결 시간을 확인할 수가 있었다.

Event Log

 마지막으로 살펴볼 것은 바로 이벤트로그를 통하여 확인을 하는 방법이다. 운영체제는 특정한 행동을 하거나 오류 및 등의 이벤트가 발생하면 로그로 기록을 한다. 그리고 이러한 로그는 포렌식에서도 중요한 역할을 한다. 물론 USB와 관련된 이벤트 로그도 생성이 되는데 이는 Applications and services logs 항목 아래에 Microsoft\Windows\DriverFrameworks-UserMode에 기록이 된다.

 해당 로그를 확인해보면 아래와 같이 시간과 어떠한 이벤트인지 나타난다. 우선 타임라인과 함께 비교를 하면 4:32:31을 기준으로 '특정 장치에 대한 pnp 또는 전원..' 이라는 텍스트를 발견할 수가 있을 것이다. 더 자세한 문구는 직접확인해보면 되지만 대략적으로 USB의 연결과 연결해제에 관한 내용이 나타나 있다.

연결을 했을 뿐인데도 여러개의 이벤트가 생성이 되었으며 마찬가지로 연결을 해제 했을 경우에도 여러개의 이벤트 로그가 기록되어 있는 것을 확인할 수가 있다. 이를 통하여 결론적으로 USB연결과 관련된 아티팩트를 발견할 수가 있었다. 하지만 이벤트 로그를 이용한 방법은 윈도우 7에서까지만 유효하다고 할 수 있는데 그 이유는 해당 이벤트 로깅이 윈도우8부터는 기본설정으로 되어 있지 않아, 따로 수동으로 값을 수정해주어야 하기떄문이다.

 따라서 윈도우7까지는 이 방법을 사용하는 것이 확인하기도 쉬우며 장치 연결시간 뿐만 아니라 해제 시간까지 로깅되기에 더욱 자세하게 타임라인을 이어나갈 수가 있다. 하지만 윈도우 8부터는 대부분의 PC에 설정이 되어있지 않을 확률이 높기때문에 이를 염두하여야 한다.


결론


이번 포스팅을 통하여 직접 USB 아티팩트를 찾아보았다. 사실 최초 연결시간에 관해서는 너무나 많은 아티팩트가 존재하기에 이를 선별하기 위하여 이번 실습을 진행했던 이유가 크다. 그래서 몇개만 선별하여 진행을 해보았는데 대략적인 분석 방법은 유사하다고 말할 수가 있다.

 USB 아티팩트는 크게 3가지 방법으로 찾을 수 있으며 레지스트리 분석, 이벤트 로그 분석, setupapi.dev.log를 이용한 분석과 같다. 결국 3가지 방법을 위에서 모두 다 다루었으며 로그를 이용한 분석들은 상대적으로 쉽게 확인을 할 수가 있었지만 레지스트리는 마지막 쓰여진 시간을 확인하기도 해야하며 직접 어떻게 타임라인이 진행되었는지를 알아야 하기에 다소 복잡하게 느껴질 수도 있다. 하지만 반복적으로 다른 키들을 분석하더라도 방법은 유사하기에 직접 분석을 진행해보면 더욱 좋을 것 같다.


Reference

http://mr-zero.tistory.com/103

http://forensic-proof.com/archives/5945





'Forensic > Theory' 카테고리의 다른 글

Retrieving Digital Evidence : Methods, Techniques and Issues  (0) 2015.10.06
Extract $MFT  (0) 2015.10.03
USB Artifacts 관련 정리 - 150930  (0) 2015.09.30
Project Spartan Forensic - Edge  (0) 2015.09.30
윈도우 아티팩트 요소  (0) 2015.09.28