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 호출 -> 인터셉터 호출  -> 자원접근
그에 대한 과정과 상세화는 아래 그림과 같습니다 .
 
자료 : 구글 이미지

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

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


< 참고문헌 >

댓글 없음:

댓글 쓰기