본문 바로가기

정보보안/애플리케이션 보안

[웹 애플리케이션 취약점] 기타 취약점

정보누출 취약점

① 개념

  • 웹 애플리케이션의 민감한 정보가 개발자의 부주의로 인해 노츨되는 것
    • 주석구문에 포함된 정보가 의도치 않게 노출
    • 에러페이지/메시지를 통한 불필요한 정보 노출
  • 정보누출은 자체만으로 피해가 크진 않지만, 공격자가 공격하기 전 사전 정보 수집과정에서 실마리를 제공해주는 역할을 한다.

② 대응책

  • 웹서버 설정 파일(httpd.conf)를 통해 사용자 정의 에러 페이지를 설정한다.
    • ErrorDocument 지시자를 이용해 각 에러 코드별로 에러페이지를 생성하여 등록
  • PHP 환경의 설정파일(php.ini)을 통해 에러메시지를 차단한다.
    • php.ini 파일의 display_errors = Off 추가

HTTP 응답 분할 취약점
(Response Splitting)

① 개념

  • 클라이언트의 HTTP 요청에 포함된 요청 파라미터 값이 HTTP 응답헤더에 포함되어 클라이언트에게 다시 전달될 때, 파라미터값에 개행문자인 CR(%0D,Carriage Return)과 LF(%0A,Line Feed)가 포함되어 있으면 HTTP 응답이 2개 이상으로 분리될 수 있다. 이 경우에 개행문자를 이용하여 첫번째 응답을 종료시키고 두 번째 응답에 악의적인 코드를 삽입하여 XSS 등의 공격을 수행할 수 있는 취약점을 의미한다.

② 공격방식

  1. 공격자가 URL 조작
    • https://example.com/page?param=value%0D%0ASet-Cookie:%20attacker=1
    • 위 URL에서 %0D%0A는 \r\n을 URL 인코딩한 값으로, 이를 통해 서버의 응답 헤더를 분할하고 새로운 헤더나 본문을 삽입할 수 있다.
  2. HTTP 요청 및 응답 흐름
    • 클라이언트가 보낸 HTTP 요청: GET /page?param=value%0D%0ASet-Cookie:%20attacker=1 HTTP/1.1 Host: example.com
    • 서버의 응답: HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Set-Cookie: sessionId=abc123 Set-Cookie: attacker=1 <html> <head><title>Example Page</title></head> <body>Welcome to the example page.</body> </html>
    • 서버는 Set-Cookie: attacker=1이라는 추가 헤더를 포함하여 응답을 반환하게 되며, 클라이언트는 이를 실제 헤더로 인식할 수 있다.

③ 대응책

  • 클라이언트 요청 파라미터가 서버 프로그램에서 쿠키(Set-Cookie 응답헤더)로 사용되거나, 리다이렉션을 위해 Location 응답 헤더로 사용되거나 기타 응답헤더 설정에 사용될 경우 HTTP 응답 분할이 발생되지 않도록 필터링 해야된다.

XXE 인젝션 취약점
XML  eXternal Entity Injection

① 개념

  •  취약한 XML 파서가 외부 개체(External Entity)를 참조하는 XML 데이터를 처리할 때 공격자가 삽입한 공격 구문이 포함된 외부 개체가 동작하여 서버 파일 접근 등 발생할 수 있는 취약점을 의미한다.
    • XML 파서 : XML 문서의 평문 데이터를 읽어들여 문법 검사 및 프로그램 내에서 접근하고 조작할 수 있도록 XML DOM 객체 등으로 변환해주는 도구
  • XML 문서에는 DTO(Document Type Definition, 문서 유형 선언)를 포함할 수 있으며 DTD는 XML 개체를 정의할 수 있다.
    • DTD는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 요소,속성,개체 등을 정의하기 위한 목적으로 사용되며 <!DOCTYPE> 요소(태그) 내에 위치한다.
    • XML 개체는 반복적으로 사용되는 문장이나 문자열 등의 데이터를 쉽게 참조할 수 있도록 정의해 놓은 것을 말하며, 정의한 개체는 xml문서 내에서 참조된다.
    • XML 개체의 정의는 DTD 내부에 직접 정의(내부개체)하거나 파일,URL 등과 같은 외부 자원에서 가져와 SYSTEM 키워드를 통해 정의(외부개체)할 수 있으며, 문서 내에서 "&개체명;" 형식으로 참조가 가능하다.

 

② 공격 예시

  1. 시스템 중요 파일에 접근하는 외부 개체 정의
    • 공격자는 악의적으로 시스템 내부의 중요 파일에 대한 상대 경로/절대 경로를 외부 개체로 정의하여 파일 내용을 참조할 수 있다.
    • ex. <!ENTITY foo SYSTEM "file////etc/passwd"><RESULT>&foo;</RESULT>
      • 시스템(웹서버)의 /etc/passwd파일을 참조할 수 있는 foo 외부 객체가 포함된 XML 데이터를 입력해 해당 파일에 접근하고 있으며, XXE 인젝션을 이용한 LFI(Local File Inclusion) 공격 형태이다.
  2. URL을 통한 외부 개체 정의
    • 공격자는 악의적으로 서비스를 요청할 수 있는 URL 경로를 외부 개체로 정의하여 요청에 대한 결과를 참조할 수 있다.
    • 보통 외부에서 접근할 수 없는 내부 서비스 url을 요청한다.
    • ex. <!ENTITY foo SYSTEM "https://img.example.com/home/custimg.jpg">
      • XXE 인젝션을 이용한 RFI(Remote File Inclusion) 공격 형태이다.
  3. XML 개체를 이용한 도스 공격
    • XML 내 하나의 개체가 다른 개체를 반복적으로 참조하도록 구성하여 해당 개체를 생성하는 과정에서 서버 부하를 발생시키는 도스 공격이다. 
      <?xml version="1.0"?>
      <!DOCTYPE lolz [
        <!ENTITY lol "lol">
        <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
        <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
        <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
        <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
        <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
      ]>
      <root>&lol5;</root>
      lo5개체를 최종적으로 생성하기 위해 다수의 lol 개체들을 반복적으로 생성하도록 함으로써 서버의 메모리 자원 소모를 발생시킨다.

 

③ 대응책

  • 웹 애플리케이션에서 사용하는 XML의 외부 개체 참조기능을 사용하지 않도록 비활성화한다. 
    • (php) libxml_disable_entity_loader(true); 추가
  • xml 문서 내 외부개체를 사용하지 못하도록 외부개체를 선언하는 DTD(DOCTYPE 태그)를 필터링한다.

XPath/XQuery 인젝션 취약점

① 개념

  • 데이터베이스와 연동된 웹 애플리케이션에서 XPath 및 XQuery 질의문에 대한 필터링이 제대로 이루어지지 않으면 공격자가 입력이 가능한 폼에 조작된 질의문을 삽입하여 인증 우회를 통해 인가되지 않은 데이터를 열람할 수 있는 취약점

② 대응책

  • XPath, Xquery에 사용되는 외부 입력데이터에 대해 특수문자 및 질의 예약어 ㅣㄹ터링 수행
  • (선처리 질의문) 스트링을 연결하는 형태로 구성하지 말고 인자화된 질의문 사용

악성 컨텐츠 취약점

① 개념

  • 웹 애플리케이션에서 사용자 입력값에 대한 필터링이 제대로 이루어지지 않으면 공격자가 악성 컨텐츠를 삽입할 수 있으며, 악성 컨텐츠가 삽입된 페이지에 접속한 사용자는 악성코드 유포 사이트가 자동으로 호출되어 악성코드에 감염될 수 있는 취약점

② 대응책

  • SQL Injection, XSS, 파일 업로드 변조 기법을 통해 삽입할 수 있으므로 해당 취약점을 반드시 제거한다.

자동화 공격 취약점

① 개념

  • 특정 프로세스에 대한 접근시도 횟수 제한을 설정하지 않아 공격자가 봇등을 활용해 수백번의 접근을 시도할 수 있으며, 이를 반복수행함으로써 DOS 등이 진행되어 시스템 가용성을 떨어트릴 수 있는 취약점

② 대응책

  • (횟수 제한) 일정 횟수 이상의 로그인 시도가 발생하면 자동화 공격으로 인식하여 로그인할 수 없도록 차단
  • (GAPTCHA 활용) 실제 사람인지, 컴퓨터인지 구별하기 위한 방법으로 사람이 쉽게 인식할 수 있는 것을 그림으로 변환해 입력하게 한다.

 


쿠키 변조

① 개념

  • 사용자 인증 방식 중 하나인 쿠키를 공격자가 변조해 다른 사용자로 전환하거나 권한 상승이 가능한 취약점
  • 쿠키는 클라이언트쪽에 저장되므로, 특성상 변조 위험에 노출되어있다. 그러나 활용도가 높아 많이 사용됨

② 대응책

  • 클라이언트의 자원을 사용하는 쿠키보단 서버의 자원을 사용하는 세션방식을 사용하는 것이 권장되며 부득이하게 쿠키 사용시, 암호를 적용해야 한다.
  • 세션 방식은 접속자별로 세션을 생성해 사용자의 정보를 각각 지정할 수 있는 객체로써, 페이지의 접근을 허가/금지하거나 사용자별 정보를 저장할 때 많이 사용한다.