Disk Forensic #12 (우리는 이 바이너리가...)

 

디스크 포렌식 12번 문제

 

해당 파일을 다운로드하면 파일에 대한 확장자 정보가 나오지 않는다.

 

따라서 리눅스 환경으로 옮긴 다음, file 명령어를 통해 해당 파일의 확장자를 확인하였다.

 

[그림 1] file 명령어 실행

 

다운로드한 binned라는 파일은 리눅스 실행 파일이라는 것을 확인할 수 있다.

 

해당 파일에 대한 동작 원리와 시스템 콜을 파악하여 분석하기 위해 strace 명령어를 입력하여 확인해보자.

 

strace 명령어는 시스템 콜을 추적하여 동작 과정을 출력해주는 명령어이다.

 

[그림 2] strace 명령어 실행

 

명령을 수행하면 파일의 동작 순서에 따라 시스템 콜을 확인 가능하다.

 

[그림 3] 시스템 콜 관련 증거 1

 

[그림 4] 시스템 콜 관련 증거 2

 

[그림 3]은 중간에 있는 내용이고, [그림 4]는 끝 부분에 있는 시스템 콜 내용이다.

 

위의 두 문자열 증거를 통해 두 문자열 사이의 31번 시스템 콜이 문제 해결과 연관되어 있다는 것을 추측 해볼 수 있다.

 

31번의 시스템 콜 내용은 다음과 같다.

 

[그림 5] 31번 시스템 콜

 

아스키코드 변환 방식은 스테가노그래피 유형에서 자주 사용되는 방식이다.

 

따라서 31번 시스템 콜을 순서대로 시스템 콜 테이블 사이트에서 확인한 뒤, 번호를 정리하여 아스키코드로 변환하였다.

 

시스템 콜 테이블 사이트 : https://elixir.bootlin.com/linux/v3.14/source/arch/x86/syscalls/syscall_64.tbl

 

syscall_64.tbl - arch/x86/syscalls/syscall_64.tbl - Linux source code (v3.14) - Bootlin

# # 64-bit system call numbers and entry vectors # # The format is: # # # The abi is "common", "64" or "x32" for this file. # 0 common read sys_read 1 common write sys_write 2 common open sys_open 3 common close sys_close 4 common stat sys_newstat 5 common

elixir.bootlin.com

 

위 사이트에 접속한 다음, 시스템 콜 문자열을 시스템 콜 번호대로 아스키코드로 변환하면 플래그를 얻을 수 있다.

 

예시로 몇 가지만 설명해보자.

 

시스템 콜 맨 위에 보이는 문자열인 fork()는 시스템 콜 번호 57번이다.

 

이제 아스키코드로 변환 시켜보자.

 

57을 아스키코드 문자로 변환해보면 숫자 9를 의미한다.

 

한 가지 더 해보자면 그 다음 문자열인 getpeername() 시스템 콜 문자열의 시스템 콜 번호는 52번이다.

 

52는 아스키코드 문자로 숫자 4를 의미한다.

 

이렇게 하나씩 시스템 콜 문자열을 번호에 맞게 아스키코드로 변환 시켜보면 9447{Ch3ck_~} 플래그가 나오게 된다.

 

이번 문제는 처음 접해본 문제로 '이런 문제도 있구나' 라고 깨닫게 되었으며 많은 도움이 된 문제였다.

 

해당 문제를 접하는 사람은 꼭 풀어봤으면 좋겠다는 마음에 시스템 콜 문자열과 번호에 대한 아스키코드는 따로 정리하지 않겠다.

 

이로써 위 과정을 통하여 해당 문제를 해결할 수 있다. 


# Reference

 

http://www.yes24.com/Product/Goods/59156934

+ Recent posts