no image
Write Protection - Registry Setting
쓰기 방지 외부 장치를 연결하여 해당 장치를 분석하고자 할 경우 해당 볼륨에 파일이나 디렉터리를 생성, 변경, 삭제 하지 않는 이상 흔적이 남지 않는 줄 알았다. 하지만 직접 해본 결과, 연결 후 몇 가지 읽기 작업만 했을 뿐인데, $MFT, $LogFile, $UsnJrnl 등을 통해 확인할 수가 있었다. 따라서 외부 장치를 연결하여 분석하고자 할 때 무결성을 최대한 유지하기 위하여 쓰기 방지 작업을 선행하여야 한다. 쓰기 방지를 위한 툴들이 존재하지만 간단한 방법을 통해 쓰기 방지를 설정하는 방법에 대하여 알아보자. 여기서 사용할 방법은 레지스트리를 이용한 방법이다. 레지스트리 편집을 위해 Win+R에 regedit를 입력하여 레지스트리 편집기를 실행하자. 위 그림의 경로 HKLM\System\Cur..
2016.01.17
no image
Windows USB Autorn 설정
USB 자동실행 방지 USB가 대중화된 시점에 USB를 꽂으면 자동적으로 실행되는 AutoRun을 통해 악성코드가 유포되기도 한다. 이러한 USB 자동실행을 방지하기 위하여 설정하는 방법에 대하여 간략히 알아보자. 윈도우 + R을 통해 'gpedit.msc'를 입력해주자. 그렇다면 아래와 같은 창이 뜨는 것을 확인할 수가 있다. 여기서 우리가 찾아 들어가야 할 곳은 'Administrative Templatres'이다. 해당 부분에 들어가 윈도우 구성 요소인 'Windows Components'에 들어가 'AutoPlay Policies'에 들어가보자. 위의 그림과 같이 Turn off Autoplay이 항목이 존재하고 있는 것을 확인할 수가 있다. 저 부분이 바로 AutoRun의 실행 여부를 담당하고 ..
2016.01.04
no image
Practice USB Artifacts
개요 USB와 관련된 아티팩트를 공부하며 직접 실습을 해보면서 어느 부분이 제대로 동작하는지, 이번 실습을 통하여 추후에 다시 학습을 할 수 있도록 하기 위하여 포스팅을 진행한다. 많은 USB 관련 Registry가 존재하지만 여기서는 몇개만 선출하여서 어떻게 동작하는지를 확인할 것이다. 전체적인 타임라인은 아래와 같다. 크게 세 부분으로 나누었으며 USB를 최초 연결한 시간과 최초 연결로부터 분리한 시간, 그리고 마지막으로 USB의 마지막 접근 시간을 파악하기 위하여 재연결 시간 또한 확인을 하였다. 해당 포스팅은 아래의 타임라인을 중심으로 진행이 되며 이러한 타임스탬프가 변조되지 않았다는 전제하에 분석을 계속 진행할 것이다. 최초 연결 시간 USB를 최초 연결하여 기존의 레지스트리에 변화가 있는지를 ..
2015.10.01
no image
USB Artifacts 관련 정리 - 150930
Practice Last Connection Time - Last Written time in registry key 마지막 연결 시간을 확인하기 위하여 직접 USB를 새로 연결해보았다. 그리고 근처 시간의 레지스트리 타임스탬프를 검색해본 결과 위와 같이 USB와 관련된 항목 3가지를 발견할 수가 있었다. 그리고 왼쪽 탭에서와 같이 마지막으로 쓰여진 시간이 일치한 것을 확인할 수가 있다. 따라서 조사할 PC의 해당 경로에서 해당 타임스탬프를 확인하면 마지막으로 USB를 연결한 시간이 언제인지를 확인할 수가 있을 것이다. 장치 연결 흔적 확인 - 이벤트 로그USB와 같은 장치를 연결하면 윈도우는 장치로부터 드라이버를 받아 설치하거나 이미 있다면 기존 드라이버를 로드시키고, 연결 해제 시 드라이버를 언로드 ..
2015.09.30
Steal_Path.py in GitHub
os.path는 파일 경로를 생성 및 수정하고, 파일 정보를 쉽게 다룰 수 있게 해주는 모듈.os.path.exists(path) : 해당 경로가 존재할 경우 True를 반환하며 없을 경우 False 반환 os.system(command)를 실행하며, 성공한 경우 0을 반환합니다.이것을 이용하여 파일을 복사할수도 있다. os.listdir(path)해당 경로(path)에 존재하는 파일과 디렉터리들의 리스트를 반환합니다. shutil.copy(src, dst)src라는 이름의 파일을 dst로 복사한다. 만약 dst가 디렉토리 이름이라면 src라는 파일이름으로 dst이라는 디렉토리에 복사하고 그 이름이 존재하면 덮어쓰게 된다.import shutilshutil.copyfile('smp.txt','smp_1...
2015.02.26

쓰기 방지


  외부 장치를 연결하여 해당 장치를 분석하고자 할 경우 해당 볼륨에 파일이나 디렉터리를 생성, 변경, 삭제 하지 않는 이상 흔적이 남지 않는 줄 알았다. 하지만 직접 해본 결과, 연결 후 몇 가지 읽기 작업만 했을 뿐인데, $MFT, $LogFile, $UsnJrnl 등을 통해 확인할 수가 있었다. 따라서 외부 장치를 연결하여 분석하고자 할 때 무결성을 최대한 유지하기 위하여 쓰기 방지 작업을 선행하여야 한다.

  쓰기 방지를 위한 툴들이 존재하지만 간단한 방법을 통해 쓰기 방지를 설정하는 방법에 대하여 알아보자. 여기서 사용할 방법은 레지스트리를 이용한 방법이다. 레지스트리 편집을 위해 Win+R에 regedit를 입력하여 레지스트리 편집기를 실행하자.

  위 그림의 경로 HKLM\System\CurrrentControlSet\Control\StorageDevicePolicies 를 확인해보자. 위와 같이 WriteProtect라는 항목이 존재하고 있는 것을 확인할 수가 있다. 현재 값이 0으로 설정되어 있는 것을 확인할 수가 있다. 만약 값이 1일 경우 외부 장치를 연결하였을 때 쓰기 방지를 통하여 쓰기 작업을 할 수가 없다.

  만약 위의 그림과 같이 "StorageDevicePolicies"라는 항목이 없을 경우 명령어를 통해 추가해주어야한다. 관리자 권한으로 CMD를 실행 시킨 뒤, 다음과 같은 명령어를 입력해주면 된다.

Admin>reg add "HKLM\System\CurrentControlSet\Control\StorageDevicePolicies" /t Reg_dword /v WriteProtect /f /d 1


  값이 1로 설정되면 외부 장치 쓰기 방지가 설정된 것으로 기존과는 다르게 파일의 복사하여 외부 장치에 옮기려 할 경우 아래와 같이 출력되는 것을 확인할 수가 있다. "The disk is write-protected"라는 문구를 확인할 수가 있다.



'O / S > Window' 카테고리의 다른 글

Windows Boot Process (Vista 이상ver 부팅 과정)  (0) 2016.04.13
CSIDL 값  (0) 2016.02.20
Windows USB Autorn 설정  (0) 2016.01.04
Windows 10 _HANDLES_TABLE, _HADNLES_TABLE_ENTRY  (0) 2015.11.09
Control registers - wiki  (0) 2015.11.07

USB 자동실행 방지


 USB가 대중화된 시점에 USB를 꽂으면 자동적으로 실행되는 AutoRun을 통해 악성코드가 유포되기도 한다. 이러한 USB 자동실행을 방지하기 위하여 설정하는 방법에 대하여 간략히 알아보자.

 윈도우 + R을 통해 'gpedit.msc'를 입력해주자. 그렇다면 아래와 같은 창이 뜨는 것을 확인할 수가 있다. 여기서 우리가 찾아 들어가야 할 곳은 'Administrative Templatres'이다. 해당 부분에 들어가 윈도우 구성 요소인 'Windows Components'에 들어가 'AutoPlay Policies'에 들어가보자.

 위의 그림과 같이 Turn off Autoplay이 항목이 존재하고 있는 것을 확인할 수가 있다. 저 부분이 바로 AutoRun의 실행 여부를 담당하고 있는 정책 항목이다. 따라서 현재 No라고 설정이 되어 있는 것을 확인할 수가 있으므로 이 부분을 변경해주면 된다.

Not Configured를 Enabled로 변경해주면 USB를 꽂았을때 자동실행이 되는 일은 없게 된다.


'O / S > Window' 카테고리의 다른 글

CSIDL 값  (0) 2016.02.20
Write Protection - Registry Setting  (0) 2016.01.17
Windows 10 _HANDLES_TABLE, _HADNLES_TABLE_ENTRY  (0) 2015.11.09
Control registers - wiki  (0) 2015.11.07
_TEB, _PEB Windows 10  (0) 2015.11.05

개요


 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





Practice Last Connection Time - Last Written time in registry key



 마지막 연결 시간을 확인하기 위하여 직접 USB를 새로 연결해보았다. 그리고 근처 시간의 레지스트리 타임스탬프를 검색해본 결과 위와 같이 USB와 관련된 항목 3가지를 발견할 수가 있었다. 그리고 왼쪽 탭에서와 같이 마지막으로 쓰여진 시간이 일치한 것을 확인할 수가 있다.

 따라서 조사할 PC의 해당 경로에서 해당 타임스탬프를 확인하면 마지막으로 USB를 연결한 시간이 언제인지를 확인할 수가 있을 것이다.


장치 연결 흔적 확인 - 이벤트 로그


USB와 같은 장치를 연결하면 윈도우는 장치로부터 드라이버를 받아 설치하거나 이미 있다면 기존 드라이버를 로드시키고, 연결 해제 시 드라이버를 언로드 시킨다. 이와 같은 드라이버 이벤트는 다음 로그 파일에 기록된다.

  • %SystemRoot%\System32\winevt\Logs\Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx


Reference

해당 이벤트로그와 관련해서 더 자세하게 설명된 곳 : http://forensic-proof.com/archives/5945

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


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

Extract $MFT  (0) 2015.10.03
Practice USB Artifacts  (0) 2015.10.01
Project Spartan Forensic - Edge  (0) 2015.09.30
윈도우 아티팩트 요소  (0) 2015.09.28
LNK File ( Windows ShortCut)  (0) 2015.09.27



os.path는 파일 경로를 생성 및 수정하고, 파일 정보를 쉽게 다룰 수 있게 해주는 모듈.

os.path.exists(path) : 해당 경로가 존재할 경우 True를 반환하며 없을 경우 False 반환


os.system(command)

<command>를 실행하며, 성공한 경우 0을 반환합니다.

이것을 이용하여 파일을 복사할수도 있다.


os.listdir(path)

해당 경로(path)에 존재하는 파일과 디렉터리들의 리스트를 반환합니다.


shutil.copy(src, dst)

src라는 이름의 파일을 dst로 복사한다. 만약 dst가 디렉토리 이름이라면 src라는 파일이름으로 dst이라는 디렉토리에 복사하고 그 이름이 존재하면 덮어쓰게 된다.

import shutil

shutil.copyfile('smp.txt','smp_1.txt')


glob(pathname)

glob모듈은 해당 디렉토리내의 파일들을 읽어서 리스트로 돌려준다. *, ?등의 메타문자를 써서 원하는 파일만을 읽어들일 수도 있다.

다음은 C:/Python이란 디렉토리에 있는 파일중 이름이 Q문자로 시작하는 파일들을 모두 찾아서 리스트로 돌려준 예이다.

>>> import glob 

>>> glob.glob("C:/Python/Q*") 

['C:\Python\quiz.py', 'C:\Python\quiz.py.bak']     

>>>


참고 https://wikidocs.net/33

'Programming > Python' 카테고리의 다른 글

Key_logger.py in GitHub  (0) 2015.03.05
Del_file.py in GitHub  (0) 2015.03.02
Setup.py // Py2Exe 사용법  (0) 2015.02.26
Memo.py in GitHub  (0) 2015.02.26
Simple memo(Jump2Python)  (0) 2015.02.02