인증/보안(HTTPS/Hashing/Cookie/Session)

Rina's·2023년 7월 6일

코드스테이츠

목록 보기
62/96

🌌인증/보안

🔒HTTPS

기존 HTTP에 인증서와 비대칭 키를 통해 보안기능을 추가한 버전
요청 데이터를 암호화 -> 지정 키로 추가적인 복호화가 필요

비대칭 키 암호화

공개 키 제공(Hand Shake) -> 비밀 키 생성(비대칭 키) -> 상호 키 검증

  • 대칭 키 방식: 공통의 비밀키로 암호화 및 복호화
  • 비대칭 키 방식: 공개 키로 암호화 -> 개인 키로 복호화
    비대칭 키를 공유할 때 대칭 키 방식을 쓴다

인증서

응답 도메인과 인증 도메인을 비교

  • CA
    신원을 보증하는 제 3자, 공인 인증서 발급 기관

  • SSL(TLS) 프로토콜 과정
    서버가 클라이언트에게 비밀키로 암호화된 인증서 전달 ->
    클라이언트가 내장된 CA리스트에서 검색 ->
    CA 공개키로 복호화(위조 인증서라면 공개키가 맞지 않을것)

🔒HTTPS 서버 구현

JAVA 인증서 형식에는 PKCS12, JKS 가 있다.
Mkcert - 로컬 개발을위한 SSL 인증서 생성 도구 이걸로 PKCS12를 생성해보자

우분투의 리눅스 가상환경이 너무 불편해서
Chocolatey를 사용해 보았다.. 이제 파워셀에서 choco 명령어로 실행한다
mkcert를 설치하자!

choco install mkcert CA
mkcert -pkcs12 localhost - PKCS12 인증서 생성

위에서 부터 인증서 경로, 타입, 비밀번호

https로 실행 성공!

🔒Hashing

  • Hash 함수를 사용하여 평문을 암호화된 문장으로 만든다
  • 동일한 문자열에 동일한 해시 함수를 사용하면 항상 같은 결과 값이 나옴으로 '레인보우 테이블'의 사용과 같이 복호화가 가능
  • 이를 방지하기 해싱 이전 값에 임의의 값 'Salt'를 더해 유출되더라도 해싱 이전 값을 알기 힘들게 함

패스워드를 암호화하는 기술

  • Plain Text 저장(금기)
  • 해시(Hash) 알고리즘
  • MD5(Message Digest 5)
  • SHA(Secure Hash Algorithm)

Rainbow Attack에 대한 대응책

키 스트레칭(다이제스트-해시 처리 번복)
솔트(Salt)
이 외에 PBKDF2, bcrypt, scrypt...

클라이언트에 데이터를 저장하여 동기적으로 Stateless 한것을 보완
이러한 상태 정보는 일반적으로 세션, 캐시, 변수 값 등을 포함한다

쿠키 옵션(전송 조건)

  1. 도메인 일치
  2. 세부경로(path)일치
  3. 쿠키 유효기간
  • 세션쿠키(세션ID)
    expires가 없음.(보통 세션ID가 아닌 세션에 만료시간을 설정)
    브라우저 실행 중 사용하며 종료시 삭제
  • 영속성 쿠키
    브라우저 사용 여부와 상관없이 MaxAge or Expires date 지정 유효시간만큼 사용 가능
  1. Secure 옵션(HTTPS 여부)
  2. HttpOnly 옵션(js 쿠키 접근을 막아 XSS공격에 대비)
  3. SameSite 옵션
    Lax: Cross-Site 요청일 때 GET 메서드일때만 쿠키 전송
    Strict: Same-Site인 경우에만 쿠키 전송
    None: Secure가 true를 전제로 URI와 상관 없이 항상 쿠키 전송 가능

Cross-Origin과 Cross-Site
Cross-Origin은 도메인(하위도메인 포함), 프로토콜, 포트를 기준으로 구분
Cross-Site와 same-site여부는 eTLD+1을 기준으로 구분(탑레벨도메인+하위도메인)
도메인, 프로토콜, 포트가 달라도 eTLD+1가 같다면 same-site

🍰sesstion

사용자가 인증에 성공한 상태

클라이언트가 정보를 제공하여 세션(인증)이 되면
서버는 세션을 저장하고 세션아이디를 제공(쿠키에 저장)하여 권한 부여
이후 요청정보가 아닌 제공한 세션아이디를 확인하여 DB 업데이트
이를 통해 접속상태를 서버가 가짐(stateful)

로그아웃 시 서버의 세션 정보를 삭제하고 클라이언트의 쿠키를 갱신

🌌웹 보안 공격

😈SQL Injection

데이터베이스에서 임의의 SQL 문을 실행할 수 있도록 명령어를 삽입하는 공격 유형

SQL injection 대응 방안

1. 입력(요청) 값 검증
화이트리스트 방식의 키워드 사용
기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 대상을 지정하는 방식

2. Prepared Statement 구문 사용
사용자의 입력을 SQL 문으로부터 분리
입력값을 넣기전 미리 컴파일하여 단순 텍스트로 인식하게 함

3. Error Message 노출 금지
Error Message를 통한 테이블이나 열 등 데이터베이스 유출을 막기 위해
에러가 발생한 SQL 문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러 핸들링을 설정

😈CSRF

- CSRF토큰 사용
폼 요청시 미리 제공한 고유한 CSRF 토큰은 함께 제출
토큰과 세션에 저장된 CSRF토큰을 비교

- Same-site cookie 사용
일치하는 도메인을 가진 쿠키를 사용하여 요청처리

profile
갭린이 리나

0개의 댓글