티스토리 뷰
알고있던 내용들이 정의로 깔끔하게 정리되어있어 문서를 좀 번역해보았습니다.
취약점을 익스플로잇 하고 코드 인젝션을 하기 위해서 다음 것들을 해야합니다.
1. 익스플로잇에 필요한 메모리를 해커가 덮어쓸 수 있어야합니다.
2. 익스플로잇에 필요한 메모리 주소를 찾습니다.
3. 코드를 프로그램의 메모리에 카피 시킬 수 있습니다.
4. 인젝션한 코드를 실행하기 위해서 취약점을 사용합니다.
관심있는 메모리
코드가 저장된 주소 : 만약 이 부분을 수정할 수 있다면 프로그램이 실행될 때 원하는 코드를 실행하게 할 수 있습니다.
종류
- 리턴 주소 : 대표적인 코드가 들어있는 주소입니다.
- GOT : 리눅스에서 동적으로 로딩되는 함수의 코드가 들어있는 주소입니다.
- Virtual function table : 실행할 메소드의 주소들를 알기 위해서 사용됩니다.
- Dtors functions : 프로그램이 종료될 때 실행됩니다.
버퍼오버플로우의 정의
- 배열의 경계선을 넘어서 써서 이전의 정보를 덮어쓰는 것이다.
- 인덱스로 배열에 접근하거나 포인터로 접근하는 것 둘다 버퍼오버플로우의 원인이 될 수 있습니다.
- 자바의 경우 포인터가 없고 바운드 체크 또한 없기 때문에 취약점이 없습니다.
버퍼오버플로우가 일어나는 유형
- strcpy 같은 취약한 함수를 사용했을 때
- 인덱스를 배열의 범위에 벗어나게 사용한 경우
- 정수 오버플로우
Indirect Pointer Overwriting
포인터를 덮어씌우는 방식입니다. 공격자는 자신이 원하는 데이터를 가지고 있는 포인터를 하나 만든다면에 그 것을 덮어씌웁니다 .
포인터가 쓰기를 위해서 역참조되었을 때 덮어씌우기 됩니다. 즉 데이터를 조작하는 기법.
역참조 : 포인터에서 *기능을 생각하시면됨
'시스템 보안 > 취약점' 카테고리의 다른 글
유형별 정리 (0) | 2017.02.05 |
---|---|
Format String Bug(포멧 스트링 버그) (0) | 2017.01.14 |
1. c 와 c++ 에서의 취약점 발생 유형 (0) | 2016.10.11 |
Fuzzing 퍼징 도구 종류 (0) | 2016.10.05 |
퍼징 Fuzzing 이란? 그리고 퍼징 대상 선정 (0) | 2016.10.05 |
- Total
- Today
- Yesterday
- backdoor
- rootkit
- BP
- 변환
- 모듈
- 드라이버
- 백도어
- Intel
- 디바이스
- LKM
- gdb명령어
- GDB
- 루트킷
- gdb 명령어
- module
- VMware
- vmware cannot connect to the virtual machine
- vmware 오류
- gdb intel 변환
- breakpoint
- gdb intel
- DriverEntry
- IRP
- 레거시 드라이버
- PNP 드라이버
- 리눅스 모듈
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |