[웹 인증 / 보안] 웹 공격 / Token & OAuth

young·2022년 7월 15일
0

6/23~7/20 Section 3 TIL

목록 보기
18/21
post-custom-banner

✅ TIL

  • 웹 공격의 종류 & OWASP
  • Token
  • OAuth

웹 공격의 종류

OWASP: 웹 보안에 대한 표준을 정의하고 정보를 제공하는 오픈소스 커뮤니티
OWASP TOP 10: OWASP에서 주기적으로 공개하는 웹의 10대 취약점들에 대한 문서

🚨 SQL Injection

SQL (구조적 질의 언어)

Structured Query Language
관계형 데이터베이스 시스템(RDBMS)에서 데이터를 관리 및 처리하기 위해 설계된 선언형 프로그래밍 언어

데이터베이스에서 SQL문을 실행할 수 있도록 명령어를 삽입하는 공격 유형
데이터베이스를 비정상적으로 조작하며, 이로 인해 기록이 삭제되거나 데이터가 유출될 수 있다.

  1. 보통 사용자가 input form에 작성하는 상황에서 공격자가 악의적인 SQL문을 넣어 서버에 전송한다.
  2. 서버가 해당 SQL문을 포함하여 데이터베이스에 쿼리를 보낸다.
  3. 공격자에게 데이터가 유출되거나 데이터가 삭제되는 일이 발생한다.

대응 방안

1. 입력(요청)값 검증

기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 키워드가 들어오면 다른 값으로 치환한다. (화이트리스트 방식)

2. Prepared Statement 구문 사용

사용자 입력값이 전달되기 전에 DB가 미리 컴파일하여 SQL을 바로 실행하지 않고 대기하며, 입력값을 단순 텍스트로 인식한다. => 공격 실패
사용자의 입력이 SQL문으로부터 분리된다.

3. Error Message 노출 금지

공격자는 에러 메세지를 통해 데이터베이스의 정보를 얻을 수 있다.
에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 에러 핸들링을 한다.



🚨 Cross-Site Scripting (XSS)

= 사이트 간 스크립팅
클라이언트를 대상으로 하는 공격 유형

웹 사이트 관리자가 아닌 이가 웹 사이트에 악의적인 스크립트를 심어놓는 행위
e.g. 공격자가 심어놓은 스크립트를 실행하는 글에 클릭을 유도한다.
이후 사용자가 의도하지 않은 행동을 하게 하거나 민감한 정보를 탈취한다.

stored xss

스크립트가 서버에 저장되어 여러 사용자에게 피해를 줄 수 있는 유형
지속적 기법
주로 게시판 형태의 웹 사이트에서 발생한다.

  1. 공격자가 텍스트가 아닌 스크립트가 담긴 글을 작성한다.
  2. 글을 클릭하면 스크립트가 실행된다.

reflected xss

URL 파라미터를 사용해 스크립트를 만드는 유형
비지속적 기법
주로 피싱에 사용된다.

  1. 피해자가 공격자로부터 받은 url을 클릭 =>취약점이 있는 웹 사이트로 요청이 보내진다.
  2. 취약점을 가진 웹 서버가 해당 url에 담긴 스크립트를 그대로 반사한다.

대응 방안

  1. 스크립트 태그의 입력을 막는다.

  2. httpOnly 쿠키 설정 확인하기
    쿠키를 브라우저에서 조회할 수 없도록 한다.

  3. 쿠키에 민감한 정보 담지 않기
    2차 피해 방지



🚨 Cross-Site Request Forgery (CSRF)

다른 사이트(cross-site)에서 유저가 보내는 요청(request)을 조작(forgery)하는 공격 유형

쿠키를 사용한 로그인 && 공격자가 예측할 수 있는 request / parameter을 가지고 있어야 공격 조건이 성립한다.


대응 방안

  1. CSRF 토큰 사용하기

  2. same-site 쿠키 사용하기
    같은 도메인에서만 세션/쿠키를 사용할 수 있다.



🚨 Clickjacking

사용자가 의도한 클릭 대상이 아닌 다른 대상을 클릭하도록 속이는 공격 기법
= 사용자 인터페이스 덧씌우기 (User Interface Redress)

  1. 공격자가 iframe 태그로 보이지 않는 버튼을 배치한 피싱 사이트로 접근을 유도한다.
  2. 피해자가 피싱 사이트에 들어가서 눈에 보이지 않는, 의도하지 않은 버튼을 누른다.

클릭 대상에 따라 다양한 피해가 발생한다.


대응 방안

  1. X-frame-Options
    http의 헤더로, iframe의 렌더링 여부를 제한한다.
X-Frame-Options: DENY //프레임에 페이지를 표시할 수 없다.
X-Frame-Options: SAMEORIGIN //동일 출처 페이지만 프레임에 표시할 수 있다.
  1. 콘텐츠 보안 정책
    컴퓨터 보안 표준
    웹 사이트 소유자가 콘텐츠 출처를 신뢰할 수 있도록 표준 방식을 제공하여 외부의 악의적인 스크립트나 데이터 삽입 공격을 막는다.



Token & OAuth

1️⃣ 토큰기반 인증 (Token-based Authentication)

세션 인증 방식(= 서버 혹은 DB에 유저 정보를 담는 인증 방식)을 보완한 인증 방식
토큰은 유저 정보를 암호화하여 저장하고, 암호화했기 때문에 클라이언트에서 인증 정보를 보관할 수 있다.

클라이언트는 토큰 인증을 통해 서버 접근 권한을 얻을 수 있다.

대표적인 토큰기반 인증: JSON Web Token

🔑 JWT

JSON 포맷으로 사용자 정보를 저장하는 웹 토큰

  1. 엑세스 토큰: 보호된 정보에 접근할 수 있는 권한부여에 사용
  2. 리프레시 토큰: 액세스 토큰의 유효기간이 만료되면 리프레시 토큰으로 새로운 액세스 토큰을 발급받는다.
//header	//signature
aaaaaa.bbbbbb.cccccc
	  //payload
  • header: 어떤 종류의 토큰인지(JWT), 어떤 알고리즘으로 시그니처를 암호화할지 JSON 형태로 저장

  • payload: 서버에서 활용할 수 있는 유저 정보를 JSON 형태로 저장
    암호화된 값이 아니므로 민감한 정보를 담지 않아야 한다.

  • signature: 서버의 비밀키(salt)와 헤더에서 지정한 알고리즘을 사용하여 암호화한 값


토큰기반 인증 절차

  1. 로그인 정보가 DB와 일치하면 암호화된 JWT 토큰 생성, 클라이언트에 전달
  2. 클라이언트는 토큰을 저장한다.
  3. 클라이언트가 HTTP 헤더 또는 쿠키에 토큰을 담아 보낸다.
  4. 서버는 토큰을 해독하여 유효함이 인증되면 클라이언트의 요청을 처리하고 응답을 보낸다.

토큰기반 인증의 장점

  1. 무상태성 & 확장성을 가진다.
    서버는 토큰을 저장하지 않고 토큰이 해독되는지만 판단한다.

  2. 암호화된 토큰을 사용하고, 암호화 키를 노출할 필요가 없어 안전하다.

  3. 어디서나 생성 가능
    토큰 확인 서버 !== 토큰 생성 서버

  4. 권한 부여에 용이
    payload에 작성된 정보에만 접근 권한을 부여한다.



2️⃣ OAuth

인증을 중개해주는 매커니즘
토큰을 기반으로 구현된 기술
인증을 위한 표준 프로토콜의 한 종류

OAuth = 인증 중개 Authentication
서버 = 접근 권한 관리 Authorization

  • Resource Owner: user
  • client: 접속하려는 웹 사이트
  • resource server: 클라이언트의 요청을 수락하고 응답할 수 있는 (자원이 있는) 서버
  • authorization server: resource server가 액세스 토큰을 발급 받는 인증 서버
  • scope: 토큰으로 액세스 가능한 리소스 범위

Grant type

클라이언트가 액세스 토큰을 얻는 방법

Authorization code grant type

  1. 클라이언트는 resource owner의 요청에 따라 authorization 서버로부터 Authorization code를 받아 액세스 토큰과 교환한다.
  2. 클라이언트가 액세스 토큰으로 resource 서버에 액세스 가능해진다.

=> 보안성을 강화하기 위함

Refresh token grant type

클라이언트가 유효 시간이 지나서 만료된 액세스 토큰을 다시 받아오기 위한 방법

user가 클라이언트에 요청하면, 별도의 허용 없이 클라이언트와 서버 사이에서 다음과 같은 과정이 발생한다.

  1. 클라이언트가 authorization 서버에 Refresh token으로 새로운 액세스 토큰을 요청
  2. 새로운 액세스 토큰을 받아 resource server에 액세스 가능해진다.
profile
즐겁게 공부하고 꾸준히 기록하는 나의 프론트엔드 공부일지
post-custom-banner

0개의 댓글