Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic

664 views

Published on

PyCon KR 2018에서 발표한 자료입니다.
자료에 대한 문의는 아래의 Email을 참조해주시기 바랍니다.
E-Mail : digitalisx99@gmail.com

Published in: Technology
  • Be the first to comment

[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic

  1. 1. 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic
  2. 2. 해당 세션은 초급 세션입니다. Python의 기본적인 문법들에 기반하여 설명될 예정입니다. 조금 더 난이도 있는 내용을 원하시는 분에겐 부적절할 수 있습니다. 본 발표 자료는 개인적인 의견과 경험에 기반하여 관련 분야 전문가들의 견해와는 다를 수 있습니다. 유의 사항
  3. 3. 김 동 현 2017 ~ (현재) 아주대학교 2학년 (정보 통신 및 보안 연구실, Digital Forensic Assistant) 2018 ~ (현재) SW 특성화 대학 주관 교육 사업 – Python Mentor 2016 ~ 2017 디지털 포렌식 관련 강의 다수 (국가 기관, 대학교, 컨퍼런스, …) 2015 ~ 2016 National Security Education Institute (Attack & Defense) • 관심 분야 : Digital Forensic, Incident Response, Malware Analysis • Email : digitalisx99@ajou.ac.kr
  4. 4. 디지털 포렌식이 무엇이고, 또 어떻게 이뤄지는지
  5. 5. 디지털 포렌식이란? + 6 디지털 방식이 사용되는 매체로부터 정보를 수집하고 분석하여 유의미한 결과를 도출하는 행위 및 기술
  6. 6. 디지털 포렌식이 사용되는 경우 • 개인의 디지털 기기의 사용률이 높은 만큼, 범죄도 디지털 기기를 경유하는 경우가 매우 많음 • 범죄 사건 외에 내부 감사 및 침해사고 대응에서도 디지털 포렌식 기술이 사용됨 7
  7. 7. 근데 프로그래밍이나 파이썬을 쓰는 이유라도 있나요?
  8. 8. 디지털 포렌식에서 프로그래밍의 필요성 9 인간이 실현 하기에 많은 시간이 소요 되는 일 및 반복적인 일을 대신하기 위해
  9. 9. 디지털 포렌식에서 의 필요성 Life is short, You need Python 10
  10. 10. 좋아요, 이젠 정확히 뭘 할 수 있는지 알아 봅시다.
  11. 11. 디지털 포렌식 절차 12 준비 ( ) 수집 ( ) 조사 분석 ( ) 보고서 ( ) • 관련 교육 • 도구 개발 및 검증 • 인력 양성 • 수집 대상 선정 • 디스크 이미징 • 증거물 포장 • 데이터 추출 • 데이터 분류 • 데이터 분석 • 객관적 내용 • 분석 과정 • 분석 소견
  12. 12. 수집 대상 기기 13 • 데이터를 저장하는 기기에 대해서는 대부분 수집 가능 • 다만 사건의 유형에 따라 수집 대상이 달라질 수는 있음 (DDOS 공격 혹은 전산망 테러) • 기기의 등장으로 관련 연구도 활발하게 진행되는 중 분석해야 하는게 늘었다는 말이다.
  13. 13. 이미징 및 분석 과정 14 원본 (Original) 빈 저장매체 사본 (Copy) Imaging Machine 분석용 PC 분석 보고서
  14. 14. 주요 분석 정보 15 보관 증거 생성 증거 SNS, 작성 문서 시간 정보, 기타 정보 Artifact
  15. 15. 의 다양성과 한계 • 운영체제마다 의 종류와 성격이 다름 • 해당 세션에서는 으로 쉽게 접근할 수 있는 만을 다룰 예정 16
  16. 16. 포렌식의 기본, 를 알아본다.
  17. 17. 소개 18 • 에서 제공하는 로 혹은 에 대한 정보와 설정이 포함되어 있다. • 가장 큰 Hive 아래에 여러 개의 Key 그에 대응하는 Value와 Data로 이루어져 있다. Hive Key Value Data HKEY_CURRENT_USER Software/Google/Info InstalledVersion 1.0.2.4
  18. 18. 아래아 한글 관련 19 • 가장 최근에 열람한 문서들을 저장함 •
  19. 19. 아래아 한글 추출 예제 20 #-*- coding:utf-8 -*- import winreg reg_path = r"SoftwareHncCommon9.6CommonFrameRecentFile" reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path) print("[+] HWP RecentFile Viewer") try: count = 0 while 1: value, data, type = winreg.EnumValue(reg_key, count) if isinstance(data, int): pass else : print("[!] " + value + " - " + data.decode('UTF-16')) count = count + 1 except WindowsError: exit() Key 접근 함수 접근 한 키에 대한 데이터 조회 함수 데이터 디코딩
  20. 20. 예제 실행 결과 및 실제 사례 21 예제 ( ) 실행 결과 관련 Artifact 실제 수집 & 조사 사례 Similar Case (XLS, PPTX, DOCX)
  21. 21. 오늘 어떤 곳을 방문했나?
  22. 22. 소개 23 • 사용자가 방문한 사이트 / 검색 기록 등을 통해 경위 파악 가능 • 사용량이 많은 과 국내 개발 웹 브라우저 구조가 거의 동일 ( )
  23. 23. 파일 분석 • 사용자 계정 명 • Chrome Browser와 관련된 Artifact는 대부분 SQLite DB 형식을 지님 24
  24. 24. 탐색 예제 25 #-*- coding:utf-8 -*- file_signature = b'SQLite format' file_name = input("[+] Input File Name : ") with open(file_name, "rb") as file: file_header = file.read(16) search_result = file_header.find(file_signature) if(search_result != -1): print("[!] Found File Signature") print("[!] File Signature : %s" % file_signature) else: print("[!] Not Found File Signature") Read Binary (이진 모드) 1 Byte 단위로 읽음 헤더에 찾고자 하는 시그니처가 존재하는지 탐색
  25. 25. 파일 내부 분석 • 등 다양한 존재 • 내부에 정보를 담고 있는 들 존재 26
  26. 26. 에서 기록 추출 예제 27 #-*- coding:utf-8 -*- import os import sqlite3 history_path = 'C:UsersDonghyun KimDesktopHistory' if os.path.isfile(history_path): sql_con = sqlite3.connect(history_path) sql_cur = sql_con.cursor() sql_cur.execute("SELECT * FROM downloads ORDER BY id DESC") count = 0 print("[+] Recent Download File") while(count < 15): count += 1 search_data = sql_cur.fetchone() download_path = search_data[2] if(download_path == ""): download_path = "Download Cancel" print("[!] Download Path : %s" % download_path) SQLite DB 연결 및 Query 실행 다음 데이터로 이동
  27. 27. 예제 실행 결과 및 실제 사례 28 실행 결과 실행 결과
  28. 28. 이거 믿어도 되나요? 조작은 아니죠?
  29. 29. Hash 함수? 30 • 정보보안 측면에서는 비밀번호, 전자 서명에 사용 • 디지털 포렌식 분야에서는 증거의 무결성을 증명 F82744475AB73B6581BAF18EC0FAC8F5 7FE708ECC2F925BC9A81F5BB1AEF7FCF
  30. 30. 31 #-*- coding:utf-8 -*- import hashlib file_name = input("[!] Input File Name : ") with open(file_name, "rb") as file: file_content = file.read() print("MD5 : %s" % hashlib.md5(file_content).hexdigest()) print("SHA1 : %s" % hashlib.sha1(file_content).hexdigest()) print("SHA256 : %s" % hashlib.sha256(file_content).hexdigest()) 읽어 들인 File Content를 Argument로 Hash 함수 계산 16진수 형태로 표현 대상 함수 계산 예제
  31. 31. 예제 ( ) 실행 결과 32 관련 Artifact 실제 수집 & 조사 사례 예제 실행 결과 및 실제 사례
  32. 32. 날고 기어 봐야 결국 손바닥 안 인 것을..
  33. 33. 의 정의 및 종류 34 • 범죄자들도 바보는 아닌지라.. 요즘 디지털 포렌식을 의식해 을 수행한다. • 물리적으로나 (디가우징, 천공 등), 소프트웨어적 초기화를 시도 (포맷) • 지만 후에도 복원이 가능한 경우도 존재함
  34. 34. 파일 관리 35 • : 파일을 관리하는 체계 • (할당) : 파일 시스템이 파일에게 사용가능한 영역을 부여하는 것 • (비할당 / 할당 해제) : 다른 파일들이 사용할 수 있는 상태이거나 사용중인 영역을 그러한 상태로 만드는 것 File Create File Delete Allocated Area Unallocated Area
  35. 35. 파일 카빙 방법 36 • 이를 방지하기 위해 비할당 영역을 위주로 카빙을 수행합니다. • 또한 카빙이 완벽한 수단이 될 수는 없습니다. 상황에 따라 천차만별입니다. 이런 식으로 모든 하드 디스크 영역을 탐색하면 오래 걸리지 않을까요?
  36. 36. 파일 예제 (일부분) 37 #-*- coding:utf-8 -*- class Carving(): def __init__(self, path): self.path = path self.FIRST_HEADER = b"ffd8ffe0" self.FIRST_FOOTER = b"ffd900" self.FIRST_EXTENSION = ".jpg" self.SECOND_HEADER = b"89504E47" self.SECOND_FOOTER = b"49454E44AE426082" self.SECOND_EXTENSION = ".png" 확장자에 대응되는 파일 정보 기입
  37. 37. 38 #-*- coding:utf-8 -*- MainImage.seek(int(offset)) while(1): data = MainImage.read(BUFF_SIZE) hex_data = binascii.hexlify(data) if(hex_data.find(self.FIRST_FOOTER) != -1): self.COPY_DATA += data print("[!] Find Footer : " + self.FIRST_EXTENSION) self.outfile_generator(self.FIRST_EXTENSION, offset, self.COPY_DATA) break 파일 예제 (일부분) 확장자에 대응되는 파일 정보 기입 Header에서 Footer까지의 Data 저장
  38. 38. 39 디스크 Carving 결과 디지털 포렌식 도구를 사용한 경우
  39. 39. 삽질의 결과를 담아 보낼 차례
  40. 40. 디지털 포렌식 분석 보고서 작성 • 사견이 들어가서는 안됨, 객관적인 데이터에 기반 • 검찰 규정이나 조직에 주어진 작성 규정을 준수하는 편 • 도구에 자동으로 분석 보고서를 제공하는 기능도 있지만, 활용성이 떨어지는 편 41
  41. 41. 증거 목록 작성 42 • 가끔은 형식으로 자료를 관리하고 을 내야할 때가 있음, 아님 다 른 곳에 연결해서 추가적인 다른 일을 한다든가.. • 에 기록하기에는 여간 귀찮은 것.. 뷰어가 없으면 서로 곤란 • 는 엑셀이나 텍스트 뷰어만 있어도 해결 가능
  42. 42. 기록 예제 43 #-*- coding:utf-8 -*- import csv import hashlib import os dest_folder = "C:UsersDonghyun KimDesktopAF100" refile = open('report.csv', 'w', encoding='utf-8', newline='') wr = csv.writer(refile) for file_name in os.listdir(dest_folder): real_path = dest_folder + file_name with open(real_path, "rb") as file: file_content = file.read() file_hash = hashlib.sha256(file_content).hexdigest() wr.writerow([real_path, file_hash]) refile.close() CSV 파일 생성 및 작성 관련 객체 리턴 파일 경로 및 Hash 함수 값 기록
  43. 43. 실행 결과 44 발표 예제 실행 결과 관련 Artifact 실제 수집 & 조사 사례
  44. 44. 보기 좋은 데이터가 분석하기도 좋은 법
  45. 45. 시각화의 필요성 • 시간 정보, 파일 정보, 작성자 등.. 텍스트의 난립, 봐야하는 양이 한 두개가 아니라는 것 • 수사관 및 분석가의 수고와 안구를 보호하기 위해 각종 시각화 기술들이 필요로 하기 시작함 46
  46. 46. 대중적인 라이브러리 사용 시도 • 요즘 에서 잘 알려진 시각화 라이브러리, • 그러나 과 연관된 데이터를 시각화 하기에는 무엇인가 부족함 • 100개의 PDF 파일보다 증거가 포함된 1개의 TXT 파일을 찾는 것이 더 중요 47
  47. 47. 에 기반한 웹 시각화 구성 48 • 웹 기반의 시각화에 관심을 두기 시작함 (간결함, 확장성, 예쁨) • 과 사이에 Data를 원활하게 주고 받고 연산할 수 있는 수단을 생각 • 그 결과, 주변 분들도 많이 사용하시는 에 도전해보기로 함
  48. 48. 에 기반한 49
  49. 49. 역시 내 손으로 만들어야 제 맛
  50. 50. 디지털 포렌식 도구 개발의 필요성 • 해당 과정을 으로 해주는 도구들이 존재하긴 함 • 그러나 뭔가 만족스럽지 못함.. 필요한 정보가 누락되기도.. • 솔루션이 비싸거나.. (기업 정부 대상이라 엄청 비쌈) 51
  51. 51. 디지털 포렌식 도구 개발 과정 52 구조 및 의미 파악 및 데이터 처리 코드 작성 데이터 시각화 검증 발생 신규 분석 Main Script Setting File Scenario Datasets
  52. 52. 디지털 포렌식 도구 개발 사례 : Digital Investigation Assist Tool 53
  53. 53. 54 도구 사용 스크린샷
  54. 54. 55 도구 사용 스크린샷
  55. 55. 오픈 소스에 기반한 디지털 포렌식 도구 ( ) 56 Link : https://github.com/google/grr Link : https://github.com/volatilityfoundation/volatility Link : https://github.com/log2timeline/plaso Link : https://github.com/JPCERTCC/LogonTracer • 과 디지털 포렌식과의 만남은 현재 진행형 일거리가 점점 사라지고 있다
  56. 56. 여러분께 드리는 마지막 메시지
  57. 57. 뭐 아무렴 이런 것들을 같은 기술로 편하게 분석하면 안되시냐고 물으시는데 한 사람의 죄와 벌, 그 판단의 무게가 무거운 만큼 결국 분석은 사람이 해야 합니다.
  58. 58. 이런 것이 분명 어렵고 힘든 일이지만.. 재미와 사명감 하나로 버티고 있습니다. 사실 늘어나는 해커들과 하드 용량에 저희 한 숨이 비례합니다.
  59. 59. 그런 저희와 함께 진실을 밝힘에 도움이 되어주는 에게 감사의 인사를 보냅니다. 현직에서 뛰고 있을 때도 을 계속 사용할 수 있길 바라고 있습니다.
  60. 60. 더 많은 것을 다루지 못해 아쉬울 따름 무궁무진한 흔적들과 그와 연관된 활용 방법
  61. 61. 많이 부족했지만 이번 세션을 통해서 조금이라도 얻은 게 있으셨다면 그걸로 만족합니다. 디지털 포렌식에 대해 알고, 으로 할 수 있다는 것만 알아도 충분!
  62. 62. Find Job! Thanks to • (산업기능요원 보충역) • • • • •
  63. 63. 질의 응답 Question & Answer
  64. 64. 감사합니다. Thank You! 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic

×