[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
프로젝트 생성
실행 시 로그
- Generated security password
- 스프링 부트에 spring-boot-starter-security가 포함되면 기본 로그인 페이지가 활성화되며, 임시 비밀번호가 자동으로 생성된다.
- 이 비밀번호는 개발 환경에서만 사용할 수 있다.
- 무작위로 생성된 문자열이다.
- Generated security password
localhost:8080
으로 요청 시,/login
페이지로 리다이렉트- 처음 요청 시, 이 사람이 인증을 했는 지 안했는 지 확인 → 요청이 안되었으니 login 페이지로 redirect 시킨 것!
- 첫 요청 시, 사용자가 애플리케이션에 처음 접속할 때, 스프링 시큐리티는 이 사용자가 인증을 했는지 확인한다.
- 인증되지 않은 경우: 스프링 시큐리티는 사용자를 보호하기 위해 요청을 처리하지 않고, /login 페이지로 리다이렉트한다.
기본 제공된 /login 페이지
- 스프링 시큐리티는 기본적으로 로그인 페이지를 제공하며, 애플리케이션이 처음 실행될 때 임시 비밀번호를 생성해준다.
- 스프링 시큐리티는 기본적으로 로그인 페이지를 제공하며, 애플리케이션이 처음 실행될 때 임시 비밀번호를 생성해준다.
- 주어진 임시 비밀번호를 사용하여 로그인시, 다시
localhost:8080
으로 리다이렉트된다.- 이 때 사용자는 인증된 상태가 된다.
- 로그아웃 처리
- 스프링 시큐리티는 로그아웃 기능도 기본적으로 제공하며,
localhost:8080/logout
으로 접속하면 로그아웃 화면이 표시된다. - 이 후 다시
localhost:8080
에 접속하면, 다시 인증이 요구되며 로그인 페이지로 리다이렉트된다.
- 스프링 시큐리티는 로그아웃 기능도 기본적으로 제공하며,
우리 FISA 수업을 참고하였습니다.