OWASP: 웹 보안에 대한 표준을 정의하고 정보를 제공하는 오픈소스 커뮤니티
OWASP TOP 10: OWASP에서 주기적으로 공개하는 웹의 10대 취약점들에 대한 문서
SQL (구조적 질의 언어)
Structured Query Language
관계형 데이터베이스 시스템(RDBMS)에서 데이터를 관리 및 처리하기 위해 설계된 선언형 프로그래밍 언어
데이터베이스에서 SQL문을 실행할 수 있도록 명령어를 삽입하는 공격 유형
데이터베이스를 비정상적으로 조작하며, 이로 인해 기록이 삭제되거나 데이터가 유출될 수 있다.
기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 키워드가 들어오면 다른 값으로 치환한다. (화이트리스트 방식)
사용자 입력값이 전달되기 전에 DB가 미리 컴파일하여 SQL을 바로 실행하지 않고 대기하며, 입력값을 단순 텍스트로 인식한다. => 공격 실패
사용자의 입력이 SQL문으로부터 분리된다.
공격자는 에러 메세지를 통해 데이터베이스의 정보를 얻을 수 있다.
에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 에러 핸들링을 한다.
= 사이트 간 스크립팅
클라이언트를 대상으로 하는 공격 유형
웹 사이트 관리자가 아닌 이가 웹 사이트에 악의적인 스크립트를 심어놓는 행위
e.g. 공격자가 심어놓은 스크립트를 실행하는 글에 클릭을 유도한다.
이후 사용자가 의도하지 않은 행동을 하게 하거나 민감한 정보를 탈취한다.
스크립트가 서버에 저장되어 여러 사용자에게 피해를 줄 수 있는 유형
지속적 기법
주로 게시판 형태의 웹 사이트에서 발생한다.
URL 파라미터를 사용해 스크립트를 만드는 유형
비지속적 기법
주로 피싱에 사용된다.
스크립트 태그의 입력을 막는다.
httpOnly
쿠키 설정 확인하기
쿠키를 브라우저에서 조회할 수 없도록 한다.
쿠키에 민감한 정보 담지 않기
2차 피해 방지
다른 사이트(cross-site)에서 유저가 보내는 요청(request)을 조작(forgery)하는 공격 유형
쿠키를 사용한 로그인 && 공격자가 예측할 수 있는 request / parameter을 가지고 있어야 공격 조건이 성립한다.
CSRF 토큰 사용하기
same-site 쿠키 사용하기
같은 도메인에서만 세션/쿠키를 사용할 수 있다.
사용자가 의도한 클릭 대상이 아닌 다른 대상을 클릭하도록 속이는 공격 기법
= 사용자 인터페이스 덧씌우기 (User Interface Redress)
클릭 대상에 따라 다양한 피해가 발생한다.
X-Frame-Options: DENY //프레임에 페이지를 표시할 수 없다.
X-Frame-Options: SAMEORIGIN //동일 출처 페이지만 프레임에 표시할 수 있다.
세션 인증 방식(= 서버 혹은 DB에 유저 정보를 담는 인증 방식)을 보완한 인증 방식
토큰은 유저 정보를 암호화하여 저장하고, 암호화했기 때문에 클라이언트에서 인증 정보를 보관할 수 있다.
클라이언트는 토큰 인증을 통해 서버 접근 권한을 얻을 수 있다.
대표적인 토큰기반 인증: JSON Web Token
JSON 포맷으로 사용자 정보를 저장하는 웹 토큰
- 엑세스 토큰: 보호된 정보에 접근할 수 있는 권한부여에 사용
- 리프레시 토큰: 액세스 토큰의 유효기간이 만료되면 리프레시 토큰으로 새로운 액세스 토큰을 발급받는다.
//header //signature
aaaaaa.bbbbbb.cccccc
//payload
header: 어떤 종류의 토큰인지(JWT), 어떤 알고리즘으로 시그니처를 암호화할지 JSON 형태로 저장
payload: 서버에서 활용할 수 있는 유저 정보를 JSON 형태로 저장
암호화된 값이 아니므로 민감한 정보를 담지 않아야 한다.
signature: 서버의 비밀키(salt)와 헤더에서 지정한 알고리즘을 사용하여 암호화한 값
- 로그인 정보가 DB와 일치하면 암호화된 JWT 토큰 생성, 클라이언트에 전달
- 클라이언트는 토큰을 저장한다.
- 클라이언트가 HTTP 헤더 또는 쿠키에 토큰을 담아 보낸다.
- 서버는 토큰을 해독하여 유효함이 인증되면 클라이언트의 요청을 처리하고 응답을 보낸다.
무상태성 & 확장성을 가진다.
서버는 토큰을 저장하지 않고 토큰이 해독되는지만 판단한다.
암호화된 토큰을 사용하고, 암호화 키를 노출할 필요가 없어 안전하다.
어디서나 생성 가능
토큰 확인 서버 !== 토큰 생성 서버
권한 부여에 용이
payload에 작성된 정보에만 접근 권한을 부여한다.
인증을 중개해주는 매커니즘
토큰을 기반으로 구현된 기술
인증을 위한 표준 프로토콜의 한 종류
OAuth = 인증 중개 Authentication
서버 = 접근 권한 관리 Authorization
클라이언트가 액세스 토큰을 얻는 방법
=> 보안성을 강화하기 위함
클라이언트가 유효 시간이 지나서 만료된 액세스 토큰을 다시 받아오기 위한 방법
user가 클라이언트에 요청하면, 별도의 허용 없이 클라이언트와 서버 사이에서 다음과 같은 과정이 발생한다.