스프링 시큐리티 인 액션 | 로렌티우 스필카 - 교보문고

스프링 시큐리티 인 액션 | 모든 스프링 개발자에게 권장하는 스프링 시큐리티 필수 가이드!보안은 타협할 수 없는 중요한 요소다. 스프링 시큐리티로 안전하게 데이터를 전송하고 자격 증명을

product.kyobobook.co.kr

 

보안은 실제 어플리케이션의 목적인 기능적인 요소가 아닌 비기능적인 요소지만, 필수적인 비기능적 요소다.

보안은 어플리케이션 개발 처음부터 고려해야 하는 요소다.

 

비기능적 요소

필수 요소를 제외한 요소로, 군대로 예를 들면 전투 보직을 제외한 (),(),(),(),() 이라고 있다.

 

스프링 시큐리티 : 개념과 장점

스프링 시큐리티는 유연하다. 낮은 수준의 보안에서 높은 수준의 보안까지 적용이 가능하다.

낮은 수준에서 높은 수준으로 수록, 복잡도가 증가해 유지 관리가 어려워 진다.

 

보안이라 함은 무언가를 지키는 것이다. 예를 들어 금고는 안에 내용물이 '무언가', 앞에 잠금 장치가 보안일 것이다.

스프링 시큐리티에선 데이터가 '무언가' 스프링 시큐리티가 보안이다.

 

스프링 시큐리티는 데이터가 시스템으로 들어올 데이터를 가로채 검증을 한다.

 

소프트웨어 보안이란?

 유출되면 민감한 데이터들이 있다. 이메일 주소처럼 상대적으로 민감한 데이터부터 신용 카드처럼 유출되면 민감한 데이터가 있다. 이러한 데이터는 의도된 사용자 외에는 접근을 못하게 해야한다.

 

보안에는 네트워크 보안, OS 보안 모두는 포함하는 복잡한 주제이다.

스프링 시큐리티는 사용자와 가장 가까이 맏닿아 있는 어플리케이션 보안을 다룬다.

 

모놀리식과 마이크로서비스 아키텍처

모놀리식 아키텍처는 하나의 시스템으로 모든 책임을 구현한다.

마이크로 서비스 아키텍처는 책임별로 여러 시스템을 구현한다.

 

마이크로 서비스는 확장성 유연성이 좋지만, 모놀리식에 비해 신경쓸 많아진다.

보안으로만 한정해서 보면, 시스템마다 보안 설정을 해줘야 한다. , 관리 포인트가 늘어난다.

 

스프링 시큐리티는 크게 사용자를 식별하는 인증(Authentication) 인증된 사용자에 대한 알맞은 권한부여(Authorization) 단계로 이뤄진다.

 

 

 

보안이 중요한 이유는 무엇인가?

보안을 등한 해서 해킹을 당해 정보 유출이되면, 법적인 문제, 복구 비용, 브랜드 이미지 실추 등이 발생한다.

선제적으로 보안에 신경을 썼으면, 발생하지 않았을 비용이다.

미리 보안에 신경쓰는 비용이 복구 비용보다 적다.

 

애플리케이션의 일반적인 보안 취약성

일반적인 취약성 목록

  • 인증 취약성
  • 세션 고정
  • XSS(교차 사이트 스크립팅)
  • CSRF(사이트 요청 위조)
  • 주입
  • 기밀 데이터 노출
  • 메서드 접근 제어 부족
  • 알려진 취약성이 있는 종속성 이용

인증과 권한 부여의 취약성

인증은 직관적으로 이해가 쉽다. 권한 부여만 예를 들어보면 아래와 같다.

인증은 정상적으로 수행 구매 내역을 조회하고 있다.

 

임꺽정이 홍길동 구매 내역을 확인할 있다. 이는 인증은 성공했으나, 자기 자신으로 조회만 가능하게 권한 부여를 해야 했으나, 이를 설정하지 않을 발생하는 상황이다.

세션 고정

인증 세션 ID 부여하는데 고유한 세션ID 부여하지 않아 중복이 발생하거나 기존 세션 ID 재사용 가능할 발생하는 취약성이다.

XSS

교차 사이트 스크립팅은 사이트에 스크립트를 주입해 다른 사용자가 이를 실행하도록 하는 공격이다.

다른 말로 "클라리언트 코드 삽입 공격"이라고도 한다.

 

스크립트는 "<script>악의적인 코드</script>" 의미한다.

 

, 3자의 스크립트가 실행되는 것으로 자바스크립트로 있는 모든 것이 위험하다.

개인정보 탈취, DDos 참여 등…

 

<script>태그가 실행될 있는 곳이 위험한 곳이다. (이메일, 댓글 )

 

CSRF

사이트 요청 위조는 정상적인 사이트로 로그인 로그아웃 하지 않은채

악의적인 사이트로 접근했을 , 숨겨진 스크립트가 동작해 서버로 요청을 위조하는 것이다.

 

 

애플리케이션의 주입 취약성 이해

주입 공격은 다양하다. XSS 주입 취약성 하나다. 이외도 유명한 SQL 주입이 있다.

주입 공격은 비정상 코드 묶음을 주입해 시스템을 조작하는 유형의 취약성이다.

 

민감한 데이터 노출

개발자의 부주의로 발생한다.

  • 로그에 불필요한 정보를 노출
  • application.properties 비밀번호 같은 정보같은 민감한 정보를 입력해 사용
  • 400, 500 에러에 서버의 예외 스택을 응답으로 보냄
  • 로그인 실패 ID/PW 무엇이 틀렸는지 정확히 응답

 

메서드 접근 제어 부족

일반적인 Controller - Service - Repository 계층에서 주로 Controller 계층에만 접근 제어를 한다.

이는 향후 기능 추가 접근 제어의 헛점이 생길 있다. 따라서 계층에 권한을 부여해야 한다.

 

알려진 취약성이 있는 종속성 이용

스프링 시큐리티를 포함하여, 다른 프레임 워크나 라이브러리를 사용할 사용하는 버전에 알려진 취약성이 있는 경우를 말한다. 취약성이 있는 버전은 제거해야 한다.

 

다양한 아키텍처에 적용된 보안

다양한 아키텍처 마다 요구되는 사항을 준구하면서, 스프링 키큐리티를 알맞게 구성해야 한다.

높은 보안은 복잡도와 성능을 잡아먹고, 낮은 보안은 위험도를 높이게 된다.

상황에 맞는 알맞은 구성을 적용해야 한다.

 

일체형 보안 설계

프론트엔드-백엔드 분리된 아닌 어플리케이션을 말한다.

일체형 어플리케이션은 프론트엔드와 백엔드 개발이 묶여 있어 비교적 보안 설계가 쉽다.

 

백엔드-프론트엔드 분리 보안 설계

프론트는 뷰나 리엑트를 이용해 별도로 개발하는 형태를 말한다.

경우 프론트와 백엔드는 REST API 통신을 하게되는데, 이때 반드시 백엔드와 같은 출처의 프론트엔드가 아닐 있다. 따라서 보안 설계가 복잡해진다.

 

 

+ Recent posts