탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
![]() |
Oracle Solaris 11.1 관리: 보안 서비스 Oracle Solaris 11.1 Information Library (한국어) |
프로그램은 스택의 데이터를 읽고 씁니다. 일반적으로 프로그램은 코드용으로 특별히 지정된 메모리의 읽기 전용 부분에서 실행됩니다. 스택 버퍼 오버플로우를 야기하는 일부 공격은 스택에 새 코드를 삽입하여 프로그램이 해당 코드를 실행하도록 합니다. 스택 메모리에서 실행 권한을 제거하면 이러한 공격이 성공하지 못하도록 방지됩니다. 즉, 대부분의 프로그램은 실행 가능 스택을 사용하지 않고도 제대로 작동할 수 있습니다.
64비트 프로세스에는 항상 실행할 수 없는 스택이 사용됩니다. 기본적으로 32비트 SPARC 프로세스에는 실행 가능한 스택이 포함됩니다. noexec_user_stack 변수를 사용하면 32비트 프로세스의 스택이 실행 가능한지 여부를 지정할 수 있습니다.
이 변수를 설정하면 스택에서 코드를 실행하려고 시도하는 프로그램에 SIGSEGV 신호가 전송됩니다. 일반적으로 이 신호가 전송되면 프로그램이 코어 덤프와 함께 종료됩니다. 또한 해당 프로그램은 잘못된 프로그램의 이름, 프로세스 ID 및 프로그램을 실행한 사용자의 실제 UID를 포함하는 경고 메시지를 생성합니다. 예를 들면 다음과 같습니다.
a.out[347] attempt to execute code on stack by uid 555
메시지는 syslog kern 기능이 notice 레벨로 설정된 경우 syslog 데몬을 통해 기록됩니다. 기본적으로 이 로깅은 syslog.conf 파일에서 설정되므로 콘솔과 /var/adm/messages 파일에 메시지가 전송됩니다. 자세한 내용은 syslogd(1M) 및 syslog.conf(4) 매뉴얼 페이지를 참조하십시오.
syslog 메시지는 잠재적인 보안 문제를 관찰하는 데 유용합니다. 또한 메시지는 noexec_user_stack 변수를 설정하여 올바른 작업으로부터 금지된 실행 가능 스택에 종속되어 있는 유효한 프로그램을 식별합니다. 메시지가 기록되지 않도록 하려면 /etc/system 파일에서 로그 변수 noexec_user_stack_log를 0으로 설정하십시오. 메시지가 기록되고 있지 않더라도 계속해서 SIGSEGV 신호는 실행 중인 프로그램이 코어 덤프와 함께 종료되도록 할 수 있습니다.
프로그램은 스택 실행을 명시적으로 표시하거나 방지할 수 있습니다. 프로그램의 mprotect() 함수는 스택을 명시적으로 실행 가능한 스택으로 표시합니다. 자세한 내용은 mprotect(2) 매뉴얼 페이지를 참조하십시오. -M /usr/lib/ld/map.noexstk로 컴파일된 프로그램은 시스템 차원의 설정에 관계없이 스택을 실행할 수 없는 스택으로 설정합니다.