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 : 사용자의 쿠키정보 추출가능. 원치않는 사이트로의 이동 등.
* AJAX의 JavaScript 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 길이제한 및 문자기호 필터링.
이 외에도 여러가지 웹 보안대책이 있을 수 있겠지만 보안에 너무나 신경을 쓴 나머지
'IT_Programming > AJAX · Atlas' 카테고리의 다른 글
[ASP.NET_AJAX] ASP.NET AJAX for non-UpdatePanel scenarios (0) | 2010.12.26 |
---|---|
XMLHttpRequest + InnerHTML을 적용한 간단한 예제.. (0) | 2009.02.06 |
[펌] Exploring Reverse AJAX (0) | 2007.03.19 |
AJAX 관련 Reference URL (0) | 2007.02.10 |
[한번 따라해 보자] Atlas 기본 예제 동영상 (0) | 2007.01.24 |