Reference

    RELRO 과 Hook Overwrite, PIE

    Dream hack 자료를 통해 학습한 RELRO 보호기법과 Hook Overwrite를 정리한 글입니다. RELRO 라는 보호기법을 이해하기 위해서는 ROP에 대한 기본적인 내용이해가 필요합니다. RELRO 이전에 Dream hack문제를 해결할때 ROP 공격기법을 사용해 본적이 있습니다. 이때 함수의 주소를 구하기 위해 PLT를 사용하고 GOT에 값을 덮어쓰는 방식을 사용했습니다. 그런데 여기에는 전제조건이 필요합니다. GOT에 쓰기 권한이 부여되어 있어야만 한다는 조건입니다. 그리고 개발자들은 데이터 보호와 이러한 취약점을 해결하기 위해 쓰기 권한을 제거하는 RELocation Read-Only(RELRO) 를 개발하였습니다. 정리하면 RELRO는 쓰기 권한이 불필요한 data segment의 쓰기..

    fork()와 exev()

    fork() & exec() fork() 와 exec()는 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용하는데 간단히 보자면 정리하면 프로세스를 복사하거나 덮어쓰는 방식의 차이라고 할 수 있다. exec에는 execv나 execl 등 여러가지 함수등을 포함하고 있다. fork() 먼저 fork() 시스템 호출은 호출한 프로세스를 새로운 공간에 전부 복사하여 새로운 프로세를 위한 메모리를 할당하고 원래 프로세스는 그대로 작업을 수행하며, 복사된 프로세스는 fork()가 수행된 다음라인 부터 실행이 된다. (복사한 프로세스므로 똑같은 코드를 지니고 있음) fork()는 사용시 현재 프로세스를 부모 프로세스라고 하며, 만들어진 프로세스를 자식 프로세스라고 한다. 여기서 fork가 리턴하는 값 pid..

    Code Auditing

    Code Auditing 번역하면 소프트웨어 코드 감사로써 버그, 보안 위반, 프로그래밍 규칙위반을 발견하기 위한 프로그래밍 프로젝트의 소스코드에 대한 포괄적인 분석을 말합니다. 이는 스포트웨어 출시전 오류를 줄이기 위해 필수적인 부분으로 C, C++,Python 같은 고급 언어의 잠재적 취약기능을 감사하기 위해 사용하고 있습니다. 뿐만 아니라 이러한 감사는 코드에서 취약점을 미리 찾아 공격을 예방하는데 도움이 되며 감사는 팀 단위로 하기에 팀 구성원 간의 프로그래밍 기술을 공유하고 표준과 디자인 및 구현등의 향상으로 이어지기에 필수적인 부분이라고 볼 수 있습니다. 감사시 확인해야 할 순서는 먼저 위험도순으로 높은 취약점부터 낮은 취약점을 찾는 것이 좋으며 가장 일반적인 취약점 몇가지를 보자면 입력 유효..

    환경변수(environ)

    본 글은 CVE-2014-6271 쉘쇼크에 대해 배우기 전 기반지식 중 환경변수에 대하여 정리하기 위한 글입니다. 환경변수 (environment Variable) 환경변수는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임, 좀 더 풀이하면 매번 변할 수 있는 동적인 값들의 모임, 시스템의 정보를 가지고 있는 변수입니다. 이는 사용자가 추가, 수정, 삭제등이 가능한 값이라고 말 할 수 있습니다. 포너블을 공부하면서 가장많이 사용하는게 리눅스인데 리눅스의 명령어인 ls, id, cat등이 /bin, /usr/bin 디렉터리에 위치해 있습니다. 하지만 리눅스 명령어를 사용하면서 디렉터리 경로를 명시하고 명령어를 사용한 적은 단 한번도 없습니다. 이는 환경 변수로 명시되어 있기 때문이며..

    Jinja SSTI

    Jinja SSTI 관련 워게임을 접할 일이 생겨 문제를 해결하기 위해 작성한 글입니다. SSTI (Server-Side Template Injection) 먼저 SSTI란 Server-Side Template Injection 으로 템플릿을 사용한 웹 어플리케이션을 구동할 때 적절하게 사용자의 입력이 필터링되지 않고 템플릿 구문 삽입이 가능할 때 발생하는 공격입니다. 이전에 Python MRO를 정리한 글이 있습니다. https://skysquirrel.tistory.com/80?category=1045478 (Python) MRO - Method Resolution Order 본 글은 MOR이란 무엇인가 작성자가 학습하기 위해 자료를 검색해 정리한 글입니다. MRO이란? 파이썬은 기본적으로 상속을 지..

    NOP Sled(NOP Slide)

    NOP Sled 기법에 대해 정리를 하고자 본 글을 작성합니다. 이전까지 BOF FSB공격등을 할때에는 보통 공격에 쓰일 시스템호출 함수가 코드 내부에 존재하는 문제를 해결해 왔다. 하지만 이러한 문제들은 이제 Level 1정도를 해결하는 정도일뿐 점점 깊게 나아갈수록 이러한 공격에 쓰일 함수들은 코드 내부에 존재하지 않고 공격자가 직접 작성하는 셸코드 방식을 사용하고 있다. 여기서 공격자가 RET부분에 셸 코드의 address를 넣어야만 원하는 실행이 되는데 정확한 주소를 찾기 어려울 경우 주소를 추측하기 위해 사용하는 기법이 NOP Sled 기법이다. NOP Sled( NOP Slide) NOP : no operation의 약자이며, 아무런 실행을 하지 않는다.(혹은 instruction을 구분) 사..

    Mprotect - ROP

    Mprotect - ROPMprotect 라이브러리 함수를 활용한 기법에 대해 정리를 하고자 본 글을 작성합니다. 기본적으로 ROP는  plt와 got를 활용하는 기법으로 이전에 드림핵해서 해결했던아래 write-up 처럼 시스템호출하는 함수가 없는 경우 쉘코드를 작성해 해결하는 기법이다.https://skysquirrel.tistory.com/95 (DreamHack) Return Address Overwrite — Squirrel Hack skysquirrel.tistory.com 그러나 위 문제처럼 보호기법중 NX가 없는 경우와 권한이 있는 경우에만 가능하다고 한다.즉 쓰기권한과 실행권한이 부여되어 있는 경우에만 가능하다는 것이다. 그럼 권한이 없거나 NX보호기법으로 실행권한이 제거된 경우는 어떻게..

    시스템 호출과 명령어 실행

    본 글은 시스템 호출에 정리하고자 다른 레퍼런스를 참고하여 작성한 글입니다. 시스템 호출이란? 시스템 호출 혹은 시스콜(syscall)은 운영체제의 커널이 응용프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스입니다. 응용 프로그램들과 커널은 CPU의 권한수준, 하드웨어의 접근 능력이 다르기때문에 운영체제에게 부탁하여 처리하는 것입니다. 커널은 CPU 시스템의 물리주소가 일치하는 특정 메모리 위치에서 동작하고 모든 주소는 물리주소로 고정되어 컴파일되고 로드되어 실행됩니다. 즉 부팅 과정에서 일정부분을 점유하여 동작하기에 하드웨어의 접근이 가능해집니다. 하지만 응용프로그램들은 사용자에 요청에 따라 각기 다른 위치를 점유하고 실행되어 물리주소를 확정 지을 수가 없습니다. 즉 논리주소를 사용하는 것인데 M..