ISSA 2013 Conference에서 출제 되었던 Challenge 문제입니다.


간접적으로 리눅스 침해사고를 경험 해 볼 수 있는 좋은 문제입니다.




[For.MD] ISSA 2013 New DFIR Challenge Write up.pdf


일전에 Nuit du Hack 이라는 국제 해킹대회가 열렸었습니다.(저는 대회 진행도중에나 이 사실을 알았네요. ㅠㅠ)

유럽에서 열리는 꽤 큰 대회로 이번에 우리나라에서도 본선에 진출하게 되었습니다. 

관련기사 : http://www.dailysecu.com/news_view.php?article_id=1943

이번 예선 문제들을 찾아보려 했으나 못찾고 작년 문제들 중 Stega5.mpg라는 파일의 문제를 다운받아 풀어봤습니다.

동영상에 숨겨진 메시지를 찾는 스테가노그라피 문제였는데 어렵지 않게 풀려 이렇게 글을 써봅니다.

일단 문제로 주어진 동영상 파일을 실행해보면 조금은 선정적인 뮤비가 나오는데 뮤비 중간중간에 어떤 이미지가 휙 하고 지나가게 됩니다.


[그림 1 - 문제로 주어진 동영상 파일 내용]

해당 동영상을 프레임 단위로 나누어 보면 동영상 파일에 숨겨진 이미지 파일을 추출해 낼 수 있습니다.

필자는 다음팟 인코더를 사용하였습니다.

[그림 2 - 동영상 파일에 숨겨진 이미지]

이렇게 이미지를 하나하나씩 모두 모아 이미지 내의 포스트 잇 글자를 이어보면 키 값이 완성 됩니다. 분석팁이 있다면 동영상을 플레이 하면서 이미지가 있는 부분을 분할 기능을 이용하여 분할 체크하여 주고 후에 프레임 단위로 보면 금방 찾을 수 있습니다.



















위 사진들이 동영상에 숨겨져 있던 사진들입니다. Key 값은 TRAL@L44-D1NG!D0N9


  1. Fifuk 2012.04.14 22:27

    작년 문제네요..

이번 문제는 암호해독 문제 입니다.

Fresh man IU who is real geek becomes a member of Club 101101.
IU is a timid person, so he really doesn't like other people use his computer. Then… 

Az hrb eix mcc gyam mcxgixec rokaxioaqh hrb mrqpck gyam lbamgarx oatygqh Erxtoigbqigarx Gidc hrbg gasc gr koaxd erzzcc zro i jyaqc Kr hrb ocqh rx Ockubqq ro Yrg man? Gyc ixmjco am dccqihrbgm

If you can, please analyze this file 7E85167E004F1045C2C96AD6C17FC8CF


Az~ 의 암호문을 해독하는 것인데 문제에서는 파일을 분석해보라고 합니다.

파일은 PK 시그니처를 가지고 있는데 이 시그니처는 zip 압축 포맷이 가지고 있는 시그니처 입니다.

압축을 풀어보면 iTunes에 관련된 폴더들이 나오는데 암호문과 무슨 상관인지는 처음에 잘 몰랐습니다 ^^;;

일단 문제는 100점 짜리이며, 암호에 관한 아무런 힌트도 없는 것 처럼 보입니다.

일단 제일 쉽게 해독할 수 있는 암호는 치환 암호가 있어 이 암호를 적용 시켜 보았습니다.

일단 치환암호는 치환 할 문자를 선정하는게 중요한데 저는 암호문제에서 am과 Gyc를 기준으로 잡았고 이 암호문이 is와 The에 치환문이라고 생각하였습니다.

풀다보면 기준을 정확히 잡았다는 느낌이 들며 눈에 익은 단어들이 있어 그 단어들을 채우게 되고 채우다 보면 아래와 같은 규칙을 발견하게 됩니다.

abcdefghijklmnopqrstuvwxyz -> 암호문 알파벳
iuekcztyawdqsxrvlomgbpjnhf -> 평문 알파벳

각 알파벳들끼리 서로 치환되는 구조입니다. 그렇게 해서 나온 평문이 아래와 같습니다.

If you can see this sentance ordinarily you solved this quistion rightly Congratulation Take yout time to drink coffee for a while Do you rely on Redbull or Hot six  The answer is keelayouts

답은 keelayouts 이라는군요! 

답을 알고보니 압축 해제한 폴더에 R_library/keyboard layouts/General.keylayout 이라는 파일을 확인 할 수 있었습니다.

그런데!! 아직도 이게 뭔 상관이 있는지 모르겠네요... 아직 맥이나 아이폰 등을 접해 본 적이 없어서 ㅠㅠ 

'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

Codegate 2012 Misc 500 풀이  (0) 2012.03.05
Codegate 2012 Misc 4 300 풀이  (7) 2012.03.03
Codegate 2012 Misc 100 풀이  (2) 2012.03.01
Codegate 2012 Network 300 풀이  (2) 2012.02.29
Codegate 2012 Forensic 500 풀이  (2) 2012.02.29
  1. n0fate 2012.03.31 11:47

    맥의 키보드 레이아웃을 변경하는 파일입니다. Ukelele라는 도구로 쉽게 생성할 수 있고요. 물론 해당 프로그램으로 오픈하면 쉽게 분석할 수 있습니다 :-)

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2012.03.31 23:24 신고

      아하~!! 그렇군요, 역시 맥쪽은 아직 모르는게 너무 많은 것 같아요 ㅠㅠ 정보 감사합니다 ㅋ

이번 문제는 풀이 과정에서 삽질을 너무 많이하여 시간이 꽤 걸렸네요..

자 이번 문제 지문부터 보도록 하죠!

One day, attacker A hacked into B company’s internal system and then stole backup data.
This backup data was made by attacker A himself.
Attacker A used his specifically configured network to detour B company’s security system.
Now you(B'company's an employee) detected it late.
You have to analyze the traffic by using WireShark and have to find which data was leaked from which internal system.
A stolen data by Attacker A will be an important hint to find the answer.

Answer : strupr(md5(Hint_in_the_leaked data|Hacked_internal_system_address)) ('|'is just a character) 

 
일단 문제는 어떤 해커가 B 회사의 백업 데이터를 유출 시켰다는 내용입니다.

그런데 그 해커는 회사 내부의 보안시스템을 우회하기 위해 자신만의 특별한 네트워크를 형성하여 침입을 했다는군요.

문제에서는 와이어샤크를 이용하여 트래픽을 분석하고 유출된 데이터가 있던 시스템의 주소를 알아내라는 군요.

또 공격자에 의해 도난당한 데이터가 힌트가 될 수도 있다는 말을 하고 있습니다.

일단 와이어샤크로 패킷파일을 열어보면 udplite 프로토콜 패킷밖에 보이지 않습니다.

[그림 1 - 패킷파일 내용]

이때는 정말 난감했었습니다. udplite라는 프로토콜도 생소할 뿐만 아니라 stream등도 보지 못했기 때문이죠.

이때는 무작정 패킷 하나하나를 분석하였습니다.

그러던 중 data 부분에서 많이 보던 것이 보였습니다.

[그림 2 - data 부분]

한창 ipv6를 공부한다고 까불었을 때 많이 보았던 hex 값이었습니다.

ipv6의 ip 형태이죠!!

그래서 혹시나 하여 해당 패킷들을 ipv6로 바꾸어 보았습니다.

[그림 3 - ipv6로 변환]

변환 방법은 패킷을 우클릭 -> decode as -> network tab -> IPv6 순서로 클릭을 하시면 됩니다.

이제야 뭔가 평소에 보던 패킷들이 보이는군요.

바로 TCP Stream을 보았더니 많이 보던 시그니처가 있었습니다.

[그림 4 - TCP Stream]

7z 시그니처를 보니 압축 파일이 오고 간듯 합니다.

더군다나 이 패킷들은 모두 하나의 패킷이어서 다른 파일은 더 이상 발견하지 못하였습니다.

해당 스트림을 raw 포맷으로 저장하고 압축을 풀어보면 아래와 같이 swf 플래시 파일이 하나 나옵니다.

[그림 5 - 압축 파일 내용]

해당 swf 파일을 실행 해 보면 아래와 같이 답변은~ 하면서 무언가가 써집니다.

 [그림 6 - swf 파일 실행 결과]

문제에서는 데이터가 힌트도 될 수 있다 하였으니 ipv6.dst를 염두에 둬 봅시다.

패킷에는 오로지 두 개의 호스트 IP만 존재합니다. 이 중 유출 데이터 시스템 주소를 구별 해야 하는데 이는 간단합니다.

데이터 유출은 파일이 옴겨진 것이고 파일이 옴겨질 때는 보내는 쪽지 유출된 시스템이라고 충분히 생각 할 수 있습니다.

그러므로 패킷파일에서 많은 량의 패킷을 발송한 호스트만 찾으면 됩니다.

찾아보니 fe80::c0a8:8888(192.168.136.136) 패킷을 일방적으로 많이 보내고 있었습니다.

이제 답변의 형태로만 만들어주면 됩니다.

답변의 형태는 strupr(md5(유출된 데이터안의 힌트|유출된 데이터의 시스템 주소))) 이니 아래와 같이 계산하면 됩니다.

[그림 7 - 문제 답변 계산]

 - 6642E5A831032D2CF852C66024D9C1F1

'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

Codegate 2012 Misc 4 300 풀이  (7) 2012.03.03
Codegate 2012 Misc 100 풀이  (2) 2012.03.01
Codegate 2012 Network 300 풀이  (2) 2012.02.29
Codegate 2012 Forensic 500 풀이  (2) 2012.02.29
Codegate 2012 Forensic 400 풀이  (4) 2012.02.28
  1. 익명 2015.07.13 14:39

    비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2015.07.30 22:00 신고

      인터넷에서 검색하시면 다운로드 받을 수 있습니다.

      지금 이 파일이 제 외장하드 어느 경로에 있는지 모르겠네요.. ㅠ

와 드디어 마지막 문제인 500 문제를 풀었습니다.

미리 스포를 해드리자면 이번 문제는 디스크 포렌식 입니다 :)

일단 문제 지문부터 봐 보죠

This file is Forensic file format which is generally used. 
Check the information of imaged DISK, find the GUIDs of every partition. 

Answer: strupr((part1_GUID) XOR (part2_GUID) XOR ...)


지문은 정말 간단합니다. 문제로 주어지는 파일은 포렌식 파일 포맷이라고 하네요.

이미지의 디스크 정보를 파악하여 파티션의 GUID를 찾으라는 것 입니다.

일단 7z 압축 포맷은 아닌 것 같으니 hex 에디터로 봐 봅시다.

[그림 1 - 문제 파일의 hex]

대부분의 파일의 처음에는 시그니처가 옵니다. 이 파일에도 맨 처음에 어떠한 문자가 오는데 뭔지 모르겠네요...

그래서 구글을 검색했더니 포렌식 도구 중 하나인 EnCase 파일 포맷이라고 하는군요.

처음 접해보는 파일 포맷이라 해당 파일 포맷을 분석한 문서를 읽어 봤습니다.

 - 문서 : http://cdnetworks-kr-1.dl.sourceforge.net/project/libewf/documentation/EWF%20file%20format/Expert%20Witness%20Compression%20Format%20%28EWF%29.pdf 


문서를 읽어보면 엄청나게 많은 테스트를 통해 정보를 산출한 걸 볼 수 있습니다.

해당 문서에서는 문제 파일의 확장자가 EWF, EWF-E01 and EWF-S01에 해당한다고 하는군요.(더 정확히는 EnCase 6에서 생성 된 디스크 증거 파일)

또 header section은 zlib 알고리즘으로 압축되어 있다고 합니다(문서 page 4) 

문제로 제공된 파일에도 문서와 같이 header와 header2가 존재합니다.

 

[그림 2 - 문제파일의 header2]

그럼 일단 header2를 압축해제 해 볼까요?

처음에는 python의 인터프리터로 하였으나 추후에도 계속 압축을 해제해야 해서 따로 스크립트를 작성하였습니다.

[그림 2]에서 음영처리한 부분이 header2가 압축 된 것입니다.

해당 데이터를 따로 바이너리 파일로 만들어 스크립트에 넣어주면 바로 압축이 풀리고 따로 결과물은 파일로 저장 합니다.

[그림 3 - header 압축 해제]

결과 파일과 출력 화면은 보기가 불편하여 문서와 출력 화면을 참고해 따로 정리 해 보았습니다.

[그림 4 - 출력 정리]

각 부분을 문서에서 분석한 걸 참고하여 보면 SSD 디스크를 증거 이미지로 만든 것을 알 수 있습니다.

문서에 보면 volume section이 있는데 해당 문제 파일에도 volume section이 있으니 어떠한 정보가 있는지 압축 해제를 한번 해보자.

[그림 5 - Volume Sectoin]

압축을 해제하면 header section 처럼 출력이 되는데 이를 정리하면 [그림 6]과 같습니다.

[그림 6 - 출력 정리]

header section과 별반 다르지 않다는 것을 알 수 있습니다.

문제 파일의 hex 오프셋을 조금 더 내리다보면 sector 라는 문자열이 보입니다.

그리고 그 뒤로는 지금까지 압축해제 했던 zlib 압축 데이터같은 것들이 보입니다.

파일을 좀 더 살펴보면 파일의 마지막 오프셋까지 내용이 이어져 있는 것을 알 수 있습니다.

이 압축 데이터들이 문제 파일의 내용인 듯 합니다. 이 부분을 압축 해제하여 hex 에디터로 보면 아래와 같은 파일이 보입니다.

[그림 7 - sector 압축 해제]

EFI PART 라는 문자열은 GPT 파티션을 뜻하는 시그니처로 offset 200부터가 GPT 파티션의 헤더 부분인 것을 알 수 있습니다.

문제에서는 파티션을 찾으라고 하였으니 파티션 엔트리를 찾으면 될 것 입니다.

파티션 엔트리는 파티션 헤더 다음부분에 존재하는데 해당 문제의 파티션 엔트리는 다음과 같이 있습니다.

 [그림 8 - 파티션 엔트리]

첫 번째 GUID는 파티션의 타입을 결정 해주는 GUID이기 때문에 문제에서 원하는 GUID와는 조금 거리가 있고, 두 번째 있는 GUID가 문제에서 원하는 GUID일 것입니다.

2B8026604DAD0547B9B1BF81BDD2CAC7 - EFI System Partition
9996F83677E0E046A7FCD7206ECE9F1C - System
69BCD73BDCD8E5489C44FF2A0F26F1CD - Recovery HD
A7CD84F394F63A4EACE7BF40EE99E551  - Secure


문제에서는 이 값들을 XOR 연산하라고 하였으니 아래와 같이 연산하여 주면 답이 나옵니다.

[그림 - 9 XOR 연산]

 - 7C678D9E72633A072EEE28CB32A34147

'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

Codegate 2012 Misc 100 풀이  (2) 2012.03.01
Codegate 2012 Network 300 풀이  (2) 2012.02.29
Codegate 2012 Forensic 500 풀이  (2) 2012.02.29
Codegate 2012 Forensic 400 풀이  (4) 2012.02.28
Codegate 2012 Network 200 풀이  (2) 2012.02.28
  1. Favicon of https://gogil.tistory.com BlogIcon Gogil 2012.03.01 12:06 신고

    포렌식 궁금했는데.. 감사합니다.

+ Recent posts