일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- https 서버 구현
- Pitest
- 코틀린
- MySQL
- resize image with go
- standard output
- 자바
- InnoDB
- 오블완
- ruby
- resizer 구현
- cli 만들기
- 직접 코드로 구현
- standard input
- https 실습
- 객체지향
- go https 구현
- 돌연변이 테스팅
- https go
- image resizer with go
- AES-GCM
- IntelliJ
- HTTPS
- Java
- kotlin
- https implement
- JPA
- Mutation testing
- Test
- 대칭 키 알고리즘
- Today
- Total
Rlog
HTTP Trace Method 와 취약점(XST) 본문
Trace Method 란?
HTTP Method 중 하나인 Trace Method 는 Client - Server Side 간 Loop back Test 를 진행할 수 있게 도와준다.
아래 실제로 TraceMethod 를 날린 결과값을 보자.
위의 메소드의 결과물을 보면 TLS Handshake 가 잘 맺어졌고, CERT 도 통과하고 등등 서버에서 어떤 일이 일어나는지 확인할 수 있다. HTTP2 를 이용해서 multiplexing 이용하고 있음을 알 수 있다. 이렇듯이 내가보낸 통신이 어느지점에서 에러가 났는지 Trace 하기 위해서 사용하는 메소드이다. 주로 Via 나 X-Forward-For 와 함께 사용하여 추적도 가능하나, 두개의 헤더는 사실상 조작하는 경우도 많아서 완전히 신뢰해서는 안된다. TraceRoute 처럼 진짜 문제가 생기는 지점을 Trace 하기 위해 사용한다고 생각하면 편하다.
XST 란?
일단, XSS 와 httpOnly 에 대해서 공부해봤다면 알아야 하는데 쉽게 Session Cookie 이야기 부터 해보면 Session Cookie 는 서버와 브라우저간의 계속해서 연결이 되어야 하는 문제점(다중 서버 문제도 있음) 을 보완하기 위해 나온것으로 알고 있다. 지금의 JWT Token 을 생각하면 조금 더 쉽게 이해할 수 있는데, 사용자가 로그인하면 Session Cookie 를 주고, 사용자는 계속해서 요청에 Session Cookie 를 보내면, 서버는 클라이언트가 인증된 사용자처럼 인식한다. 그래서 이 쿠키가 탈취당하게 되면 보안적으로 문제가 발생할 수 있게 된다.
그래서 사용자의 쿠키를 탈취하기 위한 여러가지 방법들이 시도 됬는데, 그 중 하나가 XSS 이다. 자바스크립트 코드를 이용해 사용자의 쿠키를 공격자의 컴퓨터로 보내, 공격자는 해당 쿠키를 이용하여 웹 싸이트에서 해당 사용자인것처럼 행동할 수 있게 되는 것이다. 이러한 자바스크립트를 통한 공격을 막기 위해서 httpOnly 라는 값이 생기게 되었다. 브라우저에 저장된 네이버의 쿠키를 보면 httpOnly 옵션이 있다.
이렇게 httpOnly 값이 설정되어 있는 쿠키는 오직 HTTP 통신에서만 사용 가능하다. 따라서 위와 같은 방식으로 세션을 방어할 수 있다. 다만 이것이 XSS 의 방법은 아니다. XSS 의 방어법으로는 입력값을 제한하거나하는 여러가지 방법이 있으니 이를 공부해보길 바란다. 아래가 webgoat 라는 싸이트에 나온 XSS 예시코드이다.
하여튼 이렇게 XSS 를 통한 공격이 활성화 되다보니, 대부분의 기업들은 이를 방어할 수 있는 수단을 갖춰 놓은 상태이다.
XST
XST 는 httpOnly 로 설정해 놓은 Cookie 의 값마저 탈취할 수 있는 방법인데, 이는 Ajax 를 이용하여 탈취한다.
root@kali:~# curl -v --cookie "PHPSESSID=dgklrb9cmv44lad6tbti706mv7" -X TRACE http://www.memozee.com/
* Trying 222.237.78.13...
* Connected to www.memozee.com (222.237.78.13) port 80 (#0)
> TRACE / HTTP/1.1
> Host: www.memozee.com
> User-Agent: curl/7.47.0
> Accept: */*
> Cookie: PHPSESSID=dgklrb9cmv44lad6tbti706mv7
>
< HTTP/1.1 200 OK
< Date: Fri, 11 Nov 2016 05:52:01 GMT
< Server: Apache
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: message/http
<
TRACE / HTTP/1.1
Host: www.memozee.com
User-Agent: curl/7.47.0
Accept: */*
Cookie: PHPSESSID=dgklrb9cmv44lad6tbti706mv7
위의 예시를 보면 알 수 있듯이, HTTP Response 에 쿠키값이 담겨 있으므로, 이를 복사해서 공격자에게 전송하여 전송된 쿠키를 탈취하는 방법이다. 이런 공격을 방어하기 위해서 보통 Server 에서 Trace Method 는 Off 해 두는 편이다. Trace 로 요청시 대부분의 싸이트에서 405 Method Not Allowed 를 주로 보게 된다.
참고
https://owasp.org/www-project-webgoat/
https://webhack.dynu.net/?idx=20161111.001