adsense

글 목록

웹 개발 취약점 정리 - 1. 입력값 검증 부재 취약점 조치 방법



<다음의 취약점 조치방법 안내>

SQL Injection, SSI Injection, LDAP Injection, XPath Injection, XSS, CSRF, 검증되지 않은 리다이렉트 및 포워드, 파일 업로드


보안 공부를 하다보면 마주할 수 밖에 없는 잡다한 취약점들....

피하고 싶었지만 결국 한번은 봐야 해서 정리한 내용들


[각 취약점 내용 및 대응방법은 '홈페이지 취약점 심층점검 가이드' 에 나온 내용]


1. 입력값 검증 부재

프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정, 일관되지 않은 언어셋 사용 등으로 인해 발생되는 보안 약점

주요 취약점 

1.1 SQL Injection, 1.2 SSI Injection, 1.3 LDAP Injection, 1.4 XPath Injection

1.5 XSS, 1.6 CSRF, 1.7 검증되지 않은 리다이렉트 및 포워드, 1.8 파일 업로드


1

SQL Injection

내용

데이터베이스(DB)와 연동된 웹 애플리케이션에서 SQL 질의문에 대한 필터링 없을 경우 공격자가 페이지 내 입력 폼에 질의문을 삽입하여 데이터베이스 정보를 열람 또는 조작

점검 내용

대화형 웹 사이트에 비정상적인 사용자 입력 값 허용을 차단, 악의적인 데이터베이스 접근 및 조작을 방지

è  SQL 쿼리를 전달하여 DB 에러페이지가 반환되는지 확인

è  로그인 창에 참이 되는 SQL 쿼리를 전달하여 로그인이 되는지 확인

è  임의의 SQL , 거짓 쿼리에 따라 반환되는 페이지가 다른지 확인

대응 방법

1) 웹 서버 내에서의 조치

가)   웹 서버의 오류 정보가 사용자에게 노출되지 않도록 조치


나)   웹 애플리케이션과 연동되는 데이터베이스의 접근 권한을 최소화


다)   사용자 입력 폼(로그인 폼, 검색 폼, URL )을 대상으로 특수문자 필터링 규칙 적용

2) 홈페이지 개발 보안 조치

사용자로부터 입력되는 입력 값에 대한 검증과 예외처리

     ID, PASSWORD, 게시판, 제목, 본문, 검색창, 주소검색창 등의 모든 입력란에 악용 가능한 특수문자를 입력하지 못하도록 웹 서버의 소스코드를 수정

    입력 값에 정의된 문자 길이를 검증하여 SQL문이 추가 삽입되지 않도록 구현

    파라미터가 숫자인 경우 isnumeric과 같은 함수를 이용하여 검증하며, 문자인 경우 정규표현식을 이용하여 특수문자를 치환

※ 특히, SQL문에서 활용되는 문자(', ", ;, --, # )는 반드시 치환

   

 

2

SSI Injection

내용

HTML 문서 내 입력받은 변수 값을 서버에서 처리할 때 부적절한 명령문이 포함, 실행되어 서버의 데이터가 유출

SSI(Server Side Includes) : CGI 프로그램이나 다른 동적인 기술로 페이지 전체를 만들어 서비스하지 않고도 HTML 페이지에 동적으로 생성한 내용을 추가할 수 있도록 웹 서버가 사용자에게 페이지를 제공하기 전에 구문을 해석하도록 지시하는 역할을 함

점검 내용

적절한 입력 값 검증 절차를 마련, 악의적인 파일을 include 시키지 못하도록  불법적인 데이터 접근을 차단

è  SSI 명령어를 전달하여 실행되는지 확인

대응 방법

홈페이지 개발 보안 조치

가)   사용자 입력으로 사용 가능한 문자들을 정해놓음


나)   정해진 문자들을 제외한 나머지 모든 문자들을 필터링


다)   필터링 해야 하는 대상은 GET 질의 문자열, POST 데이터, 쿠키, URL, 일반적으로 브라우저와 웹 서버가 주고받는 모든 데이터를 포함,

 

 

3

LDAP Injection

내용

웹 애플리케이션에서 검증되지 않은 입력 값을 사용해서 동적으로 생성된 LDAP 구문에 의해 악의적인 LDAP 명령이 실행. 개인정보 유출, LDAP 트리의 수정 및 삭제 등이 가능

LDAP(Lightweight Directory Access Protocol) : 조직이나 기업에서 내부 자원(파일, 장치 등)등의 위치를 찾고 조작할 수 있게 하는 소프트웨어 프로토콜

점검 내용

취약한 시스템에 신뢰할 수 없는 LDAP 코드 삽입 공격을 통한 악의적인 행위를 차단

è  변조된 LDAP 쿼리를 전달하여 실행되는지 확인

대응 방법

홈페이지 개발 보안 조치

가)   사용자 입력 값을 White List로 지정하여 영문(a-z, A-Z)과 숫자(0-9)만을 허용


나)   DN(Distinguished Name:디렉터리 항목을 고유하게 식별하는 이름)과 필터에 사용되는 사용자 입력 값에는 특수문자가 포함되지 않도록 특수문자 제거


다)   특수문자를 사용해야 하는 경우 특수문자(DN에 사용되는 특수문자는 ‘\’, 필터에 사용되는 특수문자는 =, +, <, >, #, ;, \)에 대해서는 실행 명령이 아닌 일반문자로 인식되도록 처리

 


4

XPath Injection

내용

데이터베이스와 연동된 웹 애플리케이션에서 XPath(XML Path Language) XQuery 질의문에 대한 필터링이 없을 경우 공격자가 입력이 가능한 폼에 조작된 질의문을 삽입, 인증 우회를 통해 XML 문서로부터 인가되지 않은 데이터를 열람

점검 내용

XPath 쿼리에 대한 적절한 필터링을 적용하여 웹사이트의 로직 손상 및 특정 데이터 추출을 차단하기 위함

è  로그인 창에 참이 되는 XPath 쿼리를 전달하여 로그인이 되는지 확인

è  임의의 XPath , 거짓 쿼리에 따라 반환되는 페이지가 다른지 확인

대응 방법

1) 웹 방화벽에서의 조치
모든 사용자 입력 폼을 대상으로 특수문자, 특수 구문 필터링 규칙 적용

2) 홈페이지 개발 보안 조치

가)   서버로 전달되는 사용자 입력 값 검증 시 XPath 인젝션에 주로 사용되는 문자(‘, “, [ )들을 리스트로 지정하여 해당하는 문자가 존재할 경우 질의문 실행이 불가능하도록 설정


나)   URLDecoder 클래스에 존재하는 decode 메소드를 통해 URL 인코딩이 적용된 사용자 입력 값을 디코딩함으로써 우회공격을 차단


다)   XML 조회를 수행하는 쿼리문 작성 시 외부 입력 값이 쿼리문의 구조를 바꿀 수 없는 API(. Java API - XQuery)를 사용

  

  

5

크로스 사이트 스크립트(XSS)

내용

사용자 입력 값을 받는 웹 사이트의 게시판, URL 등에 악의적인 스크립트를 삽입하여 게시글이나 이메일을 읽는 사용자의 쿠키(세션)를 도용하거나 악성코드를 유포

점검 내용

웹 페이지 내 크로스 사이트 스크립팅 취약점을 제거하여 악성 스크립트의 실행을 차단

è  웹 페이지 입력 폼에 스크립트를 저장하여 실행되는지 확인

è  웹 페이지 입력 값 변수에 스크립트를 전달하여 실행되는지 확인

대응 방법

1) 웹 서버 내에서의 조치

가)   웹 서버에서 입력 값에 정의된 문자 길이를 검증하여 자바스크립트 등의 명령이 삽입되지 않도록 수정

 

나)   웹 서버의 검증·치환 등의 과정은 서버 사이드 스크립트(Server Side Script)에서 구현하여 검증·치환기능의 우회를 차단 (검증·치환 등의 기능을 자바스크립트로 구현할 경우 우회 가능)

 

다)   웹 서버에서 HTML 형식의 입력이 불가피할 경우만 XSS 공격에 주로 사용되는 Tag입력을 차단

 

라)   웹 서버는 사용자 입력 폼(로그인 폼, 검색 폼, URL )을 대상으로 특수문자, 특수구문 필터링 규칙 적용

 

마)   웹 서버의 취약점 조치를 완료한 후 위 과정을 다시 수행하여 XSS 취약점의 추가 존재여부를 재점검

 

2) 홈페이지 개발 보안 조치

가)   홈페이지 소스코드는 사용자가 입력한 문자열에서 [〈,〉,&”] 등을 replace등의 문자 변환 함수(혹은 Method)를 사용하여 [ &lt, &gt, &amp, &quot ] 로 치환

 

나)   홈페이지 게시판 등에서 HTML 태그 허용 시 HTML 태그의 리스트(White List)를 선정한 후, 해당 태그만 허용하는 방식 적용

  

   

6

크로스 사이트 리퀘스트 변조(CSRF)

내용

사용자의 신뢰(인증) 정보 내에서 사용자의 요청을 변조함으로써 해당 사용자의 권한으로 악의적인 공격을 수행.

사용자 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청

점검 내용

사용자 입력 값에 대한 적절한 필터링 및 인증에 대한 유효성을 검증하여 신뢰(인증) 정보 내의 요청에 대한 변조 방지

è  XSS 취약점 존재 여부 확인확인

è  링크 클릭 시 의도하지 않은 요청이 수행되는지 여부 확인

대응 방법

홈페이지 개발보안 조치

가)   사용자로 하여금 조작된 요청을 전송하지 않도록 사용자가 입력하는 값에 대한 검증 로직 설계

 

나)   정상적인 요청과 비정상적인 요청을 구분할 수 있도록 Form/URL에서 임의의 토큰을 추가하고 이 토큰을 검증하도록 구현

 

다)   정상적인 경로를 통한 요청과 비정상적인 경로를 통한 요청을 구분하기 위해 Referer 값검증 로직 구현

 

 

라)   HTML이나 자바스크립트에 해당되는 태그 사용을 사전에 제한하고 서버 단에서 사용자 입력 값에 대한 필터링 구현

 

마)   HTML Editor 사용으로 인한 상기사항 조치 불가 시, 서버 사이드 서블릿/HTML Editor/ DAO(Data Access Object) 영역에서 조치하도록 설계

 

바)   XSS 취약점과 마찬가지로 사용자 입력 값에 대한 적절한 필터링 및 인증에 대한 유효성 검증을 통해 방지 가능

 

   

7

검증되지 않은 리다이렉트 및 포워드

내용

웹 애플리케이션에 접속한 사용자를 다른 페이지로 이동 시키는 경우, 이동되는 목적지에 대한 검증 부재 시 피싱(Phishing), 악성코드 사이트 등의 접속 및인가되지 않는 페이지로 접근이 가능

*리다이렉트(Redirect) : 클라이언트에서 다른 페이지로 변경

*포워드(Forward) : 서버 단 자체에서 페이지 변경

점검 내용

승인되지 않은 파라미터로 리다이렉트 및 포워드가 발생하는 것을 차단

è  페이지 이동을 위한 변수를 사용하는지 여부 확인

대응 방법

홈페이지 개발 보안 조치

가)   리다이렉트 및 포워드 발생을 일으키는 파라미터 사용을 지양

 

나)   외부입력 값이 페이지이동(리다이렉트 또는 포워드)을 위한 URL로 사용되어야 하는 경우, 허용된 목적지(White-List)로만 이동할 수 있도록 설계

 

다)   페이지 이동을 허용하는 URL목록을 소스코드에 하드코딩 하거나, 설정파일(XML, properties)에 저장하여 허용된 URL로만 이동할 수 있도록 구현

 

   

8

파일 업로드

내용

대부분의 홈페이지에 포함되어 있는 게시판 등과 같이 파일을 첨부할 수 있는 기능을 가진 웹 페이지에 존재
서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드 가능하고, 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우 시스템 내부명령어를 실행하거나 외부와 연결하여 시스템 제어

점검 내용

업로드 되는 파일의 확장자에 대한 적절성 여부 검증을 통해 공격자가 조작된 Server Side Script 파일 업로드 방지 및 서버 상에 저장된 경로를 유추하여 해당 파일 실행을 불가능하게 하기 위함

è  Server Side Script 확장자(jsp, asp, php ) 파일 업로드 가능 여부 확인

è  업로드 된 Server Side Script 파일의 실행 가능 여부 확인

대응 방법

1) 웹 서버 내에서의 조치

웹 서버 설정을 변경하여 업로드 된 해당 파일의 실행권한을 차단

IIS 웹 서버 조치 방법

[제어판] → [관리도구] → [인터넷 서비스 관리자] → 업로드 폴더 선택 → [속성] 클릭마우스 오른쪽 버튼 클릭 → [등록 정보] → [실행권한] → [없음] 선택

 

Apache 웹 서버 조치 방법

아파치 웹 서버의 설정 파일인 httpd.conf 파일에서 Options ‘IncludesNoExec’ 지시어 추가

<Directory "업로드를 금지할 디렉터리">

AddType application/x-httpd-php3-source .php3 .php .phps .ph .cgi .jsp .inc .htm .html shtml

Options IncludesNoExec

</Directory>

 

2) 홈페이지 개발 보안 조치

가)   우회 기법을 통한 악의적 파일 업로드를 차단

    파일 업로드 가능 여부를 검증하는 기능을 서버 사이드 스크립트(Server Side Script)로 구현하여 우회 기법을 통한 업로드 공격을 사전에 차단

    자바스크립트로 필터링 기능을 구현할 경우 사용자가 임의로 수정 및 삭제 할 수 있으므로 차단기능을 우회 가능

    파일 업로드 필터링 방식은 White-List 방식(업로드 가능한 확장자만 허용)을 이용하여 확장자 변경 등의 우회 기법을 차단

 

나)   파일이 업로드 되는 디렉터리(위치 및 파일명)가 사용자에게 노출되지 않도록 조치

    파일명과 확장자를 외부사용자가 추측할 수 없는 문자열로 변경하여 저장하고 실제 파일명은 데이터베이스에 보관하는 등 정보를 이원화하여 운영


) 저장 경로는 ‘web document root’ 밖에 위치시켜 웹을 통한 직접 접근 차단


) 파일 실행여부를 설정할 수 있는 경우 실행 속성을 제거

 


취약점 관련 추가 내용들

2. 취약한 접근 통제 취약점 조치방법

2.1 관리자 페이지 노출, 2.2 경로추적 및 파일 다운로드, 2.3 자동화 공격

3. 취약한 인증 취약점 조치방법

3.1 URL/파라미터 변조, 3.2 불충분한 세션 관리, 3.3 쿠키 변조, 3.4 디폴트/취약한 계정사용

4. 민감한 데이터 노출 취약점 조치방법

4.1 부적절한 에러메시지 노출, 4.2 소스코드 내 중요 정보 노출, 4.3 중요 정보 비 암호화 통신

5. 잘못된 보안 구성

5.1 디렉터리 인덱싱, 5.2 불필요한 Method 지원, 5.3 취약한 파일 존재, 

5.4 히든필드 조작, 5.5 알려진 취약점이 있는 구성요소 사용


참조 : '교육기관 홈페이지 취약점 심층점검 가이드'