본문 바로가기

Hacking & Security/Web

웹 취약점 점검기준 - Broken Authentication and Session Management

웹 취약점 점검기준 - 2


A2 - Broken Authentication and Session Management


인증 및 세션관리 취약점 유형으로는 다음과 같은 것들이 대표적인 예시이다.

유형 설명
쿠키 변조 쿠키값을 변조하여 타사용자로 로그인 시도
세션 쿠키 타임아웃 사용자세션 타임아웃 미지정시 사용자의 미활동에도 불구하고 공격자가 해당 PC를 사용할 수 있음.
다중세션 사용 여러대의 PC 혹은 브라우저에서 동일 계정과 암호로 로그인이 되는 것 또한 취약점으로 간주할 수 있다. 이는 공격자가 현재 로그인된 사용자의 자격 정보(쿠키..etc)를 가로채어 로그인 할 수 있는 위협이 존재하기 때문이다.

쿠키 변조


쿠키 변조는 사용자의 쿠키를 가로채어 사용자의 계정 없이도 권한을 획득할 수 있는 기법이며, 아래와 같은 예시의 절차로

공격을 수행할 수 있다.

1) 공격자는 게시판 등에 열람자의 쿠키값을 공격자에게 전송하는 XSS 코드를 삽입하고, 공격 타겟으로부터의 클릭을 유도한다.

2) 공격 타겟이 XSS 코드가 포함된 글을 열람하면, 공격 대상의 쿠키(세션)값이 공격자에게 전달된다.

3) 공격자는 전달된 쿠키(세션)값을 바탕으로 세션을 변조하여 웹 서버에 접속할 수 있다.

A3 - XSS(Cross-Site Script)


인증 및 세션관리 취약점 유형으로는 다음과 같은 취약점들을 생각해 볼 수 있다.

유형 설명
XSS 악의적 스크립트 삽입을 통해 사용자의 정보(쿠키)등을 가로챈다.
HTTPOnly 속성 부재 세션쿠키에 HTTPOnly 속성을 사용하지 않는 경우 쿠키 값 가로채기의 가능성이 증가한다.

1. XSS


XSS 공격은 기술적으로 DOM XSS, Reflected XSS, Stored XSS가 존재한다.

타입 유형
0 DOM(local) XSS
1 Reflected(Non - Persistent) XSS
2 Stored(Persistent, Second Order) XSS
1) DOM XSS

아래의 DOM 오브젝트들은 외부에서 검증되지 않은 값을 사용할 수 있기 때문에 주의가 필요하다.

구분 내용
위험한 입력처리 오브젝트 document.URL
document.URLUnencoded
document.location
document.referrer
위험한 출력처리 오브젝트 document.write
document.writeln
element.innerHTML(outerHTML)
2) Reflected XSS

Reflected XSS 는 사용자의 입력 데이터가 사용자의 화면에 즉시 출력되는 형태, 즉 바로 반사되는 형태를 의미한다.

대체로 게시판 형태가 아닌 일반 파라미터에 스크립트를 삽입하여 실행하는 형태이다.

Request시 Cookie, 또는 입력 필드에 입력한 공격 문자열이 ResponseBody에서 확인되는 경우 취약점으로 판단한다.

3) Stored XSS

Stored XSS는 사용자의 입력 데이터가 웹 서버 데이터베이스 내에 저장되어 DB에서 해당 값을 추출하는 경우에 발생하는 취약점이다.

즉, 게시판과 같은 곳에 스크립트 공격 문자열을 삽입하면 해당 스크립트가 내부 DB에 저장되고, 해당 게시글에 접근할 때 마다 스크립트가 실행된다.

HttpOnly 속성 부재 ( Keyword : HttpOnly & Secure )


1) HttpOnly 및 Secure 속성

해당 속성은 XSS 공격에서 사용되는 쿠키 하이재킹 공격을 차단할 수 있는 기능을 제공한다.

특정 XSS취약점이 존재하는 게시판에 <script>alert(document.cookie)</script> 공격 구문을 삽입한다면 사용자의 쿠키값을 열람할 수 있다.

protected Element doStage2(WebSession s) throws Exception
{
    Cookie newCookie = new Cookie(USER_COOKIE, Encoding.base64Encode(user));
    newCookie.setHttpOnly(true);
    s.getResponse().addCookie(newCookie);
}

이를 방지하기 위해서 위와 같이 HttpOnly 값을 True로 셋팅하여 XSS공격으로 인한 쿠키 하이재킹 공격을 방지할 수 있다.

HttpOnly : 자바스크립트의 docoment.cookie를 이용하여 쿠키에 접속하는 것을 막는 옵션이다. -> 쿠키를 훔치는 행위를 막기 위한 방법.

Secure : 웹 브라우저와 웹 서버가 https로 통신하는 경우에만 웹 브라우저가 쿠키를 서버로 전송하는 옵션.

그렇다면 일반 쿠키, HttpOnly 쿠키, Secure 쿠키 간의 속성의 차이를 알아본다.

(1) 일반 쿠키

쿠키값을 문자열 "My name is Jungnsu"로 셋팅한다.

Response.Cookies.Add(new HttpCookie("SimpleCookie")
{
    Value = "My name is Jungsu"                     
});

쿠키값은 다음과 같다.

Set-Cookie: SimpleCookie=My name is Jungsu; path=/
(2) HttpOnly 속성 세팅 쿠키

위 값에 추가적으로 HttpOnly=True 셋팅이 되어있다.

Response.Cookies.Add(new HttpCookie("SimpleCookie")
{
    Value = "My name is Jungsu",
    HttpOnly = True
});

쿠키값은 다음과 같으나, 차이점은 마지막에 존재한다.

Set-Cookie: HttpOnlyCookie=My name is Jungsu; path=/; HttpOnly
(3) HTTPS 통신에서는 쿠키값이 전송되는 Secure쿠키

https 통신시에만 쿠키 전송이 가능한 쿠키이다.

Response.Cookies.Add(new HttpCookie("SimpleCookie")
{
    Value = "My name is Jungsu",
    Secure = true
});

쿠키값은 다음과 같으나, 차이점은 마지막에 존재한다.

Set-Cookie: SecureCookie=My name is Jungsu; path=/; secure

이를 종합해 보면 아래 표와 같다.

구분 쿠키 가로채기
일반 쿠키 취약
HttpOnly 쿠키 안전
Secure 쿠키 안전