원래 이 문서는 Sun Microsystems의 Dan Farmer 씨의 글을 번역한 내용이며, 한국어 번역은 (주)아이즈랩의 김상우씨에게 저작권이 있습니다. <swlive [at] cais [dot] kaist [dot] ac [dot] kr>또는 <webmaster [at] iznet [dot] net> 

Basic Security Tools

--------------------------------------------------------------------------------

scanner

scanner는 시스템이 보안에 대해 얼마나 취약한지를 알아내 주는 security tool이다. 즉 scanner를 실행시킴으로서 관리자가 잘 모르고 있었던 시스템의 보안상의 허점 등을 발견해낼 수 있는 것이다. 시스템이나, 보안 전반에 대해 잘 모르는 관리자들은 이런 scanner를 충분히 활용할 필요가 있다. 즉 이런 scanner의 활용만으로도 일정 이상의 보안 수준을 유지할 수 있기 때문이다. 그러나 이런 scanner도 결국 모두 공개되어 있는 프로그램들이고, 해커들도 이런 종류의 프로그램에 익숙하며, 또 버그나 취약점에 대해서도 잘 알고 있기 때문에 scanner에만 모든 것을 의지하는 것에도 커다란 문제가 있다.

scanner 는 크게 두 가지로 나눌 수 있는데, 이는 system scanner와 network scanner이다. system scanner란 말 그대로 어떤 한 system에 대해서 보안적 검색을 해 주는 것이다. network scanner는 어떤 한 network 상에 있어, 그에 물려 있는 host들에 대해 검색을 해 준다. system scanner의 대표적인 것으로는 COPS(Computerrized oracle and password system) 이 있으며, network scanner에는 대표적으로 ISS(Internet security scanner)가 있다.

COPS(Computerrized Oracle and Password system)

대표적인 UNIX system 의 보안점검 프로그램이다. COPS 패키지에는 실제 프로그램과, 작동방법, 그리고 프로그램의 결과를 해석할 수 있는 문서로 이루어져 있다. COPS의 특징은 root가 아닌 일반 user도 사용할 수 있다는 것인데. 이 때문인지 COPS는 점검한 보안 문제에 대해 알려주기만 할 뿐, 그것을 실제로 수정해 주지는 않는다. COPS는 실행시 root Permission에서 실행되는데, 실행시 다음과 같은 사항들을 점검한다.

root suid file들의 리스트와 write 가능 여부,shell script 여부

crack으로 발견되기 쉬운 password

주요 system file, directory, device의 owner 와 permission

password file 과 group file의 format 상의 vulnerability

/etc/rc*.d/* 에 의해 수행되는 program 들과 cron daemon 에 의해 수행되는 프로그램들의 vulnerability

주요 binary file들의 CRC check하여 변동시 시스템 관리자에게 통보

unsecure anonymous ftp setup

unsecure tftp, sendmail alias, SUID uudecode problem

/etc/inetd.conf 에 의해 감추어져 있을지 모를 hidden shell

각 사용자들의 home directory의 .cshrc, .profile permisson

/etc/hosts.equiv 의 '+' 여부 (없어야 함)

unrestricted NFS mount setup

/etc/ftpuser 에 root 가 들어 있는지 여부(들어 있어야 함)

CERT 에 의한 보고된 파일의 patch 여부

위와 같이 COPS는 다양한 부분에 대해서 점검하여 주는데, 이를 보고 사용자는 결과에 따라 문제점을 수정할 수 있다. COPS 이후의 프로그램들은 대부분 점검과 함께 수정까지 해 주는데 COPS는 그런 기능은 없지만, 대체적으로 간편한 설치와 실행과정 때문에 아직까지도 쓰이고 있다. 또한 위에서 언급했듯이 COPS는 system scanner이므로 network상에서 한 시스템밖에 점검하지 못한다. 그러므로 다른 network scanner들과 같이 사용하는 것이 좋다.

ISS(Internet security scanner)

대표적인 network monitor tools로서, 공개용과 상용 버전이 나뉘어 있다. 여기서는 공개용으로 개발된 것에 대해 말하는데, 다음과 같은 것들에 대해 검사한다.

필요없는 계정 검색
각종 프로그램의 알려진 버그
export된 파일들의 제한사항(access control)
현재 사용중인 사용자들
NIS 맵을 통한 check
NFS 관련 vulnerability
TCP 관련 데몬들의 vulnerability
이외에도 system scanner에는 Crack, Npasswd, Tripwire, ttywatcher, Tiger, Swatch, MD5, Skey 등이 있고 Network scanner에는 Cpm, SATAN, Netlog, Drawbridge, NFSwatch, TCPwrapper 등이 있다. 이들 보안점검 프로그램에 대한 간단한 설명은 http://wwwcs.dongguk.ac.kr/~dh999/Security/chap3.html 에서 볼 수 있다.

scanner로 대표적인 몇 가지 프로그램에 대해서 더 알아보자.

SATAN (Security Administrators Tool for Analyzing Networks)

SATAN은 웹 인터페이스를 가진 포트 검사 프로그램이다. 따라서 GUI이며 점검 결과도 HTML문서로서 제공하는 등, 사용자들이 사용하기에 편리하다. 검사 강도를 강, 중, 약으로 조절 할 수 있는 기능이 있다. 다음과 같은 것들에 대한 점검이 가능하다.

WU-FTPD(Site-exec)
NFS world mountable
NIS password access
rsh, rlogin
rexd
SNMP의 취약점
tftp
writable ftp home dir
X server access
NFS export by portmapper
비권한자에 의한 NFS mount
finger의 취약점
modem의 취약점
port scanning
sendmail(pipe, identd)
SATAN은 실제로 많은 기능들을 제공하며, 따라서 사용하는 사람들도 많다. 이런 이유로 SATAN을 다운로드 할 때는 주의하여야 하는데. 실제로 이를 가장한 트로이 목마 프로그램도 나돌고 있는 실정이다.

SAINT(Security Administrators's Integrated Network Tool)

SATAN이 수행하던 finger, NFS, NIS, ftp, tftp, rexd, statd 의 점검 서비스에서 좀더 확대된 기능으로 진단한다. SATAN이 제공하는 것 이외에도 다음과 같은 항목들에 대해 진단할 수 있다.

DNS의 취약점
POP서버
SATAN의 패스워드 취약점
해킹 프로그램 취약점
각종 CGI 취약점
rusersd, rstats, rpc_rstatd 취약점
pop, imap 취약점
netbios 공유의 취약점
SAINT는 www.wwdsi.com/saint 에서 구할 수 있다. 역시 SATAN과 마찬가지로 공격 강도를 조정할 수 있으며, 설치 후 실행하고 target을 입력하면, 취약점과, host, trust 등의 분석을 해 준다. 처음 발표된 후 꾸준한 업데이트로 많은 신뢰를 받고 있는 만큼, 많은 사람들이 사용하고 또 신뢰하는 프로그램이다.

위에서 소개했듯이 이외에서 많은 수의 scanner들이 웹 상에 존재한다. 각각마다 독특한 서비스를 제공하고 있으므로 여러 가지의 scanner를 사용해 보는 것도 좋을 것이다. 그러나 scanner란 것은 동전의 양면과 같아 그것을 누가 쥐느냐에 따라 선/악 으로 변신이 자유롭다. 즉 시스템 관리자가 사용하였을 경우 어느 곳을 수정해야 하는지를 가르쳐 주는 역할을 하지만, 해커가 쥐었을 경우 그 해커에게 어디를 공격하라고 지시하는 지시자의 역할을 할 수도 있는 것이다.

따라서 자신의 시스템을 누군가가 scanner로 검사한다면 그것은 매우 위험천만한 일이 아닐 수 없다. 즉 다시 말하면, 자신의 system을 누군가 허락없이 scan 하는 것을 막아야 한다는 것이다. 그렇지 않을 경우 scanner 프로그램은 해킹 도우미로서의 역할을 충실히 해낼 것이다. 다행히도 많은 수의 scanner 검색 프로그램이 개발되어 있다.

courtney - SATAN과 SAINT scan을 발견하여 warning log를 남긴다.
Icmpinfo - Icmp 관련 행위를 탐지한다.
scan detector - porl based TCP/UDP scan detector
klaxon - port scan을 감지한다.
Psionic Portsentry - attacker를 규명하고 실시간으로 그것을 막아준다.
scanner와 더불어 scanner detector를 사용하는 것도 시스템 관리자의 필수사항이라고 할 수 있을 것이다. 더 완벽한 보안을 위해서는 적절한 scanner의 사용과 scanner에 의존하지 않는 자세, 그리고 이들 프로그램의 최신 버전을 바로바로 구하는 부지런함이 필요하다.

sniffer

sniffer랄 무엇인가? 우선 그 답을 알기 위해 영어사전을 찾아보자.

sniffer[snifer] n.
1. 마약을 코로 마시는 사람
2. 신나[도료,구두약]의 냄새를 맡는 삶 (냄새)탐지기
3. 미俗 손수건; 코
sniffer란 대충, 냄새를 맡는 것, 이라는 뜻임을 알 수 있다. 그렇다. 여기서도 냄새를 맡는 것이다. 어떻게? 즉. 자신에게 오지 않는 message를 몰래 수집하는 것이다. 원래 컴퓨터는 그들을 향해 발신된 목표만 받아들이는 것이 정상이지만, 이를 프로그램을 통하여 promiscuous 상태로 만들어 모든 network traffic 과 packet를 가질 수 있는 것이다. 이런식으로 정보를 수집하여 결국 사용자의 이름이나, 패스워드, 또는 특정 메일을 얻어내는 것이 목표이다.

그렇다면 promiscuous 상태란 무엇인가? 원래 ethernet에서는 모든 host는 같은 wire를 사용한다. 즉 사실 각각의 host는 그들에게 오지 않는 모든 packet을 감지할 수가 있는 것이다. 그러나 그런 것들까지 모두 받아들이는 것은 바로 쓸데없는 것들을 가져다가 버리는 셈이 되므로, 이더넷 인터페이스, 즉 LAN카드는 자신의 MAC address를 갖는 트래픽만 받아들이는 filtering을 하게 된다. 반대로 이런 필터링을 하게 하지 않을 수도 있는데, 이를 promiscuous mode라고 하며, sniffing 은 바로 이 ethernet 인터페이스를 promiscuous mode로 설정하여 모든 network traffic을 보고자 하는 것이다.

이런 sniffing을 방지하기 위하여 원래 ethernet에서는 스위칭 허브를 사용한다. 스위칭 허브란 로컬 네트워크를 여러개의 세그먼트로 나누어서 쓰게 하는데 각 세그먼트의 traffic은 다른 세그먼트로 가지 못하게 한다. 따라서 이를 이용하면 promiscuous mode된 host라도 다른 네트워크 세그먼트의 traffic을 들을 수 없는 것이다. 그러나 이를 피하는 여러 가지 공격기술이 있으며(Switch jamming, ARP redirect, ARP spoofing, ICMP redirect 등) 이를 이용한 많은 sniffer들이 존재한다.

linsniffer
만든이 : by Mike Edulla
필요한 사항 : C 와 IP header file
Config file : 없음
구할 수 있는 곳 : http://www.agape.org/hack/network-sniffers/linsniffer.c

linux_sniffer
만든이 : by loq
필요한 사항 : C 와 IP header file
Confiog file : 없음
구할 수 있는 곳 : http://www.ryanspc.com/sniffers/linux_sniffer.c

hunt
만든이 : by Pavel Krauz
필요한 사항 : C, IP header file, Linux2.0.35+, GlibC 2.0.7 with LinuxThreads.
Config file : 없음
구할 수 있는 곳 : http://www.cri.cz/kra/index.html

sniffit
만든이 : by Brecht Claerhout
필요한 사항 : C, IP headers
Config File : 설명 참조.
구할 수 있는 곳 : http://reptile.rug.ad.be/~coder/sniffit/sniffit.html

이 밖에도 많은 sniffer 들이 있다.

ANM (The Angel Network Monitor) : 네트워크 관련 시스템 감시 http://www.ism.com.br/~paganini/angel

Etherreal : Linux GUI 기반의 sniffer
http://etereal.zing.org/

icmpinfo : ICMP traffic을 보고하며, ICMP bomb 공격을 찾아내는 데 도움을 준다.
http://ftp.cc.gatech.edu/pub/linux/system/network/admin/icmpinfo-1.11.ta...

IPAC : linux을 위한 IP 모니터 ipfwadm 또는 ipchains 위에서 동작
http://www.comlink.apc.org/~moritz/ipac.html

Ksniffer : KDE 네트워크 통계 유틸리티. 모든 표준 네트워크 traffic을 감시
http://ksniffer.veracity.nu/

sniffer를 탐지하는 방법은 역시 sniffing을 하는 방법 못지 않게 발달되어 있다. 기본적으로 sniffing 하고 있는 모든 host들은 ethernet 인터페이스가 promiscuous 상태로 되어 있어야 하기 때문에 우선 이런 host가 있는지 주기적인 검사가 필요하다. 이러한 방법들에 대해서 간단하게 설명하자면 몇 가지가 있는데

ping을 이용.
MAC주소를 위장하여 (즉 로컬 네트워크에 들어있지 않은 MAC주소 사용) ping을 다른 시스템에 보낸다. 만약에 ping reply를 받게 된다면 그 시스템은 현재 sniffing 중이라는 것이 된다. 왜냐하면 이는 존재하지 않은 MAC주소이기 때문에 정상적인 host는 이 ping request를 받을 수가 없으며 reply를 하지 않을 것이기 때문이다.

ARP를 이용
ping과 유사한 방법으로 non-broadcast 로 위조된 ARP request를 보냈을 때 ARP response가 오면 상대 host는 promiscuous mode중인 것임을 알 수 있다.

DNS 감지.
일반적으로 sniffer들은 사용자 편의를 위해서 sniffing한 시스템의 IP 주소 대신에 도메인 네임을 보여준다. 이를 위해서 Inverse DNS-loopup을 하게 되는데 이것을 감지하기 위해 DNS traffic을 감시하면 sniffer를 탐지할 수도 있다.

유인(decoy) 방법
약간 야비한(?) 방법으로, 일부러 계획된 ID와 password를 네트워크 상에 흘려보내는 것이다. sniffer들은 이것을 획득하며, 일반적으로 sniffing의 목적이 이런 ID, password의 획득이기 때문에 이것을 사용할 것이다. 그러면 미리 계획한 프로그램에 의해 잡을 수 있다.

host method
ifconfig를 이용하는데, ifconfig -a 라는 명령을 이용하면 확인할 수 있다.

[root@*******]# ifconfig -a

sniffer가 돌지 않고 있는 경우

eth0 Link encap:Ethernet HWaddr 00:40:33:93:7B:52
inet addr:143.248.***.*** Bcast:143.248.***.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:76916 errors:0 dropped:0 overruns:0 frame:1
TX packets:12358 errors:0 dropped:0 overruns:0 carrier:0
collisions:2574 txqueuelen:100
Interrupt:3 Base address:0x300

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0

sniffer가 돌고 있는 경우

eth0 Link encap:Ethernet HWaddr 00:40:33:93:7B:52
inet addr:143.248.***.*** Bcast:143.248.***.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:77707 errors:0 dropped:0 overruns:0 frame:1
TX packets:12751 errors:0 dropped:0 overruns:0 carrier:0
collisions:2574 txqueuelen:100
Interrupt:3 Base address:0x300

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
파란색으로 표시한 부분 즉 PROMISC가 있다면, 이는 promiscuous mode 설정이 되어 있다는 것을 알 수 있다.

application.
기타 이러한 목적으로 설계된 응용프로그램이 있는데, 이를 사용할 수도 있다. ifconfig -a를 이용해서도 감지가 가능한 경우도 있지만 SVR 계통의 경우 ifconfig로도 감지가 않되는 경우가 있다. 이 때문에 기타 전문 프로그램이 필요한 경우도 있는데, ifstatus 는 David A. Curry에 의해 만들어진 프로그램으로, 만일 sniffer가 있는 상황에서이를 실행하면 " WARNING: ***.**.**.*** INTERFACE eth0 IS IN PROMISCUOUS MODE"라는 경고문이 뜬다.

TCP wrapper

TCP wrapper는 Wietse Venema에 의해 개발된 보안도구이다. 이는 remote를 통하여 finger, ftp, telnet, rlogin, rlogin, rsh, rcp, tftp, talk, 그리고 그 외의 다른 네트워크 서비스 요구에 대하여 접근통제를 하며 여기에 대한 접근사실을 기록으로 남기는 기능을 제공한다. 그리고 이런 시도가 발생하였을 경우 시스템 관리자에게 메일로 이 사실을 알려주는 기능도 제공한다.

설치도 매우 간편하여, SUN, HP, IBM 등 대부분의 시스템에 쉽게 설치가 가능하며 리눅스에는 이미 설치되어 있다.

TCP wrapper 설치후 서비스의 과정을 보면 아래와 같다.

클라이언트 측에서 telnet 서비스 요청을 한다.
서버의 inetd에서 서비스 요청을 받는다.
inetd는 wrapper 프로그램을 호출하여 받은 서비스 요청이 허용되는 요청인지를 로그로 남긴다. 허용되지 않은 요청일 경우 접속을 차단한다.
해당 네트워크 데몬을 호출하여 터미널 타입 등을 확인한다.
login 프로그램을 구동하여 사용자 ID와 password로 사용자을 인증하고, 로그파일에 기록을 남긴 후 쉘을 부여한다.

접근 통제설정은 다음과 같은 형식으로 한다.

/etc/hosts.allow
ALL : LOCAL, 143.248.225.
/etc/hosts.deny
ALL : ALL : spawn (/usr/sbin/safe_finger @%h | /bin/mail -s
'Rejected %d(%p) from %h to myhost' root swlive@hanmail.net)&

위와 같이 설정한 경우, 143,248,225.XXX 외에는 어떠한 서비스 요청도 거부한다. 그리고 접근되지 않은 호스트로부터 접근시도가 발생한 경우 swlive@hanmail.net으로 메일을 보내 이 사실을 알리게 한다.

접근이 허용되지 않은 host로부터 접속 시도가 이루어진 경우 TCP wrapper는 1차적으로 그 접속을 차단해 버린다.

Connection closed by foreign host

그리고 이 기록을 로그 파일로 남겨, 나중에 관리자가 이를 확인할 수 있게 한다. 마지막으로 관리자에게 메일로서 역시 이 사실을 알린다.

firewall

방화벽의 기본 의미는 건물에서 화재가 났을 때 그 불이 넓게 번지는 것을 막는 시스템이다. 인터넷에서의 의미로 볼 때 화재는 즉 보안 사고를 뜻한다. 다시 말해서 보안 사고가 일정 수준 이상이 되는 것을 막기 위해 설치한 안전선이라고 생각할 수 있다.

TCP wrapper가 각 host별로 설치하는 security tool이라고 하면 방화벽은 특정한 로컬 네트워크 상에 공통적으로 설치하는 security tool이라고 할 수 있을 것이다. 즉 외부에서 firewall 안으로 들어오는 유일한 통로에 설치하여 모든 서비스는 그 곳을 거치게 되고, 그곳을 잘 감시하면, 내부로 들어오는 불법적인 traffic을 거부하거나 막을 수 있는 것이다. firewall 의 장점은 다음과 같다.

위협에 취약한 서비스에 대한 보호

방화벽은 네트워크에 대한 보안을 강화하고, 기본적으로 안전하지 않은 서비스를 필터링(filtering)함으로써 서브넷 상에 있는 호스트에 위험을 감소시킬 수 있다. 즉, 단지 선택된 프로토콜만이 방화벽을 통과시키므로 서 서브넷 네트워크 환경은 위험에 덜 노출되게 된다.

호스트 시스템에 대한 액세스 제어

방화벽은 또한 호스트 시스템에 대한 액세스를 제어할 수 있다. 예를 들면, 외부 네트워크에서 내부 네트워크에 있는 호스토로 접속하고자 할 때, 원하지 않는 액세스는 차단할 수 있다. 따라서 사이트는 메일 서버나 NIS같은 특별한 경우를 제외하고 외부로부터의 액세스를 차단할 수 있다.

보안의 집중

방화벽은 대부분의 수정된 소프트웨어와 추가되는 보안 소프트웨어를 여러 호스트에 분산시키는 것과는 달리 원하는 호스트에 방화벽을 설치할 수 있다는 점에서 실제적으로 경제적일 수 있다. 특별히, 일회용(one-time) 패스워드 시스템과 그 밖의 추가적인 인증 소프트웨어를 방화벽에 설치할 수 있다.

확장된 프라이버시

프라이버시는 대체적으로 해가 되지 않는 것으로 생각되는 정보가 실제로 공격에 유용하게 사용할 수 있는 실마리를 제공할 수 있기 때문에 어떤 사이트에서는 중요시 된다. 방화벽을 사용하면, 원하는 사이트는 finger와 DNS(Domain Named Service)와 같은 서비스를 막을 수 있다. finger는 마지막 로깅 시간과 메일과 다른 아이템을 읽었는지와 같은 사용자 정보를 알려준다. 그러나, finger는 침입자에게 시스템이 얼마나 자주 사용되는지, 시스템에 연결된 유저가 있는지, 그리고 침해될 수 있는 지에 관한 정보를 알려줄 수 있다.

방화벽은 또한 사이트 시스템에 관한 DNS 정보를 막을 수 있다. 그래서 사이트 명과 IP 주소를 인터넷 호스트이 사용할 수 없게 해준다. 원하는 사이트는 이러한 정보를 막음으로써 침입자에 유용한 정보를 숨길 수 있다.

네트워크 사용에 대한 로깅과 통계자료

시스템에 대한 모든 액세스가 방화벽을 통과 한다면, 방화벽은 액세스를 로그할 수 있고, 네트워크 사용에 대한 유용한 통계 자료를 제공한다. 의심이 가는 활동에 대해 적절한 경고 기능을 제공하는 방화벽은 방화벽과 네트워크가 침입 시도를 받고 있는지 또는 침입 되었는지에 대한 세부 사항을 제공해 준다.

정책 구현

방화벽은 네트워크 액세스 제어 정책에 대한 구현을 제공한다. 사실상, 방화벽은 사용자와 서비스에 대한 액세스를 제어할 수 있다. 그래서, 네트워크 액세스 정책은 방화벽에 의해서 구현될 수 있다. 그러나 방화벽이 없다면, 이러한 정책들은 전적으로 사용자의 협조에 의존해야 한다. 사이트에서는 사용자의 협조에 의존할 수도 있으나 일반적으로 인터넷 사용자에게는 의존 할 수 없다.

방화벽 시스템은 크게 다섯가지로 나눌 수 있다.

Packet Filtering firewall

Data 통신의 기본단위인 packet 의 정보들을 분석하여 그것을 미리 정해 놓은 rule에 의해 filtering 하는 방식이다. 이 방법은 실행속도가 빠르고 유연성이 좋으나, 사용자 인증기능이 취약한 단점이 있다.

Circuit level firewall

Firewall 내의 한 시스템에 내부 망상의 시스템들이 외부 망과 접속을 의뢰한 후 그 요구에 따라 접속을 수행하는 방식으로 현재는 거의 사용되고 있지 않다.

Application level firewall

Application proxy를 두고 session이 성립하면, Application daemon이 인증작업을 한다. rm 후 인가된 session에 한해 서비스를 허용한다. 이는 강력한 인증 기능을 가지며, 필요한 경우 부가적인 인증 시스템을 통합할 수 있으나, 수행 속도가 좀 느리고, data 전송중에 hacker들의 공격을 받을 위험이 있다.

Hybride firewall

위 세가지의 firewall들의 단점을 보완하여 만들어진 firewall이다. 즉 위의 세가지를 차례대로 통과하여 이루어지는 firewall이라고 알려져 있는데, 실제로 위의 세가지를 모두 사용하는 제품은 드물고, DEC firewall 이 이런 경우이다. Packet filtering 방식의 firewall에 proxy를 추가하고 hybride라고 말하는 경우도 있다. 역시 여러 유형의 firewall을 통합하였기 때문에 새롭게 등장하는 서비스에 유동적으로 대처할 수 있다. 그러나 설치가 매우 까다롭고, 가격이 비싼 단점이 있다.

Stateful Inspection

현재 가장 좋은 보안성능을 자랑하며, 최대의 범용성과 확장성을 지닌다. 클라이언트/서버 모델을 유지시키면서 모든 응용 프로그램의 전후 상황에 대한 데이터를 제공, 이전 firewall들의 한계를 극복할 수 있다. 현재 방화벽 업계의 표준으로 자리잡고 있다.

방화벽이 비록 매우 좋은 보안 시스템이기는 하나, 역시 이것 자체로 완벽한 보안을 유지하는 것을 어려운 일이다. 따라서 방화벽 내의 각 host들도 TCP wrapper 같은 개별 보안을 갖추는 것이 좋으며, 방화벽 자체에도 지속적인 업데이트와, 잦은 점검이 필요할 것이다.

참고 사이트 : http://bme.inje.ac.kr/~csm93/firewall01.htm

Tripwire

간단히 말해서 완전성을 검사하는 프로그램이다. Tripwire는 시스템의 중요한 이진 파일들과 설정 파일들 전부에 대해 일정 기간 내의 대조작업을 수행한다. 따라서 그 파일들이 바뀌었을 경우 관리자는 그것에 대해 통보를 받게 된다.

Tipwire를 잘 쓰기 위해서는 이것을 플로피디스크에 넣고 쓰기방지용 탭을 붙여서 보관해야 한다. 이렇게 하면 아무도 이 내용을 바꿀 수가 없기 때문에 대조 결과를 100% 신뢰할 수 있다. 하루에 한번 정도 tripwire를 실행시켜 검사하는 것이 좋다.

그렇지만 Tripwire는 사용함에 있어서, 바뀐 것이 무엇인지 정도만 알려 줄 뿐이므로, 사용자는 어떤 것이 해커에 의해 이루어진 것인지를 파악할 수 있어야 한다. 그렇게 한다면 Tripwire는 침입자를 알아낼 수 있는 가장 빠른 길일 수 있다.

PGP

지금까지는 시스템을 보안하는 방법에 대하여 알아보았다. 말 그대로 시스템을 보안한다는 것은 TCP wrapper나 firewall 등을 이용해서 시스템 자체의 침입에 대해 방어한다는 것이다. 그러나 이 이외에도 인터넷 상에는 수많은 데이터들이 흘러다니는데 이러한 데이터들에게도 보안할 수 있는 기능이 필요할 것이다. 만일 이런 데이터들이 무방비 상태로 떠다니게 된다면 시스템 자체의 보안이 완벽하더라도, 관리자는 큰 타격을 받게 될 것이다.

데이터 보안은 대표적으로 SSL, PGP 등을 사용하는데, PGP는 Piter Zimmermann이라는 사람이 개발한 암호화 도구이다. 데이터 보안은 주로 암호화가 사용된다.

PGP의 특징은 public key를 사용한다는 것이다. 즉 문서를 암호화하는 데 필요한 key가 공개적으로 알려진다는 조건이다. 대신에 그 암호를 푸는 열쇠가 되는 복호화 key는 개인에게 비밀로 알려지게 된다. 그러므로 이 개인키 - private key를 알지 못한다면 사실 이 문서를 볼 수 없다. 특정인에게 보내지는 메일은 그 특정인의 공개키로 암호화되며, 특정인만이 그의 개인키로 그 내용을 볼 수 있다. 다른 이들은 그의 공개키는 알지만 개인키를 알지 못하므로 그에게 메일을 보낼 수는 있어도, 다른 이가 그에게 보낸 메일의 내용을 알 수 가 없다. 이런 알고리즘의 또 다른 사용목적은 "전자서명"이 있는데, 특정인이 그의 개인키로 서명을 할 경우, 다른 이들은 그의 공개키를 알기 때문에 그 문서의 내용을 모두 볼 수 있게 된다. 하지만 누구도 그 문서를 수정할 수 없기 때문에 그 문서가 그가 작정하였다는 것이 인증될 수 있다.

공개키와 개인키는 동시에 생성되는데, 서로를 유추하기 어렵게 되어 있다. 이 이론은 인수분해의 어려움에서 비롯된 것이다. 따라서 공개키를 안다고 개인키를 알 수는 없으므로 사용자가 자신의 개인키를 잘 유지한다면 거의 완벽한 보안을 이룰 수 있다. 여기서는 public key에 대한 자세한 설명을 피하도록 하겠다. 더 자세한 설명을 원한다면 cryptology를 참고하시길.. ^^

PGP가 전자메일에 제공하는 기능은 기밀성, 메시지 인증, 사용자 인증, 송신부인 방지 이다. 수신부인 방지, Message replay prevention 기능은 아직 제공하지 못하고 있다.

기밀성 (Confidentiality)

기밀성이란, 메일을 받게 되어있는 해당 사용자가 아니면, 그 내용을 볼 수 없게 만드는 기능이다. 데이터 보안 시스템의 가장 기본이 되는 요구사항이라고 볼 수 있다.

메시지 인증 (Message intergrity)

전송 도중에 그 내용이 불법적으로 수정되었는지 아닌지의 여부를 확인하는 기능이다.

사용자 인증(User Authentication)

메일을 실제로 보낸 사람과, 메일에 송신자로 적혀있는 사람이 일치하는지를 알아내는 것이다.

송신부인방지 (Nonrepudiation of origin)

메일을 보내놓고서 안보냈다고 주장하는 것을 방지하는 기능이다.

UNIX에서 PGP를 사용하는 명령어는 pgp단 가지 뿐이다. 이에 여러 옵션들을 붙여서 암호화, 복호화, 키 생성등을 할 수가 있다.

문서를 암호화하여 저장하기

%> pgp -c textfile

옵션으로 -c를 사용할 경우 문서를 암호화한다. 이때 암호키를 만들기 위한 passphrase를 입력해주어야 한다. 암호화된 문서는 뒤에 ".pgp" 나 ".asc" 확장자가 붙는다.

암호화할 때 원문을 지우기

%> pgp -cw textfile

암호화 했다 하더라도 원래의 평문이 남아있다면 그것 때문에 보안이 위험해 질 수 있다. 또 설사 그것을 지웠다 하더라도 복구할 수도 있기 때문에, 그냥 지워서는 안된다. -w 옵션은 암호에 쓰인 평문에 랜덤비트를 덮어씌운 후에 지워버린다.

암호문을 평문으로 복호화 하기

%> pgp textfile.pgp (pgp textfile.asc)

아무 옵션 없이 쓰면 복호화해준다.

키 생성

%> pgp -kg

이것을 이용하여 다른 사람과의 전자 메일에 쓰일 자신의 키를 생성할 수 있다. 몇 가지 입력사항이 있는데, 키의 크기, User Id , Passphrase, random data를 입력하면 된다. 아래와 같은 형식의 입력이 될 것이다.

%> pgp -kg
Pick your RSA key size:
1) 512 bits- Low commercial grade, fast but less secure
2) 768 bits- High commercial grade, medium speed, good security
3) 1024 bits- "Military" grade, slow, highest security
Choose 1, 2, or 3, or enter desired number of bits: 3

(여기서는 1024bit를 선택하였는데, 이것은 가장 큰 키로서 가장 생성시간이 길지만, 그만큼 가장 강력히 암호화한다.)
You need a user ID for your public key. The desired form for this
user ID is your name, followed by your E-mail address enclosed in
, if you have an E-mail address.
For example: John Q. Smith <12345.6789@compuserve.com>

Enter a user ID for your public key:
Hyun_Dong Park
(User ID는 대개 자신의 이름 뒤에 e-mail address를 덧붙인 형태이다)

You need a pass phrase to protect your RSA secret key.
Your pass phrase can be any sentence or phrase and may have many
words, spaces, punctuation, or any other printable characters.
Enter pass phrase:
Enter same pass phrase again:

We need to generate 624 random bits. This is done by measuring the
time intervals between your key strokes. Please enter some random text
on your keyboard until you hear the beep:
624 .
(Key stroke 사이의 시간을 이용하여 random bit를 만들어낸다. 눈 감고 삑소리 날때까지 아무 키나 마구 두드리면 됨 ^^)

0 * -Enough, thank you.
Note that key generation is VERY lengthy process.
............++++++........................+++++................+++++++
Key generation completed.
%>

키 보기

%> pgp -kv

자신의 키 파일들을 볼 수 있다. 옵션 뒤에 secring.pgp 의 경로를 써 주면 비밀키도 볼 수 있다.

키 인증서 변경

%> pgp -ke

자신의 키 파일을 그대로 두고, 그 키에 붙어있는 Userid, Passphrase를 변경하고 싶을 때 사용한다. 자신의 e-mail address가 변경되었을 경우나, 혹은 자신의 Passphrase가 노출되었다고 여겨질 때 바꾸는 것이 좋다.

키를 다른 사람에게 보내기

%> pgp -kx UserID filename

다른 사람에게 key file 전체를 보내는 것은 대단히 위험한 행위이므로, 이 옵션을 쓰면 원하는 UserId 의 key만 복사해서 보낼 수 있다. 우선 이 커맨드는 UserID 의 key를 특정 파일에 복사하여 넣는다. 이를 메일로 목적지로 보내야 하는데 다음과 같이 하면 된다.

%> pgp -kxaf filename | mail kskim@esperosun.chungnam.ac.kr

이렇게 하면 파이프 라인 명령으로 파일을 메일로 보낼 수 있다.

다른 사람의 키를 자신의 키 파일에 추가하기

%>pgp -ka key_filename

다른 사람에게서 키 파일을 받았을 경우 이 명령을 이용해 자신의 키 파일에 올려 놓을 수 있다.

키 지우기

%>pgp -kr

키 파일에 들어있는 자신의 키나, 다른 사람의 키를 지울 수 있다.

이제 메일을 암호화 시켜 보내거나, 암호화된 메일을 복호화할 수도 있는데. 암호화하는 커맨드는 pgp -ea, 복호화에는 역시 아무 커맨드도 필요 없다. 이외의 자세한 커맨드는 manual을 참고 하는 것이 좋겠다.

위에서 보았듯이 PGP는 데이터의 보안에 매우 괜찮은 정도의 보안을 제공하고 있다. 마지막으로 아래는 PGP의 개발자인 Piter Zimmermann의 글을 인용한 것이다.

"당신이 감출 것이 없는 준법시민이라면 왜 모든 우편을 우편엽서를 사용하지 않습니까? 왜 경찰의 수색에 영장을 요구합니까? 당신이 우편물을 봉투에 넣어서 보낸다고 사람들이 당신을 마약거래상으로 생각하지 않습니다. 만약, 법으로 모든 우편은 엽서를 사용하게 한다면 어떻겠습니까? 봉투에 내용을 넣어서 보내면 당신은 의심을 받게 될 것입니다. 하지만, 다행히도 우리가 사는 세상은 그런 세상이 아닙니다. 전자우편의 사용범위는 점차로 증가하여 일반 종이 우편의 자리를 대체하고 있습니다. 전자우편은 중간에 가로채기가 너무나 쉽고, 내용을 scan하기도 쉽습니다. 미국의 NSA(National Security Agency)에서는 이미 전 세계의 전자우편을 키워드 검색방법으로 scan하고 있습니다. 또한, 미국 행정부에서는 Clipper chip이라는 암호화 도구를 주장하여 모든 통신을 감시하려 하고 있습니다. PGP는 사용하는 사람들의 privacy를 지켜줄 수 있을 것입니다."

'Security' 카테고리의 다른 글

로그 분석하기2  (2) 2002.02.26
Hacking skill analysis  (0) 2002.02.26
ethereal 사용하기  (0) 2002.02.24
Chrooting All Services in Linux  (0) 2002.02.24
new photos from my party! 바이러스 Sendmail 필터링  (0) 2002.02.22

+ Recent posts