일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 숙명여자대학교 정보보안 동아리
- WarGame
- 자료구조 복습
- 백준
- BOJ Python
- 풀이
- The Loard of BOF
- PHP 웹페이지 만들기
- 기계학습
- hackerrank
- 드림핵
- SWEA
- CSS
- 생활코딩
- c
- 웹페이지 만들기
- lob
- Sookmyung Information Security Study
- Python
- C언어
- 머신러닝
- HTML
- Javascript
- hackctf
- c++
- BOJ
- siss
- 숙명여자대학교 정보보안동아리
- 파이썬
- XSS Game
- Today
- Total
목록무지성 공부방/Dreamhack SystemHacking (41)
혜랑's STORY
서론 printf는 포맷 스트링(Format String)을 이용하여 다양한 형태로 값을 출력할 수 있다는 특징이 있다. C언어에는 printf 외에도 포맷 스트링을 인자로 사용하는 함수들이 많이 있는데 대표적으로 scanf, fprintf, fscanf, sprintf, sscanf 가 있다. 함수의 이름이 "f(formatted)"로 끝나고, 문자열을 다루는 함수라면 포맷 스트링을 처리할 것으로 추측해볼 수 있다. 이 함수들은 포맷 스트링을 채울 값들을 레지스터나 스택에서 가져온다. 그런데 포맷 스트링이 필요로 하는 인자의 개수와 함수에 전달된 인자의 개수를 비교하는 루틴이 없어 악의적으로 다수의 인자를 요청하여 레지스터나 스택의 값을 읽어낼 수 있다. 심지어는 다양한 형식 지정자를 활용하여 원하는 ..
보호되어 있는 글입니다.
들어가며 배열 : 같은 자료형의 요소(Elment)들로 이루어져 있는데, 각 요소의 위치를 인데스(Index)라고 한다. 현실에서 첫 번째 요소를 프로그래밍할 때는 0번째 요소라고 한다. 위와 같은 실수는 운이 좋으면 프로그램의 비정상 종료로 그치지만, 때에 따라 치명적인 취약점의 원인이 될 수 있따. 그 대표적 예로 배열의 이므이 인덱스에 접근할 수 있는 Out of Bounds(OOB)가 있다. Out of Bounds 배열의 속성 - 배열은 연속된 메모리 공간을 점유하며, 배열이 점유하는 공간의 크기는 요소의 개수와 요소 자료형의 크기를 곱한 값이 된다. 흔히, 배열이 포함하는 요소의 개수를 배열의 길이(Length)라고도 부른다. - 배열 각 요소의 주소는 배열의 주소, 요소의 인덱스, 요소 자료..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
Hook Overwrite ; malloc과 free 함수를 후킹하여 각 함수가 호출될 때, 공격자가 작성한 악의적인 코드가 실행되게 하는 기법 ※ Hooking(후킹) : 운영체제가 어떤 코드를 실행하려 할 때, 이를 낚아채어 다른 코드가 실행되게 하는 것 메모리 함수 훅 malloc, free, realloc hook C언어에서 메모리의 동적 할당과 해제를 담당하는 함수로는 malloc, free, realloc이 대표적이다. 각 함수는 libc.so에 구현되어 있다. libc에는 이 함수들의 디버깅 편의를 위해 훅 변수가 정의되어 있다. 예를 들어 malloc 함수는 __malloc_hook 변수의 값이 NULL이 아닌지 검사하고 아니라면 malloc을 수행하기 전에 __malloc_hook이 가리..
서론 Background: Library 에서 ELF는 GOT를 활용하여 반복되는 라이브러리 함수의 호출 비용을 줄인다고 했다. 지난 코스에서는 함수가 처음 호출될 때 함수의 주소를 구하고, 이를 GOT에 적는 Lazy Binding을 배웠다. Lazy binding을 하는 바이너리는 실행 중에 GOT 테이블을 업데이트할 수 있어야 하므로 GOT에 쓰기 권한이 부여된다. 그런데 이는 앞서 배워온 공격 기법들에서 알 수 있듯, 바이너리를 취약하게 만드는 원인이 된다. 또한 ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 이 영역들은 프로세스의 시작과 종료에 실행할 함수들의 주소를 저장하고 있는데, 여기에 공격자가 임의로 값을 쓸 수 있다..
시작하며 ASLR이 적용되며 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등이 무작위 주소에 매핑되므로, 공격자가 이 영역들을 공격에 활용하기 어려워졌다. 그런데 코드 영역의 주소는 고정되어 있기 때문에 공격자는 고정된 주소의 코드 가젯을 활용하여 ROP를 수행할 수 있었다. 이번에 다룰 Position-Idependent Executable(PIE)은 ASLR이 코드 영역에도 적용되게 해주는 기술이다. 이 기술은 엄밀하게 말하자면 보호 기법은 아니지만 ASLR과 맞물려 공격을 더욱 어렵게 만들었기에 보호 기법이라 소개되기도 한다. Mitigation: NX & ASLR에서 사용한 예제 코드를 실행한 결과이다. PIC와 PIE - PIC 리눅스에서 ELF는 실행 파일(Executable)과 공유..