SSH 완벽 가이드 2003/07/11
== 목차 ==
1. SSH의 개요
2. SSH의 종류
3. SSH의 설치
RPM으로 설치
소스로 설치
4. SSH의 설?
5. SSH의 활용
For Windows
For Linux
1. SSH의 개요
항상 변화하는 데이터 커뮤니케이션의 세계에서, 그리고 값 싼 인터넷 연결이 가능한 현재에서, 또한 빠르게 움직이는 소프트웨어 개발에 있어서, 보안은 갈수록 중요한 문제로 떠오르고 있습니다. 컴퓨터라는 것이 개발 초기부터 보안을 염두를 두고 만든 것은 아니었기에, 보안은 근래에 와서야 기본적 필요조건으로 등장하게 되었습니다. 나쁜 예를 들자면, 인터넷상에서 한 데이터가 A 지점에서 B 지점으로 흐르는 중간의 여러 다른 지점에서, 다른 사용자들이 데이터를 가로채거나 심지어 변경해 버릴 수 있는 기회를 갖게 되는 것입니다. 심지어 여러분의 시스템에 있는 다른 사용자들이 여러분의 데이터를 --여러분이 의도하지 않은 다른 어떤 것으로-- 악의로서 변경할 수도 있을 것입니다. "크래커"라고도 불리는 침입자들에 의해서 여러분의 시스템이 무단 사용될 수도 있으며, 이들은 뛰어난 지식을 악용함으로서 여러분인척 신분을 위장하거나, 정보를 훔치거나, 또는 여러분이 여러분 시스템을 사용하고자 함을 거부할 수도 있습니다.
하지만 다행히도 네트워크 보안은 물리적 보안이나 지역 보안 망을 구축하는 것보다는 수월하다고 할 수 있습니다. 최근에는 그 도구들이 리눅스 배포판에 포함되어 배포되고 있기도 합니다. 리눅스의 인기가 더해짐에 따라 크래커들의 표적이 가중되지만 리눅스가 개방성을 가진 탓에 그러한 헛점들이 빨리 패치가 되고 임시적으로 어떻게 대처해야 하는지 또는 갱신된 소프트웨어는 어디서 구할 수 있는지 등을 담은 보안 관련 안내문이 널리 배포되고 있습니다.
SSH(Secure Shell)은 네트워크의 다른 컴퓨터에 로그인 할 수 있으며 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 프로그램입니다. 강력한 인증 방법으로 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공해 줍니다.
SSH는 rlogin이나 rsh와 같은 service들이 보안에 아주 취약한 점을 대체하기 위하여 나온 원격 login 프로그램입니다. 일반 원격 login 프로그램들은 packet을 전송할 때 평문으로 전달을 하기 때문에 password를 쉽게 가로챌 수 있었습니다. 그러나 ssh는 packet자체를 암호화를 하여 보내기 때문에 패킷이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 나타나 원격 관리에 혁명을 일으킨 프로그램입니다. 또 IP 스푸핑(IP spoofing), DNS 스푸핑(DNS spoofing) 등으로부터 SSH를 사용하면 보호가 가능합니다. 세션 하이젝킹(Session Hijacking)과 DNS 스푸핑을 방지해 주면서 원격 호스트에 로그인 하거나 호스트끼리 데이터를 복사하기 위해 사용될 수 있습니다.
SSH는 RSA공개키/개인키 방식을 이용하여 암호화하게 되는데 Secure ID, S/Key, Kerberos and TIS 역시 지원합니다. 또한 SSH 는 X11서버와 연결도 지원하므로 접속한 서버의 X프로그램 또한 실행 가능하게 해줍니다. 그리고 파일 전송 등 현재는 sftp까지 지원을 하고 있으며, SOCKS 도 지원합니다.
2. SSH의 종류
SSH에는 두 종류가 있습니다. 이것은 프로토콜의 버전으로 나누며 먼저 프로토콜1 (SSH 1) 은 프로토콜1.3과 프로토콜1.5가 있습니다. OpenSSH는 두 프로토콜을 모두 지원합니다. 두 번째로 프로토콜2 (SSH 2) 가 있습니다.
현재 ssh1은 공개로 자유롭게 사용가능하지만 ssh2는 비상업적인 경우에만 자유롭게 사용할 수 있는 라이선스 제한을 가하고 있습니다.
SSH1(Openssh)
SSH2(ssh2)
특징
1. 공개 라이센스
2. 강력한 암호화(3DES, Blowfish)
3. X11 Forwarding - 암호화된 방법으로 원격 X윈도 제어
4. Port Forwarding
5. 강력한 인증(Public key, One-Time Password and Kerberos Authentication)
6. 프로토콜 1.3, 1.5, 2.0 모두 호환
7. Kerberos and AFS Ticket Passing
8. Data Compressin
9. 기본적으로 SSH1
10, TCP Wrapper 지원
1. telnet, rlogin, rsh, rcp, ftp 등 모든 것을 암호화 방법으로 대체
2. 윈도에서 그래피컬한 인터페이스를 제공
3. 다양한 인증 방법 제공
4. 3DES, Blowfish, TWOFISH의 여러 암호화 사용
5. DSA와 Diffie-Hellman key exchange를 사용해 다양한 public key를 지원
6. 기본적으로 프로토콜버전 2를 사용
7. SSH1과 호환 가능
8. Sftp
9. MD5와 SHA1의 해시 알고리즘
10. TCP Wrapper 지원
11. X11 포워딩, TCP/IP 포트 포워딩 지원
12. PGP키 지원
13. Builtin SOCKS4 지원
3. SSH의 설치
RPM으로 설치하기
SSH RPM은 아래와 같이 4개의 file로 구성이 됩니다.
ssh2-2.4.0-1i.i386.rpm --> ssh 기본 패키지
ssh2-server-2.4.0-1i.i386.rpm --> ssh 서버 패키지
ssh2-clients-2.4.0-1i.i386.rpm --> ssh 클라이언트 패키지
ssh2-extras-2.4.0-1i.i386.rpm --> 펄로 만든 몇 가지 유용한 스크립트 파일
일단 rpm을 구해야합니다. ftp://mirror.oops.org 에 가서 설치에 필요한 rpm파일들을 다운 받습니다.
모두 다운 받았으면 위의 rpm file들을 차례대로 설치를 한다. RPM file을 설치를 할 때 rpm option으로는 될 수 있으면 ivh를 사용하기보다는 Uvh를 사용하기를 권장하고 싶습니다. ivh를 사용하다 보면 버전이 틀린 동일한 패키지가 설치가 되어 있으면 rpm 정보가 엉킬 수가 있기 때문입니다. 반면에 Uvh를 사용하면 이전 버젼의 동일 패키지가 설치가 되어 있으면 업그레이드를 하고 설치가 되어 있지 않으면 그냥 설치를 하는 역할을 하게 됩니다.
$ rpm -Uvh ssh2-2.4.0-1i.i386.rpm
처음 ssh2-2.4.0-1i.i386.rpm을 설치를 할 때는 hostkey를 생성하기 위하여 약간의 시간이 지체됩니다. 출력되는 글들을 보면 This may take a while, go and have a coffee ;) 와 같이 커피나 한잔하라는 익살스러운 문구를 볼 수가 있습니다. 이것이 끝나면 /etc/ssh2/hostkey와 /etc/ssh2/hostkey.pub 라는 두개의 hostkey가 생성이 됩니다.
$ rpm -Uvh ssh2-server-2.4.0-1i.i386.rpm
ssh2-server-2.4.0-1i.i386.rpm를 설치를 하면 설치와 동시에 sshd2가 시작됩니다.
$ rpm -Uvh ssh2-clients-2.4.0-1i.i386.rpm
$ rpm -Uvh ssh2-extras-2.4.0-1i.i386.rpm
그리고 나머지 file들을 위와 같이 계속 설치를 해 주면 설치는 끝입니다. ssh2를 사용하면서 ssh 라는 명령어와 sshd라는 명령만 주의하면 됩니다. ssh는 ssh client를 의미하며 sshd는 ssh daemon을 뜻한다는 것 정도는 알아둡시다.
소스로 설치하기
소스로 설치하기 위해서는 소스파일을 구해야된다. www.linux.co.kr 의 자료실에 가면 구할 수 있을 것입니다.
$ tar zxvf ssh-2.4.0.tar.gz
소스를 구했으면 위와 같이 tar 명령어로 압축을 풀어 줍니다.
$ cd ssh-2.4.0
$ ./configure --prefix=/usr/local/ssh2
./configure로 환경설정을 하고 (옵션에서 --prefix는 ssh2가 깔리는 경로)
$ make
$ make install
make, make install을 하면 설치는 끝나게 됩니다. mysql 설치와 맞먹을 정도로 오래 걸리니까-_-;; 좀 많이 기다려야 될 것입니다.
4. SSH의 설정
sshd(서버)의 설정입니다. 모든 설정이 그러했듯이 전부다 설명하는 것은 시간 낭비이므로 사용자에게 필요한 것만 언급하도록 하겠습니다. sshd2의 설정파일은 기본적으로 /etc/ssh2/ 밑에 있습니다.
$ vi /etc/ssh2/sshd2_config
Port 22
SSH가 사용할 기본 포트를 지정한다. 디폴트로 22번 포트를 사용하게 된다.
ListenAddress 0.0.0.0
SSH 데몬이 귀를 기울일 주소이다. 0.0.0.0은 모든 곳을 말한다.
LoginGraceTime 600
유저가 로그인을 실패하였을 때, 연결을 끊는 시간이다. 값이 0이면 무제한이고 기본 값은 600초이다.
PermitRootLogin yes
root의 로그인 허용여부를 결정하는 것이다. 기본값은 no이므로 root로 로그인을 하고 싶으면 yes로 고쳐야된다.
PrintMotd yes
/etc/motd 파일의 내용을 ssh 로그인시 프린트한다. 디폴트는 yes이다.
DenyGroups 그룹명
특정 그룹에 속한 유저들의 SSH 로그인을 거부한다.
DenyUsers 유저명
기본적으로 SSH는 모든 유저의 로그인을 허락하고 있다. 이 설정은 특정 유저의 SSH 로그인을 거부한다.
AllowGroups 그룹명
ssh로 로그인을 허용할 그룹을 지정한다. 단, 숫자로 된 group id는 인식하지 못한다.
AllowUsers 유저명
이 설정도 설정하지 않으면 기본적으로 모든 유저들의 로그인을 허락한다. 하지만 설정하면 해당 유저에 대해서만 로그인을 허용한다.
MaxConnection 10
최대 접속자수를 결정한다. 0은 무제한이다.
AllowedAuthentications publickey,password
인증 방법을 결정한다. 사용할 수 있는 것은 publickey, password, hostbased의 세 가지 방법이 있다. publickey는 ssh-keygen으로 생성한 키로 인증하는 것이고 paasword는 시스템의 패스워드로 인증하는 방법이다. hostbased 방식은 rhost와 같은 지정한 호스트별 인증이다.
RequiredAuthentications publickey,password
인증 순서를 지정한다. 먼저 쓴 것이 우선이다.
CheckMail yes
login 을 한 후에 SHELL 상에서 메일 도착 여부 체크 설정을 지정한다.
UserConfigDirectory "%D/.ssh2"
user들의 정보가 들어 있는 directory를 지정한다.
UserKnownHosts yes
혹시 login이 안된다면 이 옵션을 no로 변경해볼 필요도 있다. 보통은 X가 설치되어 있지 않은 시스템에서 login이 안되는 경우가 되부분인데 X11 package들을 설치해 주면 왠만한 것들은 되며, 아주 특이한 경우에 이 옵션을 no로 해야할 경우도 있다.
PasswordGuesses 3
인증에 실패했을 때 몇 번까지 재시도 할 수 있는지를 지정한다.
RequireReverseMapping no
접속하는 곳의 도메인이 Revers Mapping이 되는지를 확인하여 접속을 허가할지 안 할지를 지정한다. 실제로 internet 상에 호스트들 중 revers mapping이 안되는 host가 상당히 많으며 또한 여러분이 사용하는 host중에도 revers mapping 이 안되는 host가 대다수이니 no로 설정을 하는 것이 좋을 듯 싶다. 자신의 host들이 revers mapping이 되는 것이 확실하다면 보안상 yes로 하는 것이 좋을 수도 있다. 단 revers mapping이 안되면 접속이 안된다는 것을 명심하자.
Ciphers AnyCipher
암호화 방식을 지정한다. AnyCipher라고 하면 모든 암호화 방법을 사용한다는 뜻이다.
#Ssh1Compatibility
#Sshd1Path
위의 두line은 ssh1과의 호환 부분이다. SSH1과 호환되게 하려면 ssh1compatibility의 주석을 풀고, sshd1path에서 주석을 풀고 ssh1의 경로를 지정하면 된다.
ChRootUsers ftp,guest
ChRootGroups guest
sftp를 이용하여 작업을 할 경우 지정된 유저는 자신의 홈 계정 이상으로 올라가지 못한다.
chrootusers는 유저를 지정하는 것이고, chrootgroups는 그룹을 지정하는 것이다.
환경 설정이 끝났다면 sshd를 재시작 해야합니다.
$ /usr/local/ssh2/sbin/sshd2 restart
5. SSH의 활용
For Windows
윈도우에서 ssh를 사용하는 건 누워서 떡먹기라고 할 수 있을 정도로 쉽습니다.
SecureCRT라는 프로그램을 이용하는 것인데 예전에 새롬데이터맨이나 IYAGI2000 같은 범용통신 프로그램을 사용해본 사용자라면 쉽게 사용할 수 있을 것입니다.
그래도 모르겠다면 아래의 사이트를 참조하세요.
http://www.baitop.net/linux/main.php?dir=howto&fp=ssh
다른 프로그램들의 설명..;;
http://yesnic.hostway.co.kr/manual/linux/ssh_3.htm
For Linux
리눅스에서 ssh를 이용하는 것은 매우 쉽다.
$ ssh -l userid hostname
위의 예제는 hostname이라는 서버에 userid로 로그인을 시도하는 것입니다..
다음은 ssh client 의 옵션들입니다.
-v : 디버깅모드로 접속이 안되고 에러가 발생할 때 사용
-a : 대리인 인증 포워딩 사용
-c cipher : 현재 세션에서 사용할 암호 방법 명시 (blowfish, idea, 3des)
-e char : escape 문자 변경
-f : 세션 인증이 끝난 후에 백그라운드로 작업을 수행하도록 명시
-i 파일 : 신원파일을 변경
-l : 로그인 시 사용자 명시
-n : /dev/null로부터 입력을 받는다.
-p port : ssh가 접속하기 위해 사용할 포트 명시
-q : 정적 모드에서는 STDOUT로 경고메시지가 출력되지 않음
-t : 하나의 명령을 수행하더라도 tty를 연다.
-x : x11포워딩 기능 해제
사용자 개인 설정(For Linux)
SSH2의 사용자 설정은 SSH1보다 깔끔합니다. 이제 새로운 공개 키(public key)는 분리된 파일로 저장되며, 한 사람이 복수의 호스트마다의 신분 증명(host-specific identifications, i.e., private keys)을 가질 수 있습니다. 자세한 사항은 ssh 매뉴얼 페이지를 읽으시기 바랍니다. 여기서는 SSH2의 가장 기초적인 사용법을 보여줍니다.
SSH2를 사용하여 지역 컴퓨터(Local)에서 원격 호스트(Remote)로 로그인하려면:
⸡. Local에서 ssh-keygen (ssh-keygen2)를 실행하여 Local의 개인(private) & 공개키(public key)를 만듭니다.
Local> ssh-keygen
Generating 1024-bit dsa key pair
9 o.oOo..oOo.o
Key generated.
1024-bit dsa, created by iyagi15@Local Wed Sep 23 07:11:02 2002
Passphrase :
Again :
Private key saved to /home/iyagi15/.ssh2/id_dsa_1024_a
Public key saved to /home/iyagi15/.ssh2/id_dsa_1024_a.pub
ssh-keygen가 새로운 키(key)를 생성하기 위해 패스어구(passphrase)를 물어올 겁니다. 적당한 길이(20자 정도)의 일반적인 문자(빈칸도 됩니다)로 이루어진 문자열을 입력합니다. ssh-keygen은 사용자의 홈 디렉토리에 ".ssh2" 디렉토리를 만들고, 그 안에 새로운 인증키(authentication key)를 담는 두 개의 파일을 만듭니다. 하나는 개인 키(private key)로서 사용자 자신을 제외하고는 누구도 열 수 *없도록* 해야 합니다. 위의 예에서는 id_dsa_1024_a가 개인 키(private key)입니다. 다른 하나(id_dsa_1024_a.pub)는 안전하게 다른 컴퓨터에 전달되는 공개키(public key)입니다.
⸢. Local에 있는 ".ssh2" 디렉토리에 "identification" 파일을 만듭니다.
Local> cd ~/.ssh2
Local> echo "IdKey id_dsa_1024_a" > identification
이 과정은 ".ssh2" 디렉토리에 "identification" 파일을 만드는데, 거기에는 어떤 파일이 당신의 신분증명(identification)을 담고 있는지를 나타내는 한 줄이 들어갑니다. 신분증명(identification)은 패스어구(passphrase)와 일치합니다(위의 설명을 참고하시기 바랍니다). 반복해서 ssh-keygen을 실행하면 복수의 신분증명(identifications)을 만들 수 있지만, 일부러 그렇게 할 필요는 거의 없습니다.
⸣. Remote에서도 똑같은 작업(단계 ⸡, 그리고 선택적으로 단계 ⸢)을 합니다. 이것은 단지 Remote에서 ".ssh2" 디렉토리를 셋업하기 위해 필요합니다. 패스어구(passphrase)는 달라져도 됩니다.
⸤. Local의 공개 키(id_dsa_1024_a.pub)를 "Local.pub" 등의 이름으로 Remote의 ".ssh2" 디렉토리로 복사합니다. 이제 Remote의 ".ssh2" 디렉토리에는 다음과 파일이 존재할 겁니다.
Remote>ls -F ~/.ssh2
Local.pub
authorization
hostkeys/
id_dsa_1024_a
id_dsa_1024_a.pub
identification
random_seed
⸥. Remote의 ".ssh2" 디렉토리에 "authorization" 파일을 만들어서 다음 한 줄을 추가합니다.
Remote>cat authorization
Key Local.pub
위의 문장은 로그인을 인증할 때 SSH 서버에게 Local.pub를 참조하라고 지정하는 것입니다. 다른 호스트로부터 Remote로 로그인하기를 원한다면, 그 호스트에 인증키(authorization key)를 만들고(단계 ⸡과 ⸢), Remote에서 단계 ⸤와 ⸥를 반복합니다.
⸦. 이제 SSH2를 이용해서 Local로부터 Remote로 로그인할 수 있습니다! 테스트해 봅니다:
Local>ssh Remote
Passphrase for key "/home/iyagi15/.ssh2/id_dsa1024_a" with comment "
1024-bit dsa, creat ed by iyagi15@Local Mon Sep 21 17:53:01 2002":
Local의 패스어구(passphrase)를 입력합니다.
Good luck!
참고 자료
데몬(daemon)
명시적으로 쓰이지는 않지만 보통 시스템을 시동할 때 적재되며, 어떤 통신이 발생하기를 기다리며 배경(background)에서 동작할 준비를 하고 있는 프로그램. 클라이언트의 접속을 기다리는 서버용 프로그램.
Packet
데이터 전송에서 사용되는 데이터의 묶음. 패킷 전송은 두 지점 사이에 데이터를 연속적으로 전송하지 않고, 전송할 데이터를 적당한 크기로 나누어 패킷의 형태로 구성한 다음 패킷들을 하나씩 보내는 방법을 쓴다. 각각의 패킷은 일정한 크기의 데이터뿐만 아니라 데이터 수신처, 주소 또는 제어 부호 등의 제어 정보까지 담고 있다. 보통 한 패킷은 1,024비트 데이터를 담을 수 있다.
Packet 스니퍼
침입자가 네트워크의 더 많은 시스템으로 침투하기 위해서 가장 흔하게 쓰는 방법 중의 하나가 이미 깨어진 호스트에서 Packet 스니퍼를 실행하는 것입니다. 이 "스니퍼"는 인터넷 포트를 감청하면서 지나가는 Packet 흐름에서 Password, Login, su 같은 것이 들리면 그 이후의 내용을 녹음해 둡니다. 이 방법을 쓰면, 공격자는 침투하려고 시도조차 않았던 시스템으로까지 들어가는 패스워드를 얻게 된다. (암호화가 안된 채로) 평문으로 전송되는 패스워드는 이 공격에 매우 약한 것이다.
요즘에는 공격자가 Packet 스니퍼를 쓰기 위해 시스템의 보안을 깨고 침입할 필요조차 없어져 버렸다. 공격자는 랩탑이나 PC를 건물 안으로 들고 들어와서 네트워크를 감청하면 그만인 것이다.
ssh나 다른 암호화된 패스워드 방식을 사용하면 이 공격을 방해할 수 있다. POP 계정용의 ATOP 등이 이 공격을 방지한다.
서비스 거부공격(DoS. Denial of Service attach)
공격자가 특정 유형의 서비스(traffic)을 시스템에 과도하게 요청하는 시스템 공격으로, 시스템의 서비스를 효과적으로 불능으로 만들 수 있다. 보통 쉽게 공격할 수 있는 반면에 이 공격을 막아내기는 수월하지가 않다.
커브로스 (Kerberos)
커브로스는 MIT의 아테나 프로젝트 아래에서 개발된 인증 방식이다. 사용자가 접속해 들어오면, 커브로스는 (패스워드를 사용해서) 사용자를 인증하고, 네트워크 상에 흩어져 존재하는 서버와 호스트들에게 이 사용자의 신분을 증명해 주는 방법을 제공한다.
이 인증법은 리모트 로그인 (rhost) 풀그림 등에 의해서 패스워드 없이 사용자가 다른 호스트로 (.rhost 파일을 대신해서) 접속을 할 수 있도록 해 준다. 이 인증법은 또한, 보내는 사람 (발송인)이 가짜가 아닌 것을 보증하는 동시에, 메일이 정확한 사람 (수취인)에게 전달이 되도록 보증하기 위해서, 메일 시스템에 의해 사용될 수도 있다.
커브로스와 딸려 있는 많은 풀그림을 사용하는 궁극적인 효과는 사용자가 시스템을 속여서 다른 사람인 척 "스푸핑"을 할 수 있는 능력을 거의 없애 버리는 데 있다.
커브로스에 대한 추가 정보는 http://www.cis.ohio-state.edu/hypertext/faq/usenet/kerberos-faq/general/faq.html 에서 찾을 수 있고, 코드는 http://nii.isi.edu/info/kerberos/에 있다.
커브로스를 호스트의 보안의 정도를 높이기 위한 첫 방법으로 쓰지는 말아야 한다. 이 것은 매우 구성하기 힘들고, SSH처럼 광범위하게 사용되지는 않고 있다.
PGP
PGP (Pretty Good Privacy) 등에 사용되고 있는, 공개 열쇠 암호 기법은 하나의 열쇠로 암호화하고 또 다른 열쇠로 복호화하는 (두 개의 열쇠를 쓰는) 암호 기법을 쓴다. 전통적인 암호 기법은 동일한 하나의 열쇠로 암호화와 복호화를 둘 다 처리해 왔다. 이 (한 개뿐인) "비밀 열쇠"는 (암호화하는 쪽과 복호화하는 쪽의) 양편이 모두 가지고 있어야 했고, 무슨 수로든 보안을 유지하면서 한 쪽에서 다른 상대방으로 전달되었어야 했다.
이렇게 보안을 유지하면서 열쇠를 전달해 주어야만 되는 어려운 수고를 덜어 주기 위해서, 공개 열쇠 암호법은 두 개의 키를 사용한다. 각 개인의 공개 열쇠는 누구나 암호화에 쓸 수 있도록 배포되고 이에 상응하는 -- 복호화에 사용될 -- 개인의 비밀 열쇠는 개인이 보관한다.
공용 열쇠 암호 기법과 비밀 열쇠 암호 기법에는 각 장점이 있고, 차이점은 이 항목의 끝 부분에 적어 놓은 RSA FAQ를 읽어보기 바란다.
리눅스는 피지피를 잘 지원해 준다. 피지피 2.6.2와 5.0이 잘 작동된다고 알려져 있다. 피지피에 대한 기본 안내문과 사용법을 알고 싶으면 PGP FAQ를 읽기 바란다. 국제판 PGPi: http://www.pgpi.org/doc/faq/
미국 정부는 강력 암호 기법을 군용 무기로 취급하고 있고, 이에 따라서 PGP 등의 강력 암호 기법을 전자적 매체를 통해서 송출하는 것을 "수출 제한 조치"로 금하고 있으므로, 여러분 국가에 맞는 버전을 사용하도록 하라.
http://mercury.chem.pitt.edu/~tiho/LinuxFocus/English/November1997/article7.html 를 보면 리눅스에 피지피를 설치하는 자세한 설명서가 있다. 새로운 버전의 리눅스에는 패치를 구해서 붙여야 되는데, ftp://metalab.unc.edu/pub/Linux/apps/crypto에서 구할 수 있다.
또한 피지피를 오픈 소스 형태의 무료판으로 재구성하는 계획이 진행되고 있다. 지엔유피지 (GnuPG)는 무료판 피지피의 완성본이다. 이 것은 IDEA나 RSA를 사용하지 않기 때문에 (수출 제한 조치에 걸리지 않고) 제한 없이 쓸 수 있다. GunPG는 OpenPGP 규격에 거의 들어맞게 제작되어 있다. GNU 프라이버시 가드 웹 페이지에 가면 자세한 정보를 얻을 수 있다. http://www.gnupg.org,
http://www.rsa.com/rsalabs/newfaq/에 있는 RSA FAQ에서 좀 더 정보를 얻을 수 있다. 여기에서 "디피-헬램 (Diffie-Hellamn)", "공용 열쇠 암호 기법 (public-key cryptography)", "전자 인증 (Digital Certificates)" 등의 용어에 대한 정보를 얻을 수 있을 것이다.
SSL(Secure Socket Layer)
SSL은 Secure Socket Layer의 약자로서, 인터넷의 정보 보안을 위한 전자상거래의 표준 보안 프로토콜입니다. SSL을 이용하게 되면 전송되는 데이타의 유출을 막는데 효과적이며 고객의 사이트를 방문한 방문객에게 가입 신청서나 주문서를 SSL로 처리함으로써 신용카드 정보나 신상 정보의 유출에 안심하고 사용할 수 있습니다.
인증(Authentication)
접속과 서비스요청이 신뢰 할 수 있는 출처에서 왔는지를 검증하는 방법.
Blowfish
Blowfish는 DES를 대체하는데 사용될 수 있는 암호화 알고리즘이다. 이것은 32~488 비트까지 가변적인 길이의 키를 사용하는 대칭 블록을 쓰고 있으므로, 미국내 뿐 아니라 수출용으로도 이상적으로 사용될 수 있다 (미국 정부는 특별한 경우를 제외하고는 길이가 40 비트 이상 되는 키를 사용하는 암호화 소프트웨어의 수출을 금지하고 있다). Blowfish는 기존의 암호화 알고리즘의 대안으로서, 1993년 Bruce Schneier에 의해 설계되었다. Blowfish는 32 비트 명령어 프로세서를 염두에 두고 설계되었으므로, DES에 비해 현저히 빠르다. Blowfish는 특허를 얻지 않아 사용 승인이 필요 없고, 모든 용도에 자유로이 사용할 수 있다.
IP spoofing이란?
Spoofing이라는 것은 '속이다'라는 의미이고 IP spoofing은 IP를 속여서 공격하는 기법을 의미한다. 일반적으로 IP spoofing이란 케빈미트닉이 사용한 방법을 의미하며 순서제어번호추측 공격, 반(Half)접속시도 공격 등이 함께 사용되는 고난도의 수법으로 볼 수 있다.
DNS Spoofing
rlogin, rsh 등과 같이 호스트네임을 기준으로 인증 과정을 거치는 시스템 명령들이 UNIX 내에는 존재한다. 이들에게 DNS 서버에 수많은 패킷을 보내어, 잠시 IP 대 호스트네임의 resolution 과정이 불가능하게 만든 후, 해커의 호스트로부터 타겟(목표)호스트로 하여금 해커의 호스트를 믿게끔하는 DNS 정보를 보내어 rlogin, rsh 과 같은 명령을 이용하는 공격방법을 뜻한다.
Session Hijacking 이란?
Session Hijacking이란, 다른 사람이 사용하고 있는 입, 출력을 내가 사용하는 일을 말한다. Session Hijacking을 하게 되면 어떤 사람이 mimosa에서 nownuri로 텔넷 연결을 하여 자료를 보고 있을때, 그 사람의 화면을 그대로 내 화면으로 가져올 수도 있고 내가 친 것이 nownuri에 가게 해서 결과를 볼 수도 있다
== 목차 ==
1. SSH의 개요
2. SSH의 종류
3. SSH의 설치
RPM으로 설치
소스로 설치
4. SSH의 설?
5. SSH의 활용
For Windows
For Linux
1. SSH의 개요
항상 변화하는 데이터 커뮤니케이션의 세계에서, 그리고 값 싼 인터넷 연결이 가능한 현재에서, 또한 빠르게 움직이는 소프트웨어 개발에 있어서, 보안은 갈수록 중요한 문제로 떠오르고 있습니다. 컴퓨터라는 것이 개발 초기부터 보안을 염두를 두고 만든 것은 아니었기에, 보안은 근래에 와서야 기본적 필요조건으로 등장하게 되었습니다. 나쁜 예를 들자면, 인터넷상에서 한 데이터가 A 지점에서 B 지점으로 흐르는 중간의 여러 다른 지점에서, 다른 사용자들이 데이터를 가로채거나 심지어 변경해 버릴 수 있는 기회를 갖게 되는 것입니다. 심지어 여러분의 시스템에 있는 다른 사용자들이 여러분의 데이터를 --여러분이 의도하지 않은 다른 어떤 것으로-- 악의로서 변경할 수도 있을 것입니다. "크래커"라고도 불리는 침입자들에 의해서 여러분의 시스템이 무단 사용될 수도 있으며, 이들은 뛰어난 지식을 악용함으로서 여러분인척 신분을 위장하거나, 정보를 훔치거나, 또는 여러분이 여러분 시스템을 사용하고자 함을 거부할 수도 있습니다.
하지만 다행히도 네트워크 보안은 물리적 보안이나 지역 보안 망을 구축하는 것보다는 수월하다고 할 수 있습니다. 최근에는 그 도구들이 리눅스 배포판에 포함되어 배포되고 있기도 합니다. 리눅스의 인기가 더해짐에 따라 크래커들의 표적이 가중되지만 리눅스가 개방성을 가진 탓에 그러한 헛점들이 빨리 패치가 되고 임시적으로 어떻게 대처해야 하는지 또는 갱신된 소프트웨어는 어디서 구할 수 있는지 등을 담은 보안 관련 안내문이 널리 배포되고 있습니다.
SSH(Secure Shell)은 네트워크의 다른 컴퓨터에 로그인 할 수 있으며 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 프로그램입니다. 강력한 인증 방법으로 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공해 줍니다.
SSH는 rlogin이나 rsh와 같은 service들이 보안에 아주 취약한 점을 대체하기 위하여 나온 원격 login 프로그램입니다. 일반 원격 login 프로그램들은 packet을 전송할 때 평문으로 전달을 하기 때문에 password를 쉽게 가로챌 수 있었습니다. 그러나 ssh는 packet자체를 암호화를 하여 보내기 때문에 패킷이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 나타나 원격 관리에 혁명을 일으킨 프로그램입니다. 또 IP 스푸핑(IP spoofing), DNS 스푸핑(DNS spoofing) 등으로부터 SSH를 사용하면 보호가 가능합니다. 세션 하이젝킹(Session Hijacking)과 DNS 스푸핑을 방지해 주면서 원격 호스트에 로그인 하거나 호스트끼리 데이터를 복사하기 위해 사용될 수 있습니다.
SSH는 RSA공개키/개인키 방식을 이용하여 암호화하게 되는데 Secure ID, S/Key, Kerberos and TIS 역시 지원합니다. 또한 SSH 는 X11서버와 연결도 지원하므로 접속한 서버의 X프로그램 또한 실행 가능하게 해줍니다. 그리고 파일 전송 등 현재는 sftp까지 지원을 하고 있으며, SOCKS 도 지원합니다.
2. SSH의 종류
SSH에는 두 종류가 있습니다. 이것은 프로토콜의 버전으로 나누며 먼저 프로토콜1 (SSH 1) 은 프로토콜1.3과 프로토콜1.5가 있습니다. OpenSSH는 두 프로토콜을 모두 지원합니다. 두 번째로 프로토콜2 (SSH 2) 가 있습니다.
현재 ssh1은 공개로 자유롭게 사용가능하지만 ssh2는 비상업적인 경우에만 자유롭게 사용할 수 있는 라이선스 제한을 가하고 있습니다.
SSH1(Openssh)
SSH2(ssh2)
특징
1. 공개 라이센스
2. 강력한 암호화(3DES, Blowfish)
3. X11 Forwarding - 암호화된 방법으로 원격 X윈도 제어
4. Port Forwarding
5. 강력한 인증(Public key, One-Time Password and Kerberos Authentication)
6. 프로토콜 1.3, 1.5, 2.0 모두 호환
7. Kerberos and AFS Ticket Passing
8. Data Compressin
9. 기본적으로 SSH1
10, TCP Wrapper 지원
1. telnet, rlogin, rsh, rcp, ftp 등 모든 것을 암호화 방법으로 대체
2. 윈도에서 그래피컬한 인터페이스를 제공
3. 다양한 인증 방법 제공
4. 3DES, Blowfish, TWOFISH의 여러 암호화 사용
5. DSA와 Diffie-Hellman key exchange를 사용해 다양한 public key를 지원
6. 기본적으로 프로토콜버전 2를 사용
7. SSH1과 호환 가능
8. Sftp
9. MD5와 SHA1의 해시 알고리즘
10. TCP Wrapper 지원
11. X11 포워딩, TCP/IP 포트 포워딩 지원
12. PGP키 지원
13. Builtin SOCKS4 지원
3. SSH의 설치
RPM으로 설치하기
SSH RPM은 아래와 같이 4개의 file로 구성이 됩니다.
ssh2-2.4.0-1i.i386.rpm --> ssh 기본 패키지
ssh2-server-2.4.0-1i.i386.rpm --> ssh 서버 패키지
ssh2-clients-2.4.0-1i.i386.rpm --> ssh 클라이언트 패키지
ssh2-extras-2.4.0-1i.i386.rpm --> 펄로 만든 몇 가지 유용한 스크립트 파일
일단 rpm을 구해야합니다. ftp://mirror.oops.org 에 가서 설치에 필요한 rpm파일들을 다운 받습니다.
모두 다운 받았으면 위의 rpm file들을 차례대로 설치를 한다. RPM file을 설치를 할 때 rpm option으로는 될 수 있으면 ivh를 사용하기보다는 Uvh를 사용하기를 권장하고 싶습니다. ivh를 사용하다 보면 버전이 틀린 동일한 패키지가 설치가 되어 있으면 rpm 정보가 엉킬 수가 있기 때문입니다. 반면에 Uvh를 사용하면 이전 버젼의 동일 패키지가 설치가 되어 있으면 업그레이드를 하고 설치가 되어 있지 않으면 그냥 설치를 하는 역할을 하게 됩니다.
$ rpm -Uvh ssh2-2.4.0-1i.i386.rpm
처음 ssh2-2.4.0-1i.i386.rpm을 설치를 할 때는 hostkey를 생성하기 위하여 약간의 시간이 지체됩니다. 출력되는 글들을 보면 This may take a while, go and have a coffee ;) 와 같이 커피나 한잔하라는 익살스러운 문구를 볼 수가 있습니다. 이것이 끝나면 /etc/ssh2/hostkey와 /etc/ssh2/hostkey.pub 라는 두개의 hostkey가 생성이 됩니다.
$ rpm -Uvh ssh2-server-2.4.0-1i.i386.rpm
ssh2-server-2.4.0-1i.i386.rpm를 설치를 하면 설치와 동시에 sshd2가 시작됩니다.
$ rpm -Uvh ssh2-clients-2.4.0-1i.i386.rpm
$ rpm -Uvh ssh2-extras-2.4.0-1i.i386.rpm
그리고 나머지 file들을 위와 같이 계속 설치를 해 주면 설치는 끝입니다. ssh2를 사용하면서 ssh 라는 명령어와 sshd라는 명령만 주의하면 됩니다. ssh는 ssh client를 의미하며 sshd는 ssh daemon을 뜻한다는 것 정도는 알아둡시다.
소스로 설치하기
소스로 설치하기 위해서는 소스파일을 구해야된다. www.linux.co.kr 의 자료실에 가면 구할 수 있을 것입니다.
$ tar zxvf ssh-2.4.0.tar.gz
소스를 구했으면 위와 같이 tar 명령어로 압축을 풀어 줍니다.
$ cd ssh-2.4.0
$ ./configure --prefix=/usr/local/ssh2
./configure로 환경설정을 하고 (옵션에서 --prefix는 ssh2가 깔리는 경로)
$ make
$ make install
make, make install을 하면 설치는 끝나게 됩니다. mysql 설치와 맞먹을 정도로 오래 걸리니까-_-;; 좀 많이 기다려야 될 것입니다.
4. SSH의 설정
sshd(서버)의 설정입니다. 모든 설정이 그러했듯이 전부다 설명하는 것은 시간 낭비이므로 사용자에게 필요한 것만 언급하도록 하겠습니다. sshd2의 설정파일은 기본적으로 /etc/ssh2/ 밑에 있습니다.
$ vi /etc/ssh2/sshd2_config
Port 22
SSH가 사용할 기본 포트를 지정한다. 디폴트로 22번 포트를 사용하게 된다.
ListenAddress 0.0.0.0
SSH 데몬이 귀를 기울일 주소이다. 0.0.0.0은 모든 곳을 말한다.
LoginGraceTime 600
유저가 로그인을 실패하였을 때, 연결을 끊는 시간이다. 값이 0이면 무제한이고 기본 값은 600초이다.
PermitRootLogin yes
root의 로그인 허용여부를 결정하는 것이다. 기본값은 no이므로 root로 로그인을 하고 싶으면 yes로 고쳐야된다.
PrintMotd yes
/etc/motd 파일의 내용을 ssh 로그인시 프린트한다. 디폴트는 yes이다.
DenyGroups 그룹명
특정 그룹에 속한 유저들의 SSH 로그인을 거부한다.
DenyUsers 유저명
기본적으로 SSH는 모든 유저의 로그인을 허락하고 있다. 이 설정은 특정 유저의 SSH 로그인을 거부한다.
AllowGroups 그룹명
ssh로 로그인을 허용할 그룹을 지정한다. 단, 숫자로 된 group id는 인식하지 못한다.
AllowUsers 유저명
이 설정도 설정하지 않으면 기본적으로 모든 유저들의 로그인을 허락한다. 하지만 설정하면 해당 유저에 대해서만 로그인을 허용한다.
MaxConnection 10
최대 접속자수를 결정한다. 0은 무제한이다.
AllowedAuthentications publickey,password
인증 방법을 결정한다. 사용할 수 있는 것은 publickey, password, hostbased의 세 가지 방법이 있다. publickey는 ssh-keygen으로 생성한 키로 인증하는 것이고 paasword는 시스템의 패스워드로 인증하는 방법이다. hostbased 방식은 rhost와 같은 지정한 호스트별 인증이다.
RequiredAuthentications publickey,password
인증 순서를 지정한다. 먼저 쓴 것이 우선이다.
CheckMail yes
login 을 한 후에 SHELL 상에서 메일 도착 여부 체크 설정을 지정한다.
UserConfigDirectory "%D/.ssh2"
user들의 정보가 들어 있는 directory를 지정한다.
UserKnownHosts yes
혹시 login이 안된다면 이 옵션을 no로 변경해볼 필요도 있다. 보통은 X가 설치되어 있지 않은 시스템에서 login이 안되는 경우가 되부분인데 X11 package들을 설치해 주면 왠만한 것들은 되며, 아주 특이한 경우에 이 옵션을 no로 해야할 경우도 있다.
PasswordGuesses 3
인증에 실패했을 때 몇 번까지 재시도 할 수 있는지를 지정한다.
RequireReverseMapping no
접속하는 곳의 도메인이 Revers Mapping이 되는지를 확인하여 접속을 허가할지 안 할지를 지정한다. 실제로 internet 상에 호스트들 중 revers mapping이 안되는 host가 상당히 많으며 또한 여러분이 사용하는 host중에도 revers mapping 이 안되는 host가 대다수이니 no로 설정을 하는 것이 좋을 듯 싶다. 자신의 host들이 revers mapping이 되는 것이 확실하다면 보안상 yes로 하는 것이 좋을 수도 있다. 단 revers mapping이 안되면 접속이 안된다는 것을 명심하자.
Ciphers AnyCipher
암호화 방식을 지정한다. AnyCipher라고 하면 모든 암호화 방법을 사용한다는 뜻이다.
#Ssh1Compatibility
#Sshd1Path
위의 두line은 ssh1과의 호환 부분이다. SSH1과 호환되게 하려면 ssh1compatibility의 주석을 풀고, sshd1path에서 주석을 풀고 ssh1의 경로를 지정하면 된다.
ChRootUsers ftp,guest
ChRootGroups guest
sftp를 이용하여 작업을 할 경우 지정된 유저는 자신의 홈 계정 이상으로 올라가지 못한다.
chrootusers는 유저를 지정하는 것이고, chrootgroups는 그룹을 지정하는 것이다.
환경 설정이 끝났다면 sshd를 재시작 해야합니다.
$ /usr/local/ssh2/sbin/sshd2 restart
5. SSH의 활용
For Windows
윈도우에서 ssh를 사용하는 건 누워서 떡먹기라고 할 수 있을 정도로 쉽습니다.
SecureCRT라는 프로그램을 이용하는 것인데 예전에 새롬데이터맨이나 IYAGI2000 같은 범용통신 프로그램을 사용해본 사용자라면 쉽게 사용할 수 있을 것입니다.
그래도 모르겠다면 아래의 사이트를 참조하세요.
http://www.baitop.net/linux/main.php?dir=howto&fp=ssh
다른 프로그램들의 설명..;;
http://yesnic.hostway.co.kr/manual/linux/ssh_3.htm
For Linux
리눅스에서 ssh를 이용하는 것은 매우 쉽다.
$ ssh -l userid hostname
위의 예제는 hostname이라는 서버에 userid로 로그인을 시도하는 것입니다..
다음은 ssh client 의 옵션들입니다.
-v : 디버깅모드로 접속이 안되고 에러가 발생할 때 사용
-a : 대리인 인증 포워딩 사용
-c cipher : 현재 세션에서 사용할 암호 방법 명시 (blowfish, idea, 3des)
-e char : escape 문자 변경
-f : 세션 인증이 끝난 후에 백그라운드로 작업을 수행하도록 명시
-i 파일 : 신원파일을 변경
-l : 로그인 시 사용자 명시
-n : /dev/null로부터 입력을 받는다.
-p port : ssh가 접속하기 위해 사용할 포트 명시
-q : 정적 모드에서는 STDOUT로 경고메시지가 출력되지 않음
-t : 하나의 명령을 수행하더라도 tty를 연다.
-x : x11포워딩 기능 해제
사용자 개인 설정(For Linux)
SSH2의 사용자 설정은 SSH1보다 깔끔합니다. 이제 새로운 공개 키(public key)는 분리된 파일로 저장되며, 한 사람이 복수의 호스트마다의 신분 증명(host-specific identifications, i.e., private keys)을 가질 수 있습니다. 자세한 사항은 ssh 매뉴얼 페이지를 읽으시기 바랍니다. 여기서는 SSH2의 가장 기초적인 사용법을 보여줍니다.
SSH2를 사용하여 지역 컴퓨터(Local)에서 원격 호스트(Remote)로 로그인하려면:
⸡. Local에서 ssh-keygen (ssh-keygen2)를 실행하여 Local의 개인(private) & 공개키(public key)를 만듭니다.
Local> ssh-keygen
Generating 1024-bit dsa key pair
9 o.oOo..oOo.o
Key generated.
1024-bit dsa, created by iyagi15@Local Wed Sep 23 07:11:02 2002
Passphrase :
Again :
Private key saved to /home/iyagi15/.ssh2/id_dsa_1024_a
Public key saved to /home/iyagi15/.ssh2/id_dsa_1024_a.pub
ssh-keygen가 새로운 키(key)를 생성하기 위해 패스어구(passphrase)를 물어올 겁니다. 적당한 길이(20자 정도)의 일반적인 문자(빈칸도 됩니다)로 이루어진 문자열을 입력합니다. ssh-keygen은 사용자의 홈 디렉토리에 ".ssh2" 디렉토리를 만들고, 그 안에 새로운 인증키(authentication key)를 담는 두 개의 파일을 만듭니다. 하나는 개인 키(private key)로서 사용자 자신을 제외하고는 누구도 열 수 *없도록* 해야 합니다. 위의 예에서는 id_dsa_1024_a가 개인 키(private key)입니다. 다른 하나(id_dsa_1024_a.pub)는 안전하게 다른 컴퓨터에 전달되는 공개키(public key)입니다.
⸢. Local에 있는 ".ssh2" 디렉토리에 "identification" 파일을 만듭니다.
Local> cd ~/.ssh2
Local> echo "IdKey id_dsa_1024_a" > identification
이 과정은 ".ssh2" 디렉토리에 "identification" 파일을 만드는데, 거기에는 어떤 파일이 당신의 신분증명(identification)을 담고 있는지를 나타내는 한 줄이 들어갑니다. 신분증명(identification)은 패스어구(passphrase)와 일치합니다(위의 설명을 참고하시기 바랍니다). 반복해서 ssh-keygen을 실행하면 복수의 신분증명(identifications)을 만들 수 있지만, 일부러 그렇게 할 필요는 거의 없습니다.
⸣. Remote에서도 똑같은 작업(단계 ⸡, 그리고 선택적으로 단계 ⸢)을 합니다. 이것은 단지 Remote에서 ".ssh2" 디렉토리를 셋업하기 위해 필요합니다. 패스어구(passphrase)는 달라져도 됩니다.
⸤. Local의 공개 키(id_dsa_1024_a.pub)를 "Local.pub" 등의 이름으로 Remote의 ".ssh2" 디렉토리로 복사합니다. 이제 Remote의 ".ssh2" 디렉토리에는 다음과 파일이 존재할 겁니다.
Remote>ls -F ~/.ssh2
Local.pub
authorization
hostkeys/
id_dsa_1024_a
id_dsa_1024_a.pub
identification
random_seed
⸥. Remote의 ".ssh2" 디렉토리에 "authorization" 파일을 만들어서 다음 한 줄을 추가합니다.
Remote>cat authorization
Key Local.pub
위의 문장은 로그인을 인증할 때 SSH 서버에게 Local.pub를 참조하라고 지정하는 것입니다. 다른 호스트로부터 Remote로 로그인하기를 원한다면, 그 호스트에 인증키(authorization key)를 만들고(단계 ⸡과 ⸢), Remote에서 단계 ⸤와 ⸥를 반복합니다.
⸦. 이제 SSH2를 이용해서 Local로부터 Remote로 로그인할 수 있습니다! 테스트해 봅니다:
Local>ssh Remote
Passphrase for key "/home/iyagi15/.ssh2/id_dsa1024_a" with comment "
1024-bit dsa, creat ed by iyagi15@Local Mon Sep 21 17:53:01 2002":
Local의 패스어구(passphrase)를 입력합니다.
Good luck!
참고 자료
데몬(daemon)
명시적으로 쓰이지는 않지만 보통 시스템을 시동할 때 적재되며, 어떤 통신이 발생하기를 기다리며 배경(background)에서 동작할 준비를 하고 있는 프로그램. 클라이언트의 접속을 기다리는 서버용 프로그램.
Packet
데이터 전송에서 사용되는 데이터의 묶음. 패킷 전송은 두 지점 사이에 데이터를 연속적으로 전송하지 않고, 전송할 데이터를 적당한 크기로 나누어 패킷의 형태로 구성한 다음 패킷들을 하나씩 보내는 방법을 쓴다. 각각의 패킷은 일정한 크기의 데이터뿐만 아니라 데이터 수신처, 주소 또는 제어 부호 등의 제어 정보까지 담고 있다. 보통 한 패킷은 1,024비트 데이터를 담을 수 있다.
Packet 스니퍼
침입자가 네트워크의 더 많은 시스템으로 침투하기 위해서 가장 흔하게 쓰는 방법 중의 하나가 이미 깨어진 호스트에서 Packet 스니퍼를 실행하는 것입니다. 이 "스니퍼"는 인터넷 포트를 감청하면서 지나가는 Packet 흐름에서 Password, Login, su 같은 것이 들리면 그 이후의 내용을 녹음해 둡니다. 이 방법을 쓰면, 공격자는 침투하려고 시도조차 않았던 시스템으로까지 들어가는 패스워드를 얻게 된다. (암호화가 안된 채로) 평문으로 전송되는 패스워드는 이 공격에 매우 약한 것이다.
요즘에는 공격자가 Packet 스니퍼를 쓰기 위해 시스템의 보안을 깨고 침입할 필요조차 없어져 버렸다. 공격자는 랩탑이나 PC를 건물 안으로 들고 들어와서 네트워크를 감청하면 그만인 것이다.
ssh나 다른 암호화된 패스워드 방식을 사용하면 이 공격을 방해할 수 있다. POP 계정용의 ATOP 등이 이 공격을 방지한다.
서비스 거부공격(DoS. Denial of Service attach)
공격자가 특정 유형의 서비스(traffic)을 시스템에 과도하게 요청하는 시스템 공격으로, 시스템의 서비스를 효과적으로 불능으로 만들 수 있다. 보통 쉽게 공격할 수 있는 반면에 이 공격을 막아내기는 수월하지가 않다.
커브로스 (Kerberos)
커브로스는 MIT의 아테나 프로젝트 아래에서 개발된 인증 방식이다. 사용자가 접속해 들어오면, 커브로스는 (패스워드를 사용해서) 사용자를 인증하고, 네트워크 상에 흩어져 존재하는 서버와 호스트들에게 이 사용자의 신분을 증명해 주는 방법을 제공한다.
이 인증법은 리모트 로그인 (rhost) 풀그림 등에 의해서 패스워드 없이 사용자가 다른 호스트로 (.rhost 파일을 대신해서) 접속을 할 수 있도록 해 준다. 이 인증법은 또한, 보내는 사람 (발송인)이 가짜가 아닌 것을 보증하는 동시에, 메일이 정확한 사람 (수취인)에게 전달이 되도록 보증하기 위해서, 메일 시스템에 의해 사용될 수도 있다.
커브로스와 딸려 있는 많은 풀그림을 사용하는 궁극적인 효과는 사용자가 시스템을 속여서 다른 사람인 척 "스푸핑"을 할 수 있는 능력을 거의 없애 버리는 데 있다.
커브로스에 대한 추가 정보는 http://www.cis.ohio-state.edu/hypertext/faq/usenet/kerberos-faq/general/faq.html 에서 찾을 수 있고, 코드는 http://nii.isi.edu/info/kerberos/에 있다.
커브로스를 호스트의 보안의 정도를 높이기 위한 첫 방법으로 쓰지는 말아야 한다. 이 것은 매우 구성하기 힘들고, SSH처럼 광범위하게 사용되지는 않고 있다.
PGP
PGP (Pretty Good Privacy) 등에 사용되고 있는, 공개 열쇠 암호 기법은 하나의 열쇠로 암호화하고 또 다른 열쇠로 복호화하는 (두 개의 열쇠를 쓰는) 암호 기법을 쓴다. 전통적인 암호 기법은 동일한 하나의 열쇠로 암호화와 복호화를 둘 다 처리해 왔다. 이 (한 개뿐인) "비밀 열쇠"는 (암호화하는 쪽과 복호화하는 쪽의) 양편이 모두 가지고 있어야 했고, 무슨 수로든 보안을 유지하면서 한 쪽에서 다른 상대방으로 전달되었어야 했다.
이렇게 보안을 유지하면서 열쇠를 전달해 주어야만 되는 어려운 수고를 덜어 주기 위해서, 공개 열쇠 암호법은 두 개의 키를 사용한다. 각 개인의 공개 열쇠는 누구나 암호화에 쓸 수 있도록 배포되고 이에 상응하는 -- 복호화에 사용될 -- 개인의 비밀 열쇠는 개인이 보관한다.
공용 열쇠 암호 기법과 비밀 열쇠 암호 기법에는 각 장점이 있고, 차이점은 이 항목의 끝 부분에 적어 놓은 RSA FAQ를 읽어보기 바란다.
리눅스는 피지피를 잘 지원해 준다. 피지피 2.6.2와 5.0이 잘 작동된다고 알려져 있다. 피지피에 대한 기본 안내문과 사용법을 알고 싶으면 PGP FAQ를 읽기 바란다. 국제판 PGPi: http://www.pgpi.org/doc/faq/
미국 정부는 강력 암호 기법을 군용 무기로 취급하고 있고, 이에 따라서 PGP 등의 강력 암호 기법을 전자적 매체를 통해서 송출하는 것을 "수출 제한 조치"로 금하고 있으므로, 여러분 국가에 맞는 버전을 사용하도록 하라.
http://mercury.chem.pitt.edu/~tiho/LinuxFocus/English/November1997/article7.html 를 보면 리눅스에 피지피를 설치하는 자세한 설명서가 있다. 새로운 버전의 리눅스에는 패치를 구해서 붙여야 되는데, ftp://metalab.unc.edu/pub/Linux/apps/crypto에서 구할 수 있다.
또한 피지피를 오픈 소스 형태의 무료판으로 재구성하는 계획이 진행되고 있다. 지엔유피지 (GnuPG)는 무료판 피지피의 완성본이다. 이 것은 IDEA나 RSA를 사용하지 않기 때문에 (수출 제한 조치에 걸리지 않고) 제한 없이 쓸 수 있다. GunPG는 OpenPGP 규격에 거의 들어맞게 제작되어 있다. GNU 프라이버시 가드 웹 페이지에 가면 자세한 정보를 얻을 수 있다. http://www.gnupg.org,
http://www.rsa.com/rsalabs/newfaq/에 있는 RSA FAQ에서 좀 더 정보를 얻을 수 있다. 여기에서 "디피-헬램 (Diffie-Hellamn)", "공용 열쇠 암호 기법 (public-key cryptography)", "전자 인증 (Digital Certificates)" 등의 용어에 대한 정보를 얻을 수 있을 것이다.
SSL(Secure Socket Layer)
SSL은 Secure Socket Layer의 약자로서, 인터넷의 정보 보안을 위한 전자상거래의 표준 보안 프로토콜입니다. SSL을 이용하게 되면 전송되는 데이타의 유출을 막는데 효과적이며 고객의 사이트를 방문한 방문객에게 가입 신청서나 주문서를 SSL로 처리함으로써 신용카드 정보나 신상 정보의 유출에 안심하고 사용할 수 있습니다.
인증(Authentication)
접속과 서비스요청이 신뢰 할 수 있는 출처에서 왔는지를 검증하는 방법.
Blowfish
Blowfish는 DES를 대체하는데 사용될 수 있는 암호화 알고리즘이다. 이것은 32~488 비트까지 가변적인 길이의 키를 사용하는 대칭 블록을 쓰고 있으므로, 미국내 뿐 아니라 수출용으로도 이상적으로 사용될 수 있다 (미국 정부는 특별한 경우를 제외하고는 길이가 40 비트 이상 되는 키를 사용하는 암호화 소프트웨어의 수출을 금지하고 있다). Blowfish는 기존의 암호화 알고리즘의 대안으로서, 1993년 Bruce Schneier에 의해 설계되었다. Blowfish는 32 비트 명령어 프로세서를 염두에 두고 설계되었으므로, DES에 비해 현저히 빠르다. Blowfish는 특허를 얻지 않아 사용 승인이 필요 없고, 모든 용도에 자유로이 사용할 수 있다.
IP spoofing이란?
Spoofing이라는 것은 '속이다'라는 의미이고 IP spoofing은 IP를 속여서 공격하는 기법을 의미한다. 일반적으로 IP spoofing이란 케빈미트닉이 사용한 방법을 의미하며 순서제어번호추측 공격, 반(Half)접속시도 공격 등이 함께 사용되는 고난도의 수법으로 볼 수 있다.
DNS Spoofing
rlogin, rsh 등과 같이 호스트네임을 기준으로 인증 과정을 거치는 시스템 명령들이 UNIX 내에는 존재한다. 이들에게 DNS 서버에 수많은 패킷을 보내어, 잠시 IP 대 호스트네임의 resolution 과정이 불가능하게 만든 후, 해커의 호스트로부터 타겟(목표)호스트로 하여금 해커의 호스트를 믿게끔하는 DNS 정보를 보내어 rlogin, rsh 과 같은 명령을 이용하는 공격방법을 뜻한다.
Session Hijacking 이란?
Session Hijacking이란, 다른 사람이 사용하고 있는 입, 출력을 내가 사용하는 일을 말한다. Session Hijacking을 하게 되면 어떤 사람이 mimosa에서 nownuri로 텔넷 연결을 하여 자료를 보고 있을때, 그 사람의 화면을 그대로 내 화면으로 가져올 수도 있고 내가 친 것이 nownuri에 가게 해서 결과를 볼 수도 있다
'StoreHouse > Server' 카테고리의 다른 글
RedHat crontab 사용하기 (0) | 2004.12.10 |
---|---|
RedHat 삼바 설치방법 (0) | 2004.12.10 |
RedHat iptable 세팅예제 (0) | 2004.12.10 |
RedHat 삼바세팅 스왓이용 관련 FAQ (0) | 2004.12.10 |
RSS 서버만들기 asp.net (1) | 2004.12.01 |