IT_Programming/AJAX · Atlas

[펌] AJAX는 보안에 취약하다?

JJun ™ 2008. 1. 25. 11:56
AJAX는 보안에 취약하다? (AJAX를 사용하지 않은 당신의 웹사이트는 안전합니까?)

AJAX는 새로운 기법이 아닌 예전부터 존재하고 있던 웹 구축 기법중 잘 사용하지 않았던 기법을 사용한 것이고 또한 AJAX는 웹 페이지 전체가 아닌 일부에만 이용됩니다.

다만, 잘 사용하지 않던 기법을 사용한 것이므로 보안에 대한 완벽한 검증이 아직 이루어지지

않은 상황이며 다음과 같은 몇 가지 취약점이 드러나 있습니다..

(전통적인 웹 구축 기법으로 구현된 사이트에서도 계속적으로 취약점이 드러나고 있는 사실은

 다 아시죠? 그 누구도 열 수 없는 자물쇠는 존재하지 않습니다.)

 

1. JavaScript Hijacking.

2. XHR 객체 요청 / 응답시 평문전송.

3. 무제한 요청 / 응답으로 인한 서버 부하증대로 인한 사이트 마비 가능성.

4. 서버 리소스 URL 제한.

 

1, 2번 취약점의 경우 AJAX의 취약점이기도 하지만 웹사이트의 기본 취약점이기도 합니다.

, 기존 방식으로 구축된 웹 페이지부터 우선적으로 취약점을 제거하면 AJAX의 취약점이  감소하게 되어 있으므로 AJAX보안이라 따로 명명하기보다는 웹 보안이라 총칭을 하여 고객의 불안을 감소시켜야 할 것입니다.

또한, 현재 알려진 AJAX의 취약점은 모두 해결방안이 존재한다는 것을 주지시켜

개발자들이 AJAX로 개발함에 있어서 두려움과 망설임없이 창의력을 발산시킬 수 있겠죠? 그럼 우선적으로 알려진 취약점 및 해결방안을 알아보겠습니다.


특성 및 해결방안

 

1. JavaScript Hijacking.

à Cross site script 의 방식과 유사. AJAX JavaScript 공격.

* 기존 웹 사이트의 Cross site script : 사용자의 쿠키정보 추출가능. 원치않는 사이트로의 이동 등.

* AJAXJavaScript Hijacking : JavaScript가 데이터 전송을 다루기 때문에 악의적인 요청으로 인한 민감한 데이터의 유출 가능성 존재.

 

à 1. 게시판 등에 글을 올릴 때 ‘GET , POST, GWT’등 AJAX JavaScript 에서 사용되는 단어를 필터링하여 막는다.

   2. 게시판 등에 글을 올릴 때 [while(1)], [/* */] 등의 스크립트를 삽입하여 무한루프를 돌리거나 악의적인 요청이 가능하므로 역시 필터링하여 막는다.

 

2. XHR 객체 요청 / 응답시 평문전송.

à 서버로부터 받아온 데이터를 html에 전달해주는 과정에서 평문으로 데이터 전송이 이루어지므로 누군가가 sniffing 하는 경우 데이터가 쉽게 노출될 수 있음.

 

à aSSL (AJAX secure service layer) 기법(128-bit key with the server using the RSA algorithm) 을 이용하여 요청 / 응답시 암호화 가능 (현재 베타버전만 있음).

(, 로긴시 보안등급이 없거나 민감한 정보가 없는 - 게시판만 있는 사이트의 경우 – 궂이 사용할 필요 없음.)

 

3. 무제한 요청 / 응답으로 인한 서버 부하증대로 인한 사이트 마비 가능성.

à 웹사이트에서 가장 부하를 주는 부분이 SQL 요청이라는 것 다들 아시죠? 사용자가 늘어나고 계속적인 SQL 요청이 있을 경우 웹사이트가 다운될 수 있습니다. 또한, 악의적인 공격자들은 서버를 마비시킨 후 정보를 빼내는 방법을 즐겨 사용합니다. 개발자 스스로가 사이트를 마비시켜서는 안되겠죠?

 

à 요청시간간격을 늘려 부하감소 / 데이터 요청시 실시간 DB 검색 방법을 사용하지 않고  미리 만들어놓은 파일에서 읽어오는 방식 사용하여 서버의 부하를 줄여야 합니다.

 

4. 서버 리소스 URL 제한.

à XHR 객체가 자기가 속해있는 도메인이 아닌 그 밖에 있는 서버의 URL 호출시 IE 의 경우에는 alert 창을 띄우면서 보안 위해요소가 있으니 계속 진행할 것인지 아닌지를 사용자가 판단할 수 있게 되어있고, FireFox 의 경우는 에러를 보여주며 요청자체를 브라우저에서 차단해 버린다.

 

à 웹 개발시 XHR객체가 자기가 속해있는 도메인의 URL만 호출하는 방식으로 개발.


AJAX로 웹페이지 구축시 보안대책 : 기존 웹 보안 + AJAX 보안적용.

 

기존 웹 보안 대책 : 국가사이버안전센터 발표 8대 홈페이지 취약점을 제거한다.

 

국가사이버안전센터 발표 8대 홈페이지 취약점

1.       Directory listing

2.       File Download

3.       Cross site script

4.       File Upload

5.       WebDav (Web Distributed Authoring & versioning)

6.       technote

7.       zeroboard

8.       SQL injection


1.      Directory listing

l       발생요인 : 홈페이지 속성을 설정시 특정 디렉토리에 대해 ‘디렉토리검색’ 항목이 체크되어 있거나(IIS) Indexes’ 옵션설정이 on되어 있는 경우(apache).

l       취약점 : 인터넷 사용자에게 모든 디렉토리 및 파일 목록이 보여지게 되고, 파일의 열람 및 저장이 가능하게 되어 비공개자료 유출가능성 존재.

l       해결방안 : 웹 서버 설정을 다음과 같이 바꾸어준다.

 

-         윈도우 웹 서버

-         제어판 > 관리도구 > 인터넷 정보 서비스 메뉴에서 기본 웹 사이트의 마우스 오른쪽 클릭, [속성] 에서 [기본 웹 사이트 등록정보] 선택.

-         기본 웹 사이트 등록정보 > 홈 디렉토리 > 디렉토리 검색 옵션 체크해지.

 

-         Apache 웹 서버

-         /etc/apache/conf/httpd.conf 파일의 option 항목에서 Indexes 항목 제거후 웹 서비 리부팅.

 

2.      File Download

l       발생요인 : 게시판등에 저장된 자료에 대해 ‘다운로드 스크립트 ‘를 이용하여 다운로드기능을 제공하면서, 대상 자료파일의 위치 지정에 제한조건을 부여하지 않았을 때 발생.

l       취약점 : URL 다운로드 스크립트의 인수값에 ‘../  같은 문자열을 입력하여 시스템 디렉토리등에 있는 /etc/passwd 같은 비공개 자료들의 유출가능성 존재.

l       해결방안 : 첨부 파일이 저장되어있는 특정 디렉토리에 있는 파일만을 다운받을 수 있도록 다운로드 스크립트 수정해야 함.

- 스크립트로 파일명에 “.., /, \” 등의 문자열 필터링.


 

3.      Cross site script

l       발생요인 : 게시판에 새 게시물을 작성하여 등록시 사용자의 입력을 받아 처리하는 웹 프로그램에서 입력내용에 대해 실행코드인 스크립트의 태그를 적절히 필터링하지 않았을 때 발생.

l       취약점 : 악의적인 스크립트가 포함된 게시물을 등록할 수 있어 해당 게시물을 열람하는 일반 사용자의 PC로부터 개인정보인 쿠키 유출가능성 존재.

l       해결방안 : 글쓰기가 가능한 게시판 페이지에서 사용자들의 input에 대해 스크립트를 모두 필터링.

-         입력시 html 태그 필터링.

-         Script 문장에 존재할 수 있는 메타캐릭터를 필터링.

< à <,

> à >,

(  à (,

)  à ),

# à #,

& à&

 

4.      File Upload

l       발생요인 : 첨부파일 업로드 허용시 실행가능한 php, php3, asp등의 확장자의 이름의 스크립트 파일의 업로드를 허용하는 경우.

l       취약점 : 해커가 악성 실행 프로그램을 업로드한 후에 홈페이지 접속 방식으로 원격에서 서버컴퓨터의 시스템 운영 명령어 실행가능성 존재.

l       해결방안 : 첨부파일 확장자 필터링.

-         php, php3, asp, inc, cgi, pl등 실행가능한 확장자 필터링.

-         대문자, 대소문자 혼용시도 필터링.

-         --.txt.asp”등의 이중 확장자도 필터링.

 


5.      WebDav (Web Distributed Authoring & versioning)

l       발생요인 : 윈도우 서버 컴퓨터에서 기본으로 설치되는 원격관리기능인 WebDAV가 계속 사용가능하도록 설정되어있고, WebDAV 라이브러리 파일의 속성 및 홈페이지 디렉토리에 쓰기 권한이 모두 허용되어 있는 경우.

l       취약점 : 해커가 WebDAV 도구를 사용, 원격에서 홈페이지 디렉토리에 임의의 파일을 삽입하여 화면 변조 가능성 존재.

l       해결방안 :

- 원격 웹 서버 관리하지 않는다면 WebDAV 기능 중지.

- httpext.dll 파일의 Everyone 권한삭제.

 

6.      technote

l       발생요인 : 국내개발되어 무료 배포중인 게시판 구축 프로그램 ‘테크노트’ 의  일부 CGI 프로그램들에서 인수값 처리시에 ‘|’ 문자 이후에 나오는 컴퓨터 운영 명령어가 실행될 수 있는 취약점 존재.

l       취약점 : 해커가 홈페이지 접속 방식으로 컴퓨터 명령어를 실행하여 화면 변조 및 컴퓨터 조작 가능성 존재.

l       해결방안 : 자체 게시판 사용으로 인한 취약점 원천봉쇄.

(웹 개발자가 상용 게시판을 그대로 사용하지는 않겠죠?

웹 사이트의 생명은 멋진 게시판이라 봐도 무방하지 않을까요?)

 

7.      zeroboard

l       발생요인 : 국내개발되어 무료 배포중인 게시판 구축 프로그램 ‘zeroboard’ 의  일부 PHP 프로그램들이 원격에 있는 PHP파일을 실행할 수 있는 취약점 존재.

l       취약점 : 해커가 홈페이지 접속 방식으로 컴퓨터 명령어를 실행하여 화면 변조 및 컴퓨터 조작 가능성 존재.

l       해결방안 : 자체 게시판 사용으로 인한 취약점 원천봉쇄.

 

8.      SQL injection

l       발생요인 : 웹주소창 또는 사용자 ID 및 패스워드 입력화면에서 데이터베이스 SQL문에 사용되는 문자기호 (, , --)의 입력을 적절히 필터링 하지 않은 경우.

l       취약점 : 해커가 SQL문으로 해석될 수 있도록 조작한 입력으로 데이터베이스를 인증절차없이 접근하여 권환획득, 자료 무단유출 및 변조 가능성 존재.

l       해결방안 : ID, passwd 길이제한 및 문자기호 필터링.

 

 이 외에도 여러가지 웹 보안대책이 있을 수 있겠지만 보안에 너무나 신경을 쓴 나머지

사이트개발이 뒷전이 될 수 있으므로 이정도로 마무리하는게 좋을 듯 합니다