전통적으로 프로그램이 갖춰야 할 품질조건으로 정확성, 신뢰성, 효율성, 호환성, 이식성 등 여러 가지가 제안되어 왔지만, 최근에는 보안성이란 새로운 항목이 요구되고 있다. 보안성은 설계된 프로그램의 흐름을 사용자가 임의로 변경함으로써 보안 침해수단으로 사용하는 사례가 늘어나면서 그 중요성이 더욱 강조되고 있다. 이러한 보안 침해기법은 기본적으로 스택의 조작에서부터 출발한다. 스택과 관련된 일련의 동작들은 프로세서에 따라 고유하게 이루어지고, C 언어는 그러한 고유한 특성에 따라 스택을 관리한다. 본 논문에서는 스택 조작을 통한 보안침해의 개념을 살펴보고, 팬티엄(Pentium), 알파(Alpha), 스파크(SPARC) 등이 제공하는 스택 메커니즘을 자세히 조명해 본 후, 그 것들이 프로그램의 보안성에 어떻게 영향을 미치는지를 규명함으로써 안전 한 프로그램 작성을 위한 치침에 기여하도록 한다.
전통적으로 프로그램이 갖춰야 할 품질조건으로 정확성, 신뢰성, 효율성, 호환성, 이식성 등 여러 가지가 제안되어 왔지만, 최근에는 보안성이란 새로운 항목이 요구되고 있다. 보안성은 설계된 프로그램의 흐름을 사용자가 임의로 변경함으로써 보안 침해수단으로 사용하는 사례가 늘어나면서 그 중요성이 더욱 강조되고 있다. 이러한 보안 침해기법은 기본적으로 스택의 조작에서부터 출발한다. 스택과 관련된 일련의 동작들은 프로세서에 따라 고유하게 이루어지고, C 언어는 그러한 고유한 특성에 따라 스택을 관리한다. 본 논문에서는 스택 조작을 통한 보안침해의 개념을 살펴보고, 팬티엄(Pentium), 알파(Alpha), 스파크(SPARC) 등이 제공하는 스택 메커니즘을 자세히 조명해 본 후, 그 것들이 프로그램의 보안성에 어떻게 영향을 미치는지를 규명함으로써 안전 한 프로그램 작성을 위한 치침에 기여하도록 한다.
There are several traditional factors of software quality. Some of them are such as correctness, reliability, efficiency, compatibility, portability, etc. In addition to them, security is required as another factor of software quality nowadays because some application programs are used as a way to a...
There are several traditional factors of software quality. Some of them are such as correctness, reliability, efficiency, compatibility, portability, etc. In addition to them, security is required as another factor of software quality nowadays because some application programs are used as a way to attack information systems by stack frame manipulation. Each processor has its own peculiar stack frame mechanism and C language uses the characteristics of them. This paper explains the concept of security problem caused by stack frame manipulation, and the stack frame mechanism of Pentium, Alpha and SP ARC processor in detail. And then it examines the effect of stack frame mechanism on the security of programs in C language.
There are several traditional factors of software quality. Some of them are such as correctness, reliability, efficiency, compatibility, portability, etc. In addition to them, security is required as another factor of software quality nowadays because some application programs are used as a way to attack information systems by stack frame manipulation. Each processor has its own peculiar stack frame mechanism and C language uses the characteristics of them. This paper explains the concept of security problem caused by stack frame manipulation, and the stack frame mechanism of Pentium, Alpha and SP ARC processor in detail. And then it examines the effect of stack frame mechanism on the security of programs in C language.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
3장에서는 상용화된 대표적인 프로세서들의 스택관리 방식을 자세히 살펴보았다. 여기서는 위와 같은 버퍼넘침의 위험성에 프로세서의 스택관리 방식이 미치는 영향을 분석한다.
이 논문에서는 버퍼넘침의 개념, 버퍼넘침에 의한 보안 침해 과정 및 예방방안에 대한 연구를 소개한 후, 보다 효율적이고 완전한 버퍼넘침 보안침해 예방방안을 제시하였다.
제안 방법
이를 위하여 특성이 상이한 대표적인 프로세서 세 종류를 집중 분석하였고, 그 결과 그들 프로세서의 스택 관리 형태가 버퍼넘침에 영향을 주는 몇 개의 중요한 인자를 지니고 있음을 밝혔다. 그리고 그들 각 영향인자에 따른 버퍼넘침 보안침해에 대한 대응방안을 제시하였다. 이는 곧 프로그램 보안성을 위한 각종 도구에 프로세서 타입에 대한고려가 필요함을 의미하기도 한다.
효율적인 호출. 복귀를 위하여 서브함수 호출 시 PC (Program Counter, return address), PSW(Prograrn Status Word), SP(Stack Pointer), FP(Frame Pointer)등 흐름 제어와 관련이 깊은 정보들을 일정한 장소에 자동으로 보관하고, 복귀할 때 자동으로 복구하는 일련의 기본 동작을 필요로 한다. 이러한 기본 명령어는 프로세서의 종류에 따라 각각 고유의 기계어로 제공되기 때문에 고급 언어들은 그 범위 내에서 기능을 최대한으로 활용하여야 한다[2].
역으로 얻어낼 수 있다. 본 논문에서도 각 프로세서가 장착된 시스템에서, (프로그램 2)에 대응되는 어셈블리 코드를 생성하여 각 컴파일러 및 프로세서의 스택관리 형태를 프로그램 줄 번호와 그림을 대응시켜가며 세밀하게 분석하였다.
이 프로그램 내용은 버퍼 넘침을 유발할 가능성이 있고, 함수 호출 과정을 살펴보기에 알맞도록 작성되었다.
이를 위하여 특성이 상이한 대표적인 프로세서 세 종류를 집중 분석하였고, 그 결과 그들 프로세서의 스택 관리 형태가 버퍼넘침에 영향을 주는 몇 개의 중요한 인자를 지니고 있음을 밝혔다. 그리고 그들 각 영향인자에 따른 버퍼넘침 보안침해에 대한 대응방안을 제시하였다.
성능/효과
사용하여 스택프레임을 유지한다. (프로그램 3)의 12-13, 57-58 번 줄은 호출한 함수에서 사용 중이던 스택 프레임 %ebp를 저장하고, 현재 호출된 함수의 스택 프레임을 새롭게 설정하는 과정을 보여주고 있다(① i ②, ①'i ②'). 이와 반대로 호출된 함수에서 복귀할 때는 49, 97번 줄에서와 같이 leave 명령어(instruction)에 의해 이전 함수의 스택 프레임을 복구시킨다.
후속연구
즉 버퍼넘침의 가능성이 있는 함수의 호출 다음에는 반드시 또 다른 함수 호출을 배치한다는 것이다. 따라서 알파 환경에서의 C 프로그램작성자는 이와 같은 함수 호출순서를 정적으로 점검함으로써 앞 절에서와 같이 효과적인 버퍼넘침 보안침해를 예방할 수 있을 것이다.
본 연구는, 이 번 결과를 이미 개발된 정적 소스코드 검증기에 부가하여 그 효용성을 검증하는 다음 단계로 계속 이어질 예정이다.
참고문헌 (20)
Brian W. Kernighan, Dennis M. Ritchie ; 'The C Programming Language', Prentice-Hall., 1978
Terrence W. Pratt, 'Programming Languages : Design and Implementation,' PRENTICE-HALL, 1975
Roger S. Pressman, 'Software Engineering, A Practitioner's Approach', 4th Ed, pp.519-521, McGraw-Hill, 1997
이형봉, 박현미, 박정현, '버퍼넘침을 사용한 해킹공격 기법 및 예방 방안', 한국정보처리학회200추계학술발표논문집(상), pp.129-132
박정현, 박현미, 임채호, '소스코드 보안취약점 분석 방법론에 관한 연구', 한국통신정보보호학회 2000종합학술발표회논문집, pp.733-738
Crispin Cowan, Calton Pu,..., 'Stack Guard : automatic adaptive detection and prevention of buffer-overflow attacks,' Proceeding of the 7th USENIX Security Conference, 1998
David Evans, 'Static detection of dynamic memory errors,' Proceeding of the ACM SIGPLAN Conference on Programming Language Design and Implementation, 1996
Richard Jones, 'Bounds checking patches for gcc,' http://web.inter.NL.net/hcc/Haj.Ten.Brugge
MAURICE J. BACH, 'The Design of the UNIX Operating System,' PRENTICE-HALL, 1986
H. M. DEITEL, 'An Introduction to Operating Systems,' ADDISON-WESLEY, 1983
Kai Hwang, 'Advanced Computer Architecture,' McGraw-Hill, 1996
※ AI-Helper는 부적절한 답변을 할 수 있습니다.