앞서 Format String Vulnerability를 이용해서 ARM32에서 Arbitrary read와 write가 가능함을 확인했다. 이번 글에서는 Arbitrary execute를 살펴보자. Arbitrary Execute 앞서 임의 주소의 메모리 내용을 읽을 수 있다는 점에서 memory leak이 가능하다는 것을 확인했다. 그리고 임의 주소의 ...
지난번 글에 이어 이번에는 format3이다. 1. 소스코드 format3는 format2와 거의 같다. target 값을 64가 아닌 0x01025544 로 맞추어야 한다는 점이 다르다. 그리고 포맷 스트링이 발생하는 위치가 printbuffer라는 함수를 한번 더 호출했을 때 발생한다. 그러므로 format2와는 스택의 구조가 조금 다를 것이다. 2. ...
Null Pointer 란 참조할 내용이 없는 포인터를 뜻한다. 널 포인터는 대부분 특정한 조건을 나타내기 위해 사용된다. 대표적으로 C등의 low-level 프로그래밍 언어에서 리스트 자료구조의 끝 부분이나, 문자열의 종결 등을 의미한다. 일반적으로 운영체제들은 Null Pointer를 역참조하려는 시도를 탐지하기 위하여, 프로세스 가상 주소 공간의 첫 ...
지난번 글에 이어 이번에는 format2이다. 1. 소스코드 format2는 format1과 유사하다. 차이점은 argv 로 입력받는 것이 아니라 vuln 함수 내에 선언된 지역 변수 buffer 에 fgets() 함수를 통해 입력 받는 것이다. 이 경우 스택의 거의 시작 부분에 근접하므로 위치를 argv 의 경우보다 조금 더 쉽게 찾을 수 있다. 그리고 ...
지난번 글에 이어 이번에는 format1이다. 1. 소스코드 format1 은 format0 과 유사하지만 target 변수가 지역 변수가 아닌 전역 변수라는 점이 다르다. 전역 변수는 시작과 동시에 0으로 초기화가 된다. 하지만 vuln () 함수의 구현을 보면 target 이 0이 아니도록 하는 조건을 만족시켜야 하는 상황이다. 2. Compile(Ra...
이제부터는 Protostar의 format string bug 관련 문제를 풀이한다. 먼저 개념 이해를 위해 앞의 두 글을 읽어보길 권한다. ARM32 에서의 Format String Vulnerability (1) Arbitrary Read ARM32 에서의 Format String Vulnerability (2) Arbitrary Write 1. 소스코...
2020 1. 딸 탄생 2020. 1. 7. 딸이 태어났다. 오늘은 첫 번째 돌을 맞이했다. 지난 일 년간 솔직히 결코 쉽지만은 않았다. 아내와 함께 고군분투하며 딸이 커가는 모습을 지켜보는 일은 비록 힘들었지만 아주 의미 깊었고 너무나도 소중한 선물 같았다. 곧 걸음마를 시작하려는 딸을 응원하며 2021년에도 무럭무럭 자라주길. 2. 작가 저서 기존에 3...
앞서 Format String Vulnerability를 이용해서 ARM32에서 arbitrary read가 가능함을 확인했다. 이번 글에서는 Arbitrary Write 에 대하여 살펴보고, 다음 글에서 Arbitrary Execution을 살펴볼 것이다. Arbitrary Write 아래와 같은 예제 코드를 컴파일해보자. passcode 라는 변수의 메...
먼저 포맷 스트링 공격에 대한 역사적 흐름에 대해서는 아래의 글 참고. 1. 개요 포맷 스트링 취약점은 C 언어로 작성된 프로그램에서 사용자의 입력을 적절히 필터링하지 않은 경우 발생할 수 있는 보안 문제로, 해당 입력을 통해 임의 위치의 데이터를 읽거나 쓸 수 있고 이는 곧 프로그램 충돌 현상, 임의 명령 수행 및 루트 권한 확득 등을 수행할 수 있다. ...
1. Background 앞서 code reuse attack 인 Return Oriented Programming(ROP)를 확인했다. 하지만 Return Oriented Programming이 함수 에필로그 부분의 Return Instruction관련 코드 조각에 기반한다는 사실에 근거하여, return address checker를 사용하는 등 ROP...
지난번 글에 이어 이번에는 stack6이다. 이번 문제는 앞서 설명한 ROP를 이용한다. 1. 소스코드 이번 stack6문제는 앞의 문제들과는 약간 다르게 구현되어 있다. 우선 main함수는 단지 getpath라는 함수를 호출하는 역할밖에 수행하지 않는다. 그리고 getpath함수 내부에서 gets 함수를 호출을 통해 buffer를 입력받는다. 하지만 이 ...
1. Background 1) ret2libc 앞서 code reuse attack 인 ret2libc (ret2zp)를 확인했다. 하지만 이 기법은 한계가 존재한다. 이 기법은 libc 내에 존재하는 system(), exec() 등의 함수에 의존한다. 이 때문에 만약 이런 함수를 제거한다면 공격자는 더 이상 이런 시도를 수행할 수가 없다. 실제로 현대의...
Software Security Engineer
자유로운 창작이 가능한 기본 포스트
한 컷씩 넘겨보는 카툰 포스트
직접 만든 영상을 올리는 동영상 포스트
소장본, 굿즈 등 실물 상품을 판매하는 스토어
정기 후원을 시작하시겠습니까?
설정한 기간의 데이터를 파일로 다운로드합니다. 보고서 파일 생성에는 최대 3분이 소요됩니다.
포인트 자동 충전을 해지합니다. 해지하지 않고도 ‘자동 충전 설정 변경하기' 버튼을 눌러 포인트 자동 충전 설정을 변경할 수 있어요. 설정을 변경하고 편리한 자동 충전을 계속 이용해보세요.
중복으로 선택할 수 있어요.