Return to Library (RTL공격. NX우회)
·
System Hacking
실행 권한이 남아있는 코드 영역으로 반환주소를 덮는 공격 기법 프로세스에 실행 권한이 있는 메모리 영역은 일반적으로 바이너리의 코드영역과 바이너리가 참조하는 라이브러리의 코드영역이다. 그 중 몇몇 라이브러리에는 공격에 유용한 함수들이 존재한다. 프로세스 실행과 관련한 system, execve 등이다.(C언어로 작성된 프로그램이 참조하는 libc 에 존재) 공격자들은 libc의 함수들로 NX를 우회하고 쉘을 획득하는 방법들을 개발했고, 이를 Return To Libc라고 한다. 다른 라이브러리들도 활용될 수 있기에 Return To Library라고도 불리며, 유사하게 Return To PLT가 있다. 카나리와 NX가 적용되어 있다. 최신 리눅스에서 ASLR은 기본적으로 적용된다. PLT에 어떤 함수..
Static Link와 Dynamic Link
·
System Hacking
링크 Link컴파일의 마지막 단계프로그램에서 어떤 라이브러리의 함수를 사용한다면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다 C 소스 코드는 리눅스에서 전처리, 컴파일, 어셈블 과정을 거쳐 ELF 형식을 갖춘 오브젝트 파일로 번역된다. 이렇게 만들어진 오브젝트 파일은 실행가능한 형식을 갖추고는 있지만, 라이브러리 함수들의 정의가 어디있는지 알지 못하므로 실행은 불가능하다. 이 상태에서는 함수가 심볼로는 기록되어있으나, 심볼에 대한 자세한 내용은 기록이 되어있지 않다. 동적 링크동적 링크된 바이너리를 실행하면 동적 라이브러리가 프로세스의 메모리에 매핑된다. 이후 실행 중에 라이브러리의 함수를 호출하면 매핑된 라이브러리에서 호출할 함수의 주소를 찾고, 해당 함수를 실행한다. 정적 링크바..
NX & ASLR
·
System Hacking
NX (No - eXecute)실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법코드 영역에 쓰기 권한이 있으면 공격자가 코드 수정으로 원하는 코드를 실행할 수 있고, 스택이나 데이터 영역에 실행 권한이 있으면 쉘코드를 해당 영역에 입력한 후 반환 주소를 조작해서 쉘코드를 실행할 수 있다. *인텔은 XD(eXecute Disable), 윈도우는 DEP(Data Execution Prevention), ARM은 XN(eXecute Never) 라고 칭한다. NX를 지원하는 CPU라면 컴파일러는 바이너리에 NX를 적용할 수 있다. 해당 기능이 적용되면 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다.gdb의 vmmap으로 할당된 권한을 확인할 수 있다.NX가 적용되지 않은..
Stack Canary
·
System Hacking
스택 버퍼 오버플로우 취약점을 이용하면 스택 반환 주소(RET)를 조작하여 실행 흐름을 획득하는 공격이 가능하다. 스택 버퍼 오버플로우로부터 반환 주소를 보호하는 기법이 스택 카나리(Stack Canary)이다. 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수 에필로그에서 해당 값의 변조를 확인하는 방법이다.카나리 값의 변조가 확인될 시 프로세스가 강제종료 된다.공격자는 BOF로 RET 값을 변조하려는 경우, 카나리 값을 건드리게 된다. 카나리 분석 해보기스택 카나리 적용은 -fno-stack-protector로 끌 수 있다.긴 값을 주면 RET가 변환되어서 세그멘테이션 오류가 발생한다. 카나리를 적용하여 컴파일하니, stack smashing detected라고 뜨며 ..
Stack Buffer Overflow 스택 버퍼 오버플로우
·
System Hacking
스택의 버퍼에서 발생하는 오버플로우이다. 버퍼(Buffer)는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소를 뜻한다. 버퍼 오버플로우는 버퍼가 넘치는 것이다. 버퍼는 일반적으로 메모리 상에 연속으로 할당되어서, 어떤 버퍼에서 오버플로우가 발생하면, 해당 버퍼 뒤의 버퍼들의 값이 조작될 수 있다. *데이터가 저장될 수 있는 모든 단위를 버퍼라고 칭하기도 한다. 지역변수는 스택 버퍼. 힙에 할당된 메모리 영역은 힙 버퍼 *버퍼링은 송신 측 전송 속도가 느려서 수신 측 버퍼가 채워질 때까지 대기하는 것 💡 스택 오버플로우와 스택 버퍼 오버플로우스택 오버플로우는 스택 영역이 너무 많이 확장되어 발생하는 버그스택 버퍼 오버플로우는 스택에 위치한 버퍼에 버퍼 크기보다 많은 데이터가 입력되어 발생하는 버그..
셸코드 Shellcode
·
System Hacking
익스플로잇 Exploit : 상대 시스템을 공격하는 것. 직역으로 부당하게 이용하다. 셸코드익스플로잇을 위해 제작된 어셈블리 코드조각. 보통 셸을 획득하기 위해서 셸코드를 사용해서 '셸'코드가 사용즉, 메모리에 올리면 바로 실행할 수 있는 기계어 조각이다. 보통 어셈블리어로 코딩하고 기계어 형태로 바꾸어 사용한다. orw(open-read-write, 파일 읽고 쓰기)"/tmp/flag" 읽는 셸코드 작성 (어셈블리로 구현)// 수도코드char buf[0x30]; // 48바이트 int fd = open("/tmp/flag", RD_ONLY, NULL);read(fd, buf, 0x30);write(1, buf, 0x30);syscallraxarg0(rdi)arg1(rsi)arg2(rdx)read0x0u..