11장. Kerberos 사용
네트워크 내에서 시스템 보안과 무결성을 유지하는 것은 매우 중요하며, 네트워크 인프라 내의 모든 사용자, 애플리케이션, 서비스 및 서버를 포함합니다. 네트워크에서 실행 중인 모든 사항과 이러한 서비스가 사용되는 방식을 이해해야 합니다. 이러한 보안 유지 관리의 핵심은 이러한 애플리케이션 및 서비스에 대한 액세스를 유지하고 이러한 액세스를 적용하는 것입니다.
Kerberos는 일반적인 암호 기반 인증보다 훨씬 더 안전한 인증 프로토콜입니다. Kerberos를 사용하면 다른 시스템에서 서비스에 액세스하는 경우에도 암호를 네트워크를 통해 전송하지 않습니다.
Kerberos는 사용자와 시스템 모두 네트워크를 식별하고 관리자가 구성한 영역 및 서비스에 대해 정의되고 제한된 액세스를 받을 수 있는 메커니즘을 제공합니다. Kerberos는 ID를 확인하여 엔터티를 인증하고 Kerberos는 이러한 인증 데이터를 보호하여 외부 사용자가 액세스하거나 사용하거나 조작할 수 없도록 합니다.
11.1. Kerberos 정보
Kerberos, 대칭-키 암호화 사용[3] 사용자를 네트워크 서비스에 인증하기 위해 암호는 실제로 네트워크를 통해 전송되지 않습니다.
결과적으로 사용자가 Kerberos를 사용하여 네트워크 서비스를 인증하면 네트워크 트래픽을 모니터링하여 암호 수집을 시도하지 않는 무단 사용자가 효과적으로 무시됩니다.
11.1.1. Kerberos 작동 방식의 기본 사항
대부분의 일반적인 네트워크 서비스는 사용자가 지정된 네트워크 서버에 액세스할 수 있는 암호를 제공하는 암호 기반 인증 체계를 사용합니다. 그러나 많은 서비스에 대한 인증 정보 전송은 암호화되지 않습니다. 이러한 체계를 안전하게 보호하려면 외부 사용자가 네트워크에 액세스할 수 없어야 하며 네트워크의 모든 컴퓨터와 사용자는 신뢰할 수 있어야 합니다.
단순한 암호 기반 인증을 통해 인터넷에 연결된 네트워크는 안전한 것으로 간주할 수 없습니다. 네트워크에 액세스하도록 하는 공격자는 단순한 패킷 분석기 또는 패킷 스니퍼 를 사용하여 사용자 이름과 암호를 가로채고 사용자 계정을 손상시켜 전체 보안 인프라의 무결성을 훼손할 수 있습니다.
Kerberos는 네트워크에서 암호화되지 않은 암호 전송을 제거하고 공격자가 네트워크를 스니핑하는 위협을 제거합니다.
Kerberos는 각 사용자를 각 네트워크 서비스에 대한 간단한 암호 인증과 다르게 인증하는 대신, 사용자를 네트워크 서비스 제품군에 인증하기 위해 대칭 암호화와 신뢰할 수 있는 타사( 핵심 배포 센터 또는 KDC)를 사용합니다. KDC와 보조 KDC가 관리하는 컴퓨터는 영역을 구성합니다.
사용자가 KDC에 인증하면 KDC는 해당 세션에 해당하는 일련의 자격 증명( 티켓)을 사용자 시스템으로 다시 보내고 Kerberos 인식 서비스는 사용자가 암호를 사용하여 인증할 필요 없이 사용자 시스템에서 티켓을 찾습니다.
그림 11.1. “Kerberos 인증” 에 표시된 대로 각 사용자는 보안 주체 라는 고유한 ID를 사용하여 KDC로 식별됩니다. Kerberos 인식 네트워크 사용자가 워크스테이션에 로그인하면 해당 주체가 인증 서버에서 티켓 제공 티켓 (또는 TGT) 요청의 일부로 KDC로 전송됩니다. 로그인 프로그램에서 이 요청을 전송하여 사용자에게 투명하거나 사용자가 로그인한 후 kinit 프로그램을 통해 수동으로 보낼 수 있습니다.
그런 다음 KDC는 해당 데이터베이스의 주체를 확인합니다. 주체가 발견되면 KDC는 TGT를 생성하고 사용자 키를 사용하여 암호화하며 TGT를 해당 사용자에게 전송합니다.
그림 11.1. Kerberos 인증
클라이언트의 login 또는 kinit 프로그램은 사용자의 암호에서 계산하는 사용자의 키를 사용하여 TGT의 암호를 해독합니다. 사용자의 키는 클라이언트 시스템에서만 사용되며 네트워크를 통해 전송되지 않습니다. KDC에서 전송한 티켓(또는 자격 증명)은 Kerberos 인식 서비스에서 확인할 수 있는 인증 정보 캐시(ccache) 인 로컬 저장소에 저장됩니다. Red Hat Enterprise Linux 7은 다음과 같은 유형의 인증 정보 캐시를 지원합니다.
- 영구 KEYRING ccache 유형, Red Hat Enterprise Linux 7의 기본 캐시
- Red Hat Enterprise Linux 7.4 이후의 대안 옵션인 KCM(System Security Services Daemon) KCM
- 파일
- DIR
- 메모리
SSSD KCM을 사용하면 Kerberos 캐시가 패시브 저장소에 저장되지 않고 데몬에서 관리합니다. 이 설정에서
kinit
와 같은 애플리케이션에서 일반적으로 사용하는 Kerberos 라이브러리는 KCM 클라이언트이며 데몬을 KCM 서버라고 합니다.
SSSD KCM 데몬에서 Kerberos 인증 정보 캐시를 관리하면 다음과 같은 몇 가지 이점이 있습니다.
- 데몬은 상태를 저장하므로 Kerberos 자격 증명 캐시 갱신 또는 이전 ccache 가져오기와 같은 작업을 수행할 수 있습니다. 갱신 및 추적은 SSSD 자체에서 얻은 티켓뿐만 아니라
pam_sss.so
를 통해 로그인을 통해 얻을 수 있을 뿐만 아니라 kinit 와 같이 얻은 티켓에도 사용할 수 있습니다. - 프로세스가 사용자 공간에서 실행되므로 커널 KEYRING과 달리 UID 이름 붙여넣기가 적용됩니다.
- 호출자의 UID와 컨테이너화된 환경에서는 모든 컨테이너에서 공유되는 커널 KEYRING 기반 캐시와 달리 KCM 서버의 진입점은 선택한 컨테이너에만 바인딩 마운트할 수 있는 UNIX 소켓입니다.
인증 후 서버는 kinit 를 확인하는 대신 암호화되지 않은 보안 주체 및 키 목록을 확인할 수 있습니다. 이 목록은 키탭 에 유지됩니다.
TGT는 특정 기간(일반적으로 10 ~ 24시간) 후에 만료되도록 설정되며 클라이언트 시스템의 인증 정보 캐시에 저장됩니다. 손상된 TGT가 짧은 기간 동안 공격자가 사용할 수 있도록 만료 시간이 설정됩니다. TGT가 발행되면 사용자는 TGT가 만료되거나 로그아웃한 후 다시 로그인할 때까지 암호를 다시 입력할 필요가 없습니다.
사용자가 네트워크 서비스에 액세스해야 할 때마다 클라이언트 소프트웨어는 TGT를 사용하여 티켓 제공 서버(TGS)에서 해당 특정 서비스에 대한 새 티켓을 요청합니다. 그런 다음 서비스 티켓은 사용자를 해당 서비스에 투명하게 인증하는 데 사용됩니다.
11.1.2. Kerberos 주체 이름 정보
주체는 사용자 또는 서비스뿐만 아니라 엔터티가 속하는 영역도 식별합니다. 주요 이름에는 식별자와 영역이라는 두 부분이 있습니다.
identifier@REALM
사용자의 경우 식별자는 Kerberos 사용자 이름일 뿐입니다. 서비스의 경우 식별자는 서비스 이름과 서비스가 실행되는 시스템의 호스트 이름의 조합입니다.
service/FQDN@REALM
서비스 이름은 호스트,ldap,http 및 DNS 와 같은 서비스 유형에 고유한 대소문자를 구분하는 문자열입니다. 모든 서비스에 고유 고유 식별자가 있는 것은 아닙니다. 예를 들어
sshd
데몬은 호스트 서비스 주체를 사용합니다.
호스트 주체는 일반적으로
/etc/krb5.keytab
에 저장됩니다.
Kerberos에서 티켓을 요청하면 항상 도메인 이름 별칭(DNS CNAME 레코드)을 해당 DNS 주소(A 또는 AAAA 레코드)로 확인합니다. 그러면 서비스 또는 호스트 주체가 생성될 때 주소 레코드의 호스트 이름이 사용됩니다.
예를 들어 다음과 같습니다.
www.example.com CNAME web-01.example.com web-01.example.com A 192.0.2.145
서비스는 CNAME 별칭을 사용하여 호스트에 연결을 시도합니다.
$ ssh www.example.com
Kerberos 서버는 확인된 호스트 이름 web-01.example.com@EXAMPLE.COM 에 대한 티켓을 요청하므로 호스트 주체는 host/web-01.example.com@EXAMPLE.COM 여야 합니다.
11.1.3. Domain-to-Realm Mapping 정보
클라이언트가 특정 서버에서 실행 중인 서비스에 액세스하려고 하면 서비스 이름(호스트)과 서버 이름(foo.example.com)을 알고 있지만 두 개 이상의 영역이 네트워크에 배포할 수 있기 때문에 서비스가 상주하는 Kerberos 영역의 이름을 추측해야 합니다.
기본적으로 영역의 이름은 모든 대문자로 서버의 DNS 도메인 이름이 되도록 합니다.
foo.example.orgEXAMPLE.ORG foo.example.com EXAMPLE.COM foo.hq.example.com HQ.EXAMPLE.COM
일부 구성에서는 이것으로 충분하지만, 다른 구성에서는 파생된 영역 이름이 존재하지 않는 영역의 이름이 됩니다. 이 경우 서버의 DNS 도메인 이름에서 영역 이름으로의 매핑은 클라이언트 시스템의
/etc/krb5.conf
파일의 domain_realm 섹션에 지정해야 합니다. 예를 들어 다음과 같습니다.
[domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
구성은 두 개의 매핑을 지정합니다. 첫 번째 매핑은 example.com DNS 도메인의 모든 시스템이 EXAMPLE.COM 영역에 속하도록 지정합니다. 두 번째는 이름이 example.com인 시스템도 영역에 있음을 지정합니다. 도메인과 특정 호스트 간의 차이점은 초기 기간 문자의 존재 여부 또는 부족으로 표시됩니다. 매핑은 "_kerberos TXT" 레코드를 사용하여 DNS에 직접 저장할 수도 있습니다. 예를 들면 다음과 같습니다.
$ORIGIN example.com _kerberos TXT "EXAMPLE.COM"
11.1.4. 환경 요구 사항
Kerberos는 시스템 이름을 확인할 수 있습니다. 따라서 작동 중인 DNS(Domain Name Service)가 필요합니다. 네트워크의 DNS 항목과 호스트 모두
/usr/share/doc/krb5-server-
version-number 의 Kerberos 문서에서 다루는 올바르게 구성해야 합니다.
Kerberos 인증을 허용하는 애플리케이션에서는 시간 동기화가 필요합니다. ntpd 와 같은 서비스를 사용하여 네트워크의 시스템 간에 대략적인 클럭 동기화를 설정할 수 있습니다.
ntpd
서비스에 대한 자세한 내용은 /usr/share/doc/ntp-
version-number/html/index.html
또는 ntpd(8) 도움말 페이지를 참조하십시오.
참고
Red Hat Enterprise Linux 7을 실행하는 Kerberos 클라이언트는 KDC를 통한 자동 시간 조정을 지원하며 엄격한 타이밍 요구 사항이 없습니다. 이를 통해 Red Hat Enterprise Linux 7을 통해 IdM 클라이언트를 배포할 때 차이가 보다 클 수 있습니다.
11.1.5. Kerberos 배포를 위한 고려 사항
Kerberos는 일반 및 심각한 보안 위협을 제거하지만 다음과 같은 다양한 이유로 구현하기가 어렵습니다.
- Kerberos는 각 사용자가 신뢰할 수 있지만 신뢰할 수 없는 네트워크에서 신뢰할 수 없는 호스트를 사용하고 있다고 가정합니다. 기본 목표는 암호화되지 않은 암호가 해당 네트워크에서 전송되지 않도록 하는 것입니다. 그러나 적절한 사용자 이외의 사용자가 인증에 사용되는 티켓을 발행하는 하나의 호스트에 액세스할 수 있는 경우, KDC - 전체 Kerberos 인증 시스템이 위험합니다.
- 애플리케이션이 Kerberos 라이브러리를 사용하려면 해당 소스를 수정하여 Kerberos 라이브러리를 적절하게 호출해야 합니다. 이러한 방식으로 수정된 애플리케이션은 Kerberos 인식으로 간주됩니다. 일부 애플리케이션의 경우 애플리케이션 크기 또는 설계로 인해 문제가 될 수 있습니다. 호환되지 않는 다른 애플리케이션의 경우 서버와 클라이언트에서 통신하는 방식을 변경해야 합니다. 이 작업에도 광범위한 프로그래밍이 필요할 수 있습니다. 기본적으로 Kerberos 지원이 없는 클로즈드 소스 애플리케이션이 가장 문제가 되는 경우가 많습니다.
- Kerberos로 네트워크를 보호하려면 암호화되지 않은 암호를 전송하는 모든 클라이언트 및 서버 애플리케이션의 Kerberos 인식 버전을 사용하거나 해당 클라이언트 및 서버 애플리케이션을 사용하지 않아야 합니다.
/etc/passwd
또는/etc/shadow
와 같은 표준 UNIX 암호 데이터베이스에서 사용자 암호를 Kerberos 암호 데이터베이스로 마이그레이션하는 것은 번거로울 수 있습니다. 이 작업을 수행하는 자동화된 메커니즘은 없습니다. 마이그레이션 방법은 Kerberos를 배포하는 특정 방식에 따라 크게 달라질 수 있습니다. 따라서 ID 관리 기능을 사용하는 것이 좋습니다. 이 기능에는 특수화된 툴과 마이그레이션 방법이 있습니다.
주의
네트워크상의 사용자가 일반 텍스트로 암호를 전송하여 비Kerberos 인식 서비스에 대해 인증하면 Kerberos 시스템이 손상될 수 있습니다. 비Kerberos 인식 서비스(telnet 및 FTP 포함)는 권장되지 않습니다. SSH 또는 SSL 보안 서비스와 같은 기타 암호화된 프로토콜은 암호화되지 않은 서비스에 선호되지만, 여전히 이상적이지 않습니다.
11.1.6. Kerberos 추가 리소스
Kerberos는 배포 방법에 있어 많은 유연성을 통해 구현하는 복잡한 서비스일 수 있습니다. 표 11.1. “외부 Kerberos 문서” 및 표 11.2. “중요한 Kerberos man 페이지” 는 Kerberos 사용에 대한 자세한 정보를 위해 가장 중요한 소스 또는 가장 유용한 소스 중 몇 가지 목록입니다.
문서 | 위치 |
---|---|
Kerberos V5 설치 가이드 (PostScript와 HTML 모두) | /usr/share/doc/krb5-server-version-number |
Kerberos V5 시스템 관리자 가이드 (PostScript와 HTML 모두) | /usr/share/doc/krb5-server-version-number |
Kerberos V5 UNIX 사용자 가이드 (PostScript와 HTML 모두) | /usr/share/doc/krb5-workstation-version-number |
"Kerberos: MIT의 Network Authentication Protocol" 웹 페이지 | http://web.mit.edu/kerberos/www/ |
인증 시스템 설계: 2004년에 Bill Bryant가 제작한 Scenes의 대화 상자. 2005년 Theodore Ts'o에 의해 수정됨. 이 문서는 Kerberos 스타일 인증 시스템을 만들 때 고려해야 하는 두 개발자 간의 대화입니다. 토론의 대화 스타일은 Kerberos에 익숙하지 않은 사람들에게 좋은 출발점입니다. | http://web.mit.edu/kerberos/www/dialogue.html |
Kerberos 인식 네트워크를 만들기 위한 기사. | http://www.ornl.gov/~jar/HowToKerb.html |
man command_name 을 실행하여 man page 파일을 열 수 있습니다.
manpage | Description |
---|---|
클라이언트 애플리케이션 | |
kerberos | 자격 증명이 작동하는 방법을 설명하고 Kerberos 티켓을 가져오고 삭제하기 위한 권장 사항을 제공하는 Kerberos 시스템을 소개합니다. 도움말 페이지의 맨 아래에는 여러 관련 도움말 페이지를 참조합니다. |
kinit | 이 명령을 사용하여 티켓을 받고 캐시하는 방법을 설명합니다. |
kdestroy | 이 명령을 사용하여 Kerberos 자격 증명을 삭제하는 방법을 설명합니다. |
klist | 이 명령을 사용하여 캐시된 Kerberos 자격 증명을 나열하는 방법을 설명합니다. |
관리 애플리케이션 | |
kadmin | 이 명령을 사용하여 Kerberos V5 데이터베이스를 관리하는 방법을 설명합니다. |
kdb5_util | 이 명령을 사용하여 Kerberos V5 데이터베이스에서 낮은 수준의 관리 기능을 생성하고 수행하는 방법을 설명합니다. |
서버 애플리케이션 | |
krb5kdc | Kerberos V5 KDC에 사용 가능한 명령줄 옵션을 설명합니다. |
kadmind | Kerberos V5 관리 서버에 사용 가능한 명령줄 옵션을 설명합니다. |
설정 파일 | |
krb5.conf | 는 Kerberos V5 라이브러리의 구성 파일 내에서 사용할 수 있는 형식 및 옵션을 설명합니다. |
kdc.conf | 는 Kerberos V5 AS 및 KDC의 구성 파일 내에서 사용 가능한 형식 및 옵션을 설명합니다. |