System Hacking Advanced

System Hacking Advanced

[dreamhack] Bypass IO_validate_vtable

개념정리glibc 2.27 버전부터 vtable에 대한 검증로직이 추가됐다. 이전 버전에서는 파일 포인터의 vtable 포인터를 덮을 수 있는 상황이라면 파일 함수가 참조하는 함수 포인터의 주소를 덮어써서 쉽게 공격할 수 있었다. 그러나 IO_validate_vtable 함수가 생겨나면서 이전 버전에서는 더 이상 같은 기법으로 공격할 수 없다. 어떻게 검증로직이 추가됐는지 알아보자. ○ IO_validate_vtableif (__glibc_unlikely (offset >= section_length)) _IO_vtable_check ();검증 로직은 vtable 주소가 _libc_IO_vtables 영역에 존재하지 않는다면 IO_vtable_check 함수를 호출하여 포인..

System Hacking Advanced

[dreamhack] _IO_FILE Arbitrary Address Write

개념정리파일을 읽고 쓰는 과정은 라이브러리 함수 내부에서 파일 구조체의 포인터와 값을 이용한다. 파일 구조체를 조작해서 임의의 주소에 쓰기를 수행하는 취약점에 대해 알아볼 것이다. 파일 내용을 읽는 대표적인 함수는 fread, fgets가 있다. 해당 함수는 라이브러리 내부에서 _IO_file_xsgetn 함수를 호출한다. ○ _IO_file_xsgetn_IO_size_t_IO_file_xsgetn (_IO_FILE *fp, void *data, _IO_size_t n){ _IO_size_t want, have; _IO_ssize_t count; _char *s = data; want = n; ... /* If we now want less than a buffer, underflo..

System Hacking Advanced

[dreamhack] _IO_FILE Arbitrary Address Read

개념정리파일을 읽고 쓰는 과정은 라이브러리 함수 내부에서 파일 구조체의 포인터와 값을 이용한다. 파일 구조체를 조작해 임의의 메모리를 읽는 취약점에 대해 알아볼 것이다. 취약점에 대해 소개하기 전에 파일 쓰기 과정이 어떤 함수와 로직을 통해 진행되는지 분석해보자. 파일에 데이터를 쓰기 위한 함수는 대표적으로 fwrite, fputs가 있다. 해당 함수는 라이브러리 내부에서 _IO_sputn 함수를 호출한다. ○ _IO_XSPUTN#define _IO_sputn(__fp, __s, __n) _IO_XSPUTN (__fp, __s, __n)_IO_size_t_IO_new_file_xsputn (_IO_FILE *f, const void *data, _IO_size_t n){ ... if (to_do + ..

System Hacking Advanced

[dreamhack] __environ

개념정리프로세스는 환경 변수 정보를 저장하고, 필요할 때마다 불러와서 사용한다. 환경 변수 (Environment Variable)는 매번 변할 수 있는 동적인 값들의 모임으로, 시스템의 정보를 갖고 있는 변수다. 사용자가 직접 추가 및 수정하거나 삭제할 수 있는 값으로 리눅스에서 제공하는 명령어들은 “/bin”, “/usr/bin” 등의 디렉터리에 위치한다. 명령어를 입력하면 환경 변수에 명시된 디렉터리에서 명령어를 탐색하고, 실행하기 때문에 명령어의 경로를 입력하지 않아도 된다. 환경 변수는 터미널 뿐만 아니라 프로그램에서도 참조한다. 프로그램에서도 명령어를 실행해야 하는 경우가 종종 있으며, 절대 경로를 입력하지 않아도 명령어를 실행할 수 있다. 이 또한 프로세스를 로드하면서 환경 변수를 초기화하기..

System Hacking Advanced

[dreamhack] Overwrite _rtld_global

개념정리프로그램이 실행되고 프로세스로 등록될 때, 프로그램에 명시된 코드 뿐만이 아니라 프로그램에서 쓰이는 변수를 관리하기 위한 영역을 할당하는 코드가 로더에 의해 실행된다. 프로세스를 종료하는 과정에서 실행되는 라이브러리 함수가 존재하는데, 그 중에서 _rtld_global 구조체와 관련된 라이브러리 함수를 알아보고 어떻게 취약점이 발생하는지 알아보자. return 명령으로 프로그램이 종료된다면 __run_exit_handlers()에 있는 _dl_fini()가 호출된다. ○ _dl_fini()#define __rtld_lock_lock_recursive(NAME) \ GL(dl_rtld_lock_recursive) (&(NAME).mutex)void_dl_fini (void){#ifdef SHARE..

System Hacking Advanced

[dreamhack] SECCOMP 개념

○ Sandbox샌드박스 (Sandbox)는 외부의 공격으로부터 시스템을 보호하기 위해 설계된 기법이다. 샌드박스는 Allow List와 Deny List 두 가지를 선택해 적용할 수 있으며, 애플리케이션의 기능을 수행하는데에 있어서 꼭 필요한 시스템 콜 실행, 파일의 접근만을 허용한다. sandbox는 웹 브라우저, 가상머신, OS (android, linux) 등의 환경에서 외부의 공격을 최소화하기위한 보안 기능이다. sandbox 매커니즘은 Seccomp, AppArmor, SELinux, Firejail 등 운영체제 또는 기능에 따라 여러가지가 존재한다. 이 중에서 리눅스 커널에서 제공하는 seccomp에 대해 알아보자. ○ seccompseccomp은 리눅스 커널에서 제공하는 샌드박스 매커니즘 ..

keyme
'System Hacking Advanced' 카테고리의 글 목록 (3 Page)