WebBrowser (Chrome)
Last updated
Last updated
Chrome history 는 사용자가 Chrome browser를 통해 접속한 웹 사이트와 관련된 데이터를 저장하는 중요한 아티팩트이다. 사용자가 어떤 사이트를 언제 어떻게 접속했는지 등을 포함하며, 침해사고 분석가나 포렌식 분석가가 사건을 조사하는데 유용하다. 이러한 데이터는 침해사고의 원인과 경로를 파악하는데 중요한 단서를 제공하고 사용자 혹은 공격자의 웹 사용 패턴 및 행위관련 프로파일링에 유용한 정보로 활용될 수 있다.
Chrome browser는 여러 운영체제에서 사용되지만, 운영체제 별로 저장되는 정보 및 구조가 다르지 않고 동일하며 저장되는 경로는 아래 표와 같다.
Chrome history는 SQLite 데이터베이스형식으로 저장되며 파일을 열어보면 아래 그림과 같이
“SQLite format 3(53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00)” 총 16바이트 길이의 시그니처가 나타난다.
해당 글 에서는 Chrome history 파일의 구조 중 시그니처 부분만 살펴보았으며, 데이터베이스 포맷의 상세한 내용은 다음 링크에서 확인이 가능하다.
데이터베이스 포맷을 가지고 있는 Chrome history는 여러 테이블로 구성되어 있으며, 주요 테이블은 다음과 같다.
visits : 각 URL 방문의 Timestamp, Referer 등이 저장되며 해당 테이블을 참조해 urls 테이블이 작성된다.
urls : 접속한 모든 URL을 포함하며, 제목, 방문 횟수, 마지막 방문 시간 등 여러 정보가 저장된다.
downloads : Chrome browser를 통해 다운로드 받은 모든 파일들의 저장 경로 등 여러 정보가 저장된다.
downloads_url_chains : downloads 테이블과 매칭하여 분석이 가능하며 파일이 다운로드 된 URL을 포함한다.
keyword_search_terms : 사용자가 Chrome browser를 사용하며 검색한 키워드들이 저장된다.
데이터 구조에서 확인할 수 있는 것 처럼 Chrome history 분석을 통해 얻을 수 있는 정보는 아래와 같다.
사용자의 인터넷 검색 기록 및 접속 URL
사용자가 Chrome browser 를 통해 다운로드한 파일
위를 기반으로 한 사용자의 패턴
※ Chrome browser 의 시크릿 모드 사용 시 위 행위 들은 기록되지 않는다.
urls 테이블은 여러 항목이 있지만, 침해사고 분석 관점에서 활용할 수 있는 항목들은 아래와 같다.
id
urls 테이블의 고유 식별 id
url
사용자가 접속한 URL
title
사용자가 접속한 URL의 HTML Title Tag
visit_count
접속 횟수 (동일 URL 접속 시 새로운 id로 기록되는게 아닌 visit_count 증가)
typed_count
방문 타입(URL 직접 입력 : 1, 그 외 0)
last_visit_time
사용자가 마지막으로 URL에 접속한 시간(WebKit Timestamp)
동일 URL 접속 시 마지막 접속 시간으로 갱신
type_count 컬럼은 사용자가 의도적으로 URL에 접속 했는지를 파악할 수 있는 중요한 정보이다.
해당 컬럼의 값이 “1” 이라면 사용자가 URL을 직접 입력하여 접속했음을 의미하며, 이는 의도적 행위인지, 광고성 리다이렉트 등의 결과인지 구분 할 수 있다.
last_visit_time 컬럼은 Webkit Timestamp 형식으로 기록된다. 이는 1601년 1월 1일 00:00:00 부터 경과된 시간을 마이크로초 단위로 측정한 시간 형식이다. 일부 블로그들에서 Unix Timestamp 형식으로 저장된다고 언급되지만, 이는 잘못된 정보이며, 아래 사이트를 통해 간단하게 변환 할 수 있다.
keyword_search_terms 테이블은 사용자가 검색 엔진을 통해 입력한 검색어를 기록하는 테이블로, urls 테이블의 id 컬럼과 keyword_search_terms 테이블의 url_id 컬럼을 매칭해 분석 할 수 있다. 이는 공식 문서 혹은 구글에서 공식적으로 공개한 자료에는 존재하지 않는 내용이다. 다만, 수차례 많은 실험과 다수의 분석가들이 해당 내용을 공개했다.
이를 통해 urls 테이블의 검색 기록과 keyword_search_terms 테이블을 연계하여 분석한다면 사용자의 검색 활동과 관련된 데이터를 추적하고 분석할 수 있다.
keyword_search_terms 테이블의 항목은 다음과 같다.
keyword_id
검색어의 고유 식별자
url_id
urls 테이블의 id와 매칭되어 있는 고유 식별 값
terms
사용자 검색 엔진에 입력한 실제 검색어가 저장되며, 사용자가 입력한 텍스트가 그대로 저장된다.
normalized_terms
terms 컬럼이 정규화되어 저장된다. (영어 대문자로 검색 시 소문자로 변환된 값이 저장되는 등)
downloads 테이블은 다운로드 된 파일에 관련된 정보가 저장되는 테이블이다. downloads 테이블에는 항목별 고유 id 컬럼이 존재하는데 이 값은 downloads_url_chains 테이블에 존재하는 id 컬럼과 매칭해 분석 할 수 있다. 이 점을 이용해 두 테이블을 연계분석 한다면, 다운로드 된 파일이 정확히 어떤 URL을 통해 다운로드 됐는지를 확인할 수 있다.
downloads 테이블의 항목은 다음과 같다.
id
downloads 테이블의 고유 id
current_path
다운로드 진행 중에 표시되는 현재 저장 경로
target_path
다운로드 완료 후 파일이 최종적으로 저장된 경로
start_time
다운로드 시작 시간(WebKit Timestamp)
end_time
다운로드 종료 시간(WebKit Timestamp)
received_bytes
다운로드 된 총 크기(byte)
total_byte
다운로드 파일의 총 크기(byte)
state
다운로드 상태(0: 진행 중, 1: 완료, 2: 일시 중지)
referrer
다운로드 요청이 발생한 페이지의 URL
Chrome history 아티팩트 외에도 동일 경로에는 다양한 아티팩트들이 존재한다. 이 아티팩트들은 Chrome history 데이터베이스 구조에는 포함되지 않지만, 연관성이 존재하며, 침해사고, 디지털포렌식 분석가에게 유용한 정보를 제공한다.
LoginData 아티팩트는 사용자가 로그인이 가능한 URL에 접속해 로그인에 성공한 ID 값들을 stats테이블에 저장한다. 다만, 모든 로그인 시도가 저장되는 것은 아니며, 정확한 저장 조건은 파악이 불가능 했다. 침해사고 분석 관점에서 LoginData는 공격자가 탈취한 서버, PC 내에 로그인 했던 계정 목록을 확보할 수 있는 중요한 아티팩트로 판단된다.
▶ 참고: DPAPI
LoginData 아티팩트는 DPAPI(Data Protection API)를 사용해 비밀번호를 암호화 한다. DPAPI는 윈도우에서 제공하는 암호화 API로, 사용자 계정 정보를 기반으로 데이터를 암복호화 하는 기능을 제공한다.
해당 글에서는 간단하게 설명하였으며, 보다 자세한 설명은 아래 링크를 참조하길 바란다.
아래 그림은 공개되어 있는 DPAPI 복호화 코드로 LoginData 복호화에 성공한 내역이다.
복호화에 관련된 보다 자세한 설명은 아래 링크를 참조하길 바란다.
Cookies는 Chrome browser를 통해 웹 사이트 방문, 혹은 방문 후 스크립트를 통해 생성된 Cookie 에 관련된 정보가 저장되어 있는 아티팩트이다. 침해사고 분석 관점에서 다양한 정보를 제공하며, 더 나아가 사용자의 웹 사이트 선호도 등 많은 정보를 획득할 수 있다.
Cookies 테이블의 항목은 다음과 같다.
creation_utc
쿠키 생성시간(Webkit Timestamp)
host_key
쿠키가 설정된 도메인
name
쿠키 이름
expires_utc
쿠키 만료 시간(Webkit Timestamp)
is_secure
쿠키 보안 설정 여부( 1 : True, 0 : False)
is_httponly
javascript와 같은 클라이언트 사이드 스크립트가 쿠키에 접근할 수 있는지 여부( 1 : True, 0 : False)
last_access_utc
쿠키 마지막 접근 시간(Webkit Timestamp)
source_port
쿠키가 생성된 페이지의 포트번호
source_type
쿠키 생성 방법( 1 : 페이지 접속 시 생성 , 2 : 페이지 접속 후 클라이언트 사이트 스크립트를 통해 생성)
has_cross_site_ancestor
크로스 사이트(cross-site) 요청에 의해 생성되었는지 여부 체크 ( 0 : 방문 도메인 에서 생성, 1 : 다른 도메인에 의해 생성)
Top Site는 사용자가 자주 방문하는 웹 사이트에 대한 사이트 목록이 저장되어 있다. 주목해야 하는 점은 url_rank 컬럼이며, 숫자가 낮을 수록 자주 방문한 사이트를 의미한다.
Shortcuts는 Top Site와 동일한 유형의 아티팩트로 사용자가 자주 방문하는 웹사이트에 대한 정보 및 자동완성과 관련된 정보를 저장하고 있다.
아래의그림처럼 “ㅋ”만 입력해도 자동 완성 단어로 “크롬원격” 이 나오게 되는데, 이 상태에서 자동완성 기능을 통해 페이지에 접근하면, 두 번째, 그림처럼 ShortCuts 아티팩트에 기록된다.
마찬가지로, 키보드에서 영어로 “zmfhadnjsrur” 이라고 검색해도 자동완성 기능을 통해서 “크롬원격” 으로 검색되어 ShortCuts 아티팩트에 기록된다.
Shortcuts 아티팩트의 omni_box_shrotcuts 테이블 내에는 여러 컬럼이 존재하지만, 침해사고 분석 관점에서 활용할 수 있는 항목들은 아래와 같다.
id
Shortcuts 데이터베이스 내 고유 식별 값
text
사용자가 입력한 텍스트, 검색어
fill_into_edit
자동완성 제안이 선택되었을 경우 검색창에 기록된 텍스트 ex)ㅋ 입력 → 크롬원격
url
사용자가 방문한 웹 사이트 URL
description
자동완성의 설명 부분으로 URL의 title이 기록됨.
last_access_time
해당 URL이 마지막으로 접근된 시간(Webkit Timestamp)
number_of_hits
해당 URL이 자동완성 제안으로 선택된 횟수, 값이 높을 수록 자주 선택된 URL
Bookmarks 는 Chrome browser 를 통해 웹 사이트를 방문한 뒤 북마크로 저장하거나, pdf파일 등을 열어 북마크로 저장했을 경우 기록되는 아티팩트이다. 본 아티팩트는 앞서 소개했던 아티팩트들과는 다르게 데이터베이스 구조가 아닌 json 구조를 가지고 있으며, 북마크 추가 시간, URL, 등이 있으며, 파일을 북마크에 추가했을 경우 로컬시스템 내 파일이 저장되어 있는 경로가 노출된다.
Bookmarks 파일의 항목은 다음과 같다.
date_added
Bookmark 추가 시간(Webkit Timestamp)
date_last_used
추가된 Bookmark 마지막 사용 시간(Webkit Timestamp)
guid
고유 식별값
name
Bookmark로 추가된 페이지의 HTML Title tag
url
Bookmark로 추가된 URL / 파일의 경우 로컬 시스템 내 파일 저장 경로
추천하는 첫 번째 도구는 DB Browser for SQLite 이다. 2014년 부터 꾸준히 개발되고 있고, Windows 환경뿐만 아니라 Linux, Mac 등 다양한 운영체제 호환, SQL Query 입력으로 대량의 데이터에서 원하는 데이터 추출이 가능하기 때문이다.
추가적인 설명이 필요하다면 아래 링크에서 확인이 가능하다.
추천하는 두 번째, 도구는 다양한 디지털 포렌식 관련 도구를 개발해 배포 중인 NiroSoft사의BrowsingHistoryView이다. 꾸준히 수정 및 업데이트가 이루어졌고, 여러 사용자들의 번역 덕분에 다양한 언어로 지원이 되며, Chrome browser 뿐만 아니라, IE, Firefox 등 여러 브라우저도 분석이 가능하다.
추가적인 설명이 필요하다면, 아래 링크에서 확인 가능하다.