IT 공부

간단 보안! (feat. HTTPS 와 SSL/TLS 그리고 CSRF와 XSS)

Choony 2024. 1. 8. 02:30

 

HTTPS , SSL/TLS

HTTPS는 HTTP에 Secure를 붙인 단어이다.

 

위 사진에서 볼 수 있듯 HTTP는 보안 측면에서 매우 안좋다. 이유는 "보안이 적용되지 않은 데이터를 전송한다"이다.

요즘 인터넷에서 HTTPS는 선택이 아닌 필수이며 HTTPS는 대게 암호화를 위해 SSL/TLS 인증서를 사용한다.

 

SSL 과 TLS

SSL과 TLS 모두 네트워크를 통해 작동하는 서버, 시스템 및 응용 프로그램 간에 "인증 및 데이터 암호화"를 제공하는 암호화 전용 프로토콜이다. SSL은 TLS 이전의 프로토콜로 2015년에 SSL 3.0은 중단되고 TLS가 사용되고 있다. SSL 프로토콜이 남긴 레거시로 현재도 많은 분야에서 TLS와 SSL을 같은 표현으로 사용하기도 한다.

 

공개키 암호화 (비대칭 암호화)

  • 공개키로 데이터를 암호화하여 공개키 소유자에게 보낸다. 공개키 소유자는 개인키로 복호환한다.
  • 공개키는 데이터를 암호화하는 용도이고, 개인키는 데이터를 복호화하는 용도이다.
  • 암호화 절차가 까다롭기에 데이터를 암호화하기 보다는 서로의 신원을 확인하거나 특정 데이터 (대칭키)를 공유하는 용도로 사용한다.

대칭키 암호화 (대칭 암호화)

  • 암호화와 복호화에 같은 "비밀키"를 사용한다.
  • 빠르게 데이터를 암호화/복호화 할 수 있으나 상대방이 안전한 사람인지 확인할 방법이 없다.
  • 비대칭 암호화로 안전한 상대인지 확인한 후 데이터를 대칭키로 암호화/복호화 하는 하이브리드 방식이 사용된다.

SSL/TLS 디지털 인증서 - CA를 통해 보장받는다.

클라이언트와 서버 간의 통신을 공인된 제3자 (CA)가 보증해주는 문서이다. 해당 문서를 통해 서버의 안정성을 보장받을 수 있다. 

즉, 클라이언트로 하여금 접속하려고 하는 서버가 신뢰할 수 있는 서버인지 확인하는데 사용한다.

SSL/TLS 디지털 인증서가 적용되어야 구글 검색 엔진에서 가산점을 받을 수 있다.

 

 

 

CSRF , XSS

 

CSRF (Cross-Site Request Fogery) 란?

사이트 간 요청 위조는 웹 사이트 취약점 공격의 하나로, 

사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(등록, 삭제, 수정 등)를 특정 웹사이트에 요청하게 하는 공격이다.

 

CSRF는 특정 웹 사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 공격이다. 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.

 

XSS (Cross-Stie Scripting) 란?

사이트 간 스크립팅은 SQL Injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법이다. 주로 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 명칭한다.

이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타나며, 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 된다. 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

 

사이트 간 스크립팅은 자바스크립트를 사용하여 공격하는 경우가 많다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우가 많다.

 

공격 방법에 따라 Stored XSS와 Reflected XSS로 나뉜다. 

 

Stored XSS

  • 사이트 게시판이나 댓글, 닉네임 등 스크립트가 서버에 저장되어 실행되는 방식

Reflected XSS

  • URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식
  • 브라우저 자체에서 차단하는 경우가 많기 대문에 상대적으로 공격을 성공시키긴 어렵다.

 

CSRF와 XSS의 차이

  • XSS는 사이트변조나 백도어를 통해 클라이언트에 대한 악성공격을 하고 인증된 세션이 없어도 공격을 할 수 있으며, JS를 실행 시키는 공격
  • CSRF는 요청을 위조하여 사용자의 권한을 이용해 서버에 대한 악성공격을 하고, 인증된 세션을 악용하며, 특정한 행동을 실행 시키는 공격

 

CSRF 방지 대책

  • Referrer 검증
    • referrer은 http 헤더 중 하나이며 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청되었는지 알 수 있다. 이로인해 어떤 웹사이트나 웹서버에서 방문자가 왔는지를 파악할 수 있다.
    • Backend 단에서 request와 referrer를 확인하여 domain이 일치하는지 검증
  • Security Token 사용
    • Reffer 검증이 불가한 환경일 경우 Security Token을 활용한다.
    • 사용자 세션에 임의의 난수 값을 저장하고, 사용자의 요청마다 해당 난수 값을 포함 시켜 전송한다.
      이후 Backend 단에서 요청을 받을 때마다 세션에 저장된 토큰 값과 요청 파라미터에 전달되는 토큰 값이 일치한지 검증하는 방법

 

XSS 방지 대책

  • 쿠키에 중요한 정보를 담지 않고 서버에 중요정보를 저장하는 방법
  • 정보를 암호화 하는 방법
  • httpOnly 속성 on
    • JS의 documnet.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션으로, 쿠키를 훔쳐가는 행위를 막기 위한 방법)
  • Secure coding