본문 바로가기

Security

포렌식 수사(메타데이터)

  1. 레지스트리의 무선 AP 분석

    - 윈도우 레지스트리

       >운영체제의 설정을 저장하는 데이터베이스로 무선 통신과 관련된 정보가 저장됨 

       > 레지스트리의 키의 위치와 의미에 따라 실제 노트북 컴퓨터가 어디에 있었는지 확인 가능

       > 윈도우(Vista 이후) HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList                                \Signature\Unamanged 밑 서브키에 각각의 네트워크를 저장함

       > 저장된 값을 통해 Guid, 네트워크 설명, 네트워크 이름, 게이트웨이 MAC 주소등의 정보를 얻을 수 있음

 

 

  2. WinReg로 윈도우 레지스트리 읽기

    - 레지스트리는 게이트웨이 MAC주솔르 REG_BINARY 타입으로 저장함    

주요 레지스트리 값의 종류
REG_SZ 일반문자열
REG_BINARY 이진수
REG_DWORD 32비트 정수
REG_QWORD 62비트 정수
REG_MULTI_SZ 다중 문자열 값
REG_EXPAND_SZ 확장 가능한 문자열

  - val2addr() : REG_BINARY값을 실제 MAC주소로 변환하는 함수

  - printNets()

     > _winreg 라이브러리 활용(레지스트리에 연결 후 OpenKey()함수를 통해 키를 열 수 있음(key의 네트워크 프로파일         정보를 가져올 수 있음)

     > 프로파일에는 ProfileGuid, Description, Source, DnsSuffix, FirstNetwork, DefaultGatewayMac등의 서브키가 있음

window에서 작동하는 레지스트리 네트워크값 받아오는 스크립트

 3. MAC 주소로 AP의 물리적 위치 파악하기

  - 여러 오픈소스와 상용 데이터베이스를 통해 무선 AP의 MAC주소를 가지고 AP의 물리적 위치를 출력 가능함

  - 위글닷넷을 활용하는 스크립트 만들기

     > 위글닷넷의 최초 페이지를 엶(http://wigle.net)

     > 위글에 로그인(http://wigle.net/gps/gps/main/login)

     > 위글에 특정 무선 SSID MAC주소를 쿼리(http://wigle.net/gps/gps/main/confirmquery/)

     > MAC 주소 쿼리를 캡쳐하면 HTTP POST의 netid 파라미터에 AP의 GPS를 요청하는 MAC주소가 포함되어 있음

     > 응답에는 GPS좌표가 포함되어 있으며, maplat, maplon 변수를 통해 AP의 위도와 경도를 알 수 있음

 

  # 위글을 통해 물리적위치를 알 수 있는 스크립트 

    - mechanize를 통해 실체를 만든 후 위글 닷넷의 시작페이지를 엶

    - 사용자의이름과 패스워드를 파라미터로 인코딩한 후 로그인 함

    - netid를 파라미터로하여 데이터베이스를 검색하도록 HTTP POST를 전송함

    - 검색 결과 중 maplat=과 maplon= 부분을 찾아서 위도와 경도를 얻어 튜플(tuple)로 반환함

      

 

 

4. 메타데이터

 1) PyPDF로 PDF 메타데이터 분석하기

   - ANONOPS_The_Press_Release.pdf라는 문서 다운로드

  - PYPDF : PDF문서를 관리에 유용한 유틸리티로 문서정보추출, 문서분할, 통합, 잘라내기, 암호화, 해독기능을 제공함

  - getDocumentInfo() : 메타데이터를 가져옴(이 메소드는 메타데이터 요소의 설명과 값이 포함되어 있는 튜플의 배열      을 반환함) > 튜플을 통해 PDF문서의 모든 메타데이털르 출력 가능

 

pdfRead.py

>> 하지만 pyPdf가 import 되지 않아 실행되지 않음...

 

 

2) Exif 메타데이터 이해하기

  - Exif(Exchange Image File Format, 교환 이미지 파일 형식) 표준은 이미지 및 오디오 파일을 저장하는 방법에 대해 정      의함

  - Exif 태크를 조사하려면 분량이 매우 많기 때문에 축약된 버전으로 살펴봄

  - 사진의 위치정보와 같이 메타데이터는 악의정인 용도로도 사용 가능함

  - beautiful Soup

    > HTML과 XML 문서를 빠르게 구문분석 할 수 있음

    > urllib2 라이브러리를 사용하여 문서를 엶

    > beautifulsoup 객체 생성, 이 객체에서 .findall("img")메소드를 사용하여 모든 이미지 태그 추출

    > 이미지 태그에서 소스 주소를 가져와 이미지의 바이너리 콘텐츠를 변수로 불러들임

    > "write-binary"모드로 파일을 열어서 이미지의 콘텐츠를 파일로 씀

 

3) 파이썬 이미지 라이브러리로 이미지의 Exif 메타데이터 읽어오기

  - PIL : 이미지 처리기능(in python)

  - _getexif() : 파일의 메타데이터를 테스트하기 위해 객체를 PIL 이미지로 엶

  - Exif 데이터를 배열로 처리하고 메타데이터 타입으로 인덱스화 함.

  - 배열이 완료되면 GPSInfo가 있는 Exif 태그가 있는 지 배열을 검색함(GPS 메타데이터의 존재 여부를 알 수 있음)

exiffetch.py

>> URL 주소에 연결하여 모든 이미지 파일을 구문분석 및 다운로드 한 후 Exif 메타데이터의 존재 여부를 각 파일을 대상으로 테스트할 수 있게 됨(http://www.flickr.com/photos/dvids/4999001925/sizess/o)

>> 테스트 결과 이미지 중 하나에 GPS 메타데이터 정보가 있는 것을 알 수 있음

>> 공격자들이 사이트를 공격하기 전에 취약점이 있는지의 여부를 확인 가능

 

5.  파이썬으로 애플리케이션 사용흔적 수사하기

  - SQLite 데이터베이스를 사용하는 데이터들을 활용함

    (SQLite : 프로그래밍 언어로부터 독립적으로 바인딩하기 때문에 많은 애플리케이션, 특히 웹 브라우저의 로컬/클라         이언트 스토리지로써 인기가 많음, 클라이언트/서버 관계가 아닌 전체를 하나의 파일로 호스트에 저장함)

 

   # 스카이프 Sqlite3 데이터베이스 이해하기

    - SQLite 데이터베이스 사용

sqlite3 패키지 사용
debian용 skype 다운로드

https://www.blackmoreops.com/2014/02/26/install-skype-in-kali-linux/

 

Install Skype in Kali Linux

Skype is a freemium voice-over-IP service and instant messaging client, currently developed by the Microsoft Skype Division. The name was derived from “sky” and “peer”. Skyp…

www.blackmoreops.com

 

 

 

SELECT tbl_name FROM sqlite_master WHERE type=="table"

 

 > SQLite 데이터베이스 중 sqlite_master라는 테이블에 tbl_name이라는 컬럼을 불러옴

 > 해당 테이블에는 연락처, 통화기록, 계정정보, 문자메시지 등이 담겨있음

 

SELECT fullname, skypename, city, county, datetime(profile_timestamp, 'unixepoch') FROM  accounts;

 

 > account 컬럼으로부터 해당 데이터를 불러옴

 

 

 

# 파이썬과 Sqlite3으로 스카이프 데이터베이스 쿼리 자동화하기

  * Accounts

  - SELECT 문을 실행하는 것보다 자동화하는 것이 더 많은 컬럼과 테이블 정보를 가져올 수 있음

  - printProfile() : main.db 데이터베이스와 연결을 생성후 프롬프트를 요구하고 SELECT문을 실행함

  - SELECT 문의 결과는 array of arrays(배열의 배열)를 반환함

  - 반환된 결과마다 사용자, 스카이프 사용자이름, 위치, 프로파일 날짜에 대한 컬럼이 인덱스화 되어 있음

printProfile.py

  * Contacts

   - 이름, 스카이프 사용자이름, 위치, 휴대전화, 생일 정보가 저장되어 있음

  * 두 개의 테이블 동시 출력

   - Calls 테이블 + Conversations

   -  "SELECT datetime(begin_timestamp, 'unixepoch'), identity FROM calls, conversations WHERE calls.conv_dbid =           conversations.id";

 

  6. 파이썬으로 파이어폭스 Sqlite3 데이터베이스 구문분석하기

   - download.sqlite

      > 파이어폭스 사용자가 다운로드한 파일에 대한 정보가 있음

      > moz_downloads라는 테이블 단 하나만 저장되어 있음

         (파일이름, 다운로드한 사이트, 다운로드한 날짜, 파일 크기, 파일 저장한 위치 등이 저장되어 있음)

 

  # 수사관이 인증이 필요한 사이트로 다시 로그인 하고 싶을 때(접근하기 위한 패스웓나 인증정보 없을 때)

   - 쿠키활용(HTTP 프로토콜은 설계적으로 상태를 유지하지 않음)

   - moz_cookies 테이블에서 호스트, 이름, 쿠키 값과 관련된 컬럼을 쿼리 후 출력함

   - places.sqlite db : 방문기록 저장

   - URL의 검색어 추출

     > 방문기록 URL에 Google 중, q=와 &(검색어를 표시하는 문자들)가 있는 지 검색

     > 검색어를 찾는 다면 URL에 있는 문자를 일부 교체하고 공백을 실제 공백으로 바꿔서 결과값을 깔끔하게 만듦

     > 최종적으로 수정된 결과값을 화면에 출력함

printCookies()
printHistory()
printGoogle()
main()

 7. 파이썬으로 iTunes 백업 조사하기

  - iOS가 기기의 GPS좌표를 추적하고 consolidated.db에 데이터를 저장하고있음

  - 데이터베이스 안의 Cell-Location이라는 테이블에는 전화기가 수집한 GPS포인트가 저장되어있음

     > 기기는 주변에 있는 휴대전화 송수신 타워를 기반으로 삼각 측량을 실시하여 위치를 파악함

  - 악의적인 목적으로 사용 가능

  (현재는 해당 기능이 제거됨)

  - 백업 파일 분석

     > file * : 각 파일의 파일 타입을 가져옴

     > 스크립트를 통해 디렉터리의 콘텐츠를 열거하고 각 파일에 데이터베이스 연결을 시도함

     > 연결 성공시 - SELECT tbl_name FROM sqlite_master WHERE type=='table' 실행

 

  - 모바일 백업 디렉터리에 있는 모든 데이터베이스의 구조를 열거하는 스크립트

  - 문자메시지가 저장되어 있는 SQLite db가 어떤 것인지 판단하는 스크립트

- 날짜, 주소, 문자메시지를 출력하는 스크립트

  " SELECT datatime(date, \'unixepoch\'), address, text from message WHERE address>0; "