티스토리 뷰

1. /proc/sys/kernel/randomize_va_space 조작하기 (리눅스 옵션 조작)

- 루트(uid: 0)만 가능

- 모든 aslr이 해제됨. 재부팅 시 다시 돌아옴.


2. setarch linux32/linux64/i386/i486/i586/i686/`arch` -R

- 현재 프로세스 및 하위 프로세스

- setarch linux32 -R 로 하면 보통 됨

- `arch`는 현재 쓰는 CPU로 치환됨(sh/bash 문법)

- 64비트는 linux64 로 하면 그냥 됨

- 64비트에서 suid, sgid 바이너리에서는 아예 적용 안됨.

- ARM도 됨

- 범위: 모든 라이브러리

- 추가 범위(suid, sgid 바이너리 아닌 경우): 스택 ASLR

- 모든 유저 가능. 권장하는 방법임.

- personality 시스템 콜을 쓴다.


3. ulimit -s unlimited

- 현재 프로세스 및 하위 프로세스

- setrlimit 시스템 콜로 설정하는것임

- 스택 크기를 unlimited로 만들어줌. 부모 프로세스에서 미리 unlimited가 아닌 값을 기본값으로 설정했을 경우 안됨.

- 범위: 모든 라이브러리(32비트만, 64비트는 안됨)

- 모든 유저 가능

댓글
  • 프로필사진 levs 스택이 unlimited로 됫다 해서 왜 aslr이 해제 되나요? 2014.06.09 20:01 신고
  • 프로필사진 BlogIcon 진모씨 일단 커널 ASLR 코드를 보니까(mmap부분) 스택 설정이 unlimited면 ASLR을 적용 안하는 코드가 있더라구요.
    제 개인적인 추측으로는 스택 위치는 메모리 끝부분쯤에 있는데 ASLR은 mmap 시작 포지션이 라이브러리, 실행 파일 영역이 연달아 있지 않고 조금 더 숫자적으로 큰 주소로 할당이 되는데, 스택을 unlimited(무제한)로 하기 위해서는 최대한 라이브러리와 스택 사이의 공간을 늘려야 되기 때문에 그런거 아닐까 생각해요. 읭!
    2014.06.09 22:17 신고
  • 프로필사진 BlogIcon 진모씨 조금 더 자세히 설명을 드리자면, 커널에서 arch_pick_mmap_layout 이라는 함수가 있는데, 이 함수에서 mmap_is_legacy 라는 함수를 호출해요.


    mmap_is_legacy 함수는 아래와 같아요.
    static inline int mmap_is_legacy(void)
    {
    if (current->personality & ADDR_COMPAT_LAYOUT)
    return 1;
    if (rlimit(RLIMIT_STACK) == RLIM_INFINITY)
    return 1;
    return sysctl_legacy_va_layout;
    }
    이 함수의 주석에는 32비트 어플리케이션에서 최소 128MB의 "hole", 즉 라이브러리와 스택 간의 거리를 유지시킨다고 되어있어요.
    64비트는 스택도 1GB 단위로 주소가 바뀌기 때문에 64비트에서도 이 함수를 쓰게 되어있고요.

    그래서 최소 "hole" 공간이
    #define MIN_GAP32 (128*1024*1024)
    #define MIN_GAP64 ((128 + 1024)*1024*1024UL)
    #define MIN_GAP ((is_32bit_task()) ? MIN_GAP32 : MIN_GAP64)
    #define MAX_GAP (TASK_SIZE/6*5)
    이런식으로 정의가 되어있어요. 단위는 바이트같아보이구요.

    그래서 스택이 unlimited일 경우 return 1; 을 하는것 같네요.
    2014.06.12 17:47 신고
  • 프로필사진 BlogIcon aaaaaa 64비트에서 setarch는 setuid가 걸려있을 때는 적용이 안 되는것 같은데요??? 2014.07.03 10:59 신고
  • 프로필사진 BlogIcon 진모씨 아아, 네. 저도 그렇더라구요.
    수정했습니다.
    감사합니다!
    2014.07.07 17:38 신고
  • 프로필사진 비밀댓글입니다 2015.03.13 10:51
  • 프로필사진 BlogIcon 진모씨 어머나! 2015.03.21 01:07 신고
  • 프로필사진 BlogIcon Shayete 용휘 글 보고 많이 배운다 ㅋㅋㅋ 땡큐! 2015.05.21 11:34 신고
  • 프로필사진 BlogIcon 진모씨 허겅.. 감사합니다 2015.06.09 01:50 신고
  • 프로필사진 kdh https://github.com/torvalds/linux/commit/8b8addf891de8a00e4d39fc32f93f7c5eb8feceb#diff-e4d6edbbe24ef50476ccfbbf19088c32
    좋은 글 잘 읽었습니다.
    현재 ulimit을 사용한 방법은 막힌 것 같습니다.
    2018.03.27 16:23 신고
댓글쓰기 폼
공지사항
Total
68,386
Today
1
Yesterday
20
링크
«   2018/10   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함