본문 바로가기

보안

WSTG (web security testing guide) 정보수집 정리 PART2

반응형

○ 4.5 정보유출을 위한 웹페이지 콘텐츠 리뷰

테스트 목표

1. 웹페이지의 주석과 메타데이터를 검토

2. javascript 파일 수집, js 코드 검토

3. 소스 맵 파일 또는 디버그 파일 존재여부 확인

1. 웹페이지 주석과 메타데이터

HTML 주석은 개발자들이 어플리케이션의 디버깅정보를 포함하기 위해 사용합니다.

때로는 운영 환경에 남겨두기도하므로 <!-- 로 시작하는 HTML 주석을 찾아야합니다.

SQL 코드, 사용자 이름, 비밀번호, 내부 IP주소, 디버깅 정보와 같이 민감한 정보를 얻을 수 있는 주석을 확인해야합니다.

 

HTML 문서 형식에 관한 버전정보를 확인하세요 

브라우저에게 해당 HTML이 어떤 표준에 따른 것인지를 알려주는 것이 DTD(Document Type Definition) 라고 합니다.

DTD는 문서의 제일 위에 위치합니다.

HTML5

<!DOCTYPE html>

 

HTML5 SGML을 기반으로 하지 않기 때문에 DTD를 참조할 필요가 없습니다.

 

HTML4에서는 문서유형을 아래와 같이 지정해야하는데, 지정하지 않으면 관용모드로 인식하게 됩니다.

 

☞ Strict DTD (엄격 모드)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

 

Traditional DTD 에서 deprecated 된 요소와 <frameset> 관련 요소 및 속성을 제외한 가장 엄격한 DTD

HTML4 표준 문법을 정확히 따르는 문서를 작성해야할 떄 사용하며 문법에 조금만 어긋나면 오류 발생

 

☞ Transitional DTD (호환 모드)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd">

 

strict DTD에 서 deprecated 요소와 속성을 포함

권장되지 않는 요소나 속성을 문서에 포함할 필요가 있을 때 하위 호환성을 위해 이 선언문을 사용

frameset 관련 요소는 포함하지 않음

 

☞ FramesetDTD (프레임 세트 모드)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"    "http://www.w3.org/TR/html4/frameset.dtd">

 

strict DTD 에서 deprecated된 요소와 속성을 포함

권장되지 않는 요소나 속성을 문서에 포함할 필요가 있을 때, 하위 호환성을 위해 이 선언문을 사용

frameset 관련 요소는 포함하지 않으며 traditonal DTD에 frameset을 포함

frameset 을 적용한 문서에서는 이 선언문을 사용해야하며 가장 느슨한 문서 형

 

DTD의 경우 원격으로 호출할 수 있는 취약점이 있습니다.

우리나라에서는 주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드, 전자금융기반시설 기준에는 없으나 비슷한 항목으로 해당 취약점을 갈음할 수 있습니다.

 

<주요정보통신기반시설 기술적 취약점 분석 평가방법>

https://www.kisa.or.kr/2060204/form?postSeq=12&lang_type=KO&page=1

 

KISA 한국인터넷진흥원

 

www.kisa.or.kr

<전자금융기반시설 기준?>

 

 

 

<META> 태그를 살펴보세요

Meta 태그는 공격자가 어플리케이션을 프로파일링 할 수 있도록 합니다.

어플리케이션에 대한 정보, refresh, 검색 엔진에게 제공할 키워드 등을 제공하고 있습니다.

또한, META 태그를 통해서 로봇이 HTML 페이지를 가져가지 못하게 할 수 있습니다.

<META name="robots" content="none">

 

 

2. JavaScript 코드분석 & JavaScript 파일 모으기

프로그래머는 종종 JavaScript  변수에 민감한 정보를 하드코딩 합니다.

<script></script> 사이의 코드를 찾아 민감한 정보를 확인할 수 있습니다.

 

3. Source map 파일 사용

어플리케이션이 복잡한 구조로 발달하면서 개발을 위한 다양한 도구들이 사용되고 있습니다.

HTML, CSS, JavaScript 로 웹을 구축하고 배포하던 시절과는 달라졌습니다.

이러한 도구들을 사용하면 개발자의 생산성 향상 등등의 장점이 있습니다.

그러나, typescript 등으로 작성된 코드들은 빌드를 하면서 번들로 코드 압축, 난독화 등을 수행합니다.

이로인해 개발자가 어떤 코드가 어떤 역할을 하는지 이해하기 어려워졌습니다.

이를 해결하기위해 '소스 맵'이 등장했습니다.

 

소스맵이란, 원본 소스코드와 변환된 소스코드 사이 매핑된 정보가 선언된 파일입니다.

개발자가 변환된 코드를 디버깅할때 원본 소스의 몇번째 라인의 코드를 참조해야하는지 알수 있도록 도와줍니다.

소스맵은 *.map 확장자를 가지며 JSON 형식으로 작성되어 아래와 같은 프로퍼티를 가집니다.

{
    "version": 3,
    "file": "static/js/main.chunk.js",
    "sources": [
                      "/home/sysadmin/cashsystem/src/actions/index.js",
                      "/home/sysadmin/cashsystem/src/actions/reportAction.js", 
                       "/home/sysadmin/cashsystem/src/actions/cashoutAction.js",                     
                      "/home/sysadmin/cashsystem/src/actions/userAction.js", "..."
     ],
     "..."
}
  • Version: 소스맵의 기반이되는 버전 번호
  • file: 변환된 코드의 파일명
  • sources : 원본 소스 코드의 경로

 

 4.6 어플리케이션 시작 지점 찾기

테스트 목표

요청과 응답 분석을 통해 가능한 시작점과  인젝션 포인트를 식별

 

테스트 방법

사용자, 브라우저가 어떻게 통신하는지 이해하는 것이 중요

 

요청

언제 GET, POST 를 사용하는지 구분하는것이 필요

POST 요청에서 사용되는 모든 매개변수 식별은 프록시나, HTML 소스 코드 조회를 통해서 가능합니다.

GET 요청에서 사용되는 모든 매개변수는 쿼리 문자열을 통해 파악 가능합니다.

이러한 매개변수를 모두 식별해야 공격이 가능할 수 있습니다.

 

응답

새로운쿠키가 설정되는 곳(set-cookie) 찾기

redirection이 발생하는 곳 찾기

header 정보 중 특이사항 찾기, Server:BIG-IP는 로드밸런싱 되고 있음을 의미합니다.

 

예시

GET /shoppingApp/buyme.asp?CUSTOMERID=100&ITEM=z101a&PRICE=62.50&IP=x.x.x.x HTTP/1.1 Host: x.x.x.x Cookie: SESSIONID=Z29vZCBqb2IgcGFkYXdhIG15IHVzZXJuYW1lIGlzIGZvbyBhbmQgcGFzc3dvcmQgaXMgYmFy

위 요청을 통해 알수 있는 점

  • CUSTOMERID, ITEM, PRICE,IP 파라미터를 사용
  • cookie 를 세션상태를 위해 사용
POST /KevinNotSoGoodApp/authenticate.asp?service=login HTTP/1.1 Host: x.x.x.x Cookie: SESSIONID=dGhpcyBpcyBhIGJhZCBhcHAgdGhhdCBzZXRzIHByZWRpY3RhYmxlIGNvb2tpZXMgYW5kIG1pbmUgaXMgMT IzNA==;CustomCookie=00my00trusted00ip00is00x.x.x.x00 user=admin&pass=pass123&debug=true&fromtrustIP=true
  • 파라미터도 사용하긴 했지만 대부분은 body 에 데이터 존재
  • HTTP 헤더에 커스텀 HTTP 헤더 사용 (CustomeCookie)
더보기

커스텀 HTTP 헤더란

개발자가 직접 정의해서 사용하는 HTTP 헤더

표준 HTTP 헤더가 아니라 특정 서비스에서만 사용되는 추가 정보를 전달하기 위해 사용

커스텀헤더는 다른 표준 헤더와 이름이 겹치지 않도록 사용에 주의해야

Attack Surface Detector

소스코드를 기반으로 테스트할 surface 를 찾아주는 도구

소스코드를 분석해서 라우팅 코드를 찾고, 이를 zap 이나 burpsuite에서 바로 로드되도록 수행

Endpoint URL 을 가장 정확하고 많이 식별할 수 있는 방

 

4.7 어플리케이션을 통해 실행 경로 매핑

테스트 목표

대상 어플리케이션을 매핑하고 워크플로우 이해

  • 어플리케이션의 구조와 각 기능이 어떻게 연결되는지 파악
  • 사용자가 어플리케이션을 어떻게 이용하는지 이해

테스트 방법

테스트 커버리지 극대화

  • 가능한 모든 경로를 테스트하여 보안 취약점을 식별하고, 테스트 되지 않은 경로가 없도록 수행

도구 활용

  • 자동화된 도구(spider, application crawler)를 사용해 어플리케이션 링크와 경로 자동 탐색
  • 복잡한 구조를 이해하고, 테스트할 경로를 체계적으로 문서화하는데 도움

문서화

  • 발견된 모든 경로와 그 경로를 통해 도달할 수 있는 기능을 문서화
  • URL, 매개변수, 예상되는 입력/출력 등을 포함해 각 경로의 세부사항 기

 

4.8 웹어플리케이션 프레임워크 식별

테스트 목표

웹어플리케이션에서 사용하는 프레임워크를 식별하여 전략 수립

 

테스트 방법

1. HTTP 헤더 분석

  • 응답 헤더에서 'X-Powered-By', 'Server' 같은 필드를 검사하여 프레임워크 정보 추출

2. 쿠키 분석

  • 프레임워크마다 다른 쿠키값 설정을 통해 프레임워크를 추론 가능
  • 다만, 쿠키값을 변경할 수 있음

3 . HTML 소스코드 분석

  • HTML 소스코드에서 프레임워크와 관련된 주석, 메타태그, JavaScript 파일 등을 검색
<!-- Example of a revealing comment -->
<!-- Powered by ZK Framework Version 8.5.2 -->

 

4. 디렉토리 구조 분석

  • 웹 서버의 디렉토리 구조를 통해 프레임워크 식별 가능
  • dirbusting 기술을 이용해 알려진 폴더, 파일이름을 무차별 대입해 http 응답을 모니터링하여 기본 파일 찾고 공격 가능

디버스팅 결과, workpress 임을 알수있

 

5. 파일 확장자

  • URL에 파일 확장자가 포함되어 있으므로 이를 이용해 프레임워크 확인 가능
https://wiki.owasp.org/index.php?title=Fingerprint_Web_Application_Framework&action=edit§ion=4

 

6. 에러메시지 분석

  • 어플리케이션의 에러메시지를 통해 프레임워크 정보 추출 가능
  • 특정 프레임 워크는 고유한 에러메시지 존재

7. 자동화 도구 사용

  • 프레임워크 식별을 자동화하는 도구 사용
  • Wappalyzer, WhatWeb 등 존재

4.9  어플리케이션 구조 매핑

웹 어플리케이션의 테스트와 배포에 있어 구성관리와 검토가 중요

취약점이 전체 인프라의 보안을 약화할 수 있으며 인프라 내 다른 어플리케이션의 리스크로 확대 가능

 

테스트 목표

어플리케이션 맵 생성

 

테스트 방법

reverse proxy 를 사용하고 있는지 확인할 수 있는 방법 중 하나는 TRACE 요청을 보내는 것입니다.

클라이언트가 서버로부터 자신이 보낸 요청을 그대로 바로 반환받기 위해 사용되는 메소드입니다.

HTTP 요청이 변경되지 않고 전달되는지를 확인하기 위한 디버깅 목적으로 사용됩니다.

만약 그 경로상에 웹방화벽이 있으면 데이터가 변형되어 전달되기 때문에 그 결과를 통해 네트워크 경로상의 보안장비의 유무를 확인할 수 있습니다.

 

 

 

참고 사이트

https://devbox.tistory.com/entry/HTML-DTDDoctype

 

 

 

반응형