[Spring Security] 정보 보안 및 Spring Security 개요

정보 보안 개요

1. 정보 보안

보안, Security

  • 공격자로부터의 네트워크를 통한 침투, 물리적인 침투 등으로부터 자산, 데이터를 보호하는 것

정보 보안의 3 요소, CIA

  • 기밀성(Confidentiality)
    • 권한이 허가된 사용자만 정보에 접근할 수 있어야 하는 성질
  • 무결성(Integrity)
    • 적절한 권한을 가진 사용자에 의해 허용된 방법으로만 정보를 변경할 수 있어야 하는 성질
  • 가용성(Availability)
    • 필요할 때 데이터에 접근할 수 있어야 하는 성질

2. 보안 공격 방식

공격의 종류 - 4가지

  • 도청, Interception
    • 승인 받지 않은 사용자가 데이터, 응용프로그램에 접근하는 행위
    • 기밀성을 위협하는 공격
    • ex. 파일을 무단으로 열람하거나 복제, 전화 대화를 엿듣는 행위
  • 방해, Interruption
    • 자산을 일시적 혹은 영구적으로 사용하지 못하게 만드는 행위
    • 가용성과 무결성에 영향을 미칠 수 있는 공격
    • ex. 서비스 거부 공격(DoS)
  • 변조, Modification
    • 자산의 데이터를 무단으로 변경하는 행위
    • 가용성과 무결성에 영향을 미칠 수 있는 공격
    • ex. 특정 파일의 내용 변경하여 그 파일의 신뢰성을 손상시킴, 서버 설정 파일을 변조하여 서버가 정상적으로 작동하지 않게 함
  • 위조, Fabrication
    • 새로운 데이터를 생성하거나, 거짓된 프로세스나 통신을 만들어내는 행위
    • 무결성과 가용성에 영향을 미친다.
    • ex. 잘못된 데이터를 생성하여 혼란을 야기, 악성 코드를 퍼뜨려 시스템을 공격하는 방식

3. 식별

식별, Identification

  • 주체가 스스로를 특정 방식으로 나타내는 행위
  • 네트워크 상에서 시스템이 자신을 주장하는 것과 유사하다.
  • 우리가 자신을 식별하는 방법은 이름, 별명, 계좌번호, 신분증, 지문, DNA 샘플 등 다양하지만, 이러한 정보는 대부분 변경될 수 있다.
  • 심지어 고유하다고 여겨지는 지문도 복제될 위험이 있어 완전히 안전하지 않다.

4. 인증

인증, Authentication

  • 식별에 대한 주장의 진위를 확인하는 과정
  • 주체가 본인임을 증명하기 위해 다양한 방법이 사용되며, 인증 방식은 크게 세 가지로 구분된다.

인증을 수행하기 위한 방식

  • 지식(Knowledge) 기반 인증
    • 주체가 알고 있는 정보를 기반으로 하는 인증방식
    • ex. 비밀번호, PIN 번호, 암호 문장
  • 생체(Biometric) 기반 인증
    • 주체의 신체적 특성을 이용한 방식
    • 비교적 고유한 개인의 특징을 사용한다.
    • ex. 지문, 홍채, 망막 패턴, 얼굴 인식
  • 소유(Possession) 기반 인증
    • 주체가 소지하고 있는 물리적 또는 디지털 객체를 이용한 인증 방식
    • ex. 신분증, 보안토큰, 보안카드

식별 vs 인증

  • 식별은 주체가 누구라고 주장하는 것
    • ex. 결제 시 카드를 꺼내는 것
  • 인증은 그 주장이 사실인지 확인하는 과정
    • ex. 카드 비밀번호나 지문을 입력해 성공

5. 인가

인가 (Authorization)

  • 식별과 인증이 완료된 후, 주체가 수행할 수 있는 작업을 허용하거나 거부하는 과정
  • 인증을 성공한 주체에게 자원에 대한 접근 권한을 부여할지 결정하는 단계
  • ex. 서버의 자원에 접근할 권한을 부여하거나 제한하는 것.

최소 권한의 원칙

  • 주체에게 필요한 최소한의 권한만을 부여하여 자원에 접근하도록 하는 보안 원칙
  • ex. 판매 부서 직원에게 인사 시스템 데이터에 접근 권한을 주지 않는 것이 더 안전하다.

Spring Security

1. 개요

스프링 시큐리티 (Spring Security)

  • Spring 기반 애플리케이션에 대한 인증(Authentication)과 인가(Authorization) 기능을 제공하며, 보안 공격으로부터 애플리케이션을 보호하는 프레임워크
  • OWASP Top 10과 같은 일반적으로 알려진 보안 취약점을 방어하는 데 도움을 준다.

주요 보안 기능

  • 웹 애플리케이션 사용자에 대한 인증 기능을 제공한다.
  • 기본 로그인 페이지와 테스트용 기본 계정을 제공한다.
  • 여러 인코딩 처리를 통해 비밀번호 암호화를 지원한다.
  • CSRF, Session fixation과 같은 보안 공격을 방지한다.
  • HTTP 응답 헤더 옵션을 통해 빈번한 보안 공격에 대응한다.

2. 스프링 시큐리티 관련 Bean 자동 구성

  • Spring Boot는 스프링 시큐리티 설정 자동 구성 기능을 제공한다.
    • spring-boot-starter-security 의존성 추가시 자동으로 보안 관련 Bean들이 생성되고 설정된다.

자동 구성 설명

  • spring-boot-starter-security
    • 보안 기능을 설정하기 위한 기본 구성 요소
    • 내부적으로 spring-security-config와 spring-security-web을 포함하고 있다.
  • Auto Configuration
    • 스프링 부트의 자동 구성 기능을 통해 애플리케이션이 실행될 때, 클래스 패스를 탐색하여 스프링 시큐리티 관련 라이브러리를 감지한다.
    • 스프링 시큐리티 관련 라이브러리가 감지되면, 스프링 부트는 자동으로 보안 관련 컴포넌트 (Bean)들을 스프링 컨테이너에 등록한다.

Spring Security 실습1

프로젝트 생성

image

  • 실행 시 로그

    image

    • Generated security password
      • 스프링 부트에 spring-boot-starter-security가 포함되면 기본 로그인 페이지가 활성화되며, 임시 비밀번호가 자동으로 생성된다.
      • 이 비밀번호는 개발 환경에서만 사용할 수 있다.
      • 무작위로 생성된 문자열이다.
  • localhost:8080으로 요청 시, /login 페이지로 리다이렉트
    • 처음 요청 시, 이 사람이 인증을 했는 지 안했는 지 확인 → 요청이 안되었으니 login 페이지로 redirect 시킨 것!
    • 첫 요청 시, 사용자가 애플리케이션에 처음 접속할 때, 스프링 시큐리티는 이 사용자가 인증을 했는지 확인한다.
    • 인증되지 않은 경우: 스프링 시큐리티는 사용자를 보호하기 위해 요청을 처리하지 않고, /login 페이지로 리다이렉트한다.
  • 기본 제공된 /login 페이지

    image

    • 스프링 시큐리티는 기본적으로 로그인 페이지를 제공하며, 애플리케이션이 처음 실행될 때 임시 비밀번호를 생성해준다.
  • 주어진 임시 비밀번호를 사용하여 로그인시, 다시 localhost:8080으로 리다이렉트된다.
    • 이 때 사용자는 인증된 상태가 된다.

    image


  • 로그아웃 처리
    • 스프링 시큐리티는 로그아웃 기능도 기본적으로 제공하며, localhost:8080/logout 으로 접속하면 로그아웃 화면이 표시된다.
    • 이 후 다시 localhost:8080에 접속하면, 다시 인증이 요구되며 로그인 페이지로 리다이렉트된다.

    image




우리 FISA 수업을 참고하였습니다.

© 2021. All rights reserved.

yaejinkong의 블로그