[O'REILLY] Java Security, SSL과 암호화 프로바이더.

Posted at 2010.10.02 12:33 // in Books // by MOOVA 무바㏇
JavaSecurity,2/E
카테고리 과학/기술 > 컴퓨터 > 프로그래밍
지은이 Oaks, Scott (O'Reilly, 2001년)
상세보기

집에 있는 책 정리하다가 튀어나왔습니다. 정리 차원에서 올립니다.



R&D팀에 있을 때 골머리를 싸매며 개발에 참고했던 책이다.
자바 보안에 관심 있는 사람이라면 자바 애플리케이션, 자바 플러그인에서 실행되는 애플릿에서 그 보안 기능이 어떻게 사용되는지 배울 수 있을 것이다. 보안에 관한 브라우저, 관리,인증 권한,SSL,HTTPS,전자서명, 암호화 복호화 알고리즘프로바이더, JSSE, JAAS 전반적인 웹 보안의 기초가 되는 예제들이 수두룩하다. 한국에서 제품화되어 있는 SSO솔루션이나 기타 보안 제품들의 원류를 보고 싶다면 이 책을 꼭 참고했으면 한다. 프로그램 관점에서는 이 책을 읽는 개발자가 어느 정도 자바 언어를 할 수 있고 자바 애플리케이션을 작성할 줄 안다고 가정하고 있다. API를 넘어서 자바 기본적인 보안영역의 기틀을 다질 수 있는 그런 책

요즘은 Low Level의 보안 작성요령을 모르고서도 프레임웍에서 High Level의 API를 대부분 지원해 주니, 기본적 소양으로 인증관련 지식을 얻고 싶다면 부담없이 읽어도 될 듯 하다.

저작자 표시 비영리 변경 금지
신고
블로그코리아에 블UP하기

댓글을 남겨주세요.

Spring Security - OID, SID, ACL 2

Posted at 2010.07.23 09:39 // in Principle // by MOOVA 무바㏇

Spring Security의 Domain ACL[각주:1]에선 개별의 Entity객체에 CRUD권한을 걸어둘 수 있다. Role,URL,Resource등 여러가지 자원에 자물쇠를 걸어두는 것은 일반적인 권한 상식이나 실행중인 클래스에 권한을 걸어두는 것은 지극히 드문일일 것이다.
(Windchill의 ACL 편집기에선 Domain Class기준으로 ACL을 설정할 수 있다. JPA도 그렇고, 기타 시큐리티 오픈 소스도 그렇고 좋은 사상은 언제나 배껴가고 복사하고 따라가게 되어있다. 모방은 창조의 어머니라고 하지 않았나)


그렇다면 구지 왜? 실행중인 클래스에 자물쇠를 걸어놓고 사용자에 따라서 차등을 두어야 하는 것일까? Role과 URL권한, 메소드 권한까지 모자라서 클래스에 왜? 이와같은 번거로운 작업을 해야하는 것일까?

한가지 시나리오를 상상해 보자.

2010:07:23 08:41:59
Figure 3. 성인과 청소년에 대한 도메인 클래스의 인가처리


ROLE_ADMIN과 ROLE_USER는 성인과 청소년으로 구별되어 있다. index.task 자원과 Document.word자원 또한 모두 통과 가능할 것이다. 하지만, 도메인클래스영역을 보자. 성인은 Adult 클래스를 조작 가능 하지만, 청소년은 Adult 클래스를 조작하지 못하도록 해야한다.
만약에 청소년이 Adult클래스를 조작가능하다면 이 시스템에 접속하는 대부분의 유저들이 나이를 불문하고 성인물을 감상할 수 있을테니까 말이다. 결과적으로 Domain Class에 권한에 따른 설정을 해 두면 별도의 프로그래밍없이 다음과 같은 뷰를 볼 수 있을 것이다.


성인
---------------------------------------------------------------------------------------------------
제목                               분류                        등급                          대여자
---------------------------------------------------------------------------------------------------
구르물섯달버서난..           액션                        일반                         오승택
라스트사무라이                액션                   성인(19)                         오승택
---------------------------------------------------------------------------------------------------


청소년
---------------------------------------------------------------------------------------------------
제목                               분류                        등급                          대여자
---------------------------------------------------------------------------------------------------
구르물섯달버서난..           액션                        일반                         오승택
---------------------------------------------------------------------------------------------------


이처럼 Domain Class에 자물쇠를 걸어두면 세부적인 사항까지 구현할 수 있게 도와줄 뿐만 아니라, 객체분할과 같은 논리적인 영역까지 그 범위를 넓히게 한다. 또한 클래스당 권한을 강제할 수 있기때문에 앞으로 객체지향언어에서 추천되는 인가 방법이라고 할 수 있다.


다음장은 Spring Security의 Domain ACL에 대해서 알아보도록 하자. (언제가 될지 모르겠다.:)

  1. ACL[에이씨엘]은 개개의 사용자들이 디렉토리나 파일과 같은 특정 시스템 개체에 접근할 수 있는 권한을 컴퓨터의 운영체계에 알리기 위해 설정해 놓은 표라고 할 수 있다. 각 개체는 접근제어목록을 식별할 수 있는 보안 속성을 가지며, 그 목록은 접근권한을 가진 각 시스템 사용자들을 위한 엔트리를 가진다. 가장 일반적인 권한은 1개의 파일이나 또는 한 개의 디렉토리 안에 있는 모든 파일들을 읽을 수 있고(Read), 기록할 수 있으며(Write), 그리고 만약 그것이 실행가능한 파일이나 프로그램인 경우라면 실행시킬 수 있는(Execute) 권한 등을 포함한다. [본문으로]
저작자 표시 비영리 변경 금지
신고
블로그코리아에 블UP하기
  1. Favicon of http://minimonk.net BlogIcon 구차니

    2010.07.23 21:05 신고 [수정/삭제] [답글]

    음.. 리눅스에도 ACL이 있는데 그걸 웹으로 확장한건가요? 아니면 이름만 같은 별개의 유래를 가진 녀석일려나요?

댓글을 남겨주세요.

Spring Security - OID, SID, ACL

Posted at 2010.07.23 09:37 // in Principle // by MOOVA 무바㏇
2010:07:23 04:04:12
Figure 1은 OODBMS에 포함된 개념에 대해서 열거한 그림이다.


Spring Security의 Domain ACL의 개념은 Security Identity(SID)라고 하는 객체 보안 식별자에 의해서 인가작업을 하기 때문에, SID의 부모격인 OID(Object Identity)가 무엇인지 알아볼 필요가 있다.


OID를 사용하기 시작한것은 OODBMS에 객체를 식별하기 위한 방법으로 종종 사용하곤 했다. 최근엔 ORM Framework에서 종종 볼 수 있는 Object의 Uniq한 식별자라고 말하기도 하는데, Domain Driven Design의 Eric Evans는 Entities를 정의하면서 Object Identity를 다음과 같이 설명한다.


객체 지향 언어의 Object identity조작은, ENTITY의 identity를 정의함에 있어서 다소 미흡한 면이 많다.
데이터베이스로부터 얻은 Object의 id는 java와 같은 랭귀지의 identity와 는 다르다. 데이터베이스로부터 얻은 객체는 영속성이 있는 반면 프로그래밍언어의 identity는 비영속성이라는 점이 다르기 때문이다. 하지만 데이터베이스와 프로그래밍 랭귀지를 굳이 동기화하자면 특별한 key로 랭귀지 객체에 아이디를 부여하는 것이 일반적이다. 그 identity는 불변하며, 변화될 수 없다. ID는 시스템에 의해서 자동으로 작성할 수 있고 다른 Object와 구별할 수 있는 유일한 식별자가 바로 Object Identity이다.


보통 데이터베이스와 프로그래밍 언어의 동기화를 위해 식별자로 사용된 Object Identity는 Evans가 Entities를 설명하기 훨씬 전부터 정의되어 왔고 변화됐다는 것을 다음의 목록에서 확인하자. (1978년도 이전부터 Object Identity라는 용어가 사용되어왔으니, 필자가 태어나기 이전부터 그 가치가 논의되고 있었다는 소리다. 참.. 놀랍고도 위대하다.)


[각주:1]Khashafian, Copeland (1986) - identity는 Object 내부에 있다. 그것의 목적은 독립적인 Object의 특성을 표현하는데 있다.
Atkinson et al. (1990) - 두 Object가 동일한 제 삼의 Object를 참조할 수 있다. 이것은 공유 Object의 개념으로 Object를 업데이트하거나 조작하거나 카피할 때 Object identity로 그 식별을 대신한다.
Kent (1991) - 다양한 관점으로 Object identity에 대해서 논의했다. Object Identity를 비교하는 것이 아니라 그들을 참조하는 Object에 관점을 두었다. 즉 Object의 실제주소값으로 Object Identity를 설명했다.
Beeri (1993) - 그가 논의했던 OID는 현재 사용되고 있는 Object Identity의 원류가 되었다. identity의 경우에는 그것을 검색하는 쿼리에 따라서 식별된다



발전된 MDA를 채택한 벤더 솔루션중 하나인 Windchill이 사용하는 OID를 잠깐 살펴보자. Windchill내부의 ORM 프레임웍으로 새로운 Entity Object를 생성해 데이터베이스에 객체 저장을 했다. ( Windchill의 영속 객체는 JPA나 HIbernate의 생명주기와 비슷한 그것을 가지고 있다. ) 실제 데이터베이스에 접속하여 OID를 추출해 보면 다음과 같은 형태의 Object Identity를 발견할 수 있다.

-----------------------------------------------------------------------------------------------
Oid
-----------------------------------------------------------------------------------------------
com.tistory.moova.Moovie:001
com.tistory.moova.Moovie:002
com.tistory.moova.Moovie:003
com.tistory.moova.Moovie:004
-----------------------------------------------------------------------------------------------


Evans가 논의한 것처럼 데이터베이스의 식별자와 OOP 언어(자바와 같은)의 식별자는 개념상 다르기 때문에, 도메인에 적합한 OID생성규칙을 사용해서 동기화 하고 있다. 실제로 이것은 Object Identity가 아닌 Object identifier라고 하는 직렬화된 식별자이다.

Figure2. ObjectIdentity와 ObjectIdentifier의 관계도

ObjectIdentity도 Object의 일종으로써 실제 구분할 값을 찾기 위해 ObjectIdentifier라는 직렬화된 식별자를 참조의 형태로 포함하고 있다.(OCP원리를 따르면서 SRP원리도 포함하고 있다.). 실제로 "com.tistory.moova.Moovie:004"와 같은 값을 얻기 위해선 다음의 코드가 필요할지 모르겠다.

..
PersistentHelper.store(moovie);
moovie.getObjectIdentifier() : Serializable

JPA는 @Id, @IdClass, @EmbeddedId로 OID를 활용하고 있으며, Windchill은 Persistent를 상속하는 방법으로 OID를 활용하고 있다.

JPA 예
@Entity
public class Inventory implements Serializable {

        @Id[각주:2]
        @GeneratedValue(generator="InvSeq")
        @SequenceGenerator(name="InvSeq",sequenceName="INV_SEQ", allocationSize=5)
        private long id;

Wnidchill 예
public class Inventory extends Persistent {...}

언어와 플렛폼의 차이를 그대로 보여준다. 하지만, 근본적인 사상과 배경은 같다는 것을 알 수 있다.

이 설명으로 Object Identity와 Object Identifier에 대한 개념은 개략적으로 이해할 수 있으리라 본다. Secure Identity(SID)를 설명하기에 앞서 OID를 설명한 이유는 SID와 OID는 바늘과 실과 같은 수족과 같은 관계이기 때문이다.

보안작업을 하려하는 사람을 예로 들어보자.

예를들어 오승택이라는 사람이 주민등록증이 없으면 보안작업을 할 때 필요한 보안인가증도 발급받을 수 없다. 주민등록은 그 사람을 대표하는 ID이기 때문에, 말 그대로 객체 ID가 없으면 보안인가(SID)에서 필요한 신원을 확인할 수 없다.

충분히 이해가 되었으리라 믿는다. 지금까지의 설명은 Spring Security의 Domain ACL을 설명하기 위한 재료물들이다.




참조 문서

In “The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two)” [75] (1978),
• In “Values and Objects in Programming Languages” [56] (1982), Bruce J. MacLennan discusses the distinction between values and objects.
• The paper “Object Identity” [43] (1986) by Setrag N. Khoshafian and George P. Copeland is the most cited one with regard to the topic of object identity, and gives a thorough presentation of the concept and its implementation in programming languages and database systems.
• In “The Object-Oriented Database System Manifesto” [4] (1990), Mal-colm Atkinson et al. list requirements that are to be fulfilled by object-oriented databases. Of course, object identity plays an important role here.
• “A Rigorous Model of Object References, Identity and Existence” [42] (1991) by William Kent describes a model for object identity that, among other things, aims at a facility for merging objects and their identities after the fact.
• Catriel Beeri criticizes a too strong focus on object-oriented features in the context of databases in “Some Thoughts on the Future Evolution of Object-Oriented Database Concepts” [8] (1993), and sketches a re- duction of the concept of object identity to pure value-based properties in relational databases.
• Roel Wieringa and Wiebren de Jonge present a detailed formal model in “Object Identifiers, Keys, and Surrogates – Object Identifiers Re-visited” [85] (1995) that captures the essential properties of object identity and can be interpreted as the common denominator of previ-ous approaches.



 

  1. http://deposit.ddb.de/cgi-bin/dokserv?idn=972868291&dok_var=d1&dok_ext=pdf&filename=972868291.pdf [본문으로]
  2. http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html [본문으로]
저작자 표시 비영리 변경 금지
신고
블로그코리아에 블UP하기

댓글을 남겨주세요.

삑삑이와 해킹 보안

Posted at 2010.07.21 14:49 // in 분류없음 // by MOOVA 무바㏇
해킹할것인가해킹당할것인가(S/W포함)
카테고리 컴퓨터/IT > 대학교재
지은이 유영일 (삼각형프레스, 2000년)
상세보기

해킹과방어완전실무(CD-ROM1장포함)
카테고리 컴퓨터/IT > 네트워크/보안 > 보안/인증/해킹
지은이 조기준 외 (구민사, 2001년)
상세보기

LG CYON | KU9100 | Normal program | Unknown | 2010:07:21 08:35:33

빛바랜 책장에 수년동안 묵묵히 제자리를 차지하고 앉아 있는 케케묵은 이놈들을 발견했다. 책장을 펴보니 더덕 진 물기에 종지들이 녹아, 바스락 바스락 소리가 귀를 즐겁게 만든다.

언제 참고했던 것인가... 기억을 더듬어 본다. 2000년~2001년 사이, 군부대 마크가 찍혀 있는 것을 확인했다. 군시절 보안업무에 참고하고자 사제로 사 둔 책이었는데, 군대 출입허가 관련 때문에 보안 도장이 찍혀 있는 것이다. 군 시절 대부분의 책자는 제대할 때 모두 군대에 놓고 나왔는데 이놈들 만큼만은 집에 고스란히 자리를 차지하고 있었다. ( 휴가때..들고 나왔던가...;;;;

당시 전군은 초소 경계병을 감시할 목적으로 한 가지 전형적인 시스템을 개발했다.

군부대 총기탈환 사건이 발생한지 얼마지나지 않았고 대대적인 국가의 보안 투자였다고 생각한다. 대부분 이때 군생활을 했던 장군들은 단 하나의 편법이라도 용서가 될 수 없었을 만큼 말 그대로 FM시절을 보내야 했고 GOP의 밀어내기식 근무로 말미암아 군생활 대부분은 경계근무를 서야하는 철통과 같은 시절을 보내야 했다. 그때 나온것이 아마도..일명 삑삑이 시스템. 핸디(?)에 의탁한 초소경계병 감사 시스템이다. ( 이 때 군부대 전산 업무는 대부분은 핸디에 의해 점령당하고? 있었다. )
삑삑이 시스템이란 병사와 소대장들이 야간 경계근무를 서기 위해 경계근무를 나갈 때, 일명 "삑삑이"을 들고 초소까지 진입하면, 삑삑이에 몇 초에 몇 시 몇 분.. 이런 식의 이력을 남기어 나중에 전살실에서 통계/집계할 수 있는 휴대용 시스템이었다. 이것만 있으면 제시간에 경계근무를 서는지, 아니면 농땡이를 피우는지 알 수 있다는 윗 선의 노력이었다. 

총기탈환 사건이 터지면서 경계근무 태만의 심각성을 뒤늦게나마 일깨워 이런 불편한 시스템까지 도입해야 한 것이다.


삑삑이 시스템을 3개월간 도입한 후, 별 탈 없이 운용하고 있던 기간中, 어떤 통신병에 의해서 삑삑이 시스템의 비밀이 풀어진다.
시스템의 보안 허점을 이용하여 의도적으로 삑삑이 이력을 수정/보완할 수 있는 편법이 생긴 것이다.
이는 한 통신병의 쾌거였다. 이 발견은 의도와는 반대로 6개월간 편법으로 작용되어 윗선에 가짜보고서를 만들어 내는 악재로 이용당한다.. 그가 원했던 것은 이런 편법 문화가 아니었다. 취약한 점을 발견하고 보완하고 방어하자는 의도였는데 오히려 군간부들은 더 윗선의 눈을 피하기 위하여 그 방법을 오히려 역이용한 것이다. 몇 개월 후 행정병들의 소원수리에 의해서 그 해킹방법은 공개되었다. 물론 통신병과 행정병들의 고백에 의해서 말이다. 그리고 보안에 취약한 그 삑삑이 시스템은 대대적인 패치를 하기에 이르렀다. 이때 전군에 들어간 비용만해도 만만치 않았을 것이다.
(통신병의 하루, 하루는 정말 피곤하다. 새벽엔 매번 대기상태에 있어야 한다. 중대본부의 통신병과는 달리 중대 통신병은 100명중 1명이 발탁 대상이 된다. 1초~22초 통신선로 개편, 작전업무 투입, 상황근무, 경계근무, 혹한기, 유격, 작업,보안,무선통신등... 체력도 체력이거니와 새벽 혼자서 산을 다녀야 하는 담력까지 있어야 한다. 그래서 그리 쉽지만은 않았던 군생활이었다고 생각한다.)


2010:07:21 14:43:26
삑삑이 시스템과 가장 비슷한 편의점의 인식기. 이와 달리 인식기를 들고 초소까지 나가야 한다.


보안업무는 기업이나 국가에 정말 중요한 자산이며, 보안을 소홀히 하면 편법이 되고, 생활화하면 득이 된다라는 진리를 깨우친다.


우리가 사용하고 있는 기업내 보안은 대부분 군부대 보안 업무에서 그 원류를 가지고 있다. 인증,인가,제어목록,권한등.. 로그인이 포함되어 있는 시스템은 알게 모르게 군대보안업무를 따라가고 있는 것이다. 대게 Security System을 군사보안에 비교하는 것도 바로 이와 같은 이유 때문이다.

 

군사업무에서 활용하고 있는 보안업무중에 인증(Authentication), 인가(Authorization) 프로세스가 있다.
비취장에 입장하기 위해선 비밀취급인가증을 인증담당자에게 제시를 해야 한다. 인증담당자는 해당 정작과에 출입요청을 비취자의 신원조사를 한 뒤 출입허용 여부를 확인했고, 비취자의 출입을 허용한다.

비밂문서를 취급하기 위해 인증을 받은 비취자는 다시 한번 인가프로세스를 거쳐야 한다. 비밀문서중에서는 ( 대외비, 군사 보안 1~3 ) 의 분류가 있는데, 각각의 비밀자료를 취급할 수 있는 각각의 인가증서를 필요로 한다. 여기서 인가증서란 비취인가증 특급~3급까지 다양하다. 이 비취인가증의 급수에 따라 레벨에 상이한 비밀취급문서를 다룰 수 있는 권한이 주어진다.



2010:07:21 09:41:37

대부분의 보안 시스템은 군사보안업무에 원류를 두고 있다.
저작자 표시 비영리 변경 금지
신고
블로그코리아에 블UP하기
  1. 2010.07.21 18:54 [수정/삭제] [답글]

    비밀댓글입니다

    • Favicon of http://moova.tistory.com BlogIcon MOOVA 무바㏇

      2010.07.22 18:09 신고 [수정/삭제]

      헛! 겨울군번이군요. 전 빵빵년 11월 군번 ㅎ
      군대를 조금 늦게 갔었죠. ( 이등병때 제대했던 병장들이
      나랑 나이가 같았으니 ㅋ)
      겨울군번만 보면 동지애를 느낍니다. 들어가자마자 혹한기훈련받죠 아마.:)

  2. Favicon of http://minimonk.net BlogIcon 구차니

    2010.07.23 21:30 신고 [수정/삭제] [답글]

    아.. 갑자기 저번에 dog 고생한 바코드 리더의 악몽이 떠오르고 있어요 ㅋ

댓글을 남겨주세요.

티스토리 툴바