background/linux

    [glibc-2.27] _IO_FILE & fopen

    드림핵 강의를 보고 glibc-2.27을 분석한 글 입니다. (틀린 내용이 있을 수 있습니다) 먼저, 드림핵에서 소개하는 예제 코드는 다음과 같다. // Name: iofile.c // Compile: gcc -o iofile iofile.c #include #include #include void file_info(FILE *buf) { printf("_flags: %x\n", buf->_flags); printf("_fileno: %d", buf->_fileno); } int main() { FILE *fp; char buf[256]; strcpy(buf, "THIS IS TESTFILE!"); fp = fopen("testfile", "w"); fwrite(buf, 1, strlen(buf), fp..

    SigReturn-Oriented Programming(SROP)

    SigReturn-Oriented Programming(SROP)

    signal 대회 문제를 풀이해보면 프로그램의 정상 종료를 위해 alarm 함수를 호출하고 지정한 시간이 지나면 프로그램을 종료하기 위한 시그널 핸들러를 호출하는 코드를 자주 볼 수 있다. 아래는 예제 코드이다. // Name: sig_alarm.c // Compile: gcc -o sig_alarm sig_alarm.c #include #include #include #include void sig_handler(int signum){ printf("sig_handler called.\n"); exit(0); } int main(){ signal(SIGALRM,sig_handler); alarm(5); getchar(); return 0; } 코드를 살펴보면, signal 함수를 사용해 SIGALRM ..

    Master Canary

    (드림핵 강의를 이해하기 위해 요약해본 글) Thread Local Storage (TLS) TLS는 쓰레드의 저장 공간이다. ELF 바이너리를 살펴보면 각각의 목적을 가진 섹션에서 데이터를 관리한다. (코드를 실행하기 위한 .text, 초기화되지 않은 전역 변수를 위한 .data 등) 이와 달리 TLS 영역은 쓰레드의 전역 변수를 저장하기 위한 공간으로 로더(Loader)가 할당한다. 로더에서 TLS 영역을 할당하고 초기화하는 함수인 init_tls 함수가 있는데 해당 함수 내부 _dl_allocate_tls_storage 함수에서 TLS 영역을 할당하고 이를 tcbp에 저장한 뒤 TLS_INIT_TP 매크로의 인자로 전달한다. static void * init_tls (void) { /* Constr..

    SECCOMP

    드림핵 강의를 보고 이해한대로 요약한 글이다 (자세한 내용은 강의 참조) SECure COMPuting mode (SECCOMP) 리눅스 커널에서 프로그램의 샌드박싱 매커니즘을 제공하는 컴퓨터 보안 기능이다. SECCOMP를 사용하면 애플리케이션에서 불필요한 시스템 콜의 호출을 방지할 수 있다. (execve와 같은 시스템 콜이 굳이 실행될 필요가 없다) 해당 시스템 콜은 공격 시에 일반적으로 임의의 명령어를 실행하기 위해 사용된다. 만약 execve 시스템 콜의 실행을 방지하는 정책을 적용하면 외부의 공격으로부터 execve 시스템 콜이 실행될 경우 애플리케이션을 즉시 종료한다. 따라서 애플리케이션의 취약점이 존재해도 외부의 공격으로부터 피해를 최소화할 수 있다. SECCOMP는 두 가지의 모드를 선택..

    cyclic pattern for buffer overflow attack

    cyclic pattern for buffer overflow attack

    (cyclic pattern을 통해 return address 영역까지 계산이 가능하다. cyclic pattern은 대문자, 소문자, 숫자로 이루어진 조합이다. Aa0, Aa1, ..., Aa9, Ab0, ... ab9, Ac0, ... Az9, Ba0, ... 으로 이어진다. 생성한 패턴을 사용해서 eip(rip) 레지스터에 저장되는 return address의 값을 검색해서 리턴 주소 영역까지의 정확한 오프셋을 찾을 수 있다. https://zerosum0x0.blogspot.com/2016/11/overflow-exploit-pattern-generator.html Overflow Exploit Pattern Generator - Online Tool Metasploit's pattern gene..