2016년 3월 30일 수요일

모바일 앱 개발의 보안강화를 위한 스프링 시큐리티 프레임워크

카페 > 뉴딜코리아 홈페이지 | 뉴딜코리아
http://cafe.naver.com/rapid7/2311


모바일 앱 개발의 보안강화를 위한 스프링 시큐리티 프레임워크
​
​
​
​‘스프링 프레임워크 (Spring Framework)’ 는 자바 플랫폼 을 위한 오픈소스 애플리케이션 프레임워크 로서 간단히 스프링 (Spring) 이라고도 불린다

. 아키텍처의 중요성이 강조되면서 조명받기 시작하여 엔터프라이즈 어플리케이션 개발의 복잡성을 줄여주고 , 모든 기능을 종합적으로 제공하는 경량화된 솔루션이다 .
​
우리나라 전자정부의 웹 서비스 개발 시 , 사용을 권장하고 있는 전자정부 표준프레임워크 의 기반 기술로도 쓰이고 있다.

그 중에서도 ‘ 스프링 시큐리티 ’ 는 스프링 프레임워크의 하위 개념으로 , ‘ 웹 보안 ’ 에 관련된 프레임워크이다 .
 스프링 시큐리티는 강력하면서도 사용하기가 쉽고, 게다가 단 몇 십줄의 코드만으로도 대형 웹 서비스사와 비슷한 수준의 보안을 유지할 수 있다는 장점이 있다 .
​
 물론 기업에서 필요한 시스템에 적합한 시스템을 만들기위해서는 적절한 튜닝이 필요하겠지만 그에 따른 스프링 시큐리티는 정말 최상 중 최상의 선택이 아닐 수 없다 .
​
스프링 시큐리티는 수 년간의 오픈소스 개발로 인하여 많은 노하우가 녹아있지만 , 국내에서는 상대적으로 유명하지 않고 소개되어 있는 곳도 많지 않은 편인 ‘ 스프링 시큐리티 ’ 에 대해  KBS 기술본부 시스템운용부 강자원 기술사로부터 조언을 구할 수 있었다.


1. 스프링 시큐리티 프레임워크의 정의와 역할
2. 스프링 프레임워크의 핵심
3. 스프링 시큐리티 프레임워크 사용방법
4. 스프링 시큐리티 프레임워크 아키텍처
 

Q) 스프링 시큐리티 프레임워크를 한마디로 정의하자면 무엇인가요 ?

스프링 시큐리티 프레임워크는 필요한 인증 , 권한 및 보안관련 기능들을 손쉽게 사용할 수 있게 지원해주는 프레임워크입니다 . 구현은 servlet filter 및 Spring AOP 기반이며 유연한 설계로 다양한 확장 및 커스터마이징이 가능합니다 . 또한 , 비즈니스 로직과 인증 , 권한 로직을 90% 이상 분리가 가능하며 구축된 프레임워크의 재활용과 기존 스프링 기반의 레거시 시스템에 적용할 때 매우 유용한 장점이 있습니다 .

Q) 왜 스프링 시큐리티 프레임워크를 사용하는 건가요 ?  
     보안강화를 위해서 어떤 역할을 하는지 궁금합니다.

  기본 설정만으로도 일반적인 기업 인증 시스템과의 연동이 바로 가능하고 설정을 제외하고 아주 적은 노력만으로도 각 상황에 보안을 적용할 수 있습니다.
또한 , 스프링 시큐리티를 사용하면 다음과 같은 일들을 할 수 있습니다.
- 시스템 사용자를 개별 사용자를 세분화 한다.
- 사용자 역할에 따라 권한부여 레벨을 부여한다
- 사용자 군에 사용자 역할을 부여한다
- 애플리케이션 리소스에 대해 전역으로 인증규칙을 적용한다.
- 모든 애플리케이션 아키텍처 레벨에서 권한 부여 규칙을 적용한다.
- 사용자의 세션을 조작하거나 훔치려는 일반적인 공격을 차단한다.

Q) 스프링 시큐리티 프레임워크의 핵심은 무엇인가요?
 


스프링 시큐리티는 주체를 고유 식별하는데 사용되는 자바 표준 보안개념인 인증입니다.
Principal(java.security.Principal) 을 확장해 사용하고 , 전형적인 Principal 에서는 시스템 사용자에 대한 1:1 매핑을 사용하지만 이러한 Principal 은 시스템의 어떠한 클라이언트 , 이를 테면 앱 서비스 클라이언트 , 자동배치피드 등에도 매핑할 수 있습니다.

스프링 시큐리티의 모듈 구성은 아래 그림과 같습니다. [ 그림 1 참조 ]
< 그림 1> Spring security Modules & sub-Modules   
 


스프링 시큐리티에서 주로 영향을 주는 방식은 일련의 ServletRequest 필터를 사용한 방식입니다. 필터들이 앱에 대한 모든 요청을 감싸서 처리하게 되는데 , 스프링 시큐리티에서 여러 개의 필터들은 체인 형태를 이루면서 동작을 합니다. 자동설정 옵션을 사용하면 10 개의 스프링 시큐리티 필터가 자동으로 설정되게 됩니다. [ 그림 2 참조 ]

< 그림 2> 스프링 시큐리티의 필터 체인 내의 동작과정


각 순서와 기능을 간단히 요약하면 다음과 같습니다.

< 표 1> 자동설정으로 구성되는 필터체인 내의 10 개의 필터


필터 체인의 제일 마지막에 위치한 ‘Filter Security Interceptor’ 는 앞에 지나온 모든 필터들의 정보를 토대로 최종 결정을 내리게 됩니다.
Spring Security 는 대략 25 개의 필터를 제공합니다. 이런 필터들은 모두 조건적으로 적용될 수 있습니다. 물론 javax.servlet.Filter 인터페이스를 직접 구현해서 추가할 수도 있고 위에 나열된 필터들을 명시적으로 포함시키거나 제외시킬 수도 있습니다.

Q) 스프링 시큐리티를 사용하면 기본 옵션에서 벗어난 요구사항들은 어떻게 충족시킬 수 있을까요?
스프링 시큐리티는 커스터마이징을 하거나 확장시킬 수가 있는데 , 이렇게 하려면 전체 스프링 시큐리티 필터 체인과 지원 인프라 스트럭처를 처음부터 하나씩 직접 설정해야 합니다 . 이렇게 하나씩 작성할 때에는 빈 의존관계를 염두해서 설정해야 하는데요 . 스프링 시큐리티의 필터들은 순서가 존재하기 때문에 이 순서를 어길 경우에는 예상치 못한 결과가 나올 수도 있습니다 . 그러므로 특별한 경우가 아니라면 순서를 지켜주는 것이 좋습니다.

< 그림 3. 빈 의존관계 구성도 >


Q) 스프링 시큐리티 프레임워크를 사용할 때 ‘ 기본설정 ’ 과 ‘ 커스터 마이징 방법 ’ 중 어떤 것을 사용하는 것이 좋을까요?

  너무나도 당연한 답이지만 선택은 사용자의 몫입니다 . 기본 설정으로 사용을 하는 것은 예상하지 못한 결과를 초래하지 않는 최선의 방법이 되겠지만 , 각각 아래와 같은 장점이 있으므로 개발하려는 목적에 맞게 사용하시면 될 것 같습니다.

< 기본 설정의 장점 >
- 일반적인 웹 기반 및 메소드 기반 설정에 적용할 수 있는 강력한 기능의 축약 구문
- 복잡한 설정을 적용하기 위해 개발자들이 내부적으로 일어나는 세부 내용에 대해 알 필요가 없음
- security 네임스페이스 핸들러 코드가 다양한 설정 이슈 관련 문제를 파악하고 경고해줌
- 설정 과정에서 필요한 부분을 빼놓고 설정할 위험이 극히 적음

< 커스터 마이징의 장점 >
- 화장 , 오버라이드 , 표준 스프링 스탤에서 의도적으로 일부를 생략하는 것과 같은 유연성을 허용함
- filter-chain 엘리먼트의 pattern 어트리뷰트를 사용해 URL 패턴에 의존한 커스텀 필터 체인 및 인증을 허용하는데 이러한 기능은 웹 서비스 또는 REST 인증과 사용자 기반 인증이 함께 사용될 때 필요할 수 있음.
- 설정 파일들이 스프링 시큐리티 네임스페이스 처리와 직접적인 연관성이 없음.
- 인증 관리자를 명시적으로 설정하거나 오버라이드 할 수 있음.
- 단순한 security 네임스페이스를 적용할 때보다 훨씬 더 많은 설정 옵션을 사용할 수 있음.

Q) 마지막으로 스프링 시큐리티 프레임워크에 대해 정리 부탁드리겠습니다.

스프링 시큐리티의 기본 아키텍처는 다음과 같습니다.

< 그림 4> Spring Sequrity Basic Architecture








웹 어플리케이션 인증절차를 아키텍처를 기반으로 간단히 설명을 하자면 다음과 같습니다 .
인증요청 시 보호된 자원일 경우 로그인 여부를 판단하고 로그인 성공 시 권한을 체크하여 리소스에 접근권한을 줍니다 . 만약 접근 권한이 없다면 403, 로그인 실패라면 페이지 재호출을 하게 됩니다 .
요청 -> Filter Chain 호출 -> 인터셉터 호출  -> 자원접근
그에 대한 과정과 상세화는 아래 그림과 같습니다 .
 
자료 : 구글 이미지

따라서 , 기본 아키텍처와 상세화 부분을 매칭시키면 아래와 같습니다 .

시스템을 개발하면 거의 필수적으로 포함되어야 하는 보안에 관한 이슈가 생기는데 , 수 년간의 오픈소스 개발로 인하여 많은 노하우가 녹아있는 스프링 시큐리티에 대한 소개였습니다.


< 참고문헌 >

댓글 없음:

댓글 쓰기