ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글...

34
한글 Zero-day 취약점 분석 오피스기능강화팀 이동우

Transcript of ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글...

Page 1: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

한글 Zero-day 취약점 분석

오피스기능강화팀

이동우

Page 2: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

Agenda

1. TIFF 필터 취약점 (zero-day)

2. 버퍼 오버플로

3. 정수 오버플로

4. 경계 값 검사 오류

5. TIFF 필터 취약점 코드

6. Hwp 파일 포맷 취약점 (zero-day)

7. Hwp 문단 구조

8. Hwp 컨트롤 취약점

9. Hwp 파일 포맷 취약점 코드

10. 보안 고려 사항

11. Q&A

한글 Zero-day 취약점 분석

Page 3: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

TIFF 필터 취약점

Page 4: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

TIFF 필터 취약점

Page 5: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

HncTiff10.flt

TIFF 필터 취약점

•Tiff 이미지 필터 DLL

•2013년 1월 25일 최초 보고

•스택을 덮어 쓰는 오류 발견

•버퍼 오버플로, 정수 오버플로, 경계 값 검사 오류로 예상

Page 6: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

버퍼 오버플로 또는 버퍼 오버런

일반적인 공격 방법

버퍼 오버플로

•할당된 데이터 구조의 경계를 넘어서 데이터가 덮어 씌어지는 현상

•스택 프레임 복귀 주소 변조

Page 7: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

strcpy

char* strcpy(char* dest, const char* str)

{

char* pdest = dest;

while (*str) { // NULL까지 복사

*dest++ = *str++;

}

*dest = '\0';

return pdest;

}

char sour[] = "0123456789"; char dest[5]; strcpy(dest, sour);

버퍼 오버플로

Page 8: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

보안 함수 errno_t strcpy_s(char* , size_t, char*);

경계 값 처리 구현 char* _strcpy_s(char* dest, size_t _SIZE, const char* str)

{

char* pdest = dest;

size_t count = _SIZE;

while (*str && --count > 0) {

*dest++ = *str++;

}

*dest = '\0';

return pdest;

}

버퍼 오버플로

Page 9: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

정수 오버플로

취약점

정수 오버플로

•정수형으로 할당된 데이터에 값이 최대 이상이거나 최소 이하 일 때 발생

•또는 캐스팅으로 인해

•버퍼 할당/읽기/쓰기 오류

Page 10: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

size_t x = UINT_MAX;

size_t y = UINT_MAX;

//x*y = 오버플로우 : 1

int* pbuf = (int*) malloc( x * y);

정수 오버플로

Page 11: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

2*n 계산법

•ASSERT((UINT64) x * (UINT64) y <= (UINT64) UINT_MAX);

나누기 계산법

•ASSERT(x <= UINT_MAX/y)

정수 오버플로

Page 12: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

경계 값 검사 오류

취약점

경계 값 검사 오류

•할당된 데이터 구조의 경계를 벗어나서 데이터를 읽기/쓰기를 하여 오류가 발생

•버퍼 읽기/쓰기 오류

Page 13: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

경계 값 검사 오류

WCHAR fieldname[_MAX_PATH];

int count = 0, index = 0;

int length = field.middlePosition - field.startPosition;

// 취약점 : length가 _MAX_PATH보다 클 수 있음.

for (count = 0; count < length; count++) {

// 버퍼의 범위를 넘어서 데이터를 채울 가능성 있음.

fieldname[index++] = readChar(count);

index++;

}

fieldname[index] = '\0';

경계 값 검사 오류

Page 14: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

경계 값 검사 int count = 0, index = 0;

int length = field.middlePosition - field.startPosition;

if (lenght > 1) {

WCHAR* fieldname = new WCHAR[length];

if (fieldname) {

for (count = 0; count < length; count++) {

fieldname[index++] = readchar;

index++;

}

fieldname[index] = '\0';

}

delete [] fieldname;

}

경계 값 검사 오류

Page 15: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

TIFF 필터 취약점 코드

void TIFFmemcpy(void* d, const void* s, size_t c)

{

memcpy(d, s, c);

}

취약점

void TIFFmemcpy(void* d, size_t dc, const void* s, size_t c)

{

if (dc < c) {

c = dc;

}

memcpy_s(d, dc, s, c);

}

수정

Page 16: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

Hwp 파일 포맷 취약점

Page 17: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

Hwp 파일 포맷 취약점

Page 18: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

Hwp 파일 포맷 취약점

Page 19: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

문단 구조

Hwp 문단 구조

Page 20: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

문단 Text

•문단의 Text는 일반 텍스트 + 컨트롤

문단 컨트롤

•일반 텍스트 외의 특수한 내용을 표현하기 위해 사용

Hwp 문단 구조

Page 21: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

문단 컨트롤 종류

• 문자 컨트롤 : 하나의 문자로 취급되는 char 컨트롤

(Line break, hyphenation point 등)

• 인라인 컨트롤 : 별도의 오브젝트 포인터를 가리키지 않는 단순한 inline 컨트롤

(Tab, Field begin, Field end 등)

• 확장 컨트롤 : 별도의 오브젝트가 데이터를 표현하는 extended 컨트롤

(Section, Drawing object, Header, Footer 등)

Hwp 문단 구조

Page 22: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

문자 컨트롤

•부가정보 없이 문자 하나로 표현되는 제어 문자

Hwp 문단 구조

Page 23: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

인라인 컨트롤

•부가정보가 12바이트 이내에서 표현될 수 있는 컨트롤.

Hwp 문단 구조

Page 24: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

확장 컨트롤

•컨트롤 문자는 포인터를 가지고 있고, 포인터가 가리키는 곳에 실제 오브젝트가 존재

Hwp 문단 구조

Page 25: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

•정상적인 문서인 경우 읽어올 때는 pointer 값이 없음.

•읽어오기가 끝난 후 Object를 생성하고 pointer가 할당 됨.

확장 컨트롤

Hwp 컨트롤 취약점

Page 26: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

확장 컨트롤 취약점

•새로운 확장 컨트롤로 포맷을 조작

•Pointer가 지정 되어 있음

Hwp 컨트롤 취약점

Page 27: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

확장 컨트롤 취약점

•인라인 컨트롤로 포맷을 조작 인라인 컨트롤(?)

Hwp 컨트롤 취약점

Page 28: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

확장 컨트롤 취약점

•인라인 컨트롤에 확장 컨트롤 정보를 채움

•라인세그먼트를 조작하여 인라인 컨트롤이 확장 컨트롤로 조작

Hwp 컨트롤 취약점

Page 29: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

확장 컨트롤 취약점

Hwp 컨트롤 취약점

Page 30: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

코드

HWPUNIT CHwpPara::_GetCtrlWidth(..., HNCPOS position, ...) const

{

// position : 올바른 값이 아님

CHwpCtrl* pctrl = _GetTextCtrl(position);

// pctrl에 조작된 주소 값이 넘어옴.

if (pctrl == NULL) {

return 0;

}

// 올바른 함수가 호출되지 않음 : _GetCodeWidthl 함수는 virtual.

return _GetTextCtrl(position)->_GetCodeWidth(...);

}

}

Hwp 파일 포맷 취약점 코드

Page 31: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

확장 컨트롤 취약점

Hwp 파일 포맷 취약점 코드

Page 32: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

수정

• 확장 컨트롤에 pointer가 있으면 없앤다.

•라인 세그먼트가 문단의 buffer를 제대로 가리키고 있는지 확인 한다.

(경계 값 검사)

Hwp 파일 포맷 취약점 코드

Page 33: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

취약점 해결

보안 고려 사항

•범위 •속도 문제 •검증 및 테스트

고려 사항

•보안 함수 적용 •Warning Level 상승 •코드 분석 및 리뷰

Page 34: ᄒᆞᆫ글 Zero-day 취약점 - myucc.cafe24.commyucc.cafe24.com/pdf/세션2/(2)_아래아한글 Zero-Day 취약점 분석 (이동우).pdf · HncTiff10.flt TIFF 필터 취약점

Q&A