02_파일 추출_ 실습-1
02_파일 추출
1. 실습-1
- 실습 파일 : dns.pcap
- 사용 도구 : Wireshark, SIFT3, dns.py
- 실습 내용 : DNS Query(dns.qry.name), DNS CNAME(dns.cname) 정보에 암호화된 기밀 문서(docx)를 전송한 상황
DNS쿼리 --> dns서버한테 www.naver.com 의 ip 는 뭐니 라고 묻는 것
1) 와이어샤크 분석
- 'dns.pcap' 파일을 와이어샤크로 오픈한다.
파일을 와이어샤크로 열어 확인해보니 query 와 qurey response를 주고 받는것을 확인할 수 있다.
Queries 와 Answers 를 들어가 Name 과 Cnam을 확인해보았더니 정상적인 사이트가 아니고 base32로 인코딩된것을 확인할 수 있다.
또한, 61번 DNS 패켓부터 패켓 크기가 증가되고 있다. 61번 기준으로 데이터를 많이 보낸듯함
- 이후의 패킷들을 확인하면, DNS Query와 DNS CNAME에 포함된 내용이 정상적인 DNS 요청/응답 내용이 아닌것을 확인할 수 있다.
Base32로 암호화된 내용들을 보내는것 같으므로, Query 와 Cname 들만 별도로 리눅스의 Tshark 를 이용하여 추출해보자.
2) DNS Query & DNS CNAME 추출
- SIFT3 리눅스에서 Tshark를 이용하여 DNS Query & DNS CNAME 내용을 'dns.txt'로 추출한다.
$ cd Desktop/network\ forensic-1
dns.pcap 파일에서 dns.qry.name 과 dns.cname 을 필터로 가진 내용들을 반복문을 이용하여 추출한 후 dns.txt 에 저장하려한다.
다음과 같이 터미널창에 입력해주자.
$ tshark -r dns.pcap -Tfields -e dns.qry.name | awk '!a[$0]++' > dns.txt && tshark -r dns.pcap -Tfields -e dns.cname | awk '!a[$0]++' >> dns.txt
그 다음, 추출된 'dns.txt' 파일을 gedit을 이용하여 내용을 확인한다.
$ gedit dns.txt
-추출된 내용을 살펴보니 알파벳 대문자 A~Z, 숫자 2~7까지 있는 것으로 보아 이것은 Base32로 인코딩된 문자인것을 알수 있다.
3) Base32로 인코딩된 문자를 디코딩한다.
Basedec.py 폴더를 열어 코드의 내용들을 확인해보니, 파일을 실행하면, 디코딩을 진행하고 디코드된 파일을 생성하는것을 확인할 수 있다.
python 명령어를 이용하여 Basedec.py 파일을 실행해보자. ls를 이용하면 decoded된 txt파일을 확인할 수 있다.
$ python Basedec.py
$ ls -l dns_decoded.txt
'dns_decoded.txt' 파일을 gedit을 이용하여 내용을 확인해보자.
내용을 확인하니 gpg를 이용하여 공개키와 비밀키를 생성하고있다.
스크롤하여 내용을 확인해보니 'secret.docx' 파일 또한 암호화하고있음
공개키와 비밀키의 내용 또한 확인할 수 있었음
4) 'dns_decoded.txt' 파일을 '\02_파일 추출\실습-1' 폴더로 복사한다.
'dns_decoded.txt' 파일에서 위에서 발견한 내용들을 추출하기 위해 컴퓨터로 복사해오자.
5) 'dns_decoded.txt' 파일을 HxD을 이용하여 gpg로 암호화된 'secret.docx' 파일을 추출한다.
- 00000780: START_OF_FILE 이후 '85 01 0C 03' 부터 000018D0: END_OF_FILE 전 'CA 9F A7 3D'까지 드래그 실시
-> Ctrl+C -> Ctrl+N -> Ctrl+V -> Ctrl+S -> 'secret.docx.gpg' 이름으로 '\02_파일 추출\실습-1' 폴더에 저장
6) 'dns_decoded.txt' 파일을 HxD을 이용하여 공개키과 비밀키를 각각 추출한다.
위에서 발견했던 암호화된 공개키 비밀키 또한 각각 추출해보자.
- 00001DC0: -----BEGIN 부터 00002490: BLOCK---- 까지 드래그 실시 -> Ctrl+C -> Ctrl+N -> Ctrl+V -> Ctrl+S
-> 'public.key' 이름으로 '\02_파일 추출\실습-1' 폴더에 저장
- 00002490: -----BEGIN 부터 00003210: EOF 까지 드래그 실시 -> Ctrl+C -> Ctrl+N -> Ctrl+V -> Ctrl+S
-> 'private.key' 이름으로 '\02_파일 추출\실습-1' 폴더에 저장
7) 추출한 파일(secret.docx.gpg, public.key, private.key)들을 SIFT3 리눅스 'network forensic-1' 폴더로 복사한다.
8) 공개키와 비밀키를 SIFT3 리눅스에 import를 실시한다.
$ gpg --import public.key
$ gpg --import private.key
9) gpg을 이용하여 'secret.docx.gpg' 파일을 복호화한다.
$ gpg --decrypt secret.docx.gpg > secret.docx
$ ls -l secret.docx
10) 'network-forensic1' 폴더로 이동해서 복호화된 'secret.docx' 파일을 실행하여 내용을 확인한다.