티스토리 뷰

리눅스(CentOS 기준)에는 BOF 대비해서 메모리 보호 기법이 적용되어 있다.

 

NX(Not Executable)

 

[root@centos ~]# sysctl kernel.exec-shield
kernel.exec-shield = 1

 

현재는 기본값으로 라이브러리가 저장된 영역과 코드가 실행 될 수 있는 스택 영역의 실행 권한을 삭제한다.

 

[root@centos /]# cat /proc/self/maps
00664000-00665000 r-xp 00664000 00:00 0          [vdso]
00bda000-00bf5000 r-xp 00000000 08:03 4587558    /lib/ld-2.5.so
00bf5000-00bf6000 r-xp 0001a000 08:03 4587558    /lib/ld-2.5.so
00bf6000-00bf7000 rwxp 0001b000 08:03 4587558    /lib/ld-2.5.so
00bf9000-00d50000 r-xp 00000000 08:03 4587560    /lib/libc-2.5.so
00d50000-00d52000 r-xp 00157000 08:03 4587560    /lib/libc-2.5.so
00d52000-00d53000 rwxp 00159000 08:03 4587560    /lib/libc-2.5.so
00d53000-00d56000 rwxp 00d53000 00:00 0
08048000-0804d000 r-xp 00000000 08:03 753708     /bin/cat
0804d000-0804e000 rw-p 00004000 08:03 753708     /bin/cat
08555000-08576000 rw-p 08555000 00:00 0          [heap]
b7c9b000-b7dc8000 r--p 02fab000 08:03 727548     /usr/lib/locale/locale-archive
b7dc8000-b7fc8000 r--p 00000000 08:03 727548     /usr/lib/locale/locale-archive
b7fc8000-b7fca000 rw-p b7fc8000 00:00 0
bfa92000-bfaa7000 rw-p bffe9000 00:00 0          [stack]

 

해당 기능을 해제할 때는

sysctl -w kernel.exec-shield=0

 

 

 

ASLR(Address Space Layout Randomization)

 

[root@centos /]# sysctl kernel.randomize_va_space
kernel.randomize_va_space = 1

라이브러리와 스택 주소가 랜덤

 

sysctl -w kernel.randomize_va_space=2

라이브러리, 스택 뿐만 아니라 힙 주소까지 랜덤

 

메모리 주소를 랜덤하게 할당하도록 해 놓으면

/proc/self/maps 내 주소가 랜덤하게 바뀌는 것을 확인할 수 있다.

 

[root@centos /]# cat /proc/self/maps
00110000-00267000 r-xp 00000000 08:03 4587560    /lib/libc-2.5.so
00267000-00269000 r-xp 00157000 08:03 4587560    /lib/libc-2.5.so
00269000-0026a000 rwxp 00159000 08:03 4587560    /lib/libc-2.5.so
0026a000-0026d000 rwxp 0026a000 00:00 0
00bda000-00bf5000 r-xp 00000000 08:03 4587558    /lib/ld-2.5.so
00bf5000-00bf6000 r-xp 0001a000 08:03 4587558    /lib/ld-2.5.so
00bf6000-00bf7000 rwxp 0001b000 08:03 4587558    /lib/ld-2.5.so
00c01000-00c02000 r-xp 00c01000 00:00 0          [vdso]
08048000-0804d000 r-xp 00000000 08:03 753708     /bin/cat
0804d000-0804e000 rw-p 00004000 08:03 753708     /bin/cat
08f4c000-08f6d000 rw-p 08f4c000 00:00 0          [heap]
b7bf4000-b7d21000 r--p 02fab000 08:03 727548     /usr/lib/locale/locale-archive
b7d21000-b7f21000 r--p 00000000 08:03 727548     /usr/lib/locale/locale-archive
b7f21000-b7f23000 rw-p b7f21000 00:00 0
bfda2000-bfdb7000 rw-p bffe9000 00:00 0          [stack]

[root@centos /]# cat /proc/self/maps
00bda000-00bf5000 r-xp 00000000 08:03 4587558    /lib/ld-2.5.so
00bf5000-00bf6000 r-xp 0001a000 08:03 4587558    /lib/ld-2.5.so
00bf6000-00bf7000 rwxp 0001b000 08:03 4587558    /lib/ld-2.5.so
00bf9000-00d50000 r-xp 00000000 08:03 4587560    /lib/libc-2.5.so
00d50000-00d52000 r-xp 00157000 08:03 4587560    /lib/libc-2.5.so
00d52000-00d53000 rwxp 00159000 08:03 4587560    /lib/libc-2.5.so
00d53000-00d56000 rwxp 00d53000 00:00 0
00d59000-00d5a000 r-xp 00d59000 00:00 0          [vdso]
08048000-0804d000 r-xp 00000000 08:03 753708     /bin/cat
0804d000-0804e000 rwxp 00004000 08:03 753708     /bin/cat
0821f000-08240000 rwxp 0821f000 00:00 0          [heap]
b7c42000-b7d6f000 r-xp 02fab000 08:03 727548     /usr/lib/locale/locale-archive
b7d6f000-b7f6f000 r-xp 00000000 08:03 727548     /usr/lib/locale/locale-archive
b7f6f000-b7f71000 rwxp b7f6f000 00:00 0
bfc77000-bfc8c000 rwxp bffe9000 00:00 0          [stack]

 

 

설정을 해제할 때는

sysctl -w kernel.randomize_va_space=0

 

BOF 테스트 할 때는 꼭 해제하고 하는게 실습에 도움이 될 것 같다.

 

메모리 보호 우회 기법을 테스트할 때는 그대로 두어도 무방.

'Study > System' 카테고리의 다른 글

[Solaris]솔라리스 서비스 관리  (0) 2014.02.10
[Ubuntu]Security Onion 12.04 Update  (0) 2014.02.03
시스템 정보 확인 - dmidecode  (0) 2013.11.19
openssl을 통한 인증서 발급  (0) 2013.11.14
syslog-ng on Centos 6.4  (0) 2013.11.14
댓글