일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cwe-506
- kernel build
- CVE-2024-3094
- xz-utils
- Kernel
- liblzma
- kernel image
- rootfs
- newbie
- 백도어
- kernel img
- Today
- Total
목록전체 글 (79)
ZZoMb1E
보호되어 있는 글입니다.
보호되어 있는 글입니다.

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 이전 포스팅에서 canary에 대해 다루었다. 이번에는 그 우회 방법들을 다루겠다. 1. canary leak 2. got overwrite (간단하게만 설명하고, 자세한 내용은 plt/got에 대한 포스팅 이후 다루겠다.) 3. master canary 변조 4. thread 영역 재설정 canary leak 가장 일반적인 방법으로, 리눅스의 stack 정렬하는 특징과 canary가 \x00으로 끝난다는 특징을 이용한 방법이다. 실습 예제 코드 #include void getshell(){ execve("/bin/sh",0,0); } int main(){ int buf[0x30]; printf("Hello! Whrd\n Input..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ SSP(Stack Smashing Protector) Stack buffer Overflow로부터 sfp와 ret를 보호하기 위한 기법으로, Stack의 canary라는 값을 이용하여 검증을 수행한다. Stack 그림으로 보면 buf와 sfp 사이에 위치한다. 공격자가 ret부분을 덮어씌기 위해 값을 일반적인 overflow 공격을 수행하면 canary값이 변조가 될 것이고, 이를 에필로그에서 감지하여 프로그램을 종료시킨다. checksec이라는 명령어를 이용하여 바이너리 파일에 적용된 메모리 보호기법에 대해 확인할 수 있다. 위의 그림의 경우, canary가 적용되어 있는 상태이다. 만약 컴파일을 dynamic 방식이 아닌 sta..
보호되어 있는 글입니다.

Stack Buffer OverFlow와 Return Address OverFlow를 진행하고 있는 지금 상황에서 크게 중요하지 않지만, 앞으로 포스팅을 진행하면서 rtl, rop, fsb 등과 같은 공격 기법들을 이해하기 위해서는 가장 기본이 되는 부분 중 하나이다. 리눅스의 함수 호출 규약은 크게 2종류로 나뉜다. (2개만 있다는 것이 아니라 이 2종류가 기본이 된다는 것이다.) x86환경에서는 레지스터를 사용하지 않고 Stack만을 이용하여 인자를 전달하는 cdecl 방식이 있다. x86-64환경에서는 레지스터와 Stack 2개를 사용하여 인자를 전달하는 System V라는 호츌 규약이 있다. x86 레지스터를 활용하여 인자를 전달하기에는 그 수가 적기 때문에 Stack을 활용하는 함수 호출 규약을..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 저번 게시글에서 Buffer OverFlow에 대해 간략하게 다뤘다. 이번에는 Stack을 변조하는 것인 Stack Frame에 위치하는 ret 부분을 공격하는 기법에 대해 다루겠다. Stack Frame은 기본적으로 위와 같은 구조를 가지고 있다. 만약, buf에 데이터 입력하는데 buf보다 더 큰 크기의 데이터를 입력하면 어떻게 될까?? 별다른 검증이 없는 프로그램인 이상 sfp와 ret 영역까지 침범하여 입력이 가능해진다. 이런 흐름으로 이뤄지는 공격이 Return Address Overwrite이다. 간단한 예제를 하나 생성하여 실습해보겠다. #include void getshell(){ execve("/bin/sh",0,0..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Buffer OverFlow는 발생하는 영역에 따라서 Stack Buffer OverFlow와 Heap Buffer OverFlow로 나뉜다.Heap에 대해서는 다음에 다룰 예정이기 때문에 Stack Buffer OverFlow만 작성하도록 하겠다. 먼저 Buffer라는 개념을 알아야 한다.Buffer는 컴퓨터가 데이터를 처리하기 위해 사용하는 것으로 단순하게 생각하면 데이터의 임시 저장소이다. 예를 들면 12345라는 데이터를 송수신하는 것이 있다. 수신 측에서는 데이터를 받자마자 처리를 하게 되는데 임시 저장소가 없다면 처리하는 동안 수신받는 데이터들은 유실되게 될 것이다. 즉 12345라는 데이터가 아닌 123의 데이터만 ..

※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 리눅스의 메모리 구조는 [CODE 세그먼트], [DATA 세그먼트], [BSS 세그먼트], [HEAP 세그먼트], [STACK 세그먼트]로 구성되어 있다. CODE 세그먼트 유저가 작성한 코드가 저장되는 영역으로 실행할 프로그램의 코드가 저장되어 있다. CPU에서 이 코드를 읽고 실행을 시켜야 하기 때문에 읽기 권한과 실행 권한을 가지고 있다. void func1(){ ... } void func2(){ ... } int main(){ ... } DATA 세그먼트 초기화된 전역 변수 혹은 정 변수가 저장되는 영역으로 프로그램 시작과 함께 할당되며 종료시 같이 소멸된다. 읽고 쓰기까지 가능한 data와 읽기만 가능한 rodata(Re..