System 3

Stack Pivot

libc leak없이 libc 메모리 주소에 aaw를 해야하는 상황에서 많은 삽질을 하다가 해당 기법을 알게되었는데요.. Stack Pivot은 특정한 쓰기 가능한 공간에 Fake Stack을 구성해 놓고 rsp로 스택의 위치를 바꿔 Chanining을 이어갈 수 있는 기법입니다. 해당 기법은 SFP와 leave Gadget을 사용하므로 최소한 RET 주소까지는 오버플로우가 일어나야 합니다. 보통 오버플로우 기법을 이용할 때 입력 공간이 부족한 경우 이용하게 됩니다. 조건 최소한 RET까지 오버플로우가 일어나야 한다 leave ; ret ; 가젯이 있어야 함 leave 의 경우 mov rsp , rbp ; pop rbp ; 와 같이 Gadget 조각을 모아 조건을 성립시켜줘도 됨 Fake Stack의 위..

System 2022.05.17

Linux] Seccomp

Seccomp 리눅스 커널에서 제공하는 프로세스 샌드박싱 기법입니다. 규칙에 맞게 syscall 호출을 허용 및 차단하여 쉘 코드의 공격을 방지하는 리눅스 보안 매커니즘이라고 볼 수 있겠습니다. Seccomp 기능은 prctl( ) 함수를 통해 사용할 수 있습니다. prctl(PR_SET_SECCOMP, mode, &sock_fprog) struct sock_fprog { unsigned short len; // BPF 인스트럭션 개수 struct sock_filter *filter; BPF // BPF 인스트럭션 배열 }; struct sock_filter { /* 필터 블록 */ __u16 code; /* 실제 필터 코드 */ __u8 jt; /* 참 점프 */ __u8 jf; /* 거짓 점프 */ ..

System 2022.04.28

DLL Load(IAT, EAT)

기존에는 각 프로그램 별로 라이브러리를 포함시켜 사용을 했습니다. 컴파일러가 C 라이브러리에서 Binary 코드를 그대로 가져왔다고 볼 수 있습니다. 그런데 Window가 멀티태스킹을 지원하게 되면서 여러 프로그램이 동시에 실행이 가능해졌고 DLL의 이런 로딩 방식은 메모리의 낭비로 이어졌습니다. 따라서 프로그램에 라이브러리를 포함시키지 않고 메모리에 한 번 로딩된 라이브러리의 리소스를 Memory Mapping 기능을 사용해 여러 프로세스에서 공유해 쓰는 방식으로 라이브러리를 사용하게 되었습니다. 라이브러리는 링킹의 시점에 따라 Static과 Dynamic의 방식으로 나눌 수 있습니다. Static Link : 컴파일 시점에서 라이브러리가 링킹 단계에서 연결되는 방식 *.lib 파일을 링킹 과정에서 포..

System 2022.03.27