본문 바로가기

system

GHOST: glibc Vulnerability(CVE-2015-0235) GHOST: glibc Vulnerability(CVE-2015-0235) 1. 취약점 정보 GHOST: glibc Vulnerability은 2015년 1월 27일 발표된 취약점으로 glibc에 overflow 취약점이 존재하여 원격에서 임의의 명령을 실행할 수 있는 취약점이다. 이 취약점은 gethostbyname() 와 gethostbyname2() 에서 내부적으로 호출하는 __nss_hostname_digits_dots() 에서 발생하는 Heap Buffer Overflw 취약점으로, 취약점이 발생하려면 gethostbyname() 또는 gethostbyname2() 함수를 사용하는 조건이 필요하기 때문에 glibc를 사용하는 모든 애플리케이션에서 취약점이 발생하는 것은 아니다. ※ Glibc 란.. 더보기
메시지 루프와 처리 함수의 전체 순서 TranslateMessage 는 메시지를 받고 해석. DispatchMessage 는 WndProc 에 처리 요청. 더보기
BOF protection techniques BOF protection techniques Canary(Stack Cookie, Security Cookie, /GS) : 컴파일러가 Buffer 와 RET 사이에 Cookie(RET 변조를 막기 위한 메모리 공간)을 추가하거나 위치시켜 종료 시점에 원본 데이터와 체크하여 Overflow를 감지하고 방어한다. NX-bit(Not Excutable, DEP(Data Execution prevention)) : NX-bit는 이름 그대로 메모리 영역에 읽기, 쓰기, 실행 권한을 필요한 만큼 부여하여 공격자가 stack, heap, data section에서 shellcode 같은 공격코드를 실행하는 것을 금지한다. ASCII Armor : 공유 라이브러리들의 기본주소를 mmap() 함수를 사용하여 함수의.. 더보기
plt, got PLT(Procedure Linkage Table) 프로그램은 공유 라이브러리에 있는 함수를 사용할 일이 많다. 그래서 프로그램 내부에 모든 함수의 참조 테이블을 갖고 있는 것이 효율적이다. 프로그램을 컴파일 할 때 PLT(Procedure Linkage Table) 섹션은 공유 라이브러리에 있는 함수를 호출할 때 사용된다. GOT(Global Offset Table) .got 섹션은 PLT 섹션에서 참조하는 섹션이다. 또한 공유 라이브러리에 있는 함수의 실제 주소가 저장되는 섹션이다. _dll_runtime_resolve _dll_runtime_resolve 함수는 전달받은 인자 값을 사용하여 호출된 함수의 실제 주소를 구한 후 GOT에 저장한 뒤 호출된 함수로 점프한다. 공유 라이브러리 함수 호출 순서 더보기
gdb 명령어 gdb -q [FILE NAME] // 해당 파일 디버깅 시작하기. -c // core 파일을 의미하는 옵션 disassemble main // main 함수를 디스어셈블 하는 명령어. set disassemble-flavor intel(set dis intel) // intel 문법으로 표시 info functions // 함수 정보 확인 disassemble [FUNCTION NAME] // 해당 함수 디스어셈블 list(l) // main 함수를 기점으로 소스코드 출력 ( 10 줄 단위 ) list [FUNCTION NAME] break [ADDRESS] // 해당 주소 브레이크 ex ) break *0xbffffcb2 , break *main+5 info breakpoints(info b) // .. 더보기
메모리 구조 SMA(Static Memory Allocation) : 정적 메모리, 메모리의 data, stack 영역을 사용 DMA(Dynamic Memory Allocation) : 동적 메모리, 메모리의 heap 영역을 사용한다. 1. code 영역 ​ - 코드 자체를 구성하는 메모리 영역으로 Hex 파일이나 BIN 파일 메모리다. ​ - 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역이다. 2. data 영역 ​ - 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다. ​ 1) 초기화 된 데이터는 data 영역에 저장된다. ex ) int num=1; ​ 2) 초기화 되지 않은 데이터는 BSS(Block Stated Symbol) 영역에.. 더보기
ShellShock 취약점(CVE-2014-6271 : Remote code execution through bash) 더보기