Oracle® Solaris 11.2의 네트워크 파일 시스템 관리

인쇄 보기 종료

업데이트 날짜: 2014년 7월
 
 

보안 NFS 시스템

NFS 환경을 사용하면 서로 다른 여러 컴퓨터 구조와 운영 체제의 네트워크에서 파일 시스템을 효율적이고도 편리하게 공유할 수 있습니다. 그러나 NFS 작업을 통해 파일 시스템을 공유하는 동일 기능은 편리하기는 하지만 몇 가지 보안 문제를 야기합니다. 기존에는 대부분의 NFS 구현에서 UNIX 또는 AUTH_SYS 인증이 사용되었지만, AUTH_DH와 같은 보다 강력한 인증 방법도 사용할 수 있었습니다. UNIX 인증을 사용하는 경우 NFS 서버는 사용자가 아닌 파일 요청을 하는 컴퓨터를 인증하여 해당 요청을 인증합니다. 따라서 클라이언트 사용자는 su를 실행하여 수퍼 유저로 로그인하고 파일 소유자를 가장할 수 있습니다. DH 인증을 사용하는 경우에는 NFS 서버에서 사용자를 인증하므로 이러한 종류의 가장이 훨씬 어려워집니다.

루트 액세스 권한과 네트워크 프로그래밍에 대한 지식이 있는 모든 사람이 임의의 데이터를 네트워크로 가져와서 네트워크에서 데이터를 추출할 수 있습니다. 데이터를 가져오는 공격이 가장 위험한 공격입니다. 올바른 패킷을 생성하거나 "대화"를 기록했다가 나중에 재생하여 사용자를 가장하는 경우를 예로 들 수 있습니다. 이러한 공격은 데이터 무결성에 영향을 줍니다. 수동적 도청(사용자를 가장하지는 않고 네트워크 트래픽만 수신함)을 포함하는 공격의 경우에는 데이터 무결성이 손상되지 않으므로 그만큼 위험하지 않습니다. 사용자는 네트워크를 통해 보내는 데이터를 암호화하여 중요한 정보의 프라이버시를 보호할 수 있습니다.

네트워크 보안 문제에 대한 일반적인 해결 방식은 각 응용 프로그램에서 문제를 해결하도록 하는 것입니다. 이보다 효율적인 방식은 모든 응용 프로그램이 포함되는 레벨에서 표준 인증 시스템을 구현하는 것입니다.

Oracle Solaris 운영 체제의 RPC 레벨에는 인증 시스템이 포함되어 있으며, 이 시스템은 NFS 작업의 기반이 되는 방식입니다. 보안 RPC라고도 하는 이 시스템은 네트워크 환경의 보안을 크게 개선하며 NFS 시스템과 같은 서비스에 추가적인 보안 기능을 제공합니다. 보안 RPC에서 제공하는 기능을 사용하는 NFS 시스템을 보안 NFS 시스템이라고 합니다.

보안 RPC

보안 RPC는 보안 NFS 시스템의 기반이 되는 요소입니다. 보안 RPC는 최소한 시간 공유 시스템 레벨의 보안이 유지되는 시스템을 작성하는 데 사용됩니다. 시간 공유 시스템에서는 모든 사용자가 컴퓨터 한 대를 공유하고 사용자는 로그인 암호를 통해 인증됩니다. 데이터 암호화 표준(DES) 인증에서는 동일한 인증 프로세스가 완료됩니다. 사용자는 로컬 터미널에 로그인하는 것처럼 원격 컴퓨터에 로그인할 수 있습니다. 사용자의 로그인 암호는 네트워크 보안을 적용하는 수단입니다. 시간 공유 환경에서 시스템 관리자에게는 암호를 변경하여 사용자를 가장하지 않아야 한다는 윤리적 책임이 있습니다. 보안 RPC에서 네트워크 관리자는 공개 키가 저장되는 데이터베이스의 항목을 변경하지 않는 것으로 신뢰됩니다.

RPC 인증 시스템에는 자격 증명과 검증기가 사용됩니다. ID 배치를 예로 사용하는 경우 자격 증명은 이름, 주소, 생일 등 사용자를 식별하는 수단입니다. 검증기는 배지에 첨부된 사진입니다. 배지의 사진을 배지 소유자와 비교 확인하여 배지가 도용되는 것이 아닌지를 확인할 수 있습니다. RPC에서 클라이언트 프로세스는 자격 증명과 검증기를 모두 각 RCP 요청과 함께 서버로 보냅니다. 클라이언트가 서버의 자격 증명을 이미 알고 있으므로 서버는 검증기만 다시 보냅니다.

RPC의 인증은 개방형이므로 UNIX, DH, KERB 등의 다양한 인증 시스템을 연결할 수 있습니다.

네트워크 서비스에서 UNIX 인증을 사용하는 경우 자격 증명에는 클라이언트의 호스트 이름, UID, GID 및 그룹 액세스 목록이 포함됩니다. 그러나 검증기가 없으므로 수퍼 유저는 su와 같은 명령을 사용하여 적절한 자격 증명을 위조할 수 있습니다. 또 다른 문제는 네트워크의 모든 컴퓨터가 UNIX 컴퓨터라고 가정하는 것입니다. 이기종 네트워크의 다른 운영 체제에 적용하는 경우 UNIX 인증은 손상됩니다.

UNIX 인증의 문제를 해결하기 위해 보안 RPC는 DH 인증을 사용합니다.


주 -  Kerberos 인증 시스템에 대한 지원이 더 이상 보안 RPC의 일부분으로 제공되지 않지만, 서버측 및 클라이언트측 구현은 릴리스에 포함되어 있습니다. Kerberos 인증 구현에 대한 자세한 내용은 Oracle Solaris 11.2의 Kerberos 및 기타 인증 서비스 관리 의 2 장, Kerberos 서비스 정보를 참조하십시오.
DH 인증

DH 인증은 DES(데이터 암호화 표준) 및 Diffie-Hellman 공개 키 암호화를 사용하여 네트워크의 사용자 및 컴퓨터를 모두 인증합니다. DES는 표준 암호화 방식입니다. Diffie-Hellman 공개 키 암호화는 두 개의 키(공개 키 하나, 보안 키 하나)가 포함된 암호화 시스템입니다. 공개 키와 보만 키는 이름 공간에 저장됩니다. NIS는 공개 키 맵에 키를 저장합니다. 이러한 맵에는 모든 잠재적 사용자에 대한 공개 키 및 보안 키가 포함됩니다. 맵 설정 방법에 대한 자세한 내용은 Oracle Solaris 11.2의 이름 지정 및 디렉토리 서비스 작업: DNS 및 NIS 를 참조하십시오.

DH 인증의 보안은 보낸 사람이 현재 시간을 암호화하는 기능을 기반으로 합니다. 그러면 받는 사람이 시간을 암호 해독하여 자신의 시계와 비교 확인할 수 있습니다. 시간 기록은 DES를 통해 암호화됩니다. 두 에이전트가 현재 시간에 동의해야 하고 보낸 사람과 받는 사람이 같은 암호 키를 사용 중이어야 합니다.

네트워크에서 시간 동기화 프로그램을 실행하는 경우 클라이언트와 서버의 시간이 자동으로 동기화됩니다. 시간 동기화 프로그램을 사용할 수 없는 경우에는 네트워크 시간이 아닌 서버의 시간을 사용하여 시간 기록을 계산할 수 있습니다. 클라이언트는 RPC 세션을 시작하기 전에 서버에 시간을 물은 다음 자체 시계와 서버 시계 간의 시간 차이를 계산합니다. 이 차이를 사용하여 시간 기록 계산 시 클라이언트 시계를 오프셋합니다. 클라이언트 및 서버의 시계가 동기화되지 않은 상태이면 서버는 클라이언트 요청을 거부합니다. 클라이언트의 DH 인증 시스템은 서버와 재동기화됩니다.

클라이언트와 서버는 임의의 대화 키(세션 키라고도 함)를 생성하고 공개 키 암호화를 통해 공통 키를 추론함으로써 동일한 암호 키를 사용하게 됩니다. 공통 키는 클라이언트와 서버만 추론할 수 있는 키입니다. 대화 키는 클라이언트 시간 기록을 암호화하고 암호 해독하는 데 사용됩니다. 공통 키는 대화 키를 암호화하고 암호 해독하는 데 사용됩니다.

NFS에서 보안 RPC 사용

    보안 RPC를 사용하려는 경우 다음 사항에 유의하십시오.

  • 정전 이후의 경우와 같이 시스템 관리자가 없는데 서버가 충돌하는 경우 시스템에 저장된 모든 보안 키가 삭제됩니다. 프로세스에서 보안 네트워크 서비스에 액세스하거나 NFS 파일 시스템을 마운트할 수 없습니다. 재부트 중의 중요한 프로세스는 보통 root로 실행됩니다. 따라서 루트의 보안 키를 외부에 저장한 경우에는 이러한 프로세스가 작동하지만 해당 키의 암호를 해독하는 암호를 입력할 사용자가 없기 때문에 문제가 됩니다. 이 경우 keylogin -rroot를 통해 일반 보안 키를 /etc/.rootkey(keyserv에서 읽을 수 있음)에 저장하도록 허용합니다.

  • 일부 시스템은 단일 사용자 모드로 부트됩니다. 이때 콘솔의 루트 로그인 셸이 사용되며 암호 프롬프트는 표시되지 않습니다. 이러한 경우에는 물리적 보안을 반드시 적용해야 합니다.

  • 디스크가 없는 컴퓨터 부트는 완벽하게 안전하지 않습니다. 즉, 누군가가 부트 서버를 가장해 우회 커널을 부트하여 원격 컴퓨터에서 보안 키 레코드를 만드는 등의 작업을 수행할 수 있습니다. 보안 NFS 시스템에서는 커널 및 키 서버를 실행한 후에만 보호 기능을 제공합니다. 그 외에는 부트 서버에서 제공하는 회신을 인증할 방법이 없습니다. 이러한 제한은 심각한 문제가 될 수 있지만 이 제한으로 인해 커널 소스 코드를 사용한 복잡은 공격을 수행해야 합니다. 또한 범죄의 증거가 남게 됩니다. 부트 서버에 대해 네트워크를 폴링한 경우 우회 부트 서버 위치를 확인할 수 있습니다.

  • 대부분의 setuid 프로그램은 root에서 소유합니다. root의 보안 키가 /etc/.rootkey에 저장되는 경우 이러한 프로그램은 이전과 동일하게 동작합니다. 그러나 사용자 소유의 setuid 프로그램은 작동하지 않을 수도 있습니다. 예를 들어 setuid 프로그램을dave가 소유하고 있으며 dave가 컴퓨터 부트 후 컴퓨터에 로그인하지 않았다고 가정하겠습니다. 그러면 프로그램에서 보안 네트워크 서비스에 액세스할 수 없습니다.

  • login, rlogin 또는 telnet을 사용하여 원격 컴퓨터에 로그인하고 keylogin을 사용하여 액세스 권한을 얻는 경우에는 계정 액세스 권한이 부여됩니다. 보안 키는 해당 컴퓨터의 키 서버로 전달되며, 이 서버에 보안 키가 저장됩니다. 이 프로세스는 원격 컴퓨터를 신뢰하지 않는 경우에만 문제가 됩니다. 의심스러운 부분이 있는 경우 원격 컴퓨터에 암호가 필요하면 원격 컴퓨터에 로그인하지 마십시오. 대신 NFS 환경을 사용하여 원격 컴퓨터에서 공유하는 파일 시스템을 마운트합니다. 또한 keylogout을 사용하여 키 서버에서 보안 키를 삭제할 수도 있습니다.

  • –o sec=dh 옵션을 사용하여 홈 디렉토리를 공유하는 경우 원격 로그인 시 문제가 발생할 수 있습니다. 암호 프롬프트를 표시하도록 /etc/hosts.equiv 또는 ~/.rhosts 파일이 설정되어 있지 않으면 로그인은 성공합니다. 그러나 로컬에서 인증이 수행되지 않았으므로 사용자는 홈 디렉토리에 액세스할 수 없습니다. 사용자에게 암호 프롬프트가 표시되는 경우 암호가 네트워크 암호와 일치하면 사용자는 홈 디렉토리 액세스 권한을 얻습니다.