Skip to content

조회 수 22743 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

웹애플리케이션의 주요 취약점과 보안

 

인터넷이 생활의 하나의 수단으로 확고히 자리를 다지고 있는 지금, 상점 또는 은행지점에 직접 찾아가서 하던 상품구입이나 은행업무를 이제는 인터넷을 통하여 집 또는 사무실에서 간단하게 해결하는 전자상거래(EC : Electronic Commerce)가 가능하기에 이르렀습니다. 각 기업 또는 기관들은 이러한 편의를 사용자에게 제공하기 위해서 '웹 애플리케이션' 이라는 자신들이 직접 개발한 '창구'를 제공하는데, 이러한 '창구'로 드나드는 정보는 개인/조직의 정보를 포함하여 사용자의 금융정보 등 악용될 시 직접적이고 금전적인 피해를 입힐 수 있는 정보들입니다. 따라서 소위 말하는 해커들은 이들 정보에 접근하기 위해서 정보의 유일한 통로인 웹 애플리케이션으로 공격목표를 옮겨가는 추세이며 보안사항이 고려되지 않은 웹 애플리케이션은 이러한 공격에 쉽게 무너질 수 밖에 없는 상황입니다.

 

최근 보안동향

얼마 전 세계적인 보안 회사인 시만텍(Symantec Corporation)사에서 발표한 Symantec Internet Security Threat Report는 최근의 보안을 다음의 다섯 가지로 요약하고 있습니다.

(1) 신규 취약점에 대한 공격코드(Exploit Code) 유포 기간 단축
(2) Bot에 의한 피해 증가
(3) 주요 기업의 웜(Worm) 피해 증가
(4) '전자상거래' 업종에 대한 공격 증가
(5) 웹 어플리케이션에 대한 공격 증가

 위에서 언급한 다섯 가지 사항들은 다시 웜/바이러스(Worm/Virus)와 웹 어플리케이션 보안(Web Application Security)으로 분류하는 것이 보안 동향을 파악하기에 용이하다고 생각됩니다.

1. 웜/바이러스 피해 증가
 먼저, 웜/바이러스에 대한 내용으로 위 다섯 가지 사항들 중에 (1) ~ (3)에 해당하는 내용입니다. Microsoft사의 운영체제 또는 응용 프로그램들에 대한 보안 취약점에 대한 발표는 꾸준히 있었으며, 이들 취약점들에 대한 각종 공격코드는 인터넷을 매체로 쉽게 전파되는 것과 동시에 자신의 실력을 과신하려는 악성코드(Malicious Code) 개발자들에게 악용되어 곧바로 웜/바이러스로 둔갑하여 인터넷을 돌아다니고 있습니다. 다만 웜/바이러스가 대상 시스템에 대한 공격 → 감염 → 전파 순으로 진행되던 예전과는 달리 감염된 시스템을 공격자가 원격에서 통제할 수 있는 기능을 포함한 Bot('Robot'의 줄임말)으로 더욱 진화하는 것이 큰 차이점이라고 할 수 있습니다.

2. 웹 애플리케이션 공격 증가
 웹 애플리케이션 공격은 최근 보안 이슈로 가장 대두되고 있는 내용입니다. 앞서 말한 바와 같이 현재의 인터넷 응용 기술 특히, 웹 애플리케이션 기술의 발전은 쇼핑, 주식투자, 은행업무 등 오프라인 상에서 머물러 있던 생활의 일부를 차츰 온라인으로 옮겨놓고 있습니다. 특히 민간 기업들은 오프라인 영역을 벗어나 인터넷 상에 온라인 상점을 하나 둘씩 열기 시작했으며, 성공한 사례의 경우 오프라인과 비교도 되지 않을 만큼 큰 효과를 거두고 있습니다. 물론 이러한 현상이 있기까지 다른 기술적 요소와 함께 주도적인 역할을 담당한 것이 웹 애플리케이션임을 부정할 수 없는 것이 사실입니다.

 그러나 한편으로는 "웹 애플리케이션은 인터넷 사용이 폭발적으로 증가하기 시작한 1994년 무렵부터 존재해 왔는데 지금에 와서야 보안의 이슈가 되는 것은 무슨 이유에서 인가?"라는 의문을 가질 수 있을 것입니다.


 웹 탄생 초창기에는 텍스트와 그래픽 이미지로 구성된 HTML 페이지가 인터넷 웹사이트의 대부분을 차지하고 있었습니다. 그러다 정적인 HTML 페이지로 구성된 웹 사이트의 한계에서 벗어나 CGI(Common Gateway Interface) 프로그래밍 기법의 등장과 Sun Microsystems, Microsoft 사 등 세계적인 정보기술 선두 업체들이 웹 어플리케이션 개발에 특화된 프로그래밍 언어 및 개발 방법론들을 발표하기 시작했으며, 게시판, 채팅 등 각종 동적인 기능들이 제공되는 웹 사이트들이 등장하여 카페, 커뮤니티, 채팅 전문 사이트를 거쳐 블러그, 미니홈피 등의 등장을 이끌게 되었습니다.
(사실 인터넷의 발전은 리눅스, 오픈소스, 컴퓨터의 대중화와 함께 기타 많은 요소들의 상호작용에 의해서 설명해야 하는 방대한 내용이나, 본 글에서는 주제의 성격상 웹 애플리케이션을 중심으로 설명할 수 없는 것에 대해서 독자들의 넒은 이해를 바라겠습니다.)

 이러한 인터넷의 발전과 함께 살펴보아야 할 것은 탄생과 소멸을 반복한 수많은 기술들이 전달하고자 했던 '정보'의 중요성 즉 정보의 격(格)입니다. 그 동안 수많은 정보들이 인터넷을 통하여 보내지고 받아졌으나 웹 애플리케이션 기술이 발전하고 쇼핑, 주식, 은행 등의 업무가 온라인으로 옮겨오면서 주문/상품정보, 거래 데이터, 카드번호, 계좌번호 등 개인/기업의 금융정보 간단하게 말하면, 직접적인 '돈'에 대한 정보가 다른 어느 때보다 온라인 상에 쉽게 노출되는 부작용이 나타나게 된 것입니다.

 다시 정리해 보면, 이러한 전자상거래와 웹 어플리케이션 보안에 대해서 살펴보면 불행히도 편리함의 이면에 위험한 보안 구멍이 존재하고 있다는 것입니다. 보고서의 통계자료에 따르면 2004년 상반기에 조사된 취약점 중 39%가 웹 애플리케이션 보안 취약점이며, 이들 웹 애플리케이션 취약점 중 82%가 해당 취약점에 대한 공격코드를 쉽게 적용할 수 있다고 합니다. 더욱 심각한 문제는 기존에 일괄적인 패치(Patch) 적용으로 해결해 왔던 운영체제 또는 널리 사용되는 애플리케이션에 대한 보안 취약점들과는 달리 웹 애플리케이션 보안 취약점은 개발 언어, 개발 방식, 운영 환경 등 인터넷에 존재하는 사이트 고유의 특성들로 인해서 일괄적인 해결이 쉽지 않다는 데 있습니다.

 웹 어플리케이션 보안이 대두되면서 OWASP(Open Web Application Security Project)라는 단체에서 웹 애플리케이션에 대한 기술적 취약점 및 이에 대한 해결방안을 기술한 'A Guide to Building Secure Web Applications'(최근 정식 버젼은 1.1이며, 2.0에 대한 알파버젼이 마지막 버전임)라는 문서 등을 배포하고 있습니다. 위 문서에서 기술하는 보안 취약점 중 모의해킹 또는 보안 프로젝트 수행 시 빈번하게 발견되는 보안 취약점은 아래 표와 같습니다.

취 약 점

설 명

SQL Injection

조작된 질의문(Query) 실행 공격

File Upload

실행가능한 파일을 업로드 후 서버측에서 파일 실행하는 공격

Path Traversal

다운로드 대상 파일에 대한 경로 조작으로 임의의 파일에 접근하는 공격

XSS(Cross-Site Scripting)

공격 스크립트 등록 후 타 사용자 브라우져에서 실행시키는 공격

Cookie

Cookie 값 조작을 이용한 공격

Parameter Manipulation

웹서버로 전달되는 매개변수(Parameter) 값 조작에 의한 공격

Mis-Configuration

웹서버 또는 써드파티(Third-Party) 제품의 설정오류를 이용한 공격

Admin Page

노출된 관리자 페이지에 대한 공격

Backup/Temporary File

불필요한 파일에 대한 접근 후 웹 어플리케이션 접근 정보 또는 데이터 파일 노출

[표-1] 웹 애플리케이션 주요 취약점

1.jpg  


[그림-1] Web Application Architecture

 

웹애플리케이션 주요 취약점(기 술적 측면)

1. SQL injection
대부분의 웹 애플리케이션은 데이터베이스와 연동됩니다. SQL Injection 취약점을 이해하기 위해서는 사용자가 입력한 값이 데이터베이스까지 전달되는 과정을 살펴볼 필요가 있습니다.

 사용자가 웹 브라우저에서 값을 입력하여 전송하면 웹서버는 이를 받아들여 다시 웹 애플리케이션 서버(WAS : Web Application Server)로 전달됩니다. WAS는 사전에 준비된 질의문(Query)과 전달 받은 매개변수 값을 조합하여 완전한 질의문을 작성하여 데이터베이스로 전달하고 데이터베이스는 이를 실행하고 그 결과는 입력 값이 전달된 반대 순서로 사용자에게 전달됩니다.

 위 설명은 모두 사용자가 정상적인 값을 입력하였다는 가정 하에 설명된 것입니다. 사용자가 비정상적인 값을 입력하였으며 입력 값에 대한 검증이 수행되지 않은 경우 WAS에서 질의문으로 조합되는 과정에서 문법에 맞지 않는 잘못 작성된 질의문이 데이터베이스에 전달되어 구문오류를 발생시킬 수 있으며, 더 나아가서는 적절한 입력 값 조작으로 개발 당시 의도하지 않는 결과를 유도할 수 있다는 것입니다.

2. File Upload
 많은 인터넷 사이트에서 구현하는 기능 중에 File Upload 기능이 있습니다. 대부분의 사용자들은 문서 파일이나, 프로그램 파일들을 업로드하는데, 웹 애플리케이션이 운영환경(웹서버의 종류, 운영체제, 개발언어 등)에 대한 정보를 수집한 후 jsp, asp, php, js, pl 등 공격 대상 웹 애플리케이션에서 실행 가능한 공격코드(파일)를 업로드한 후 원격에서 이를 실행시켜 공격을 수행하는 방식입니다.

 다음 그림은 시스템 명령어를 실행하여 그 결과를 웹 페이지로 출력하는 cmd.asp 실행파일 업로드 공격 결과 화면입니다. 공격자는 게시판, 자료실 등의 기능을 이용하여 공격 파일인 cmd.asp 파일을 업로드 후 해당 파일에 대한 가상경로를 확인하고, 브라우져 주소창에서 업로드 파일의 경로를 입력하여 원격에서 실행하여 공격에 성공한 사례입니다.

 

2.jpg


[그림-2] File Upload 공격 성공 화면

 

3. Path Traversal

다운로드와 관련된 취약점을 이용한 공격으로 Path Traversal 이 있습니다. 수많은 인터넷 사이트에서 다운로드 기능을 제공하는데 예전에는 다운로드 하려는 파일을 단순히 URL 링크하는 것으로 다운로드 기능를 수행하였으나, 몇몇 보안 및 기능상의 한계로 인해서 현재는 별도의 다운로드 스크립트를 제작하여 단순한 링크가 아닌 Stream 전송을 구현한 스크립트를 제작하여 사용합니다. 이러한 다운로드 스크립트의 제작시 간과하기 쉬운 보안결함을 악용한 취약점이 Path Traversal 취약점이다.


 흔 히 사용하는 다운로드 스크립트는 사용자에게 다운로드 할 대상화일 이름을 매개변수의 값으로 전달 받는데 이때 공격자가 입력받는 매개변수 값(파일명)을 조작하여 시스템 내부의 임의의 파일을 다운로드 시키는 취약점이 존재하는 경우를 흔히 발견할 수 있습니다.

 

3.jpg


[그림-3] Path Traversal 취약점을 이용한 공격 화면

 

4. XSS(CSS : Cross-Site Scripting)

 대 부분의 공격기법들이 웹 애플리케이션의 취약점을 악용하여 웹 애플리케이션 자체를 공격하는 방식이라면 XSS는 웹 사이트에 접속한 사용자를 공격 대상으로 하는 것이 다른 웹 어플리케이션 취약점과 구별됩니다.

 

 공 격자는 데이터 입력이 가능한 곳에 스크립트(주로 java script)를 등록하고 이 스크립트는 다른 사용자가 특정 페이지 조회시 HTML 문서에 포함되어 사용자에게 전송되므로 서버가 아닌 사용자의 브라우져에서 실행되며, 간단하게는 사용자의 브라우져를 다른 페이지로 이동시키는 공격에서부터 웹 서버와 사용자 웹 브라우져 사이에 주고받는 데이터를 공격자에게 전송하는 기능까지 공격자의 스크립팅 구현 능력에 따라 그 다양한 결과를 얻을 수 있습니다.

 

5. Cookie
 웹 전송 프로토콜인 HTTP의 특성상 사용자와 웹 애플리케이션 사이의 세션을 유지하기 위해서 생성한 세션값 또는 인증정보는 Cookie를 주로 활용하게 됩니다. 이러한 세션값은 jsp, php, asp 등 개발언어 자체 함수에서 임의의 세션값을 생성하기도 하고 별도의 세션값 생성 도구를 이용하는 방법이 이용되기도 합니다.


 하 지만 일부 인터넷 사이트는 사용자의 아이디/패스워드 등과 같은 인증정보를 Cookie에 저장하거나, 기타 웹 애플케이션에 중요하게 사용되는 정보를 암호화 과정 없이 저장하는 경우를 흔히 볼 수 있습니다.


 이 와 같이 중요한 정보에 대한 암호화 처리 없이 가독성이 제공되는 정보는 Cookie에 대한 조작에 의해서 인가되지 않은 사용자로의 접속 및 데이터 접근을 허가할 수 있는 위험을 초래할 수 있습니다.

 

6. Parameter Manipulation
 웹 애플리케이션 개발에 조금이라도 경험이나 지식이 있는 사람이라면, 브라우져 주소창에 나타나는 알듯 말듯한 문자들의 나열이 대략 어떤 용도로 사용되는지 알 수 있을 것입니다.


 이 러한 문자들은 GET 방식으로 웹 서버에 전달되는 매개변수들의 이름들과 각 매개변수의 값들이다. 이러한 브라우져 주소창에 나타나는 매개변수들을 관찰한 후 직접 이들 매개변수의 값을 조작하여 웹 애플리케이션의 오류나 인가되지 않은 데이터의 접근을 시도할 수 있다.

 

7. Mis-Configuration
 개발위주의 웹 애플리케이션과는 별도로 웹서버, WAS 또는 기타 웹 애플리케이션 구성요소의 설정오류로 인해서 발생하는 보안 취약점입니다.


 Mis- Configuration의 대표적인 예로 웹서버의 디렉토리 목록화(Directory Indexing) 취약점이 있으며, 이는 브라우져 주소창에서 웹 애플리케이션 실행 파일이 아닌 디렉토리 이름까지만 입력하므로써 해당 디렉토리의 내용이 그대로 출력되는 취약점을 말합니다.

 

8. Admin Page
 웹 애플리케이션은 대부분 일반인만을 대상으로 개발되는 것으로 착각하기 쉬운데 실제, 거의 대부분의 웹 애플리케이션 개발 프로젝트들은 관리목적의 관리자용 웹 애플리케이션 개발을 동시에 추진합니다.


 웹 애플리케이션 보안과 관련된 많은 문서에서는 이러한 관리용 웹 애플리케이션을 일반 사용자 웹 애플리케이션과 논리적/물리적으로 분류하여 운영하고, 외부의 접근을 최대한 제한 할 것을 권고하고 있으나, 실제 대부분의 관리용 웹 애플리케이션은 일반 사용자 웹 애플리케이션과 동일한 서버에서 운영되고 있으며 이러한 관리용 웹 애플리케이션은 쉽게 노출되어 있어 쉽게 공격의 대상이 될 수 있습니다.

 

9. Backup/Temporary File
Backup/Temporary File 취약점은 기술적이라기 보다는 관리자 또는 개발자의 주의가 요구되는 관리적인 성격이 강합니다. 개발 당시 테스트 용도의 임시 소스 또는 임시 백업 파일들에 대한 관리 소홀로 ZIP 또는 TAR로 묶은 웹 애플리케이션 개발 소스가 통째로 공격자 손에 들어가는 경우가 있을 수 있습니다.

웹 애플리케이션 보안 도입/ 개발 시 보안 고려사항(관리적 측면)

모든 제품이 마찬가지겠지만, 제작에 들어가기에 앞서 '설계'라는 단계를 거치게 됩니다. 제품에 사용될 소재를 선택하고, 소재에 대한 가공방식을 결정하며, 가동된 소재들의 조합과정을 기술하는 단계를 설계라고 하는데, 제품에 대한 잘못된 설계는 품질에 치명적인 영향을 미치며 자칫 제품은 제대로 세상에 빛을 보지도 못하고 사장될 수도 있다는 것은 상식적인 이야기라 하겠습니다.

 

웹 애플리케이션 개발이 대두되면서 다양한 개발 방법론이 출현하고 발전하였으나, 이러한 개발 방법론들을 살펴보면 웹 어플리케이션의 성능, 개발 효율성 등에 초점이 맞추어져 있어 보안요소의 고려는 상대적으로 적거나 아예 고려되지 않으며, 그나마 고려되었던 보안요소도 개발 실무 과정에서 무시되는 경우를 흔히 볼 수 있습니다.

 

다음에서 언급하는 내용은 웹 애플리케이션 설계단계에서 고려되어야 할 내용 중 중요한 몇 가지를 정리한 것이며, 앞서 기술한 웹 애플리케이션 기술적 취약점의 상당부분을 해결할 수 있습니다.

 

1. 인증(Authentication)
인증이란 모든 보안에서 가장 기본적으로 언급되는 내용 중에 하나로 사용자 또는 개체에 대한 식별(identifying)에 대한 것입니다. 사용자를 어떠한 방식으로 허가된 사용자인지 확인 결정할 것인지부터 시작하여, 웹 애플리케이션 서비스를 이용하는 동안 해당 사용자에 대한 인증 정보를 어떻게 유지할 것인가, 사용자와 웹 애플리케이션 사이에 전송되는 인증정보가 누출되어 악용되는 것을 방지하기 위한 정책적 고려, 적용될 기술 요소까지 우선적으로 결정해야 합니다.

 

2. 권한(Authorization)
 인증된 사용자에게 어느 정도의 활동영역을 할당할 것인가에 대한 내용으로, 사용자가 타 사용자정보에 접근하도록 할 것인지 변경하도록 할 것인지 등에 대한 내용이 권한에 대해서 기본적으로 고려되어야 할 사항입니다. 잘못된 권한정책의 수립으로 정보의 유출을 초래할 수 있으며, 상대적인 민감한 금융정보의 노출 또는 조작까지 이어지지 않도록 유의해야 합니다.

 

3. 데이터 보안 정책
 웹 애플리케이션의 동작 방식은 데이터의 흐름을 이해함으로써 가능합니다. 이러한 데이터의 흐름은 데이터의 출발지와 목적지에 따라 요구되는 보안성을 고려하여 어떤 정보를, 어디로, 어떻게 보내고 받을 것인가를 결정해야 합니다.

 

또 한 가지는 사용자로 입력 받은 데이터에 대한 검증입니다. 사용자와 웹 어플리케이션의 의사소통은 네트워크를 매개로 하여 무수히 많은 절차를 거치는데 이 과정에서 발생 가능한 기술적 오류 또는 악의적인 공격에 의한 데이터의 위/변조를 방지하기 위한 방안 역시 고려하여 정책을 수립하여야 합니다.

 

4. 감시
 아 무리 잘 설계되고 개발된 웹 애플리케이션이라 해도 보안 취약점은 발견되기 마련입니다. 더군다나 웹 애플리케이션은 인터넷이라는 모든 사람들을 대상으로 개발되었다는 특성을 고려하면 웹 애플리케이션에 대한 공격에 대한 가능성은 항상 존재하기 마련이며 이들에 대한 감시 및 발생할지도 모르는 장애 상황에 대비하여 웹 애플리케이션 구성요소에 대한 감시정책을 수립하고 그에 적합한 감시장치를 운영하는 것도 웹 애플리케이션 보안성을 향상시키는 방안입니다.

 

웹 애플리케이션 보안은 가장 최근에 대두되는 보안 이슈이며, 앞으로도 많은 기업들이 고객과 가까워지기 위해서 웹 애플리케이션이라는 '창구'를 열어둘 것이며, 지금까지 기술한 내용을 바탕으로 기존의 보안 이슈와는 다른 방식으로 접근하여 '창구'를 지키기 위한 방안도 같이 고려해야만 신뢰에 기반을 둔 안전한 웹 애플리케이션을 구축할 수 있을 것입니다.

  • profile
    NOS 2010.04.06 01:56

    이렇게 쉽게 설명을 해도..나는 까막눈이라는...

    웜 이거 정말. 무셔...

    예전 파리때...


Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234