네트워크 포렌직에 관심을 갖고 공부하던 중 재밌는 곳을 발견해서 문제를 풀고 있는 중입니다.
오늘 포스팅할 문제는 해당 사이트의 5번 문제로 아래의 링크에 있습니다.
Pcap 화일도 같은 페이지에서 받으면 되고, 세부 다른 문제는 여차저차 쉽게 풀수 있으니, 제가 애먹은 exe화일을 뽑아내는 파일 카빙 방법을 블로깅 합니다.
앞서 다른 문제들을 풀다가 아래와 같은 exe 화일이 있음을 확인 하고 난 후라, 쉽게 해당 tcp 스트림은 찾을 수 있었습니다.
옆의 패킷에서 보면 file.exe가 있고 그 밑에 보면 MZ로 시작하는 부분이 보입니다. 그 부분부터 exe화일의 바이너리가 시작됩니다.
(참고할 건, Attacker가 해당 화일을 2번 전송합니다)
그래서 다시 한번 필터링을 합니다. 이번에는 tshark으로 다른 화일로 떨굽니다.
tshark -r infected.pcap -R "tcp.stream eq 5 and ip.src==59.53.91.102" -w infected_filtered.pcap
이제는 떨궈진 필터 화일로 작업을 진행 합니다.
떨궈진 패킷은, 일단 해보시면 알겠지만, tcp와 http가 섞여 있습니다. 더군다나 tcp retransmission 패킷도 껴있습니다. 덕분에 나중 작업 시 겹치는 부분을 지워줘야하죠.
그래서 우선 저는 이런 방법을 썼습니다.
tshark -r infected_filtered.pcap -Tfields -e data.data -e http.data > out.txt
위 처럼 하면 tcp 데이터와 http 데이터를 숫자와 콜론이 찍힌 테스트로 떨구고 이걸 hxD에서 화일을 다시 만들어주면 되겠구나 했습니다.(여기서 2가지의 큰실수를 했습니다. 나중에 자동 툴로 파일을 뽑아낸 후 확인 할수 있었던 부분입니다)
이런 방식으로 만든 exe화일은 패킹 되어있었으며 upx로 패킹 되어있다는 것은 쉽게 알수 있었습니다.
하지만, upx -d file.exe하면, Checksum 에러가 나면서 언패킹이 수행되지 않았습니다.
여기서 생각했었던게....
1. 파일의 checksum을 맞춰줘야겠다.
2. upx의 버전을 맞춰줘야하나
였습니다.
1번은 pe explorer 툴을 써서 어렵사리 checksum의 자리를 찾아 맞춰주었습니다. peexplorer이 checksum값을 알려줍니다.(잊을수 없는...140...)
이렇게 했지만 똑같은 checksum에러가 나고....
더군다나 pe explorer이 말하는 파일 사이즈인 68096과는 사이즈 부터 달랐습니다.
(여기서 멘붕...)
나중에 알고 봤더니, http.data에서 누락되는 부분이 발생...
아래 부분을 넣어 주었습니다.
하지만 그래도 안되는 상황 발생.... 그래서 구글링을 하던 중...
패킷분석으로 유명한 "패킷인사이드" 사이트에서 foremost라는 툴을 발견합니다.
해당 툴은 리눅스 기반툴로 리눅스서 실행했더니, infected.pcap에 있는 모든 화일을 다 떨궈줍니다(명령어: foremost -i infeceted.pcap, backtrack5 기본 탑재)
신기하게도 68096사이즈의 exe화일도 있습니다.
이제 끝났다고 생각하고 언패킹을 시도 하였지만, 같은 에러....
결국 돌고 돌아 퍼즐 5번의 아래 댓글을 읽어보았습니다...
저랑 같은 문제로 고민 하고 있는 사람이 있더군요... 파일을 제대로 떨궜지만 첵섬에러..
바로 시도 해봤습니다. pcap화일 열고... 1초도 안걸려 file.exe 걸러냅니다.
위의 두개 화일이 동일 화일이고, 맨뒤숫자가 화일 크기를 나타냅니다.
Network miner이 떨군 화일을 확장자만 지워준 후(.exe 뒤로 octet-stream이 있음) 바로 확인 합니다.
upx 테스트 확인 결과 된다네요...
upx 언패킹도 됐네요...
Network miner 다운 받고 5분도 안걸렸습니다. 완전 멘붕...
역시 배워야 손발이 고생안하는 거구나를 한번 더 느꼈습니다...
※ foremost보다 network miner이 더 우수한 것처럼 느껴진 문제였습니다. 하지만 패킷의 상황에 따라 다릅니다. 확실한 건, 알아야 손발이 고생하지 않는다입니다.
아 그리고 백신 켰더니 바로 file.exe지워 버리네요.ㅋ