일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 시스템해킹
- reversing
- grep
- cryptography
- 정답
- 리버싱
- 버퍼오버플로우
- Protostar
- write up
- #picoCTF2018
- general skills
- Smashing The Stack For Fun And Profit
- WEB
- 리눅스
- KOISTUDY
- 카이사르
- dreamhack
- picoCTF2018
- picoCTF
- writeup
- Hxd
- 스택
- CTF
- 해설
- #hacking
- Aleph One
- 번역
- 시스템
- 해킹 공부
- forensics
- Today
- Total
Security || AI
[시스템 공부] Smashing The Stack For Fun And Profit(1) 번역 본문
[시스템 공부] Smashing The Stack For Fun And Profit(1) 번역
보안&인공지능 2018. 10. 26. 19:29.o0 Phrack 49 0o.
7권, 49호
File 14 of 16
BugTraq, r00t, and Underground.Org
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Smashing The Stack For Fun And Profit
재미와 이득을 위해 스택 때려부수기
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
By Aleph One
‘smash the stack’ [C 프로그래밍] 많은 C로 구현한 것에서는, 루틴에서 자동으로 선언된 배열의 끝보다 길게 씀으로써 실행 스택을 손상시킬 수 있다. 이러한 코드를 스택을 때려 부순다고 한다. 그리고 이는 루틴으로 돌아와서 임의의 주소로 이동할 수 있다. 이것은 인류에게 알려진 버그들 중에서, 데이터 기반의 가장 안좋은 버그를 초래할 수 있다. 이것들은 스택 치우기, 스택 갈기기, 스택 훼손을 포함한다; 스택 개조는 사용되지 않는데 왜냐하면 이는 고의로 한 일이 아니기 때문이다. 스팸을 보라, 또한 alias bug, fandango on core, 메모리 누수, 우위의 결함, overrun screw도 보아라.
Introduction
소개
~~~~~~~~~
지난 몇 달간, 버퍼오버플로우 취약점 발견과 이용이 증가했다. 예를 들면 syslog, splitvt, sendmail 8.7.5, Linux/FreeBSD mount, Xt library, at, 등이 있다. 이 문서는 버퍼오버플로우가 무엇이고 이는 어떻게 이용하는지 설명할 것이다.
기초 지식으로는 어셈블리어가 요구된다. 가상 메모리의 개념과 gdb를 경험해보는 것이 매우 도움이 되지만 꼭 필요하지만은 않다. 우리는 Intel x86 CPU와 운영체제로는 리눅스를 사용한다.
시작하기 전에 알아야할 기초적인 정의들: 버퍼는 간단히 동일한 데이터 유형의 여러 경우를 저장하는 컴퓨터 메모리의 연속적인 블록이다. C 프로그래머들은 보통 단어의 버퍼를 연상한다. 가장 흔하게는, 문자형 배열이다. C에서 배열은 고정(static) 이나 동적(dynamic) 변수들로 선언될 수 있다. 고정 변수들은 적재 시간 동안 데이터세그먼트에 할당된다. 동적 변수들은 실행시간동안 스택에 할당된다. 오버플로우는 넘쳐흐르거나 꼭대기, 끝부분 또는 경계를 넘쳐흐르게 채우는 것이다. 우리는 스택 기반 버퍼 오버플로우인 동적 버퍼에 대한 오버플로우만을 다룰 것이다.
Process Memory Organization
프로세스 메모리 구조
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
스택 버퍼가 무엇인지 이해하기 위해서 우리는 프로세스가 어떻게 메모리에서 이루어지는지 이해해야한다. 프로세스는 3개의 영역(Text(Code), Data, Stack)으로 나뉜다: 텍스트(코드), 데이터, 스택. 우리는 스택 영역에 집중해야한다. 하지만 첫번째로 위의 순서대로 조금이라도 알아볼 것이다.
텍스트 영역은 프로그램에 의해 고정되었고, 코드를 포함하고 읽는 것만 가능한 데이터이다. 이 영역은 실행 파일의 텍스트 섹션에 해당한다. 이 영역은 일반적으로 읽기 전용으로 표시되고 쓰는 것을 시도한다면 세그먼트 위반이 발생한다.
데이터 영역은 영역은 초기화되고 초기화되지 않은 변수들을 포함한다. Static 변수들이 이 영역에 저장된다. 데이터 영역은 실해 파일의 data-bss 섹션에 해당한다. 이것의 크기는 brk(2) system call에 의해 바뀔 수 있다. 만약 bss 데이터 또는 사용자 스택의 확장으로 사용 가능한 메모리가 소진되면 프로세스가 차단되고 더 큰 메모리 공간으로 다시 실행되도록 다시 조정한다. 새로운 메모리는 데이터 세그먼트와 스택 세그먼트 사이에 추가된다.
What Is A Stack?
스택이란 무엇인가?
~~~~~~~~~~~~~~~~
스택은 데이터 사이언스에서 주로 쓰이는 추상적인 데이터 유형이다. 스택에서의 객체는 마지막의 객체가 가장 먼저 제거되는 속성이 있다. 이 속성은 흔히 마지막에 들어온 것이 먼저 나간다고 불리거나 LIFO(Last In First Out)라고 불린다.
몇의 작업들은 스택에서 정의된다. 가장 중요한 두가지는 PUSH와 POP이 있다. PUSH는 스택의 가장 위에 요소를 추가하는 것이다. 이와 다르게 POP은 스택의 가장 위에 있는 마지막의 요소를 제거하며 스택의 크기를 줄이는 것이다.
Why Do We Use A Stack?
왜 우리는 스택을 사용하는가?
~~~~~~~~~~~~~~~~~~~~~~
최근의 컴퓨터들은 고급 언어를 필요로 만들어져 있다. 고급 언어로 소개되는 프로그램을 설계하는 가장 중요한 기술은 프로시저 또는 함수이다. 하나의 관점으로 보면, 프로시저 호출은 점프의 경우와 마찬가지로 제어 흐름을 변경하지만 점프와 달리, 작업이 완료되면 함수는 호출에 따른 명령 또는 지시에 대한 제어를 반환한다. 이 높은 추상적 개념은 스택의 도움으로 구현된다.
또한 스택은 함수에서 지역변수를 동적으로 할당하는데 사용되거나 함수에 인자를 전달하는데 사용되고, 함수의 결과를 반환하는데 사용된다.
'Hacking&Security > 시스템[System]' 카테고리의 다른 글
[시스템 공부] Smashing The Stack For Fun And Profit (최종) 번역 (0) | 2018.11.05 |
---|---|
[시스템 공부] Smashing The Stack For Fun And Profit (4) 번역 (0) | 2018.11.05 |
[시스템 공부] Smashing The Stack For Fun And Profit (3) 번역 (0) | 2018.11.05 |
[시스템 공부] Smashing The Stack For Fun And Profit (2) 번역 (0) | 2018.10.29 |
[시스템 공부] 시스템 공부 예정 계획표(커리큘럼) (0) | 2018.10.26 |