웹 응용 프로그램 보안 위협의 개요

Visual Studio 2010

업데이트: 2007년 11월

알 수 없는 사용자가 웹 응용 프로그램에 액세스할 수 있으면 악의적인 사용자가 응용 프로그램에 무단으로 액세스할 확률이 높습니다. 인터넷에서 공개적으로 액세스할 수 있는 서버는 지속적으로 취약한 부분을 점검받습니다. 따라서 모든 웹 응용 프로그램의 보안을 강화하기 위한 보안 대비책을 강구해야 합니다.

보안 코드 작성 및 응용 프로그램 보안을 위한 유용한 정보에 대한 자세한 내용은 Michael Howard와 David LeBlanc가 공동 저술한 "Writing Secure Code" 또는 Microsoft Patterns and Practices에서 제공하는 지침을 참조하십시오.

보안을 구현하는 것은 솔루션의 일부일 뿐입니다. 경계하는 작업도 매우 중요합니다. 시스템에 여러 보안 장치가 있더라도 다음과 같은 방법으로 시스템을 철저히 감시해야 합니다.

  • 시스템의 이벤트 로그를 모니터링합니다. 시스템에 반복적으로 로그인을 시도하거나 웹 서버에 과도한 요청을 보내는 경우를 감시합니다.

  • Microsoft Windows 및 IIS(인터넷 정보 서비스)에 대한 최신 보안 업데이트와 Microsoft SQL Server나 응용 프로그램에서 사용하는 기타 데이터 소스에 대한 업데이트를 통해 응용 프로그램 서버를 항상 최신 상태로 유지하십시오.

보다 안전한 응용 프로그램을 개발하려면 응용 프로그램에 발생하는 위협에 대해 알고 있어야 합니다. Microsoft에서는 스푸핑(Spoofing), 데이터 훼손(Tampering), 거부(Repudiation), 정보 노출(Information Disclosure), 서비스 거부(Denial of service), 권한 높이기(Elevation of privilege)의 각 머리글자어를 사용하여 STRIDE라고 하는 위협 분류 방법을 개발했습니다. 다음 단원에서는 이러한 위협의 내용과 해당 위협이 웹 응용 프로그램에 적용되는 방식에 대해 간단히 설명합니다.

스푸핑

스푸핑(Spoofing)은 권한이 부여되지 않은 상태에서 사용자 또는 프로세스를 가장하는 것입니다. 가장 단순한 스푸핑은 다른 사용자의 자격 증명을 입력하는 것입니다. 또한 악의적인 사용자는 쿠키의 내용을 변경하여 자신이 다른 사용자인 것처럼 가장하거나 쿠키가 다른 서버에서 전송된 것처럼 가장할 수 있습니다.

일반적으로, 엄격한 인증을 사용하면 스푸핑을 방지할 수 있습니다. 비공개 정보에 대해 액세스를 요청하는 사용자가 있으면 본인이 확실한지 항상 확인해야 합니다. 또한 자격 증명 정보를 안전하게 보관하면 스푸핑으로부터 보호할 수 있습니다. 예를 들어, 사용자 이름이나 암호를 쿠키에 저장하지 마십시오. 악의적인 사용자는 이러한 쿠키를 쉽게 찾아내어 수정할 수 있습니다.

데이터 훼손

데이터 훼손(Tampering)이란 권한이 부여되지 않은 상태에서 리소스를 변경하거나 삭제하는 것입니다. 데이터 훼손의 예로는 악의적인 사용자가 사이트에 침입한 후 파일을 변경하여 웹 페이지를 훼손하는 행위가 있습니다. 데이터 훼손의 간접적인 방법은 스크립트를 악용하는 것입니다. 악의적인 사용자는 코드(스크립트)를 페이지의 사용자 입력 또는 링크로 가장하여 실행할 수 있습니다.

데이터 훼손을 막을 수 있는 기본적인 방법은 Windows 보안을 사용하여 파일, 디렉터리 및 기타 Windows 리소스를 잠그는 것입니다. 또한 응용 프로그램은 가능한 최소한의 권한으로 실행되어야 합니다. 사용자 또는 데이터베이스의 모든 정보를 신뢰하지 않음으로써 스크립트 악용으로부터 보호합니다. 신뢰되지 않은 소스에서 정보를 받을 때마다 실행 코드가 포함되어 있지 않은지 확인해야 합니다.

거부

거부(Repudiation) 위협은 트랜잭션과 관련된 보안 주체가 증거가 남지 않도록 트랜잭션을 수행하는 것을 말합니다. 웹 응용 프로그램에서 이 위협은 정상적인 사용자의 자격 증명을 가장하는 것을 의미할 수도 있습니다. 엄격한 인증을 사용하면 거부로부터 보호할 수 있습니다. 또한 Windows의 로깅 기능을 사용하면 서버에서 발생하는 모든 활동의 감사 내역을 추적할 수 있습니다.

정보 노출

정보 노출(Information disclosure)은 단순히 개인 정보를 도용하거나 노출시키는 것을 말합니다. 정보 노출의 일반적인 예는 암호를 도용하는 것이지만, 이 경우 서버에 있는 임의의 파일 또는 리소스에 액세스할 수도 있습니다.

정보 노출로부터 보호하는 최상의 방법은 노출될 정보를 전혀 보관하지 않는 것입니다. 예를 들어 암호를 저장하지 않으면 악의적인 사용자는 도용할 암호를 찾을 수 없습니다. 암호를 저장하는 다른 방법은 암호의 해시 값만 저장하는 것입니다. 사용자가 자격 증명을 제공하면 사용자의 암호를 해싱하여 저장된 해시 값과 비교하면 됩니다. 그래도 중요한 정보를 저장해야만 할 경우에는 Windows 보안을 사용하여 보호합니다. 다른 경우와 마찬가지로, 인증을 사용하여 권한이 부여된 사용자만 제한된 정보에 액세스할 수 있도록 조치해야 합니다. 중요한 정보를 노출해야 하는 경우 정보를 저장할 때 이를 암호화하고 브라우저를 통해 보내거나 받을 때 SSL(Secure Sockets Layer)을 사용하여 암호화해야 합니다.

서비스 거부

서비스 거부(Denial of service) 공격은 고의적으로 응용 프로그램의 가용성을 정상적인 수준보다 더 감소시키는 것입니다. 전형적인 예로는 웹 응용 프로그램을 오버로드하여 일반 사용자에게 서비스를 제공하지 못하게 하는 행위가 있습니다. 또는 악의적인 사용자가 단순히 서버를 중단시키려고 하기도 합니다.

IIS를 사용하면 제공할 서비스 요청 수를 제한하는 방법으로 응용 프로그램을 조절할 수 있습니다. 악의적인 의도를 가진 것으로 판명된 사용자나 IP 주소의 액세스를 거부할 수도 있습니다. 응용 프로그램을 온라인으로 유지하는 것은 강력한 코드 실행을 통해 해결해야 할 문제입니다. 가능하면, 응용 프로그램을 완벽하게 테스트하여 오류가 발생할 때 정상적으로 복구할 수 있도록 해야 합니다.

권한 높이기

권한 높이기(Elevation of privilege)는 비정상적인 방법을 사용하여 정상적으로 할당된 권한보다 더 많은 권한을 획득하는 것입니다. 예를 들어, 악의적인 사용자가 권한 높이기 공격에 성공하는 경우 웹 서버에 대한 관리 권한을 얻어 서버 기능을 제어할 뿐만 아니라 서버에 있는 모든 데이터에 대한 액세스 권한을 가질 수 있습니다.

권한 높이기로부터 보호하려면 응용 프로그램을 되도록 최소 권한의 컨텍스트에서 실행합니다. 예를 들어 ASP.NET 응용 프로그램은 SYSTEM(관리자) 권한으로 실행하지 않는 것이 좋습니다.

표시: