본문 바로가기

Security/System Hacking42

[Dreamhack System Hacking Advanced] STAGE 4 - 혼자 실습 보호되어 있는 글 입니다. 2022. 9. 25.
[Dreamhack System Hacking Advanced] STAGE 4 - 함께 실습 Exploit Tech: overwrite _rtld_global 프로그램에서 리턴 명령어를 수행하면 라이브러리와 로더에서 다양한 함수를 호출하면서 정상 종료한다. 이 과정에서 읽고 쓸 수 있는 영역에 존재하는 함수 포인터를 호출하기 때문에 임의 주소 쓰기 취약점이 있다면 해당 포인터를 덮어써서 프로그램의 실행 흐름을 조작할 수 있다. 코드 분석 다음은 이번 실습에서 사용할 코드이다. // Name: ow_rtld.c // Compile: gcc -o ow_rtld ow_rtld.c #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { long addr; long data; int i.. 2022. 9. 25.
[Dreamhack System Hacking Advanced] STAGE 4 Background: _rtld_global 이번에는 프로그램을 종료하는 과정을 이용한 공격 기법을 알아보기에 앞 라이브러리의 코드를 분석하면서 어떤 방식으로 프로세스를 종료하는지 알아보도록 하자. 다음 코드는 종료하는 과정을 알아보기 위한 예제로, 컴파일해두자. // Name: rtld.c // Compile: gcc -o rtld rtld.c int main() { return 0; } _rtld_global __Gl_exit 바로 위에서 컴파일한 예제 코드는 별다른 코드를 실행하지 않고 프로그램을 종료한다. 프로그램을 종료할 때에는 우리가 모르는 많은 코드들이 내부적으로 실행되는데, 디버깅으로 한번 살펴보자. 먼저 다음과 같이 main 함수 내 리턴하는 명령어에 BP를 설정하고, step into를.. 2022. 9. 25.
[Dreamhack System Hacking Advanced] STAGE 3 - 혼자 실습 보호되어 있는 글 입니다. 2022. 9. 18.
[Dreamhack System Hacking Advanced] STAGE 3 - 함께 실습 Exploit Tech: Master Canary 마스터 카나리는 로더에서 할당한 TLS 영역에 존재하고, 해당 페이지는 읽기 및 쓰기 권한이 있다. 이번에는 함수에서 카나리를 스택 버퍼에 삽입할 때 참조하는 마스터 카나리를 덮어쓰는 실습을 할 예정이다. 다음은 이번 실습에서 사용할 예제 코드이다. // Name: mc_thread.c // Compile: gcc -o mc_thread mc_thread.c -pthread -no-pie #include #include #include #include void giveshell() { execve("/bin/sh", 0, 0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } vo.. 2022. 9. 18.
[Dreamhack System Hacking Advanced] STAGE 3 Background: Master Canary 스택 카나리에 대해서 깊게 파해쳐보자. 이해가 잘 안되면 기초과정의 Stack Canary 다시 보기..!! Thread Local Storage Thread Local Storage Thread Local Storage (TLS)는 스레드의 저장 공간을 의미한다. ELF 바이너리를 살펴보면, 각각의 목적을 가진 섹션에서 데이터를 관리하고 있다. ex) .text, .data 등... 이와 달리 TLS 영역은 스레드의 전역 변수를 저장하기 위한 공간으로, 로더(Loader)에 의해서 할당된다. 다음은 로더에서 TLS 영역을 할당하고 초기화하는 함수인 init_tls의 코드이다. static void * init_tls (void) { /* Construct .. 2022. 9. 18.
[Dreamhack System Hacking Advanced] STAGE 2 - 혼자 실습 보호되어 있는 글 입니다. 2022. 9. 18.
[Dreamhack System Hacking Advanced] STAGE 2 - 함께 실습 Exploit Tech: Bypass SECCOMP 정의된 SECCOMP 규칙을 우회하는 방법을 알아보고 해당 기술이 적용된 예제를 공격해보자. Bypass SECCOMP SECCOMP는 시스템 콜 뿐만 아니라 전달되는 인자까지 추적하고 비교할 수 있다. 인자를 비교하는 것은 너무 많은 예외 상황이 있을 수 있기 때문에 많은 개발자들은 시스템 콜을 호출하지 못하도록 설정한다. 타 시스템 콜 호출 같은 기능을 하는 서로 다른 시스템 콜이 몇 가지 존재한다. ex) 파일을 열기 위해서 사용하는 시스템 콜 : open, openat 만약 규칙이 open 시스템 콜을 호출하지 못하도록 정의되어 있다면 openat을 사용해 개발자가 의도하지 않은 행위를 할 수 있다. Application Binary Interf.. 2022. 9. 18.
[Dreamhack System Hacking Advanced] STAGE 2 Background: SECCOMP 이번에는 공격을 어렵게 하기 위한 보안 매커니즘인 샌드박스와 이에 속하는 기술인 SECCOMP을 알아보고, 해당 기술이 적용된 바이너리의 분석을 도와주는 도구인 seccomp-tools에 대해서 알아볼 예정이다. Sandbox 샌드박스(Sandbox)란 외부의 공격으로부터 시스템을 보호하기 위해 설계된 기법이다. 샌드박스는 Allow list와 Deny list 두가지를 선택하여 적용할 수 있으며, 애플리케이션의 기능을 수행하는데에 있어서 꼭 필요한 시스템 콜 실행, 파일의 접근만을 허용한다. 이처럼 보호된 영역에서 애플리케이션의 기능이 수행되기 때문에 외부의 공격을 최소화할 수 있는 효과가 있다. 샌드박스를 적용할 때 애플리케이션에 대한 기능과 보안 관련 지식이 부족.. 2022. 9. 7.