무선랜 보안의 실체



는 출하될 때 192.168.0.0 또는 192.168.1.1이 내장 IP 주소로 설정돼 있으며 기본 로그인 아이디는 Administrator나 admin, 암호는 PASSWORD나 공백으로 설정돼 있다.

AP 개발업체마다 기본 로그인 정보가 다르다고 하지만 해커는 특정 행위에 대한 AP의 반응을 분석하는 방법으로 간단히 제조업체와 모델명을 알아낼 수 있고, 일단 알아내면 웹사이트를 통해 해당 제품의 로그인 정보를 찾을 수 있다. 만일 사용자가 기본 로그인 정보를 수정하지 않았다면 해커는 손쉽게 AP를 완전히 장악할 수 있다.

SSID 브로드캐스팅은 보안상 위험한가
무선 네트워크에 접속하려 할 때, 주변 다른 곳에서 사용하는 무선 네트워크가 사용 가능한 연결로 나타나는 경우가 있을 것이다. 다른 곳에서 사용하는 네트워크가 내 목록에 나타나는 이유는 해당 네트워크의 SSID 브로드캐스팅이 활성화 돼있기 때문이다. SSID 브로드캐스팅은 AP를 통해 범위내의 모든 클라이언트에 네트워크 존재를 알려주도록 한다.

SSID 브로드캐스팅을 비활성화 시킨다고 해킹이 불가능해지는 것은 아니지만, 적어도 해커에게 해킹 전에 SSID를 먼저 알아내야 한다는 문제를 더해줄 수는 있다(특별한 이유가 없다면 비활성화 시키는 것이 좋다).

MAC 필터링은 정말 보안 효과가 있는가
많은 AP가 MAC 필터링 기능을 통해 특정 MAC 주소를 가진 클라이언트만 접속이 가능하도록 하는 기능을 제공한다.

MAC 주소를 해킹으로 알아내는 것은 무척 쉽지만 MAC 필터링을 적용한다면 이 작업이 조금 더 어렵게 된다. MAC 주소를 알아내기에 앞서 어떤 MAC 주소가 해당 무선 네트워크에서 사용 가능한지 먼저 알아내야 하기 때문이다(이는 패킷 스니핑으로 가능하다).

결론적으로 MAC 필터링은 어리숙한 해커는 어느정도 막을 수 있겠지만 ‘해킹하고자 하는 의지에 찬’ 해커를 막을 정도는 아니다. 다만 해킹 속도는 조금 늦출 수 있을 것이다.

DHCP는 보안상 위험한가
대부분의 AP는 DHCP가 기본적으로 활성화 돼있어서 접속하는 모든 워크스테이션에 IP 주소를 전달한다. 즉 해커도 DHCP를 통해 네트워크와 관련된 IP 주소를 알 수 있기 때문에 DHCP는 간접적인 보안 위협이 된다고 할 수 있다. 물론 대부분의 AP가 WEP 암호화 인증을 거친 후에 IP 주소를 알려주기는 하지만.

신호간섭(signal jamming)을 보안 문제로 봐야 하는가
신호간섭이 서비스거부 공격(DoS)으로 사용된다는 보고가 몇 건 있지만 대부분의 신호간섭은 다른 원인에서 비롯된다.

802.11b 네트워크는 2.4GHz 주파수대에서 동작하는데, 이 주파수대는 많은 무선 전화기들이 사용하고 있는 영역이기도 하다. 이러한 무선 전화기나 전자레인지 등 무선 기기들이 무선랜 네트워크 신호와 간섭하는 경우가 발생할 수 있다.

예전에는 5.8GHz대를 사용하는 무선랜으로 업그레이드해 이 문제를 해결했지만, 지금은 무선 전화기도 이 주파수대를 사용하는 경우가 있다. 또 5.8GHz 네트워크는 2.4GHz 대역을 사용하는 네트워크보다 벽 통과 능력이 떨어진다.

신호 강도를 적절히 조절하는 것이 보안에 도움이 되는가
사람들은 무선 네트워크를 구축할때, 사무실 어디에서나 양호한 감도를 확보할 수 있도록 큰 안테나와 강력한 송출력을 원하곤 한다. 하지만 보안 관점에서는 신호가 특정 구역을 넘어서지 않도록 송출력을 낮추는 것이 도움이 된다. 누군가 멀리 떨어진 곳에서 몰래 접속할 수 있게 하고싶지 않다면.

보안상의 표준 매커니즘을 모두 적용한다면 보안을 보증할 수 있는가
‘상대적으로 안전하다’고는 말할 수 있지만 실제 침투(penetration) 실험을 통해 보안성을 점검하는 것이 중요하다. 침투 실험은 결함존재 여부를 파악하기 위해 네트워크를 직접 해킹해보는 것이다.

SNMP를 사용해야 하는가
SNMP는 양날의 칼과 같다. AP가 SNMP를 지원한다면 SNMP를 지원하는 다른 여타 장비와 같은 방법으로 AP를 관리할 수 있다. 하지만 SNMP를 사용하는 AP가 해킹당할 경우, 해커는 바로 그 SNMP를 통해 네트워크에 관련된 모든 정보를 빼낼 수 있다. 따라서 꼭 필요한 것이 아니라면 SNMP를 비활성화 시켜두는 것이 좋다.

AP에 송출력을 조절할 수 있는 기능이 없으며 안테나도 제거할 수 없도록 돼있다. 신호가 건물 외부로 못나가도록 하는 다른 방법은 없는가
AP를 중앙에 위치시킨다. 창문 근처는 반드시 피해야 하며, 외벽 부근도 안된다.

무선 네트워크를 감사하는 방법은?
다른 네트워크와 똑같이 하면 된다. 만일 사용 중인 AP에 언제 어디서 클라이언트가 접속했는지 로그를 기록하는 기능이 있다면 최소한 하루에 한번씩 로그를 검토한다.

인가되지 않은 AP를 감지하는 방법은?
넷 스텀블러, 웨이브 러너 등 특정 영역의 무선 장비를 검색해주는 무료 유틸리티들이 다수 있다. 로그워치와 같이 더 많은 기능을 제공하는 상용 제품을 이용할 수도 있다.
작성자 : Brien M. Posey (ZDNet Korea)


2007/02/21 17:09 2007/02/21 17:09
OpenSSH를 이용한 vpn 및 firewall 우회하기
작성자 : 김원일



1 이 문서가 필요한 곳


회사나 가정에서 작업하던 환경을 그대로 쓰고 싶지만 vpn 이나 firewall 등의 제한으로 외부에서 접근하기가 쉽지 않은 경우가 있다. proxy 가 있거나 vpn 이라면 별 다른 문제가 없을 수도 있겠으나 firewall 같은 경우 넷웍 관리자에게 요청하지 않는 이상, 또는 요청한다고 해도 그다지 쉽게 허가를 얻지 못할 것이다. vpn 이라고 해도 외부의 누군가에게 잠깐 내부의 자원을 이용하게 하기위해 자신의 vpn 접속 방법을 가르쳐 주는 것도 양심상, 보안상 그다지 권장하고 싶은 일은 아니다. 이 문서는 그러한 경우 외부에서 접근 가능한 ssh계정을 이용해 터널을 만들어 vpn, firewall 외부에서 그 안쪽으로 접근을 가능하게 하는 방법이다. 제목을 Bypass로 시작했는데 잘못 선정한 느낌이 적지 않다. 결국 터널링일 뿐인 것을..


2 필요한 것


OpenSSH (ssh protcol 2 이상을 가정)
vpn 및 firewall 외부에 ssh 로 접속이 가능한 계정
임은재님이 작성하신 ssh Howto, ssh + mini proxy 등을 미리 읽어 두는 것이 도움이 된다.

 

 

3 방법


3.1 ssh -R 에 대해 #
ssh -R 은 원격서버의 특정 포트를 자신이 접근 가능한 서버 및 포트 (이문서에서는 vpn 안쪽의 자신의 서버 또는 작업을 하려는 서버)로 포워딩 하는 것이다. ssh -L 의 역이라고 봐도 무방하다 (ssh -L 에 대해서는 ssh mini proxy 문서를 참조하자)


vpn 또는 firewall 안쪽의 PC 에서
ssh -R port:host:hostport ssh_user@ssh_server
와 같은 명령을 사용한다.


ssh_server서버에 ssh_user라는 계정으로 접속하되 port로 지정한 포트로 들어오는 패킷을 host의 hostport로 포워딩한다는 것이다. 언뜻 알기 어렵지만 차근 차근 이해해 보자.


port : ssh_server에서 열 포트 번호다. (여기서 ssh_user가 ssh_server의 루트가 아니라면 1024번 이상의 포트번호를 지정해야 한다)
host : vpn 및 firewall 안쪽에 있는 우리가 바깥에서 사용할 서버의 ip 또는 이름이다. (꼭 안쪽에 있을 필요는 없다. ssh -R ... 명령을 내리는 자신의 컴퓨터에서 접근 가능해야 한다)
hostport : 위의 host 에서 우리가 이용하려는 서비스가 열려있는 포트 번호다. (역시 접근 가능해야 한다)

이상과 같이 하면 hostname의 loopback 주소(127.0.0.1)에서 port를 리스닝하게 된다. nestat -nl 로 확인해보라. loopback 주소로만 listening하는 것은 sshd 설정상 기본이다.
3.2 ssh -L 에 대해 #
이제 우리가 원하는 우회로의 반은 열린 셈이다. 나머지 반을 열어보자.


ssh -L localport:localhost:port ssh_user@ssh_server


이 명령은 vpn 또는 firewall 바깥의 환경에서 쓰이게 된다. 즉 집이나 외부업체의 회의실 또는 외딴 섬마을 학교의 pc실에서 쓰인다는 것이다.
localport : 현재 작업 중인 컴퓨터에서 열릴 포트이다. (netstat -nl 에서 Listen 중인 것으로 나타날 것이다)
localhost : 말 그대로 localhost라고 적는 것이다. 127.0.0.1 도 무방하다. 여기서 localhost 는 ssh_server의 루프백 주소를 가리킨다.
port : ssh -R 에서의 port 와 같다.

이제 모든 우회로가 열렸다!


3.3 접속


우회로를 이용하는 건 다음과 같다.


telnet localhost localport (telnet 서비스를 우회해서 접속할 경우)
http://localhost:localport/ (http 서비스의 경우)
ssh -p localport localhost (ssh 서비스의 경우)
smbclient -p localport localhost (삼바 서비스의 경우)

즉 모든 접속은 localhost로 ssh -L 에서 지정한 localport를 이용하게 된다.


4 실제의 예 1 (ssh서비스 이용하기)
여기서는 실제로 명령어를 다루는 예를 들겠다. 다음과 같은 컴퓨터들이 등장한다.
my_office_pc (IP : 224.20.X.22 under Firewall)
ssh_server (IP : 210.32.X.221)
my_home_adsl_pc (IP: 61.78.X.226)

지금 시각은 오후 5:32분, 내일 오전까지 끝내야할 작업이 거의 다 끝나가지만 잔업은 하기 싫다. 집에서 작업하고 싶지만 방화벽 때문에 외부에서는 접속할 수가 없는 처지다.


4.1 my_office_pc 에서
my_office_pc ~$ ssh -R 22:localhost:22 210.32.X.221
myaccout@210.32.X.221's password: _  <-- ssh_server 패스워드 입력

ssh_server ~$ _
이제 짐을 싸고 정리한 후 퇴근한다!

4.2 my_home_adsl_pc 에서
my_home_adsl_pc ~$ ssh -L 2222:localhost:22 210.32.X.221
myaccout@210.32.X.221's password: _  <-- ssh_server 패스워드 입력
ssh_server ~$ _
다른 터미널을 열고
my_home_adsl_pc ~$ ssh -p 2222 localhost
myaccout@localhost`s password: _ <-- my_office_pc 의 패스워드 입력
my_office_pc $ _  <--- 사무실에 ssh 로 연결 되었다!!!
마무리 작업을 하고 맥주 한잔!


5 실제의 예 2 (터미널 서비스 이용하기)


여기서는 실제로 명령어를 다루는 예를 들겠다. 다음과 같은 컴퓨터들이 등장한다.
my_office_pc (IP : 224.20.X.22 under Firewall,Windows XP)
ssh_server (IP : 210.32.X.221)
my_home_adsl_pc (IP: 61.78.X.226)

지금 시각은 오후 5:45분, 내일 오전까지 끝내야할 작업이 거의 다 끝나가지만 잔업은 진짜!! 하기 싫다. 집에서 작업하고 싶지만 방화벽 때문에 외부에서는 접속할 수가 없는 처지다.


5.1 my_office_pc 에서
지금의 사무실의 컴퓨터는 윈도우 환경이다. 윈도우에서는 별도의 ssh 프로그램이 필요하다.
putty (터널링이 가능한 최신 버젼)
plink (putty 의 자매 프로그램, windows console 에서 사용 가능하다. plink -R 또는 plink -L 로 unix 에서와 유사하게 사용한다.
ssh (cygwin 환경에서 사용가능)

plink 를 사용해보기로 하자.
> plink -R 3389:localhost:3389 210.32.X.221
myaccout@210.32.X.221's password: _  <-- ssh_server 패스워드 입력

ssh_server ~$ _
이제 짐을 싸고 정리한 후 퇴근한다!

5.2 my_home_adsl_pc 에서 #
집의 PC는 linux 또는 rdesktop 을 사용해야 한다. 이유는 MS에서 제공하는 windows용 terminal client는 별도로 IP를 확인하기 때문에 인증이 이루어지고도 사용은 불가능하다.
my_home_adsl_pc ~$ ssh -L 3389:localhost:3389 210.32.X.221
myaccout@210.32.X.221's password: _  <-- ssh_server 패스워드 입력
ssh_server ~$ _
다른 터미널을 열고
my_home_adsl_pc ~$ rdesktop localhost:3389 (포트번호는 생략가능)
//rdektop에서 my_office_pc의 윈도우 계정 패스워드 입력
//rdesktop이 시작된다.
마무리 작업을 하고 맥주 한잔!


6 맺는 말
원 래는 친구 회사의 PC에서 작업을 하기 위해서 이런 방법을 생각해 보았다(어디까지나 친구 본인의 요청에 의해서). 꽤 귀찮아 보이지만 어쩔 수 없는 상황에서는 유용하리라고 생각한다. 외부에 ssh계정이 있어야 하는 단점이 있긴 하지만 그런 경우에는 각자의 집에 ssh 서비스를 이용하는 방법도 있으므로 큰 문제는 없으리라 생각한다.


7 질문과 답변
Q: IP 공유기를 사용하고 있습니다. 사설망 IP로도 접근 가능한 방법이 있나요?
A: 네. 공유기 아래의 사설망으로도 위 방법을 사용하면 가능합니다. 하지만 공유기라면 DMZ 설정이나 port forwarding이 더욱 간단하겠지요. 이 문서는 공유기나 방화벽, vpn 설정을 고칠 수 없는 일반 유저를 위한 내용입니다.

 

 

8 코멘트
회사의 보안 정책에 위배되는 위와 같은 행위는 '회사 전체의 보안을 위협하는 매우 심각한 범죄 행위'입니다.


해일의 범람을 막기 위해 방파제를 쌓았는데, 이 방파제에 구멍을 뚫어놓는 행위와 동일한 행위라고 할 수 있습니다.


이런 구멍을 이용하여 해커들이 해당 시스템을 거점으로 사내의 모든 시스템을 점령할 수 있고, 실제 이런 공격 기법을 '터널링'이라고 하여 다양한 기법과 도구들이 개발되어 있습니다.


더욱 심각한 문제는 ssh을 통한 암호화로 인해 실제 공격이 발생해도 IDS에 침입 흔적이 전혀 안남는다는 점입니다.


국내외에 보편적으로 사용되고 있는 보안 솔루션은 방화벽과 IDS 정도입니다.


이 방법은 방화벽과 IDS를 무력화하는 심각한 기법이고 보안에 있어 심각한 위협입니다.


문서화가 안되었으면 오히려 좋았을 뻔합니다.


- 사용자의 재량에 맡길 일이라고 생각합니다. vpn 솔루션이 아무리 좋아도 암호관리가 안되는 사용자라면, 그러한 사용자 관리,교육이 안되는 회사라면 어차피 회사의 방파제에 구멍은 나있지 않을까요? - 김원일 -
2007/01/08 00:46 2007/01/08 00:46

PGP ( Pretty Good Privacy )

by Hye Jin Youn & Security KAIST
Sponsored by Initech.


Copyright (C) May 1999, Hye Jin Youn and Security KAIST

You may freely redistribute or republish this article, provided the following conditions are met as long as it is for non-commercial purposes. Otherwise permissions should be granted:

1. This article is left intact.

2. Proper credit is given to its authors; Hye Jin Youn and the Security KAIST

Contents
I. Introduction
1) E-mail privacy
2) E-mail security

II. Basic Cryptographic Algorithm

1. What is Cryptography
2. Conventrional vs Public Cryptosystem
3. Hash Function
4. CryptoAnalysis and Attack on Cryptosystems

III. What is PGP

1. Why PGP is so popular?
2. PGP 의 기능
3. Structure
4. Cryptographic keys
5. Key Ring
5. Certification

IV. Certification

V. Let's use PGP

VI. Reference


Instruction


1. E-mail privacy

자신의 개인적인 정보를 보낼때 우린 엽서( postcard )를 이용해서 보내는 일은 좀처럼 하지 않습니다. 때론, 동봉을 해서 보내는 경우도 있고, 자신이 보냈음을 알리는 사인도 합니다.

e-mail도 이제 우편처럼 우리주위에서 많이 써오는 하나의 전달 수단으로 자리잡게 되었습니다.

그런데, 이 e-mail은 목적지까지 도착할때 수많은 host를 거처가는 경우가 보통입니다. 또한 중간에 제 3자에의해 가로채여서 보여지는 것은 물론, 변조가 되었는지를 알아채기란 그리 쉬운일이 아닙니다. 그렇다면 우린 어떻게 할수있을까요? 전쟁영화들을 보면 자신의 군대에게 명령을 보내기 위해 암호를 사용합니다. 즉, 적군이 그 명령을 보아도 알아채기 어렵게 하기 위해서입니다.

pgp도 이런 방법중 하나로 태어났으며, 현재 전자우편도구로서 널리 사용되고 있습니다.

2. E-mail security

1) Confidentiality : 수신자를 제외한 나머지 ( 제 3자 )가 메세지를 보지 못하게 하는 기능.

2) Message Integrity : 전송중 제 3자에 의해 메세지가 변조되었는지를 확인.

3) User authentiaton : 메세지를 보낸사람이 확실한지를 확인.

4) Nonprepudiation of origin : 송신자가 보내고 안보냈다고 할수 없게 만든다.

5) Non-deniablity of recipt : 수신자가 받고 안받았다고 못하게 만든다.

6) Message replay prevention : 중간에서 지나가는 mail을 잡아놓았다가 다시보내는 공격을 방지.

* 위의 1),2),3),4) 4가지는 pgp에서 지원하나, 5),6),번은 아직 지원되고 있지 않다.

II. Basic Crptographic Algorithm
1. What is Cryptographic?

더이상 Cryptographic은 군대나 정부의 소유물이 되지는 않는다. 우리는 이것을 사적정보를 보호하는 수단뿐 아니라, 인증, 서명 전자상거래 등으로 이용범위를 확산시킬수 있다.

또한 crytographic은 이제 수학적 증명을 통해서 풀기어려움을 입증하며, 계산또한 사람이 계산할수 있는 범위를 넘어섰다. 현대에서 가장많이 사용되는 알고리즘으로는 key를 쓴다 .
즉, 암호화( encrypt )와 복호화 ( decrypt )를 key를 이용하여 하는 것이다.

2. Conventional and Public key Cryptosystem

* key를 쓰는 Cryptosystem중 가장 많이 쓰이는 두 종류를 소개하겠다. 이 두종류는 pgp에서도 쓰이므로 잘 봐두기를 바란다.

1) Conventional crytosystem

관용 암호 알고리즘이라고도 하는데, 암호화될때의 key와 복호화될때의 key가 같은 key이다. 즉
Kd = Ke
그렇기 때문에 symmetric cipher라고도 한다.

장점으로는 암호화와 복호화에서 빠른 속도를 보이고 있다.

단점은 송신자와 수신자는 같은 key를 가지고 있어야하므로, key가 전달되는 과정에서 노출될 가능성이 커지므로 키분배가 어렵다.

쓰이는 알고리즘으로는,

  • DES( Data Encryption System ) : 56 bit key 사용.
  • IDEA( International Data Encryption Algorith ) : 128 bit
  • RC5
  • CAST-128
3). Public Key Algorithm

암호화 key와 복호화 Key가 다르기때문에 Asymmetric cipher라고도 불리우며, 이때에 public key는 남에게 알려주고. private key만 자신이 보관하기 때문에 secret key라고도 한다. 즉, Kd != Ke

digital signature가 구현가능하며, 공개키는 어떤 사람이 알아도 상관없으므로 키 분배에도 어렵지 않다.

단점은 지금까지의 알고리즘 모두 conventional cryptosystem에 비해 느린 속도를 보이고 있다는 것이다.

현재 많이 쓰이는 알고리즘으로는,

  • RSA( Rivest-Shamir-Adelman ) : 1024bit key
  • LUC : exponential 함수 대신 Lucas function을 이용.
4). Hash function

  • 임의의 스트링을 받으면 일정한 길이의 bit로 표현된다.

  • 같은 hash 값을 갖는 두 메세지를 찾기라는 것은 사실상 불가능하다.

  • MD5( Message Digest Algorithm 5 ), MD2, MD4, SHA( Secure Hash Algorithm ) 등이 사용되어진다.

5). Crypto-Analysis & Attack on Cryptosystem

  • Ciphertext-only attack : M( 메세지 )내용 뿐만 아니라, key모두를 알지 못할경우 언어의 특색을 이용( 원문의 통계적 특성 )하여 경우를 다 대입하여 푼다.

  • Known-plaintext attack : M 과 encrypted M을 알고 있을 경우 Key를 찾아내어 다음 M2를 읽어내는 것.

  • Chosen-plaintext attack : M과 약간 다른 M'등이 encrypt된 파일을 비교해서 알아내는 것.

  • Man-in-the-middle attack : C라는 사람이 B라고 하며 A에게 공개키 Kp(B)를 주었을때 A는 B외에 알아서는 안되는 문서를 C의 key로 encrypt해서 보내므로 중간에 C에게 가로채이면, C가 볼수 있다. 이 외에 C라는 사람이 문서를 주었을때, A는 거짓정보를 믿어버리게 된다.

* 사실 강력한 알고리즘이란 것은 위의 3가지는 풀려서 안된다.

6). The Notion

    * 앞으로 그림으로 설명할때, 이런 notion들이 쓰여지므로, 참고해 두세요.

  • Ks : session key in conventional encryption schem
  • KR(A) : private key of user A
  • KU(A) : public key of user A
  • EP : public-key encryption
  • DP : public-key decryption
  • EC : conventional key ecryption
  • DC : conventional key decryption
  • H : Hash function
  • || : 연결
  • Z : ZIP algorithm을 이용한 compression
  • R64 : radix 64 ASCII format으로 바꾼것.

III. What is PGP
1. Why PGP is popular?

  • Dos, Windows, Unix, Mac등 여러기종의 OS에서 사용가능하다.

  • 높은 보안성의 알고리즘을 사용하였다 : PGP에서 사용된.RSA, MD5, IDEA, RHS, CAST-128등은 모두 여러면에서 검증된 훌륭한 보안 알고리즘들이다.

  • 한 개인의 작품이다. : 정부나 표준기관이 아닌, 한 개인 ( phil Zimmerman )의 작품이다.

  • 소스와 document가 공개되어있다. -> 믿을수 있다.

  • 싼가격과 공개용 버전이 있다.

  • 전자메일과 호환이 가능하다.

2. pgp의 기능

1) Confientiality

A가 자신의 공개키 Kp(A)를 공개하고, 자신의 secret key( private key ) Ks(A)를 잘 간수하고 있기만 한다면. B가 A에게 비밀문서 ( M )을 Kp(A)로 encrypt해서 보내면, 이 M을 decrypt해서 읽을수 있는 사람은 A밖에 없다.
즉, 그림으로 보면,

2) Authentication

Digital signature :
public key의 중요한 기능중 하나이다.
가령 A라는 사람이 Kp(B)로 encrypted M을 작성한 후 Ks(A)로 digital signature를 해서 보내면, B뿐만 아니라 모든 Kp(A)를 갖은 사람은 Kp(A)로 그 digital signature를 볼수있으나, signature는 A밖에 할수 없으므로 A가 보냈음을 알수 있다.

3) Message integrity

A는 M을 Hash에 넣으면 일정길이의 작은 bit로 나온다.
M' 이것을 Ks(A)로 암호화 하여 , M에 붙여서 보내면, B는 Kp(A)로 이를 풀고, M을 Hash를 이용하여 만든후 M'와 비교하여, 제 3자에 의해 메세지가 변조되지 않았는가를 알수 있다.

4) Compression

- pgp의 option으로 할수도있고, 안할수도 있다.

- 보통 Signature 후에 encrypt전에 하는데, 그 이유는

  • signature가 있는 원본과, compression되 M 두가지를 저장할수 있다.

  • Zip Algorithm에서 기인되는데,
    만약, sinature전에 compression을 한다면, 보통 M을 decompression하여 Data를 본후 signature로 중간에 고쳐졌는지, 확인을 하는데, 이때 다시 compression을 해야한다.
    하지만, compression은 속도와 압축률에 따라 달라지므로, 두 data확인이 어려워지고 번거로워진다.

5) E-mail Compatibility

- pgp에서 decrypt는 8bit로 되는데 e-mail은 ASC인 7bit까지 밖에 지원이 되지 않는다. 그러므로 decrypted message 3 block을 6bit 4 block으로 만들어준다. 이때 radix 64-conversion이 사용된다.

6) Segmentaion & Reassembly

- PGP에서는 Message가 매우크면 한꺼번에 보내지 않고 잘라서 보낸다.
또한 받았을때는 알아서 붙여준다.

3. Structure

4. Cryptographic Keys

- 보통 pgp는 4가지 종류의 key를 생성한다.
  • one-time session conventional keys : public key cryptosystem은 conventional cryptosystem에 비하여 매우 느리다.
    그렇기 때문에 사실 상호보안으로, 먼저 conventional cryptosystem으로 encrypt하고 그 후, 이때 사용한 key를 public cryptosystem으로 encrypt하는 방식으로 pgp에서는 사용된다.

    이때 conventional cryptosystem에서 사용된 key를 session key라고 한다.

  • public key

  • private key

  • passphrase : private key를 저장할때 encrypt되는 key이다.

Key Indentifiers :
사실 public key에서 사용되는 key는 무척 길다. 그렇기 때문에 만약, 여러개의 pgp의 쌍을 찾기라는 무척 힘들어 질것이다.

이때 key의 구별을 쉽게 하기위해 hash function에 넣어 일정한 길이의 bit수로 나타낸 것을 KeyID라고 한다.

5. Key Rings

- pgp를 처음 설치하면 아래의 화일이 만들어진다. secring.pgp, pubring.pgp, randseed.bin. config.txt가 그것들이다.
예제 보기

이 예제에서 pgp -kg는 처음 키를 생성하는 것이다. 마지막부분을 보면 네개의file이 만들어지는 것을 알수있다.

    - private key - : secring.pgp

    예제 보기

  • Time-Stamp : key 생성시간.

  • KeyID : 64bit keyID

  • public key

  • private key : encrypt된 private key

  • user ID : 보통 email address와 비슷하게 쓴다. 즉 예를 들면, vici < vici@sparcs.kaist.ac.kr >

    - public key - : pubring.pgp

    예제 보기

  • Time-Stamp

  • KeyID

  • public key

  • user ID

    - randseed.bin( seed 값을 보관하는 곳 )

    사용자가 공개키와 비밀키를 만들때 무작위한 방법으로 키보드를 누를때 생성된다. 위의 예제를 보면 나와있다.

IV. Certification
- pgp의 아킬라스건이라고 불리우는 어택이 바로 main-in-the-middle-attack이다.

그러므로 키를 받아올때는 많은 주의를 기울여야하는데, 4가지 방법을 보면,

1. floppy disk에 담아서 직접 전달 받는법.:

이는 가장 원시적인 방법이나 가장 확실한 인증 방법이다.

2. finger print 이용.

상대방의 전화목소리를 아는 경우 hash function에 넣어서 키를 일정한 bit로 나타내면 이를 전화기를 통해서 확인한다. 이 방법도 확실하나, 만약 attaker가 전화목소리까지 흉내낸다면 할수 없다. --;

3. signature확인.

아주 확실한 방법은 아니지만, 편리함으로 가장 많이 쓰이는 방법. 2)또는 3)번처럼 자신이 확인하여 확실한 경우, 자신의 signature를 담으로 인하여 다른 사람에게 알려줌 또한, 그 반대로 다른 사람의 signature를 봄으로 인하여, 신뢰도를 측정한다.
4. certification

- 공개키 인증에 필요한 값들.

1) key legitimacy

  • A ID가 붙은 이 key는 진짜 A의 것인가?

  • KEYLEGIT field

    • unknown or undefined trust
    • key ownership not trusted
    • marginal trust in key ownership
    • complete trust in key ownership

  • * owner trust 와 signature turst에 의해 자동으로 생성되어진다.

2) Owner Trust

  • 중개자로서의 A를 어느정도 신임할수 있는가?

  • ONWERTRUST field

    • undefined trust
    • unknown user
    • usually not trusted to sign other keys
    • usually trusted to sign other keys
    • always trusted to sign other kyes
    • this key is present in secret key ring ( ultimate trust )

  • * 다른 사람의 공개키를 자신의 pubring.pgp에 등록시킬때 스스로 지정해준다.

3) Signature turst

  • B의 key에 A의 서명이 있는데 어느정도 믿을만 한가?

  • SIGTRUST field

    • undefined trust
    • unknown user
    • usually not trusted to sign other keys
    • usually trusted to sign other keys
    • always trusted to sign other kyes
    • this key is present in secret key ring ( ultimate trust )

  • * 서명하는 사용자의 owner trust에서 복사한다.

V. Let's use PGP
%> pgp -c textfile
문서를 암호화 하기

%> pgp -cw textfile
원래의 평문을 지우기

예제 보기

%> pgp textfile.pgp
복호화하기.

%> pgp -kg
키만들기 ( key gerneration )

예제 보기

%> pgp -kv
키 보기 ( key view )

%> pgp -ke
키 변경하기 ( key edit )

예제 보기

%> pgp -kx UserID file
자신의 키를 다른 사람들에게 전파시키는 방법으로는 키 화일 전체를 복사해서 옮기는 방법도 있지만 이 방법은 여러 종류의 위 험이 뒤따른다.

그러므로 자신이 보내고자 하는 키만을 빼내어서 보내어야 한다. 이럴 때 쓰는 옵션이 "-kx" 옵션이다 . 옵션 뒤에 나오는 것은 빼낼려고 하는 키의 User ID와 키를 복사해서 담을 화일의 이름이다

%> pgp -kr
키 지우기 ( key remove )
사용자 자신의 공개키 화일에 있는 자신의 키나 다른 사람의 키를 지울 때 쓰는 옵션이 "-kr" 옵션이다. 자신의 키일 경우에는 매칭되는 비밀키도 지울 수 있다.

%> pgp -m cipher.asc
암호문을 옵션 없이 복호화하면 복호화된 평문 화일이 생기는 데 이는 평문과 암호문의 한쌍을 만드는 것이기 때문에 사용자의 유의가 필요하다.

이러한 문제점을 해결하기 위해서 "-m" 옵션을 사용하는 데 이렇게 하면 복호화된 내용이 화면에 보 여질 뿐이고 다 보고 난 후에 하드 디스크에 담을 것인지를 물어 본다. 여기서 no를 입력하면 복호화 된 내용은 디스크에 담겨지 지 않는다.

예제 보기

%> pgp -s textfile
digital signature달기

예제 보기

* 이 밖에 여러가지가 있으나, 여기서는 더이상 다루지 않고, manual page를 참고하시길 바란다.

VI. Refernce


http://www.eff.org/pub/Privacy/chaum_privacy_id.article
http://www.ssh.fi/tech/crypto/intro.html
http://www.animatedsoftware.com/hightech/philspgp.htm
http://www.internetworld.com/print/monthly/1995/02/feat34.htm
http://www.stack.nl/~galactus/remailers/bg2pgp.txt

(1) PGP documentation
by Phil Zimmermann

(2) alt.security.pgp: Frequently Asked Questions
by Jeff Licquia, May 25, 1995

(3) Why Should You Sign Your Own PGP Public Key?
by Francis Litterio

(4) EFH PGP Workshop
by Paul Elliott, Electronic Frontiers Houston

(5) The Beginner's Guide to Pretty Good Privacy
by Bill Morton, Version 1.1, April 13, 1995

(6) Known future developments in PGP servers and related subjects

(7) Four11 Directory Services

(8) Differences in International PGP Version by Stale Schumacher

(9) Cryptography And network security
- william stallings

2007/01/07 22:09 2007/01/07 22:09
Tag //
Title Overview of Role-Based Access Control



Objectives
RBAC 이해와 구성
Preperation
/etc/passwd,
/etc/shadow,
access control list
file permission

Description
이제껏 우리가 사용해온 전형적인 UNIX 보안체계는 superuser는 막강한 힘을 발휘하는 반면에 일반 사용자는 자신의 사소한 문제도 해결할 수 있는 힘조차 가질 수 없는 방식이었다.
솔라리스 운영체제는 RBAC(Roal-Based Access Control)라는 방식을 통하여 기존의 superuser 방식의 보안체계, 어느정도 융통성을 부여하는 길을 열어주었다. 필요할 경우 특정 사용자에게 새로운 역할를 부여함으로서 수퍼유저의 권한을 적절히 나누어줄 수 있도록 해주는 것이 RBAC의 특징이다.

RBAC에서는 특정 용어가 다음과 같이 사용된다.

권한위임 (authorization) : 사용자 권한으로는 접근할 수 없었던 작업을 수행할 수 있는 새로운 능력을 부여.
실행 profile (Execution profile) : 특정한 속성 (예. 사용자 및 그룹 ID)과 연관된 권한 및 명령어를 함께 명시한 메카니즘.
역할 (Role) : 관리자 작업중 일부를 수행할 수 있도록 고안된 특별한 형태의 사용자계정 (이것 역시 하나의 계정 형태임)

l RBAC 사용은 언제 하나?
만일 관리자가 일정기간 휴가나 출장을 떠날일이 발생하였다. 그동안 믿을만한 특정 사용자에게 자신의 권한중 일부를 일정기간 부여하고 싶을 때, 즉 그동안 시스템 관리부분의 일부를 대행시키고자 할 때에는 어떤 방법을 사용할 수 있을까 ? 기존의 보안체계에서는 자신의 계정과 암호를 잠시 알려주는 모험에 가까운 방법이 유일한 대안이었다. 아니면 잠시 시스템 관련 작업은 중지하고 있어야 한다.

그러나 RBAC를 활용할 경우, 필요한 일부 권한을 위임(authorization)하여 역할(role)로 만든후 그 역할만을 사용자에게 줄 수 있는 것이다. 이 경우, 사용자는 자연스럽게 일부의 권한을 위임받을 수 있다. 물론 위임받지 못한 역할에 대해서는 전혀 손쓸 수 없다..

RBAC는 특정한 권한을 사용자에게 부여할 때 다음 4가지 데이터베이스에 담긴 내용에 따라 작업을 수행한다.


* user_attr (사용자 속성 DB) : 사용자, role 및 이들에게 위임할 권한, 그리고 실행 profile을 명시.
* auth_attr (권한속성 DB) : 위임 권한 명칭 및 속성을 명시해놓았으며 그에 대한 도움말 파일을 지정.
* prof_attr (실행 profile속성 DB) : profile을 명시하고 profile이 지정된 권한을 나열해놓았으며 그에 대한 도움말 파일을 지정.
* exec_attr (profile 실행 속성 DB) : profile에 부여한, 특별한 권한을 가지고 있는 작업내용을 명시.  

RBAC data base 의 역할

* user_attr 데이터베이스에서 사용자에게 권한과 실행profile을 지정해줄 수 있다. 이것은 권한을 사용자에게 직접 부여해주는 방식이다.
* 사용자에게 권한이 아닌 역할(role)을 부여할 수 있다. 이경우, 사용자는 그 역할에 관련된 특별권한을 수행할 수 있는 권한을 갖게 된다. (RBAC를 사용하는 진정한 목적이 바로 이것이다)
* 실행 profile은 prof_attr DB에 정의되어 있다. 실행 profile은 auth_attr에서 지정한 위임권한 및 exec_attr에서 해당 실행 프로파일에 대하여 지정한 속성과 관련한 명령어를 함께 포함하여 정의할 수 있다. (간단히 표현하면 위임권한과 명령어를 함께 묶어놓았다는 뜻이다)  

실행 profile에 지정한 명령어는 profile shell이라고 불리우는 특정 쉘에서만 실행된다. 이 쉘은 pfsh, pfcsh, pfksh라는 이름이 붙어있다. 이들은 각각 Bourne shell (sh), C shell (csh), Korn shell (ksh)에 대응하는 shell로서 각 명칭앞에 pf를 붙였다고 생각하면 된다. (profile shell과 일반 shell은 동일한 것이 아님.)

/etc/user_attr DB는 /etc/passwd 파일과 /etc/shadow 파일을 보조해 주는 역할을 한다. 이곳에는 확장된 사용자 속성 (예. 권한 및 실행 profile등)이 들어있다. 또한 사용자에게 역할을 지정해줄 수 있다.

- 역할(role)이란 위에서 언급하였듯 관리자밖에 할 수 없는 작업 일부를 일반사용자도 수행할 수 있도록 고안된 특별한 형태의 사용자 계정이다.
역할(role)계정으로 로그인을 하면 사용자는 일반사용자의 계정을 가지고는 실행할 수 없었던 작업을 실행할 권한을 갖게된다.
이러한 권한을 갖게하는 role 계정으로 로그인을 하는 방법은 CDE 로그인과 같은 일반적인 login 과정으로 할 수는 없다. 뒤에서 다시 설명하겠지만 role계정으로 로그인을 하려면 su (switch user) 명령어를 이용하여야 한다.

user_attr DB 는 다음과 같이 콜론(:)으로 각 필드를 구분한다.

user:qualifier:res1:res2:attr  

각 필드는 다음과 같은 의미를 갖는다.

- user : passwd DB에 명시된 사용자 이름.
- qualifier : 추후 사용을 위한 예비 필드
- res1 : 추후 사용을 위한 예비 필드
- es2 : 추후 사용을 위한 예비 필드
- attr : 사용자가 명령어를 수행할 때 적용할 보안 속성을 명시한 키 값이다. 여러        가지의 키를 명시할때 각 키는 세미콜론(;)으로 분리하여 표기한다. 사용할 수 있는 키는 아래와 같다.
  * auths : auth_attr DB에 명시된 사용권한 중에서 선택한 권한명칭을 콤마( , )로 구분한 목록. 권한명칭은 와일드카드(*)도 사용할 수 있다. 예를 들어 solaris.device.* 라고 표기한 것은 모든 솔라리스 device에 대한 사용권한을 의미한다.
   * profiles : prof_attr DB에 명시된 profile중 선택한 profile명칭으로서 서열순으로 표기하고 콤마( , )로 구분한 목록. Profile은 사용자가 실행할 수 있는 명령어와 해당 명령어의 속성을 결정한다. user_attr에 명시된 사용자중 극소수만이 모든 profile을 가질 수 있는 All로 설정해야 한다. (모든 profile을 갖게 되는 All로 설정한다는 것은 속성에 상관없이 모든 명령어를 사용할 수 있다는 뜻이다) profile의 서열 역시 매우 중요하다. 그것은 마치 유닉스의 탐색경로와 같은 원리로 사용된다. 수행될 명령어가 들어있는 목록의 첫째 profile은 어떠한 속성이 어떠한 명령어에 적용되는가를 명시한다.
   * role : 사용자에게 새로이 부여할 역할이다. 콤마로 구분한 목록형태로 표시한다. 여기서 역할은 user_attr DB에 있는것과 동일해야 하며 이가운데 특정값을 지정하여 결정한다. role 계정에게는 role을 지정할 수 없다. 오직 사용자 계정에게만 지정할 수 있다. (계정은 일반사용자 계정과 role 계정이 있다)
   * type : normal이나 role로 지정한다. 만일 일반사용자 계정이면 normal로,
role에 대한 계정이라면 role로 지정한다.  


- 시스템에 설치된 user_attr DB를 살펴보면 아래와 같이 기본값이 지정되어 있을 것이다.

root::::type=normal;auths=solaris.*,solaris.grant;profiles=All
sysadmin::::type=role;profiles=Device Management, Filesystem Management,All
anne::::type=normal;auths=solaris.system.date;roles=sysadmin;profiles=All  

위 예를 살펴보면 첫째줄에서는 root에 대하여 모든 권한을 부여한다. 둘째줄은 role 계정이다. sysadmin에 대한 역할을 정의하였다. 다음줄을 일반 사용자 계정이다. 여기서 anne이라는 사용자에게 sysadmin role을 지정하였다.
이렇게 sysadmin 역할을 지정해줌으로써 anne은 Device Management, Filesystem Management와 모든 profile에 대한 profile을 access할 수 있는 막강한 권한을 갖게 된다.
- RBAC 를 사용하려면
  1.역할과 이에 대한 권한을 정의한다.
  2.정의한 역할을 사용자에게 부여한다.
  3.역할을 부여받은 사용자는 이에 대한 권한을 갖게 된다.

/etc/security/auth_attr :

사용자가 위임받은 권한을 사용코자 할 때 해당 프로그램은 auth_attr 데이터베이스를 검사하여 위임받은 권한이 있는가를 살펴본후 사용가능 여부를 결정한다. 예를 들어 사용자가 다른 사용자의 crontab 파일을 편집하고자 한다면 solaris.jobs.admin 이라는 권한이 auth_attr에 명시되어 있어야 한다.
사용자 혹은 role이 user_attr 데이터베이스에 명시되어 있으면, 사용자나 role에게 각 권한들을 직접 지정할 수 도 있다. 또한, 실행 profile에 위임할 권한을 지정한 후 이것을 다시 해당 사용자에게 넘겨줄 수 있다.
auth_attr 데이터베이스의 각 필드는 콜론으로 구분하여 아래와 같은 형식으로 나타낸다.

authname:res1:res2:short_desc:long_desc:attr  
 
- authname : 위임받은 권한을 명시함. 단일 문자형 상수로 표현하며 접두사.접미사 형태로 구성한다. 명명법은 바로 아래에 설명해 놓았다.
- res1 : 추후 사용을 위한 예비 필드
- res2 : 추후 사용을 위한 예비 필드
- short_desc : 사용자 인터페이스를 표시하는데 적당한 권한에 대한 간략한 명칭.
-long_desc : 긴 표현. . 이 필드는 사용될 권한과 응용프로그램의 목적, 그리고 그것을 사용하고자 하는 사용자의 형태를 나타내주어야 한다. 응용프로그램의 도움말로 사용하기 적절하게 표현되어야 한다.
- attr : 권한의 속성을 보여주는 옵션 목록으로서 key 워드로 나타낸다. 여러개를 사용할 때에는 세미콜론 (;)으로 구분함.
키워드로서 help를 사용할때 이에 대한 해당 도움말은 html 형태의 도움말로 되어있다. 이 도움말 파일은 이미 /usr/lib/help/auths/locale/C 디렉토리안에 저장되어 있다.
해당되는 도움말 파일 이름만 help=xxxx.html, 이런 형식으로 적어주면 된다.  


- authname 명명법 : 솔라리스 운영체제를 사용하는 권한은 solaris라는 접두사로 표현한다. 그외 다른 권한은 그 권한을 만들어낸 기관의 인터넷 도메인 이름 순서를 역으로 배열한 접두사를 사용한다. (예 : corp.com의 경우에는 com.corp)
접미사는 권한을 행사할 수 있는 부분 (예. device) 및 작업 명칭 (예. config, allocate, grant, revoke등) 으로 표현한다.
만일 접미사가 붙지 않고 씌여져 있다면 authname은 권한에 우선하여 GUI 환경에서 해당 응용프로그램을 실행시키던 명칭으로 작동하게 된다. authname solaris.printmgr. 은 이렇게 GUI환경 하에서의 명칭을 사용한 예이다.
authname이 grant라는 단어로 끝났다면, authname은 그 권한을 grant, 즉 양도해준다. 즉, 사용자의 해당 권한(동일한 접두사 및 기능에 관한 권한)을 다른 사용자에게 양도해주는 것이다.
예로, authname solaris.printmgr.grant라고 표기되었다면 이는 사용자에게 solaris.printmgr.admin 권한과 solaris.printmgr.nobanner 권한을 다른 사용자에게 양도할 수 있는 권한을 부여한 다는 뜻이다.

솔라리스 8을 사용하는 여러분의 /etc/security 디렉토리 안에는 auth_attr이라는 파일이 들어있다. 이파일의 내용을 보면 솔라리스 운영에 대한 모든 권한 목록을 망라하고 있음을 발견할 것이다. 불필요한 권한 앞에 주석표시(#)를 하면, 여러분이 필요한 권한만 선택하여 사용할 수 있다.
또한 /usr/lib/help/auths/locale/C 디렉토리의 index.html 파일에도 authname으로 사용할 수 있는 솔라리스 운영에 대한 권한 (authorization) 목록 및 그에 대한 설명을 담은 도움말이 있다.

auth_attr 데이터베이스 예제 (시스템에 기본적으로 지정이 되어 있음)

solaris.*:::Primary Administrator::help=PriAdmin.html
solaris..grant:::Grant All Rights::help=PriAdmin.html
....
solaris.device.:::Device Allocation::help=DevAllocHeader.html
solaris.device.allocate:::Allocate Device::help=DevAllocate.html
solaris.device.conf::::Configure Device Attributes::help=DevConfig.html
solaris.device.revoke:::Revoke or Reclamim Device::help=DevRevoke.html
....
solaris.sys:::Machine Administration::help=SysHeader.html
solaris.system.date:::Set Date and Time::help=SysDate.html
solaris.system.shutdown::: Shutdown the System::help=SysShutdown.html  


auth_attr과 user_attr의 관계.

auth_attr DB

solaris.*:::Primary Administrator::help=PriAdmin.html
...
solaris.system.date:::Set Date & Time::help=SysDate.html  

auth_attr 데이터베이스에 명시된 solaris.system.date 권한은 시스템의 날짜와 시각을 조정할 수 있는 권한이다. 이 권한이 'auths=solaris.system.date' 라는 문구 한줄로서 아래 예제의 user_attr 데이터베이스에 있는 sunny라는 사용자에게 지정되는 것이다.

user_attr DB

root::::type=normal;auths=solaris.*,solaris.grant;profiles=All
...
user01::::type=normal;auths=solaris.system.date;roles=sysadmin;profiles=All
....  

user01 라는 사용자가 solaris.system.dat 권한 및 sysadmin이라는 역할을 위임받았다.

실행 profile은 권한과 명령어를 특별한 속성과 함께 묶어놓은 메카니즘이다. 여기에서 지정한 실행 profile들은 사용자나 role에게 지정할 수 있다. 특별한 속성이란real 및 effective UID, GID를 지칭한다. 가장 일반적인 속성은 real UID 및 effective UID가 root로 지정된 형태이다. 실행 profile의 정의는 etc/security/prof_attr 데이터베이스에 저장되어 있다.

(실행 파일이 수행되면서 프로세스가 만들어질 때, 프로세스를 생성시킨 사용자의 UID를 real UID라 하고, 생성된 프로세스가 가지는 UID를 effective UID라 한다. 일반적으로는 real UID와 effective UID는 같다. 그리고 프로세스는 effective UID의 권한으로 수행된다)

prof_attr 데이터베이스 역시 콜론으로 각 필드가 구분된다.

profname:res1:res2:desc:attr  


- profname : profile의 명칭
- res1 : 추후 사용을 위한 예비 필드
- res2 : 추후 사용을 위한 예비 필드
- desc : 긴 표현. 이 필드는 프로파일의 목적 및 그것을 사용하고자 하는 사용자의 형태를 나타내 주어야 한다. 응용프로그램의 도움말로 사용하기 적절하게 표현되어야 한다.
- attr : 실행할 대상에 적용할 보안 속성을 보여주는 옵션 목록으로서 key 워드로 나타낸다. 여러개를 사용할 때에는 세미콜론 (;)으로 구분함. 유효한 키워드로는 help, auth 가 있다.
  - help 키워드를 사용할 때 이에 대한 해당 도움말은 html 형태의 도움말로 되어있다. 이 도움말 파일은 이미 /usr/lib/help/auths/locale/C 디렉토리안에 저장되어 있다. 해당되는 도움말 파일 이름만 help=xxxx.html, 이런 형식으로 적어주면 된다.
  - auth : auth_attr 데이터베이스에 명시된 위임권한 명칭중에서 선택. 여러개를 사용할 때에는 컴마(,)로 구분함. 위임권한 명칭은 와일드카드 (*)를 사용하여 나타낼 수 있음.  


시스템에 설정된 prof_attr DB의 예

All:::Standard Solaris user:help=All.html
Audit Control:::Administer the audit
subsystem:auths=solaris.audit.config,solaris.jobs.admin;help=AuditControl.html
Audit Review:::View the audit trail:auths=solaris.audit.read;help=AuditReview.html
Device Management:::Control Access to Removable
Removable Media:auths=solaris.device.*;help=DevMgmt.html
Printer Management:::Control Access to Printer:help=PrinterMgmt.html  

prof_attr과 user_attr의 관계

Profile Attributes Database

All:::Standard Solaris user:help=All.html
...
Device Management:::Control Access to Removable Media:
auths=solaris.device.*;help=DevMgmt.html
..  
Device Management라는 실행 프로파일의 권한과 명령어를 정의함

User Attributes Database 예제

root:::type=normal;auths=solaris.*,solaris.grant;profiles=All
sysadmin:::type=role;profiles=Device Management  

sysadmin이라는 role계정을 만들어서 Device Management 권한을 부여하였다. 이후, prof_attr에서 정의한 Device Management profile이 user_attr에서 정의한 sysadmin role에게 지정되었다.

prof_attr과 auth_attr의 관계
Profile Attributes Database

All:::Standard Solaris user:help=All.html
...
Device Management:::Control Access to Removable Media:
auths=solaris.device.*;help=DevMgmt.html
...  

위에서 보면 Device Management profile은 solaris.device. 라는 문자열 상수로 시작되는 모든 권한을 갖는 것으로 prof_attr에서 정의된다. 이러한 권한들은 아래 auth_attr에서 정의된 것이다.

auth_attr Database 예제

solaris.*:::Primary Administrator::help=PriAdmin.html
solaris..grant:::Grant All Rights::help=PriAdmin.html
....
solaris.device.:::Device Allocation::help=DevAllocHeader.html
solaris.device.allocate:::Allocate Device::help=DevAllocate.html
solaris.device.config::::Configure Device Attributes::help=DevConfig.html
solaris.device.revoke:::Revoke or Reclaim Device::help=DevRevoke.html  

실행속성은 profile이 지정된 해당 사용자나 role에 의하여 수행되는 명령어로서 특별한 보안속성을 가진다. 여기서 특별한 보안속성은 UID, EUID, GID, EGID와 같은 속성으로서 명령어가 실행될 때 해당 프로세스에 추가된다.
실행속성이 명시된 내용은 /etc/security/exec_attr 데이터베이스에 저장된다.

exec_attr 데이터베이스 필드

name:policy:type:res1:res2:id:attr  
.

- name : profile의 명칭
- policy : 해당 엔트리에 관련된 보안정책, 현재로는 suser (수퍼유저 정책 모델)만이 유효한 값이다.
- type : 속성이 명시된 엔티티 형태. 현재로는 cmd (command)만이 유효한 값이다.
- res1 : 추후 사용을 위한 예비 필드
- res2 : 추후 사용을 위한 예비 필드
- id : 엔티티를 규정한 문자열 상수. 와일드카드 (*)를 사용하여 나타낼 수 있음. 명령어들은 전체 경로 혹은 와일드카드 (*)를 포함하는 경로를 가져야 한다.
- attr : 실행할 엔티티에 적용할 보안 속성을 표현한 옵션 목록으로서 key 워드로 나타낸다. 여러개를 사용할 때에는 세미콜론 (;)으로 구분함. 사용할 수 있는 키워드는 보안정책에 따라 결정된다. 유효한 키워드로는euid, uid, egid, gid등 4개가 있다.  


euid 와 uid는 단일 사용자이름이나 숫자로된 사용자 ID를 포함한다. euid를 지정하는 명령어는 지정된 real UID값과 함께 실행된다. 이것은 실행파일에 setgid 값을 설정하는것과 비슷한 과정이다. gid를 지정하는 명령어는 real GID 및 effective GID와 함께 실행된다.
예)

All:suser:cmd:::*:
Printer Management:suser:cmd:::/usr/bin/cancel:euid=0
Printer Management:suser:cmd:::/usr/bin/lpset:egid=14
Printer Management:suser:cmd:::/usr/lib/lp/enable:euid=lp
Printer Management:suser:cmd:::/usr/sbin/lpusers:euid=lp  

RBAC를 운영하는데 필요한 유틸리티

auths : 사용자의 위임권한을 표시해줌.
profiles : 특정 사용자에 대한 profile을 보여줌.
roles : 사용자에게 부여한 권한을 보여줌.
pfexec : profile shell, exec_attr DB안에 명시된 명령어를 속성과 함께 실행시킴.
policy.conf : 보안정책을 configuring 해준 파일. 부여한 권한을 나열.
Roleadd: 시스템 상에 role account 추가
Rolemod: role의 login 정보 수정
Useradd: 시스템 상의 user accout 추가 

< lab>

<Creating User and a Role >
1. 하나의 role을 만든다.
    # roleadd ?u 1000 ?g 10 ?d /export/home/roler ?m roler
# passwd roler

2. create the profile
    # vi /etc/security/prof_attr
Shut:::Able to shutdown the system:

3. role에 profile 추가
    # rolemod ?P Shut,All roler

4. /etc/user_attr이 변경되었는지 확인
    # more /etc/user_attr

5. user accout를 한명 추가한다.
    # useradd ?u 1000 ?g 10 ?d /export/home/user01 ?m ?s /bin/ksh ?R role user01
    # passwd user01
    # more /etc/passwd /etc/user_attr
6. profile에 실제 수행시킬 command를 할당한다.
# vi /etc/security/exec_attr

< testing the configuration>
user01로 로긴한다.
Login : user01
Passwd:*******
원하는 role user로 switch user 한다
# su ? roler
3. root만 수행할 수 있는 다음 명령어를 수행해본다
Shut:suser:cmd:::/usr/sbin/shutdown:uid=0
    $ /usr/sbin/shutdown ?i 6 ?g 0

2006/08/31 15:16 2006/08/31 15:16
슈마 : 복습하는 의미에서 PKI(Public Key Infrastructure)에 대해 다시 한번 정리해 볼까.

미돌양 : PKI는 공개키 암호시스템을 안전하게 사용하고 관리하기 위한 공개키 관리체계로, 인터넷에서 사용자들이 인증기관에 부여받은 한 쌍의 공개키와 개인키로 안전하게 정보를 교활할 수 있는 기반구조라고 배웠습니다.

슈마 : 잘 대답했다. 추가적으로 인증 관련 구성요소는 인증서를 이용하는 사용자와 인증서를 보관하는 디렉토리, 인증서를 발급하는 인증기관(CA), 인증기관 대신 사용자 신분을 확인하는 등록기관(ORA)으로 분류할 수 있지(그림 1). 자 이제 본론으로 들어갈까. 현재 정부와 기업간 전자상거래(G2B)의 일환으로 전자입찰을 하고 있는데 전자입찰을 하는 이유가 뭘까.

미돌양 : 인터넷과 PKI 인증을 통한 신속하고도 투명한 상거래가 목적 아닌가요 ?

슈마 : 맞아. G2B 전자상거래의 투명성을 높이기 위해 전자입찰이 등장했지. 수의계약 방식일 경우, 구매조건 중에서 금액이 가장 중요한 사항이 되는데, 이 정보가 사전에 누설되는 일이 종종 생겨서 참여 업체들이 불만을 토로하곤 했었지.

미돌양 : 그럼 전자입찰이 그런 폐해를 막을 수 있었나요?

슈마 : 당연하지. 전자입찰시스템은 공고부터 낙찰까지 모든 업무를 인터넷으로 수행하며 이 모든 과정을 공인 PKI 인증 서비스와 전자서명, 암호화로 보안을 강화할 수 있어. 수행 과정을 살펴보면 입찰 신청 업체는 국가공인인증기관에서 인증서 신청과 발급을 받은 후 전자입찰 시스템에 접속해서 필요한 서류나 금액을 입력하게 돼.

미돌양 : 수의계약시 금액을 번복하거나 견적서 지연 제출 등 문제가 많은 것으로 알고 있는데, 전자입찰로 하면 전자서명의 부인방지 기능을 통해 금액을 번복할 수 없고, 접수 날짜나 자료가 시스템에 보관, 관리되니 거래가 투명해지겠군요.

슈마 : 그뿐만이 아니라 전자입찰, 전자계약, 전자세금계산서 발행 시스템과도 연계할 수 있으니 업무 처리도 신속해지지. 향후에는 전자입찰과 유사한 업무인 경마, 경매 등에서도 적용할 예정이라고 하더군.

허접군 : 요즘 인터넷 뱅킹을 많이 이용하던데 믿을만 한가요?

미돌양 : 허접군은 시스템을 믿지 못하겠다고 아직 인터넷 뱅킹 신청도 안했어요.

슈마 : 인터넷 뱅킹은 은행거래 시간과 비용을 절약하는 가장 손쉬운 방법으로, 국내에서 2000만 명 이상이 가입 신청해서 사용하고 있지. 신청을 하기 위해서는 가장 먼저 공인인증서를 발급받아야 해.

허접군 : 공인인증서는 PC에서 그냥 받을 수 있나요?

슈마 : 인터넷 뱅킹을 이용하려면 최소한 한번은 통장을 갖고 은행 영업점을 찾아가, 서면으로 인터넷 뱅킹 회원 가입을 신청해야 해. 만약 여행자라면 공인인증서를 별도 디스켓에 담아 갖고 가는 것이 편리하겠지.

허접군 : 좀 더 자세히 과정을 설명해 주세요.

슈마 : 가장 먼저 금융사이트에 접속한 후 공인인증서 발급 메뉴를 클릭하고, 주민(사업자)등록번호, 출금계좌번호, 출금계좌 비밀번호 등 개인식별을 위한 기본정보를 입력한 후 확인 버튼을 누르면 돼. 이후 영업점에서 교부받은 보안카드 코드표의 해당숫자를 찾아 입력해야 해.
허접군 : 복잡하군요..

슈마 : 직접 해 보면 그렇게 어렵지 않아. 코드 입력이 끝났으면 새로운 패스워드와 이체비밀번호를 설정하라는 화면이 나오는데 이때 영문1자 이상을 포함해 6자리 이상으로 정해 입력해야 해. 마지막으로 발급받은 인증서 저장소를 선택한 후 확인버튼을 누르면 끝나.

미돌양 : 질문 있습니다. VPN에서도 인증서 발급을 한다고 들었는데, VPN은 그 자체에서 암호화와 터널링을 구현하기 때문에 인증서가 필요없을 만큼 안전한 기술 아닌가요?

슈마 : VPN 접속시 사용자가 적은 경우는 VPN 장비에서 계정 관리를 하지만, VPN 사용자가 많아지면 암호화키 분배 문제가 발생하기 때문에 키 관리가 어려워. 때문에 PKI와 연동해서 공인인증기관에서 공개키 방식의 인증서를 이용한 안전한 키 분배를 하지.

미돌양 : 최신 VPN 제품에는 VPN 전용 인증(CA)이 내장돼 있어서 별도의 CA 서버를 구축하지 않고도 인증서 기반으로 안전한 VPN을 구축할 수도 있던걸요.

허접군: 일부는 자체 사설 인증을 사용하는 경우도 있다던데 어떤 경우인가요? 안정성이나 신뢰성에서는 공인인증기관이 더 좋은 것 아닌가요.

슈마 : 인증 발급량이 많을 경우는 사설 인증을 사용하는 것이 비용도 절감되고, 기능적으로도 자유롭게 응용할 수 있다는 장점이 있어. 하지만 공인인증기관은 분쟁이 발생했을때 법적으로 사용자의 권리를 보호해 줄 수 있다는 것이 가장 큰 장점이야.

미돌양 : 인증기관에서 CA, RA와 더불어 LDAP을 이용하던데 LDAP의 역할은 무엇인가요?

슈마 : LDAP은 ‘Lightweight Directory Access Protocol’의 약어로, 우리말로 해석하면 ‘경량의 디렉토리 액세스 프로토콜’이라고 할 수 있지. 쉽게 말하면 인터넷 상에서의 디렉토리 서비스를 위한 공개된 표준 프로토콜로, 인터넷에 연결돼 있는 가입자 정보를 제공하는 것이지. (그림 4)는 인증을 적용한 예인데, 인증 적용 전에는 ID와 패스워드, VPN 인증으로 사내외 가입자 정보를 관리하고 있고, 파이어월 DMZ 구간에 있는 협력업체 시스템에 접속할 외부 협력사는 공인인증을 받게 했으며, 사내직원은 사설 인증으로 접속하도록 하고 있는 것을 알 수 있어.

허접군 : 휴대폰으로 메일을 발송할 때는 유선과 달리 어떻게 암호화를 하나요?

슈마 : (그림 5)와 같이 지금까지 배웠던 공개키와 별반 다를 것이 없어. 유선과 무선의 인증 방식의 차이는 왼쪽의 표를 보면 보다 쉽게 이해할 수 있을거야.

허접군 : 요즘은 휴대폰으로 결재도 하던데 이 것도 PKI와 연관이 있나보죠?

슈마 : 스마트카드 칩이 내장된 휴대전화를 이용해서 결재할 경우 PKI와 관련된 부분이 있지. 자세한 내용은 슈마 가이드를 참고하도록 하고, PKI 강좌는 여기까지야. 다음 시간에는 비교적 최근 등장한 기술인 서버 보안에 대해 2회에 걸쳐 알아보도록 하자.
2006/06/09 18:13 2006/06/09 18:13
Tag //
공개키 기반 구조(PKI)

정보를 다루는 주체들이 서로 신뢰할 수 있는 관계라고 하더라도 ‘인터넷’이라는 신뢰할 수 없는 공간을 통해 커뮤니케이션이 이루어지는 한 각각의 서비스 형태나 어플리케이션에 따라 적절한 정보 보호 체계를 구축해야 한다. 미국의 ITAA(Information Technology Association of America)가 105개의 미국 IT 담당 임원을 대상으로 조사한 자료에 따르면 응답자의 62%가 전자상거래의 발전을 가로막는 요인이 신뢰할 수 없는 시스템이라고 지적했다. 정보 보호는 정보 인프라에 신뢰를 제공하고 질서를 바로 잡는 체계이다.

정보 보호 기술은 여러 가지 형태와 목적을 지니고 있다. 방화벽, 침입탐지, 접근제어, 취약성 분석부터 바이러스 백신에 이르기까지 각각의 독특한 시스템과 시장을 창조해 내었다. 그런데, 향후 익스트라넷이나 전자상거래 서비스를 인터넷 기반 IT 환경에서 구축할 때에 필수적으로 요구되는 정보보호 기술은 공개키 기반 구조(Public Key Infrastructure,약칭 PKI)라고 할 수가 있다. PKI는 본래 공개키를 이용해 인증 체계를 구축해 가는 전체 인프라로서 정의되지만 이제는 그 자체가 하나의 독립적인 서비스이며 상품적 개념으로 발전했다.

PKI는 앞으로 전자메일, 그룹웨어, 데이터베이스 검색, 데이터웨어하우징(Data Warehousing), 자바 애플릿 (Java applet) 서비스 등 모든 인터넷 기반 IT 서비스에서 핵심적인 플랫폼(platform) 역할을 하게 된다. 따라서, PKI는 정보 보호 산업에 전념하는 일부 업체만의 관심사가 아니고 IT 사업에 참여하고 있는 모두가 궁극적으로 다루게 될 주제라고 하겠다.

국내에서도 금년 7월 1일부터 전자서명법이 공시되면서 인증관리센터와 공인 인증 기관들이 금년 내로 서비스를 개시하게 된다. 이제 인증 프로세스는 자연스럽게 인프라로서 자리잡게 될 것이고, 그렇게 되면 IT업에 참여하는 모든 기업들은 PKI에 대한 개념과 기술적 이해 없이는 전자상거래나 기업 전산 시스템을 구축한다는 자체가 거의 불가능해진다.

본 기고에서는 4회에 걸쳐 PKI의 개념과 기술, 그리고 현황에 대해 설명하고자 한다. 패러다임이 급속도로 변하는 상황에서 PKI에 대한 마인드 확산과 기술적 숙성은 시급한 문제이며, 그런 점에서 본 기고가 다루는 내용이 새로운 서비스를 준비하는 이들에게 도움이 되기를 바란다. 첫 회에서는 IT 환경의 변화를 이해하기 위해 인터넷 패러다임의 영향에 대해 살펴보고, 이어서 PKI에 관련된 정보 보안 개념, 응용 분야의 순으로 언급이 될 것이다.

인터넷 패러다임

인터넷은 새로운 밀레니엄을 맞이하는 과정에서 전 세계의 경제 활동에 영향을 미치는 중심 개념으로서 확고한 위상을 갖추었다. 인터넷은 그 자체가 여러 개의 패러다임을 거치면서 발전하고 있는데 그림 1은 대표적인 모델과 각 시점에서 적용되는 정보 보호 기술에 대해 설명하고 있다.

초기 단계에는 전자우편(E-mail)이나 웹(WWW)이라고 하는 비교적 단순한 기술로 보편적인 인터넷 서비스들이 구축될 수가 있다. 더 발전된 개념인 인트라넷(Intranet)은 이러한 서비스를 기업 내부 네트워크에 적용하는 구조로서, 제어가 가능한 내부망과 신뢰할 수 없는 외부 인터넷 망을 기술적으로 차단하는 방화벽(firewall)이 대표적인 정보 보호 시스템으로 자리 잡았다. 아울러 내부 정보 유출자를 모니터링하는 침입탐지시스템(Intrusion Detection System), 사용자의 정보 접근을 효율적으로 제어하는 접근제어시스템(Access Control System), 내부 시스템/네트워크의 취약성(vulnerability)을 점검하는 취약성 점검 시스템이 기본적으로 요구되는 정보 보호 인프라이다.
그림 2는 내부 보안에서 고려되어야 하는 요소를 표시하고 있다.

더 발전해서 인터넷 망을 통해 협력사나 다른 부서와의 업무 영역을 확장하기 위해서 익스트라넷(Extranet)의 개념이 소개되었는데, 익스트라넷 환경에서는 ‘인터넷’이라는 개방적이고 불안정한 통로(medium)를 지나가야 하는 관계로 더 정교한 보안 기술들이 적용된다. PKI나 VPN이 이에 해당하는 개념으로서 소위 B2B (Business-to-Business) 환경을 구성하는 기본 요소이다.

전자상거래(EC) 환경에서는 서비스 주체나 사용자 모두 인터넷을 기반으로 가상공간에서 커뮤니케이션을 해야 한다. 여러 형태의 위험을 극복하기 위해서는 end-to-end 개념의 복합적이고 세밀한 수준의 보안 기술이 적용되어야 한다. 또한 사이버 공간에서 정보의 내용과 커뮤니케이션 자체를 입증해 주고 중재해 줄 수 있는 공공성을 지닌 기관을 필요로 한다. 이 서비스의 주체는 신뢰받을 수 있어야 하는데 인증기관 (Certification Authority)이 바로 그러한 역할을 수행한다.

PKI는 어느 한 단계에만 속하는 개념이 아니다. PKI가 적용되는 영역은 인트라넷부터 전자상거래에 걸쳐 있으며, 그 자체가 기본 인프라이다.
PKI 기반 위에 신뢰(Trust)의 고리가 거미줄처럼 연결되며, PKI를 구성하는 모든 요소는 상호 유기적으로 작동하여 신 기술이 끊임없이 적용되는 탄력적인 아키텍처를 지니고 있다. 인터넷 기반의 서비스 체제는 PKI에 의해 신뢰의 프레임워크(Framework)가 구성된다고 해도 과언이 아니다.

PKI 관련 보안 서비스

정보 보안은 각종 위협(threat)으로부터 안전지대(safeguard)를 구축하는 개념으로 정의된다. 컴퓨터에 저장된 정보는 문서나 데이터의 형태로 저장되고, 이러한 정보에 대해 정당하지 않게 행위를 가하는 것을 위협이라고 정의할 수가 있다. 위협의 종류는 여러 가지가 있는데 대표적인 몇 가지를 열거하면 다음과 같다.

- 도청 (Evasdropping) - 권한위조 (Authorization violation)
- 변조 (Tampering) - 서비스 거부 (Denial of Service, DoS)
- 위장 (Masquerade) - 행위거부 (Repudiation) - 스푸핑(Spoofing)

이러한 위협에 대응하는 보안 정책을 설정하는 것을 보안 서비스라고 하는데, PKI는 그 중에서 대표적으로 다음 서비스를 실현하는 체계이다.

1) 인증 (Authentication)

인증 서비스는 자신의 신분과 행위를 증명하는 행위를 의미한다. 이미 실생활에서는 우리가 주민등록증이나 운전면허증, 사원증 등을 통해서 자신의 신분을 밝힐 수가 있다. 사이버 공간에서 어떠한 종류의 서비스를 구현하든 가장 중요하고 기본적으로 도입해야 하는 보안 개념이라고 할 수가 있다. 인증은 주로 위장(masquerade), 스푸핑(spoofing) 과 같은 위협에 대해 효과적으로 대응할 수가 있다.

인증 서비스는 실체 인증(Entity authentication)과 송신자 인증 (Data origin authentication)의 2가지로 분류할 수가 있다. 실체 인증은 사이버 공간에서 자신이 합법적이고 정당한 실체임을 나타내는 것이다. 예를 들어 SSL로 운영되는 웹서버(Web server)는 여기에 연결되는 웹브라우저(Web browser)에게 자신의 신분을 입증할 수가 있다. 송신자 인증은 문서나 전자우편이 특정인에게서 온 것임을 증명하는 행위로서 디지털 서명이 대표적으로 이를 구현하는 서비스이다.
PKI의 인증 절차 과정은 그림 3에 잘 나타나 있다. 구체적인 동작 원리에 대해서는 다음 호에서 상세히 설명하도록 한다.

2) 무결성 (Integrity)

무결성은 문서나 메시지가 전달되는 과정에서 변조되지 않도록 실현하는 서비스이다. 실제 서비스를 구성하는데 있어서는 무결성이 기밀성보다 더욱 중요시 된다. 비즈니스에서는 신뢰성이 가장 중요한 문제이기 때문이다. 무결성 서비스는 문서 위조나 되돌이 공격(replay attack)의 위협에 대해 대응할 수가 있다.

3) 기밀성 (Confidentiality)

정보가 교환될 때에 제 3 자에게 노출되지 않는 기능은 정보 보호의 기본이다. 사실상 암호이론은 기밀성을 보장하는 데에서 출발하였다고 할 수가 있다. 보통 메시지는 그 양이 많기 때문에 거래에 참여한 양자가 동일한 비밀키를 통해 암호/복호 통신을 사용함으로서 비밀성을 보장받게 한다.

4) 부인방지 (Nonrepudiation)

거래에 참여한 당사자가 나중에 자신이 관여했던 행위를 어떠한 형태로든 부인하게 되면 상거래의 질서가 무너지게 된다. 부인할 수 있는 대상은 거래 자체, 거래가 일어난 시점, 거래의 내용 등 여러 가지가 있다. 피해를 받지 않기 위해서는 거래의 근원지나 거래가 전달된 행위에 대해서 상세하게 입증할 자료를 갖추는 것이 필요하다.

PKI의 응용 분야

PKI는 광범위한 기업 응용프로그램에 보안 솔루션을 제공한다.  솔루션은 웹 보안, 전자우편 보안, 원격접속, 전자문서, 전자상거래 어플리케이션 등 매우 다양한 분야에서 사용될 수 있다.  어플리케이션 내에서의 보안기능은 엔드유저에게 사용의 편리성뿐만 아니라 투명성을 제공한다.

다음은 PKI를 이용한 어플리케이션의 예이다.

1) 안전한 전자우편 어플리케이션

기업활동의 글로벌화로 인하여 안전하고 저렴한 통신 수단 방식이 요구되어 왔다.  과거의 통신수단으로는 팩스, 디스켓, 직접 만남 등이 주가 되었었다.  그러나 이러한 방식은 시간적이나 비용면에 있어 매우 비효율적이었다.  안전한 전자우편(현재 또는 기존에 사용하던 전자우편 시스템 활용)은 기업, 고객, 고용자, 협력사 모두가 만족하는 안전한 통신 수단을 제공한다.

2) 웹 기반 보안

웹(WWW) 서비스 사용의 증가에 따라 기업이나 개인은 좀더 효과적인 방법으로 웹 서비스를 제공받기를 원한다.  웹 서비스를 이용한 온라인 서비스 업체들에게 있어서 보안에 대한 확신을 심어준다.  일반 기업들은 데이터의 도청이나 파괴없이 안전한 인터넷을 통하여 그들의 직원, 협력업체, 고객과 함께 정보를 공유하는데 사용할 수 있다.

3) 전자상거래 (E-