ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • /proc 디렉토리 관련 정리
    표튜터와 함께하는 Pwnable/Pwnable 개념 및 정리 2019. 2. 19. 13:48


    /proc : process의 약자이며 해당 디렉토리에 프로세들의 정보가 저장된다.



    /proc/self : 현재 실행 중인 프로세스의 정보가 담겨있는디렉토리이다.

    /proc/<PID> : 해당 PID에 대한 프로세스 정보가 담겨있는 디렉토리다.



    /proc/<PID>/map : 현재 실행되고 있는 프로세스의 주소맵이다.


    procfs (proc filesystem)은 유닉스 기반 OS에서 프로세스에 대한 정보나

    시스템 정보를 파일 형식으로 제공하는 것을 의미한다.


    /proc/의 파일들을 확인해보면 크기가 0 이다. 

    그 이유는 procfs파일은 내부 자료구조에 접근하기 위한 인터페이스에 가깝기 때문이다.


    procfs 파일을 출력하려고하는 순간, procfs driver가 system call을 수행하여 procfs 파일에 대한 결과값으로

    출력할 내용을 생성하게 되고 이를 procfs 파일을 통해 출력하는 것이다.


    그렇기 때문에 출력되는 procfs의 내용은 디스크에 존재하지도 않으며 메모리에 적재되는 것도 아니다.

    또한 크기가 얼마가 될지는 런타임(프로그램이 실행되고 있을 때 존재하는 곳)에 의해

    결정되는 것이기 때문에 정확한 값을 알 수 없어 0으로 확인되는 것이다.


    우리는  /proc/<pid>/maps을 이용해서 procfs을 읽을 수 있다.

    하지만 최근 OS에는 실행파일에 대한 read 권한이 없다면 procfs도 읽을 수 없도록 되어있다.


    다음과 같은 코드로 컴파일된 test라는 실행파일이 있다.

    PID값을 알아온 뒤 cat /proc/<pid>/maps을 이용해서 procfs을 읽어보겠다.



    cat /proc/<pid>/maps을 하게되면 나오는 실제 주소 공간 레이아웃 출력결과는 다음과 같다.

               address        perms   offset    device   inode                                                     path                                                  




    readelf 명령어를 이용하면 section이 어느 위치에 mapping될지 확인할 수 있다.

    r-xp의 영역은 .interp, .note.ABI-tag, .note.gnu.build-i ~ .init .plt .plt.got .text .fini ~ .eh_frame 이다.

    r--p의 영역은 .init_array ~ .got 이다.

    rw-p 영역은 .got.plt .data .bss 이다.


    r-xp 영역은 text segment를 포함하고 있다고 말하는 것이 정확한 표현이지만 보통은 그냥 text segment라고 한다.

    data segment와 bss segment는 모두 rw-p영역에 속해있다.




    참고 : https://umbum.tistory.com/140

    https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/

    반응형

    댓글

Designed by Tistory.