Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Avatar for Donghyun Kim Donghyun Kim
August 14, 2018
230

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

PyCon KR 2018에서 발표한 자료입니다.

Avatar for Donghyun Kim

Donghyun Kim

August 14, 2018

Transcript

  1. 해당 세션은 초급 세션입니다. Python의 기본적인 문법들에 기반하여 설명될 예정입니다.

    조금 더 난이도 있는 내용을 원하시는 분에겐 부적절할 수 있습니다. 본 발표 자료는 개인적인 의견과 경험에 기반하여 관련 분야 전문가들의 견해와는 다를 수 있습니다. 유의 사항
  2. 김 동 현 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 : [email protected]
  3. 디지털 포렌식이란? + 6 • Digital : 디지털 방식이 사용되는

    • Forensic : 범죄를 밝혀 내기 위해 사용되는 과학적 수단 및 기술
  4. 주요 사건 타임 라인 세월호 침몰 사고 박근혜 – 최순실

    게이트 드루킹 여론 조작 사건 양승태 전 대법원장 PC 디가우징 “B” 가상화폐 거래소 도난 사고 국군기무사령부 계엄령 문건 파문 • 개인의 디지털 기기의 사용률이 높은 만큼, 범죄도 디지털 기기를 경유하는 경우가 매우 많음 • 범죄 사건 외에 내부 감사 및 침해사고 대응에서도 디지털 포렌식 기술이 사용됨 7
  5. 오픈 소스에 기반한 디지털 포렌식 도구 ( ) 11 Link

    : https://github.com/google/grr Link : https://github.com/volatilityfoundation/volatility Link : https://github.com/log2timeline/plaso Link : https://github.com/JPCERTCC/LogonTracer • 과 디지털 포렌식과의 만남은 현재 진행형 일거리가 점점 사라지고 있다
  6. 디지털 포렌식 절차 13 준비 ( ) 수집 ( )

    조사 분석 ( ) 보고서 ( ) • 관련 교육 • 도구 개발 및 검증 • 인력 양성 • 수집 대상 선정 • 디스크 이미징 • 증거물 포장 • 데이터 추출 • 데이터 분류 • 데이터 분석 • 객관적 내용 • 분석 과정 • 분석 소견
  7. 수집 대상 기기 14 • 데이터를 저장하는 기기에 대해서는 대부분

    수집 가능 • 다만 사건의 유형에 따라 수집 대상이 달라질 수는 있음 (DDOS 공격 혹은 전산망 테러) • 기기의 등장으로 관련 연구도 활발하게 진행되는 중 분석해야 하는게 늘었다는 말이다.
  8. 이미징 및 분석 과정 15 원본 (Original) 빈 저장매체 사본

    (Copy) Imaging Machine 분석용 PC 분석 보고서
  9. 의 의미 • 생성 증거 (Artifact) : 사용자가 시스템과 상호

    작용하며 자동으로 생성된 데이터 • 보관 증거 : 사용자가 작성한 내용 (문서, SNS 등) 17 누가 작성했는지 정확히 파악 불가 Artifact를 통해 증명
  10. 의 종류 • 운영체제마다 의 종류와 성격이 다름 • 해당

    세션에서는 으로 쉽게 접근할 수 있는 만을 다룰 예정 18
  11. 소개 20 • 에서 제공하는 로 혹은 에 대한 정보와

    설정이 포함되어 있다. • 와 같은 구조로 이루어져 있으며, 연결 기록이나 기록, 계정 정보 등이 포함되어 있다.
  12. #-*- coding:utf-8 -*- import winreg reg_path = r"Software\\Hnc\\Common\\9.6\\CommonFrame\\RecentFile" reg_key =

    winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path, 0, winreg.KEY_READ) print("[+] HWP RecentFile Viewer") try: count = 0 while 1: name, value, type = winreg.EnumValue(reg_key, count) if isinstance(value, int): pass else : print("[!] " + name + " - " + value.decode('UTF-16’)) count = count + 1 except WindowsError: pass
  13. 소개 25 • 사용자가 방문한 사이트 / 검색 기록 등을

    통해 경위 파악 가능 • 사용량이 많은 과 국내 개발 웹 브라우저 구조가 거의 동일 ( )
  14. 파일 분석 • 사용자 계정 명 • Chrome Browser와 관련된

    Artifact는 대부분 SQLite DB 형식을 지님 26
  15. #-*- 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")
  16. #-*- coding:utf-8 -*- import os import sqlite3 history_path = 'C:\\Users\\Donghyun

    Kim\\Desktop\\History' 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)
  17. Hash 함수? 31 • 정보보안 측면에서는 비밀번호, 전자 서명에 사용

    • 디지털 포렌식 분야에서는 증거의 무결성을 증명
  18. #-*- 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())
  19. Hash Generate Script 실행 결과 33 • 과 의 사용에

    있어 많은 문제가 제기 되고 있음 • 이를 해결하기 위해 교차 검증 혹은 조금 더 안전한 해시 함수 사용을 권고 은 연산이 오래 걸릴 텐데 왜 쓰는 건가요?
  20. 35 • 범죄자들도 바보는 아닌지라.. 요즘 디지털 포렌식을 의식해 을

    수행한다. • 물리적으로나 (디가우징, 천공 등), 소프트웨어적 초기화를 시도 (포맷) • 지만 후에도 복원이 가능한 경우도 존재함
  21. 파일 카빙 방법 37 • 이를 방지하기 위해 비할당 영역을

    위주로 카빙을 수행합니다. • 또한 카빙이 완벽한 수단이 될 수는 없습니다. 상황에 따라 천차만별입니다. 이런 식으로 모든 하드 디스크 영역을 탐색하면 오래 걸리지 않을까요?
  22. #-*- 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"
  23. #-*- 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
  24. 디지털 포렌식 분석 보고서 작성 • 사견이 들어가서는 안됨, 객관적인

    데이터에 기반 • 검찰 규정이나 조직에 주어진 작성 규정을 준수하는 편 • 도구에 자동으로 분석 보고서를 제공하는 기능도 있지만, 활용성이 떨어지는 편 42
  25. 증거 목록 작성 43 • 가끔은 형식으로 자료를 관리하고 을

    내야할 때가 있음, 아님 다 른 곳에 연결해서 추가적인 다른 일을 한다든가.. • 에 기록하기에는 여간 귀찮은 것.. 뷰어가 없으면 서로 곤란 • 는 엑셀이나 텍스트 뷰어만 있어도 해결 가능
  26. #-*- coding:utf-8 -*- import csv import hashlib import os dest_folder

    = "C:\\Users\\Donghyun Kim\\Desktop\\AF100\\" 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()
  27. 시각화의 필요성 • 시간 정보, 파일 정보, 작성자 등.. 텍스트의

    난립, 봐야하는 양이 한 두개가 아니라는 것 • 수사관 및 분석가의 수고와 안구를 보호하기 위해 각종 시각화 기술들이 필요로 하기 시작함 47
  28. 대중적인 라이브러리 사용 시도 • 요즘 에서 잘 알려진 시각화

    라이브러리, • 그러나 과 연관된 데이터를 시각화 하기에는 무엇인가 부족함 • 100개의 PDF 파일보다 증거가 포함된 1개의 TXT 파일을 찾는 것이 더 중요 48
  29. 에 기반한 웹 시각화 구성 49 • 웹 기반의 시각화에

    관심을 두기 시작함 (간결함, 확장성, 예쁨) • 과 사이에 Data를 원활하게 주고 받고 연산할 수 있는 수단을 생각 • 그 결과, 주변 분들도 많이 사용하시는 에 도전해보기로 함
  30. 디지털 포렌식 도구 개발의 필요성 • 해당 과정을 으로 해주는

    도구들이 존재하긴 함 • 그러나 뭔가 만족스럽지 못함.. 필요한 정보가 누락되기도.. • 솔루션이 비싸거나.. (기업 정부 대상이라 엄청 비쌈) 52
  31. 디지털 포렌식 도구 개발 과정 53 구조 및 의미 파악

    및 데이터 처리 코드 작성 데이터 시각화 검증 발생 신규 분석 Main Script Setting File Scenario Datasets
  32. 54 디지털 포렌식 도구 검증 • 도구 검증을 위한 데이터

    세트 개발 및 시나리오 구상에 대한 전문적인 연구와 사이트를 활용
  33. 디지털 포렌식 학습 방법 59 • 정부기관 및 기업에서 주관하는

    교육 프로그램 (KITRI BoB, K-Shield) • 인터넷에 존재하는 고수 님들의 글, 논문 (DFRWS) • 유료 강의 사이트
  34. 뭐 아무렴 이런 것들을 같은 기술로 편하게 분석하면 안되시냐고 물으시는데

    한 사람의 죄와 벌, 그 판단의 무게가 무거운 만큼 결국 분석은 사람이 해야 합니다.
  35. 이런 것이 분명 어렵고 힘든 일이지만.. 재미와 사명감 하나로 버티고

    있습니다. 사실 늘어나는 해커들과 하드 용량에 저희 한 숨이 비례합니다.
  36. 그런 저희와 함께 진실을 밝힘에 도움이 되어주는 에게 감사의 인사를

    보냅니다. 현직에서 뛰고 있을 때도 을 계속 사용할 수 있길 바라고 있습니다.
  37. 많이 부족했지만 이번 세션을 통해서 조금이라도 얻은 게 있으셨다면 그걸로

    만족합니다. 디지털 포렌식에 대해 알고, 으로 할 수 있다는 것만 알아도 충분!