보안 스크립트 Bastille-Linux

번역 : 서정룡(dreamsoh@orgio.net)
원문 : http://www.linuxfocus.org/Korean/September2000/article166.shtm

 

     

6월초에 출시된 Bastille-Linux 버전 1.1은 새로운 리눅스 배포판이 아닌 잠재적인 공격 위협으로부터 시스템을 보호하기 위한 일련의 스크립트로 본 문서는 교육적으로 작성되었기 때문에 리눅스 시스템에 이러한 스크립트를 설치함으로써 보안에 관한 많은 노하우를 배울 수 있다.

 

서문

    보안문제와 관련해서 리눅스는 다른 여타 운영체제보다 우수함에도 불구하고 각각의 배포판은 이러한 보안문제에 대해 각각 다르다. Bastille-Linux는 리눅스 시스템을 보호할 수 있는 방법을 제공하는데, 처음에는 레드햇 리눅스 배포판을 위해 쓰여졌으나 최신 버전은 다른 배포판에서도 마찬가지로 원활하게 작동한다.

    본 프로젝트는 주책임자 Jon Lasser와 주개발자 Jay Beale에 의해 진행되고 있으며 많은 개발자, 소프트웨어 디자이너 및 베타 테스터들이 참여하고 있다.

    무엇보다도 Bastille-Linux는 새로운 리눅스 배포판이 아니라 리눅스 보안을 향상시키기 위해 perl로 쓰여진 일련의 스크립트라는 것을 명확히 하자.

    물론 보안은 컴퓨터 보안을 의미한다(원치않는 사람이 리눅스 박스에 엑세스하는 것을 어떻게 피할 수 있겠는가?). Bastille-Linux는 리눅스 배포판의 초기 설치를 수정함으로써 일련의 보안문제에 대한 답변을 제공한다.

    모든 시스템관리자의 기본 업무는 사용자들의 요구를 파악하여 그 요구에 부응할 뿐만 아니라, 네트워크상에서 보안 구멍을 가질 수 있는 사용되지 않는 프로그램이 계속해서 작동되는 것을 억제하는 것이다. “여러분이 가장 적게 할수록 보안은 더욱 향상된다” 물론 알고리즘 복잡성에 관한 우스개 소리지만 네트워크 관리에도 적용된다. 많은 서비스는 더욱 많은 공격장소를 제공하기 때문에 해가 되는데 공격 위협을 줄이기 위해서는 정말로 필요한 서비스만 설치하는 것이 중요하다.

    Bastille-Linux는 공격의 가능성을 줄이려고 하며 이를 위해 소프트웨어 디자이너는 무엇을 하는 지를 단계적으로 설명하는 매우 교육적인 접근방법을 취하고 있다.

 

Presentation

    이 기사를 쓰는 당시 Bastille-Linux의 버전은 1.1.0으로 6월 초반에 출시되었다.

    명백한 유용성 외에도 Bastille-Linux는 매우 교육적인데 스크립트는 세부적이고 정확한 질문을 던지며 이렇게 함으로써 개발자는 사용자를 가르치려고 한다. 개발자는 질문의 세부사항 및 가능한 해결방법을 설명하며 따라서 Bastille-Linux를 사용하기 쉽게 만든다.

    보다 상급 사용자에 대해 perl로 작성된 소스 코드는 투명함의 전형으로 각각의 주석은 명령이 어떻게 작동하는 가를 설명하고 있다.

     

    1.1.0 버전의 특징은 다음과 같다.

    - 스크립트는 기존 사용중인 시스템에서 작동한다.
    - undo 기능이 추가되어 Bastille-Linux 설치시 수정된 모든 파일은 필요시
       복원될 수 있도록 저장된다.
    - 처음 Bastille-Linux는 RedHat과 Mandrake 배포판을 위한 것이었으나 현재는
       모듈이 여러분이 스크립트를 수행하는 배포판에 따른 올바른 파일경로를 갖고 있다.

    Bastille-Linux는 여러 가지 모듈을 갖고 있다. 4개의 일반 모듈과 특별한 업무를 위한 모듈(sendmail, FTP 등의 소프트웨어, 부트 또는 쓸모없는 데몬)

    일반 모듈은 방화벽설치, 시스템 소프트웨어 업데이트, SUID-루트 프로그램의 감시, 쓸모없는 서비스의 비활성화와 제한을 위해 사용된다.

    다른 모듈은 더욱 명백한 문제를 다루고 있다. 그들 중의 일부는 sendmail 또는 ftp 등 올바르지 않게 구성된 소프트웨어에 의한 보안 구멍을 위한 것이며 다른 것들은 PAM, syslog 등의 서비스 구성을 보다 적게 허용된 방식으로 수정한다.

    어떤 보안 함수들은 여러 가지 보호 레벨을 단계적으로 제공한다. 모든 서비스와 잠정적 보안 구멍은 어떤 방법으로든 보호해야 하며 따라서 한 방법이 실패했을 경우 다른 방법이 시스템을 계속해서 보호할 것이다.

 

Installation or "let's go for a walk into the scripts while the wolf is not there"

    Bastille-Linux의 이전 버전은 새로운 시스템에서만 작동되었지만 최신 버전은 그렇지 않다. 그러나 시스템이 이미 (보안관련 패키지를 설치해서) 가동중이라면 Bastille이 하는 일이 쓸모없을 수 있음을 밝힌다. 따라서, 소프트웨어때문이 아니라 보안을 위해 새로운 시스템(freshly installed)에 Bastille-Linux을 설치하는 것을 권장한다.

    Bastille-Linux는 bastille-linux.source.net에서 .tgz tarball 형태로 구할 수 있는데  아카이브의 크기는 단지 134 Ko이다. 파일을 전송받았다면 tar xzf Bastille-1.1.0.tgz 의 명령어를 사용하여 압축을 푼다.

     

    네 개의 스크립트가 Bastille-Linux를 다룬다.

    - InteractiveBastille.pl : 시스템에서 무엇을 할지를 결정하기 위해 사용자에게
       다양한 질문을 던지며, 주어진 답변으로부터 설정 파일을 생성한다.
    - AutomateBastille.pl : 제공된 설정 스크립트로부터 방화벽을 사용할 것인지를 선택할 수
       있는 기본(default) 설정을 설치한다. 본 스크립트는 더 이상 관리되지 않는다.
    - BackEnd.pl : 시스템의 변경를 다루는데 응답한 답변으로부터 매개변수(parameter)를
       얻는다.
    - Undo.pl : BackEnd.pl을 실행할 때 /etc/syslog.conf, /etc/inetd.conf, /etc/hosts 등의
       파일들이 변경되는데 문제 발생시 시스템복구를 위해 백업 복사본은 /root/Bastille/undo
       디렉토리 밑에 놓인다.

    Bastille-Linux를 설치하기 위해서는 스크립트가 설정 파일을 수정할 수 있게 root 사용자여야 한다. 그후 설치를 위해 우선 InteractiveBastille.pl 을 실행시키며, 다음(아래서 더욱 자세히 설명될) 일련의 질문들에 답을 한 후 최종적으로 BackEnd.pl을 실행시키면 된다. 설치후 변경사항은 /root/Bastille/undo 디렉토리에서 찾을 수 있다.

     

    설치에 앞서

    1. /root/Bastille 디렉토리에서 스크립트를 실행한다고 가정한다.
       추후 버전에서는 변경될 것이며 아마도 어떤 경로에서도 실행시킬 수 있을 것이다.

    2. 두 모듈은 시스템에 섀도우 패스워드를 설치하자마자 계정 생성을 허용하는데
        이것이 디폴트 설치이다. 그러나 /etc/passwd 파일에 패스워드 필드가 채워져 있지
        않으며, /etc/shadow 파일을 억세스할 수 있는 root 사용자이고 /etc/shadow 파일에
        패스워드 필드가 있음을 확인해야 한다.

    3. Bastille-Linux는 아직까지 (추후 버전에서 가능해질) 커널 설정에서와 같이 모듈 사이의
        링크를 다루지는 않는다. 모듈에 주어진 답변과 추후 결과에 주의하자.
        따라서 IPChains 모듈에게 2049 포트를 닫고 MiscellaneousDaemons 모듈에서
        활성 데몬 리스트에 NFS를 유지하라고 말할 수 있다 (NFS 는 2049 포트를 사용한다).

 

단계별 Step by step

    여러가지 단계들을 이해하기 위해 Bastille-Linux가 제기하는 질문들을 보자. [ ] 사이의 문자는 디폴트 답변을 나타낸다 ( N -> No, Y -> Yes ).

 

IPChains

    본 모듈은 방화벽 설정에 사용되는데 시스템 보호를 위해 필수적이지는 않을 지라도 머신간의 네트워크 트래픽 제어를 허용한다. 방화벽 트래픽 제어는 실제 보안을 위해 충분하지 않은데 데몬의 재설정이 필요하다 (여러가지 보안 레벨이 쓸모없는 것은 아니다).
    본 스크립트는 외부 및 로컬 네트워크와 통신하는 두 개의 네트워크 인터페이스를 고려하여 매우 훌륭하게 작동된다. 본 스크립트는 머신에 허용가능한 서비스 결정 및 다른 서비스의 정지를 위한 것으로 디폴트는 외부로부터 오는 모든 것을 거절하는 것이다. 다음에 스크립트는 어떤 서비스를 허용가능하게 하는 규칙을 정의한다.

    스크립트는 TCP, UDP 와 ICMP프로토콜을 다루는데 각 프로토콜에 대해 감시 또는 회피해야 할 서비스 목록을 제공한다. 방화벽 설치를 위한 Bastille-Linux의 접근방법을 세부적으로 설명하는 것은 무척이나 장황할 것이지만 스크립트와 그 주석이 많은 도움이 될 것이다. 그러나 본 모듈을 사용하기 위해서는 최소한의 지식이 필요하다.

 

패치 다운로드(PatchDownload)

    시스템의 무결성을 유지하기 위해서 시스템 갱신은 매우 중요하다. 지난 몇개월 동안 예를들어 bind와 piranha는  중요한 보안문제를 갖고 있었지만 소스코드가 공개되어 많은 사람들이 즉각적으로 패치를 작성하였기 때문에 빠르게 수정되었다.

    불행히도 본 스크립트가 훌륭하게 작동하지는 않는데, 직접 설치되는 패키지 및 그 중 갱신되어야 하는 패키지를 결정해야 하기 때문에 약간은 복잡하다. 그 다음 패치를 전송받아 설치전에 해커에 의해 또는 전송중에 변경되지 않았는지를 확인해야 한다. 물론 사용하는 리눅스 배포판에 따라 다를 것이다.

    현재 Jay Beale은 본 스크립트를 무시하기 보다는 수작업으로 실행하는 것을 추천하고 있다. 현재 보다 기능이 향상된 모듈 버전이 개발중이며 조만간 이용가능할 것이다.

 

파일 허가권(FilePermissions)

    본 모듈은 SANS 팀의 문서에 기초하는데 단지 루트(또는 루트 그룹 멤버)에 허용가능한 프로그램, SUID 비트를 유지할 필요가 있는 프로그램 등을 결정하기 위한 것이다.
    - Would you like to set more restricitive permissions on the administration utilities [N]?
       (관리 유틸리티에 더욱 제한적인 허가권을 설정할 것인가?)
       어떤 프로그램들은 모든 사용자에게 허용되서는 않되는데 Bastille-Linux는
       0750 허가권을 갖도록 변경될 수 있는 프로그램들의 목록을 제공한다.

    - 다음은 SUID 비트에 관한 것으로 이 비트는 루트 허가권을 갖는 사용자가 프로그램을
       실행할 수 있도록 허용한다.
       >> ls -l /bin/ping-rwsr-xr-x 1 root root 17698 Mar 6 15:57 /bin/ping

    이 비트는 편리한 반면 보안문제를 야기한다. 즉, 만약 어떤 사용자가 버퍼 오버플로우(buffer overflow)와 같은 약점을 발견한다면 그는 곧 루트 권한을 획득할 수 있을 것이다.

    Bastille-Linux는 mount/umount, ping, dump/restore, cardctl 들의 프로그램들 중에서 이 비트를 제거하도록 제안하는데, 이들중에는 서버 상태 확인에 이용될 수 있는 ping과 traceroute 유틸리티가 포함되어 있다. 이들의 SUID 비트 제거는 paranoiac 모드에 해당하지만 리눅스 머쉰을 일반적으로 사용할 수 있다.
    SUID-루트 프로그램 목록에는 rcp, rlogin 또는 rsh들의 r-명령어 프로그램이 있는데. 이러한 유틸리티는 네트워크에 보내지는 자료를 암호화하지 않는다. 더구나, 이들은 인증(atuhentication) 방법으로 단지 IP 주소를 사용하기 때문에 스푸핑(spoofing) 가능성이 있어 부적절하다.

 

계정 보안(AccountSecurity)

    해킹은 사용자 계정 또는 시스템 계정 획득에서 시작하는데, 이러한 해킹을 어렵게 하고 침입을 탐지할 수 있는 간단한 방법들이 있다.

    - Would you like to set up a second UID 0 account [N]?
       (UID가 0인 제2의 계정을 설치할 것인가?)
       위 질문에 “예”로 답하면 시스템에 또다른 루트 계정이 생성되는데, 이러한 경우 원래의
       루트 계정을 더 이상 사용해서는 안되며 방금전에 만든 계정을 사용해야 한다.
       물론 이는 루트 패스워드를 해독할 가능성을 2배로 만드는 반면 누가 루트 아이디를
       사용하는 지를 /var/log 디렉토리내의 파일들로부터 살펴볼 수 있도록 한다.

    - May we take strong steps to disallow the dangerous r-protocols [N]?
       (위험한 r-프로토콜을 허용하지 않는 강력한 조치를 취할 것인가?)
       위에서 언급한 r-명령어들은 리눅스 머쉰에서 새로운 계정을 얻는 강력한 방법으로
       패스워드가 평문으로 전송된다. 이러한 네트워크에 접속한 스니퍼는 흥미로운 표정을
       지을 것이다.
       Bastille-Linux는 PAM(pluggable authentication modules) 모듈을 통한 r-명령어들의
       사용 금지, 실행 허가권 제거와 tcp_wrapper(rlogind, rexecd, rshd)에 있는 서버들의
       중지들의 작업을 한다. 이들은 /etc/inetd.conf 파일내에서 주석처리를 함으로써 설정된다.

    - Would you like to enforce password aging [Y]?
       (패스워드 에이징을 시행할 것인가?)
       패스워드는 매 180일마다 변경되어야 하며 변경되지 않는 계정은 비활성화된다.

    - Would you like to create a non-root user account [N]?
       (루트 아닌 사용자 계정을 생성할 것인가?)
       가능한 여러분의 루트 계정을 사용하지 않은 것이 좋다. 사실 rm -rf / 명령어를 루트로서
       실행시킨다면 시스템은 파손되지만 일반 사용자로의 권한으로는 그렇지 않다.
       단지 관리 업무를 위해서만 루트로 로긴해야 한다.

    - Would you like to restrict the use of cron to administrative accounts [Y]?
       (cron 사용을 관리 계정으로 제한할 것인가?)
       cron은 자동적인 업무수행을 할 수 있도록 하는데, 예를 들면 관리자는 통상적으로
       시스템 무결성 검사 또는 /var/log 내의 파일 검색을 위해 cron을 사용할 수 있다.
       반면 모든 사용자에게 접근을 허용하는 것은 너무 많은 특권을 주는 것이다.
       Bastille-Linux는 처음에 이 서비스를 이용할 수 있는 사용자 목록을 갖고 있는
       /etc/cron.allow 파일을 생성한다.

 

부트 보안(BootSecurity)

    본 모듈에서 제공되는 옵션들은 머쉰의 물리적 보안과 관련이 있는데 이전 버전의 보안 구멍을 수정하려는 것이다. 컨솔에 물리적으로 억세스할 수 있는 사용자는 루트 권한을 획득할 수 있었다. LILO : linux single 같이 single 모드로 LILO를 구동하는 것은 루트에 속하는 새로운 셀을 사용할 수 있도록 한다.

    명백히 이것은 충분치 않다. 물리적으로 컴퓨터를 보호하기 위해 BIOS는 패스워드로 보호되어야 하며 하드디스크만으로 부팅할 수 있어야 한다. 또한 리눅스 박스는 어떤 사용자가 새로운 하드디스크를 끼우지 못하도록 보호되어야 한다. 물론 이것은 편집광들의 행동으로 적당한 이유없이 그렇게까지 할 필요는 없다.

    소프트웨어적 관점으로 얼마간의 제한들은 위에 언급내용들과 비교해 좋은 타협점을 제공한다.

    - Would you like to password-protect the LILO prompt [N]?
       (LILO 프롬프트를 패스워드로 보호할 것인가?)
       “예”라고 답변함으로써 재부팅후 허용되지 않은 사람들의 억세스를 불허한다.

    - Would you like to reduce the LILO delay time to zero [N]?
       (LILO delay 시간을 0으로 감소시킬 것인가?)
       부팅시 LILO 프롬프트에서 부팅 매개변수를 입력할 수 없게 한다.
       여러분이 다중 운영체제를 사용하고 있다면 단지 디폴트 운영체제만이 구동될 수 있기
       때문에 이 옵션을 선택하지 않아야 한다.

    - Do you ever boot Linux from the hard drive [Y]?
       (리눅스를 하드디스크로부터 부팅할 것인가?)
       이전 질문 중의 하나에 “예”라고 답변했고 LILO를 설치했다면 “예”라고 답변하여
       LILO의 변경사항을 디스크에 써야 한다.

    - Would you like to write the LILO changes to a boot floppy [N]?
       (LILO의 변경사항을 부트 플로피에 작성할 것인가?)
       부트 플로피를 갖고 있다면 긴급복구 또는 리눅스 부팅(플로피만으로 부팅할 경우)을
       위해 "예"를 선택한다.

    - Would you like to diable CTRL-ALT-DELETE rebooting [N]?
       (CTRL-ALT-DELETE, warm 부팅 기능을 끌 것인가?)
       이 옵션은 머신의 재부팅을 방지하기 위한 것이다.

    - Would you like to password protect single-user mode [N]?
       (시스템 관리를 위한 single 모드 접속을 제한하기 위해 패스워드를 설정할 것인가?)
       임의의 사용자가 머신에서 루트 권한을 획득하지 못하도록 하는 좋은 방법이다.

 

Inetd 보안화(SecureInetd)

    본 모듈은 불필요한 서비스 제한 및 비활성화를 하기 위한 것으로 해커는 손쉽게 어떤 특권을 갖는 서비스에서 보안구멍을 찾을 수 있기 때문에 이러한 서비스와 특권을 제한해는 것이 필요하다.

    예를 들면 RedHat 6.0에서 DNS 설정의 실수는 원격적으로 루트가 되는 것을 허용하는데 이러한 서비스를 비활성화하거나 권한을 축소하는 것이 보안에 도움이 된다.

    이미 언급한 r-명령어와 같은 프로토콜 및 ftp 또는 telnet은 종종 공격받기 쉬우며 예를 들어 finger 또는 identd들은 머신 계정 등에 대한 정보를 쉽게 얻을 수 있도록 한다. 이러한 다수의 서비스들은 주어진 서비스에 누가 억세스 하는 지를 제어하는(주로 /etc/host.{allow, deny} 에 의해) tcp_wrapper에 의해 다루어진다. 따라서 wrapper가 클라이언트의 서비스 억세스를 허용했다면 해당 서버에 서비스 요청을 보낸다.

    본 부분은 아직까지는 엄격하며 추후 버전에서 변경될 것이다.

    - Would you like to modify inetd.conf and /etc/host.allow to optimize use of Wrappers
       [Y]?
       (Wrapper 사용을 최적화하기 위해 inetd.conf 와 /etc/host.allow를 수정할 것인가?)
       Bastille-Linux는 위의 두 파일을 설치하는데 필요에 따라 더욱 정확한 매개변수를
       설정하기 위해서 이 파일들을 살펴보는 것이 흥미로울 것이다.

    - Would you like to set sshd to accept connections only from a small list of IP addresses
       [N]?
       (단지 소수의 IP 주소 목록으로부터의 연결을 허용하기 위해 sshd를 설정할 것인가?)
       sshd는 키 교환, 패스워드와 자료 암호화 등의 안전한 방법으로 연결할 수 있게 하는
       데몬으로 telnet, rlogin, rsh, rcp와 ftp를 완전히 대체한다. ssh와 동일한 버전으로
       BSD 인가하의 OpenSSH가 있다.

    - Would you like to make “Authorized Use” banners [Y]?
       (“승인된 사용”을 표방할 것인가?)
       리눅스 머신에 연결하려고 하는 모든 사람은 이 서비스를 통해 연결이 허용되는 지를 묻는
       경고 메시지를 볼 것이다. 이러한 메시지는 /etc/motd 파일에서 찾을 수 있다.

    계속하기 전에 네트워크는 클라이언트-서버 모델에 입각함을 기억하자. 따라서 각 서비스에 대해 클라이언트 쪽인지 또는 서버 쪽인지를 알아야 한다. 예를 들어 웹서버 정지는 브라우저가 클라이언트이기 때문에 웹 브라우징을 방해하지는 않는다.

 

사용자 도구 불가(DisableUserTools)

    본 모듈은 간결하며 서버에 필수적이다. 대개 해커는 정상적인 사용자 계정을 이용하여 머신에 억세스한 후 시스템의 약점을 활용하기 위해 머신에 존재하는 소수의 프로그램들을 다시 컴파일한다. 본 모듈은 루트를 제외한 모든 사용자에 대해 C 컴파일러를 비활성화시킨다.

    따라서, 리눅스 머신이 어떤 프로그램도 컴파일할 필요가 없는 서버라면 컴파일러는 제거해라.

 

PAM 설정(ConfigureMiscPAM)

    본 모듈은 파티션을 코어 파일로 채우기, 죽음의 핑 등 시스템을 과부하상태로 유지되도록 하는 서비스 불능 공격(Deny of service : DOS)의 위협을 제한하는 것이다.

    PAM은 장착식 인증 모듈, pluggable authentication module의 약자로 시스템 관리자에게 각 어플리케이션에 대한 사용자 인증 형태, 사용자 권한, 사용자 억세스 자원 등을 선택할 수 있도록 허용하는 라이브러리이다.

    - Would you like to put limits on system resource usage [Y]?
       (시스템 자원 사용에 제한을 가할 것인가?)
       /etc/security/limits.conf 파일은 시스템 제한을 포함하고 있는데 Bastille-Linux는
       그것들을 다음과 같이 변경한다.
       : 코어 파일들을 0으로 제한한다.
       : 각 사용자의 프로세스를 150으로 제한한다.
       : 최대 파일 크기를 40Mb로 제한한다.
       각 수치는 설정 파일로부터 직접 수정할 수 있다.

    - Should we restrict console access to a small group of user accounts [N]?
       (컨솔 억세스를 소수 사용자 그룹에 제한해야 하는가?)
       RedHat 6.0/6.1에서 컨솔로 연결하는 사용자들은 CD-ROM 마운팅과 같은 얼마간의
       권한을 갖고 있는데, 컨솔 억세스를 신뢰받는 사용자 그룹으로 제한하는 것이 가능하다.
       본 질문 이러한 정책을 수행해야 한다고 느낄 경우 그러한 사용자들을 정의할 수 있도록
       한다.

 

Logging

    syslog는 머신이 손상되었는지를 알아내기 위해 수행되는 가장 중요한 서비스 중의 하나이다. 이 데몬은 시스템 사건을 기록하는데 기록된 정보의 레벨을 선택적으로 변경할 수 있다.
    최소한의 서비스만을 가동하고 있다면 모든 문제가 /var/log 디렉토리내의 파일들로부터 재빨리 지적될 수 있다는 것이 주목할 만하다. 반면 시스템이 다수의 쓸모없는 서버들을 가동하고 있다면 /var/log 디렉토리내의 파일들은 매우 커지고 따라서 다루기 힘들다 (특정한 목적에 사용되는 스크립트들을 실행해야 한다).

    본 모듈은 /etc/syslog.conf 파일에 다음의 새로운 사항을 첨가한다.

    - Would you like to add addintional logging [Y]?
       (부가적인 로깅을 첨가할 것인가?)
       Bastille-Linux는 커널로부터 오는 메시지와 중요한 문제들을 기록(방화벽 관련 메시지가
       이러한 범주에 속한다)하기 위해 /var/log/kernel 파일을 생성한다. 어떤 정보는 TTY 7과
       8의 두 터미널에 보내진다. 새로운 /var/log/loginlog 파일은 시스템에 연결하는 사용자를
       기록한다.

    - Would you have a remote logging host [N]?
       (원격 로깅 호스트를 갖을 것인가?)
       메시지를 보낼 수 있는 다른 머신이 없다면 답변은 “아니오”이다.

    - Would you like to set up process accounting [N]?
       (프로세스 계산을 설치할 것인가?)
       리눅스에서는 실행된 명령어, 명령어를 실행한 사용자와 실행 시간을 기록할 수 있다.
       머신의 가동상태를 검사하는 것이 실질적이려면 이 로그 파일의 크기는 빠르게 매우
       거대해진다. 물론 많은 자원을 사용하며 정말로 필요하지 않다면 이 기능을 비활성화하는
       것이 더욱 좋다.

 

기타 데몬들(MiscellaneousDaemons)

    본 모듈은 항상 최소화와 관련하여 단지 부팅시 실제로 필요로 하는 서버들 만을 활성화한다. 디폴트로 거의 모든 서비스는 필요없으며 따라서 비활성화된다. chkconfig 명령어를 사용하여 서비스를 재활성화시킬 수 있다.
     

    Services

    Description(설명)

    apmd

    랩탑 배터리를 제어하기 위해 사용

    NFS 와 samba

    공유 파일 시스템을 취급, 이종 네트워크상에서 유용함에도 불구하고 커다란 보안 구멍으로 작용

    atd

    모든 atd는 또한 cron을 이용하여 가능

    PCMCIA

    랩탑에 일반적으로 사용되는 PCMCIA 하드웨어를 보유시

    dhcpd

    잠정적인 IP 주소를 제공하기 위해 사용되는 서버, 이러한 서비스는 ISP 업체에 의해 제공되며 또한 로컬 네트워크에서 사용

    gpm

    콘솔모드에서 마우스를 다루기 위해 사용, 컨솔모드에서 작업하지 않는다면 무용한 서비스

    news server

    일반적으로 머신에서 뉴스 서버를 가동하는 사람은 거의 없으며 ISP 업체의 서비스

    routed

    news server 와 같이 ISP 업체의 서비스로 여러분의 DNS 에 관련

    NIS

    로컬 네트워크에서 매우 유용한 서비스이지만 커다란 보안 문제의 원인

    snmpd

    네트워크 관리를 위한 서버에 사용(통계, 운영, 사용자...)

    sendmail

    메일 송수신을 위해 데몬으로 실행시킬 필요는 없음, 여러분이 ISP 업체로부터 POP 또는 IMAP를 통해 메일을 받는다면 sendmail 은 쓸모없음. 또한 이 프로그램은 커다란 보안 구멍을 갖고 있음.

 

Sendmail

    앞에서 언급했듯이 sendmail은 메일을 다루는 서비스로 그 역사는 메일 서버가 취급해야 하는 많은 업무와 네임 해석(name resolution), syslog 정보 등을 수행하기 위해 필요한 권한에 의해 야기된 보안 구멍으로 점철되어 있다.  약점과는 달리 sendmail은 주어진 서버의 특정 사용자에 대한 정보 획득을 허용한다. 에를 들면 sendmail EXPN과 VRFY 명령어는 특정 사용자 계정의 존재유무를 알 수 있도록 한다.
    전에 언급한 바와 같이 sendmail 메일 송수신 서비스를 수행하기 위해 데몬으로서 실행될 필요는 없다. 메일을 보내기 위해서는 netscape, rmail, pine, mutt 등의 메일 클라이언트를 사용할 수 있기 때문에 홈사용자들에게 sendmail은 아마도 전적으로 쓸모없는데, 메일을 받을 목적으로 메일박스를 정기적으로 검사하기 위해 sendmail을 활성화시킬 수 있다.

    - Do you want to leave sendmail running in daemon mode [Y]?
       (sendmail을 데몬으로 실행시킬 것인가?)
       대부분의 경우 쓸모없으며 위험하다. 따라서 비활성화시키는 것이 더욱 좋다.

    - Would you like to run sendmail via cron to process the queue [N]?
       (대기 행렬을 처리하기 위해 cron을 통해 sendmail을 실행시킬 것인가?)
       이 옵션을 선택하면 sendmail은 매 15분마다 메일 대기행렬을 검사한다.
       /etc/sysconfig/sendmail 파일에서 이 매개변수를 변경할 수 있다.

    - Would you like to disable the VRFY and EXPN sendmail commands [Y]?
       (VRFY와 EXPN sendmail 명령어 기능을 억제할 것인가?)
       이 명령어들은 해커들에게 유용한 정보를 제공하며 스패밍에도 마찬가지이다.

 

원격 접속(RemoteAcces)

    원격 머신에 연결할 수 있는 것이 종종 유용한데, r-명령어들은 비보안적인 방법으로 이를 허용한다. Bastille-Linux는 연결을 통해 전송되는 자료(와 패스워드)를 암호화하는 소프트웨어인 ssh를 전송받아 설치하기를 권한다.

    세션키 길이가 128 비트를 초과하지 않는 소프트웨어를 사용할 수 있는데 세션키는 자료를 암호화하는데 사용되는 키이다. 세션키는 클라이언트와 서버에 의해 단계적으로 만들어진다.: 세션키는 키 교환 프로토콜(대부분의 경우 Diffie-Hellman)에서 생긴 것으로 모든 구성원들의 키로부터 키를 생성하는데 그 목적이 있다. 그 후 세션키는 대칭 알고리듬에 따라 자료를 암호화하는데 사용된다(자료의 암호화와 복호화에 같은 키가 사용된다). 따라서 유닉스 패스워드를 암호화하는데 사용되는 DES(Data Encryption System, 자료 암호 시스템)는 56 비트 키를 갖는 대칭 알고리듬이다.

    현재 128비트 키는 거래 기밀과 보안을 보장할수 있을 만큼 충분히 크다. 오늘날 DES가 그렇게 안전하지 않다고 알려져 있어도 최선의 공격은 대부분 사람들이 갖고 있는 CPU 파워의 범위내에 있지 않다. 반면 2k 길이의 키가 k 길이 키보다 두배 이상 알아내기 어렵다고 믿는 것은 실수이다. 사실 그 어려움은 지수 함수적으로 키 크기보다 더욱 빨리 증가한다. k 길이 키에 대해 2k 개의 가능한 키가 존재하며 2k 길이 키에 대해서는 22k 개의 가능한 키가 존재한다. 따라서 키 크기를 2배 증가시키면 우리는 2k 개의 가능한 키를 더하는 것이다. 56비트 DES를 깨는 것이 어렵다는 것을 알아차릴 때 암호화/복호화 알고리듬이 보안 구멍을 갖고 있지 않다면 128비트 키는 침범할 수 없다고 예상할 수 있다. 공격의 관점에서 이러한 키크기 제한을 증가시키는 것은 그 어려움을 불가능 수준에서 더욱 불가능 수준으로 만든다.

    다음 4가지 소프트웨어 패키지도 비슷한 서비스를 제공한다.
       : ssh 1.2.x 암호화 연결을 확립하는 클라이언트-서버 시스템
       : ssh 2.x 이전 버전과 같지만 더 적은 약점과 더 큰 가능성을 갖음
       : OpenSSH : 앞의 패키지와 유사하지만 BSD 인가하의 소프트웨어
       : ssf ssh 와 유사한데 프랑스법에 의해 채택

    다음의 모듈도 서비스와 연관이 있는데 이들에 대한 보안 정책은 놀랄 만한 것이다: 서비스 권한 제한과 서비스 중지. 두 정책이 다르게 보일지라도 이러한 두 조치가 상반되지는 않는다. 이러한 서비스들은 우연히 또는 탐탁치 않은 사용자들에 의해 재활성될 수 있는데, 따라서 서비스에 대한 권한 제한보다는 서비스들을 제한하는 것이 더욱 좋을 듯하다.

 

도메인 네임서버(DNS)

    DNS는 IP 주소와 머신 네임의 연계될 수 있도록 하는데 예를 들어 198.186.203.36은 www.bastille-linux.org에 해당한다. 본 서버의 주기능은 BIND로 불리는데 최근 BIND에 대한 DoS(서비스 거부공격) 형태의 공격이 발견되었다. DoS 공격은 소수의 디렉토리 그룹에 DNS 억세스를 줌으로써 예방할 수 있다(chroot 명령어를 이용하여 명령어 또는 스크립트 실행 전에 루트 디렉토리를 디폴트인 / 에서 다른 것으로 변경할 수 있다).

    Bastille-Linux 작동상태를 설명하기 전에 약간의 기술적 세부사항을 첨가하자. 본 서비스를 다루는 데몬은 named로 /etc/named.conf 파일을 통해 설정할 수 있다.

    - Would you like to chroot named and set it to run as a non-root user [N]?
       (chroot를 named를 루트 아닌 사용자로써 실행할 것인가?)
       Bastille-Linux는 셀을 가지지 않지만 dns라는 새로운 사용자와 /home/dns 디렉토리를
       생성하는데, 이 디렉토리내에/usr, /etc, /var 등의 일반적인 디렉토리를 생성함으로써
       고전적인 시스템 구조를 만들 수 있다. 그후 데몬이 필요로 하는 구성파일과 라이브러리들을
       복사해야 하며 보다 많은 변경을 해주어야 한다(syslog에 대해 DNS.pm을 검사하자).
       현재 DNS는 그 고유의 환경을 갖고 있다.

    - Would you like to deactivate named, at least for now [Y]?
       (적어도 지금은 named를 비활성화시킬 것인가?)
       대부분의 경우 name 서버는 필요하지 않은데 일반적으로 ISP업체가 이러한 서비스를 제공
       한다. DNS-HOWTO는 네임 분석에 대한 캐쉬 설치를 설명하고 있는데 이것 또한
       보안 문제를 야기할 수 있다.

 

아파치(Apache)

    Apache는 가장 널리 사용되고 있는 인터넷 웹서버로 다음 두 가지 경우에 있어서 매우 유용하다.

    1. 사이트 운영 : 고정 IP 주소가 필요.
        ISP 업체들은 고객들이 갖지 못한 이러한 주소를 갖고 있다.
    2. 자신의 웹페이지 검사 : 이러한 경우 웹서버를 구동해야 한다(/etc/rc.d/init.d/httpd start).

    본 데몬의 구성 파일은 디폴트로 /etc/httpd/conf 내에 있다.

    - Would you like to deactivate the Apache web server [Y]?
       (아파치 웹서버를 비활성화 할 것인가?)
       웹서버가 항상 필요한 것은 아니기 때문에 시스템 최소화 견지에서 비활성화시킨다.

    - Would you like to bind the web server to listen only to the localhost [N]?
       (단지 localhost만을 듣기 위해 웹서버를 연결할 것인가?)
       httpd 데몬을 특정 주소에 연결하는 것이 가능한데 Bastille-Linux는 localhost 주소인
       127.0.0.1에 연결하는 것을 권한다. 이는 웹페이지를 테스트하기 위해 머신에서 서버를
       가동하도록 한다.
       다음의 주소를 통해 웹페이지에 접속할 수 있다.
       http://localhost/ (또는 http://localhost/myownhomepage)
       아파치는 루프백 인터페이스(lo)를 사용한다.

    - Would you like to bind the web server to a particular interface [N]?
       (웹서버를 특정 인터페이스에 연결할 것인가?)
       “예” 라는 답변은 이전의 루프백 인터페이스를 이용하여 웹서버를 사용할 것이다라는
       것을 무효로 하는데 웹서버를 IP 주소가 부여된 이더넷 등의 인터페이스에 연결할 수
       있도록 한다.

    - Would you like to deactivate the following of symbolic links [Y]?
       (심볼릭 링크 읽기를 비활성화시킬 것인가?)
       이를 비활성시켜야 하는데 제한된 공간에서 작동하는 DNS에 대해 아파치가 /home/httpd
       디렉토리를 벗어나는 것을 허용하지 않아야 한다. 예를 들어 사용자 중의 한명이 그 자신의
       웹서버 디렉토리내에서 루트 / 로의 링크를 갖는다면 모든 사람이 모든 파일을 억세스할 수
       있으며 특히, passwd 등의 구성 파일들을 억세스할 수 있다.

    - Would you like to deactivate server-side includes [Y]?
       (SSI를 비활성화시킬 것인가?)
       Jay Beale이 말했듯이 본 옵션이 무엇을 하는지 모른다면 활성화시킬 필요는 없다.
       본 옵션을 활성화시킨다면 사용자들이 서버에서 어떠한 프로그램이라도 실행할 수 있도록
       구성된다고 말하는 것이 충분하다.

    - Would you like to disable CGI scripts, at least for now [Y]?
       (적어도 지금 CGI 스크립트 기능을 억제할 것인가?)
       CGI 스크립트를 작성하는 것은 그리 어려운 작업은 아니며 따라서 매우 주의해야 한다
       (예를 들어 서버에 코어파일을 생성시키는 스택 과부하를 예방). 시스템을 손상시키는데
       이용되는 많은 방법들이 이 스크립트내의 에러에 의존한다.

    - Would you like to disable indexes [N]?
       (색인 기능을 억제할 것인가?)
       디렉토리내에 index.html 파일이 없을 경우 아파치는 디렉토리내의 모든 파일 목록을
       보여주는데 이는 심볼릭 링크 읽기를 허용하는 것보다는 문제의 소지가 작다.
       하지만 디렉토리내에 민감한 자료가 존재한다면 상황은 달라진다.

    다른 서버와 마찬가지로 웹서버가 적절히 구성되지 않는다면 머신을 손상시킬 수 있는 출발이 될 수 있다. 이는 어떤 경우 약간은 곤혹스러울 수 있는데 은행을 예를 들어보자. 고객 이름(아마도 그들의 패스워드)을 읽을 수 있다면? 다음의 http://www.kitetoa.com을 접속해봐라.

 

프린팅(Printing)

    머신에서 인쇄작업을 할 것인가? 라는 단 한가지 질문이 있는데,  답변이 “아니오”라면 Bastille-Linux는 lpd 데몬을 비활성시키고 lpr과 lprm으로부터 SUID 비트를 제거한다.

 

FTP

    보안 관점에서 ftp는 많은 문제의 소지가 될 수 있는데 예를 들어 연결을 초기화할 때 패스워드가 평문으로 전송된다. 물론 자료들에 대해서도 마찬가지이며 따라서 재무 또는 의료 자료등의 민감한 자료라면 보안에 심각한 문제를 야기할 수 있다.

    더구나 최근 wu-ftpd에서 보안 구멍이 발견되었는데 ftp 서버를 가동할 필요가 있다면 Bastille-Linux는 어떤 기능을 제한할 수 있도록 한다.

    ftp 서버 억세스를 다루는 파일은 /etc/ftpaccess 이다.

    - Would you like to disable user privileges on the FTP daemon [N]?
       (ftp 데몬에 대한 사용자 특권 기능을 억제할 것인가?)
       ftp의 문제점중 하나는 무명인(패스워드로 전자우편주소를 갖는 사용자) 접속을 허용하는
       것이다. 다른 문제는 파일 올리기(이를 통해 디스크 용량을 소비할 수 있으며 또한 서버를
       손상시키는 프로그램을 올릴 수 있다)이다. 많은 공격이 이러한 취약점을 사용하는데,
       또다른 문제는 이러한 거래가 암호화되지 않는다는 사실이다.

    - Would you like to disable anonymous download [N]?
       (무명인 내려받기 기능을 억제할 것인가?)
       이는 무명인 로그인을 통한 서버로의 연결을 금지한다.

 

약간의 트릭과 팁들(A few more tricks and tips)

    전에 언급했듯이 Bastille-Linux는 우수한 교육적 도구이다. 질문과 주석은 큰 의미를 갖으며, 이런 것들이 명확하지 않을 경우 올바른 답변을 찾을 수 있도록 많은 자료가 존재한다. 주어진 주제에 대해 배우는 가장 좋은 방법은 바라는 모듈을 사용해 보는 것이다.

    우선 질문을 포함하는 파일을 백업한 후 Question.txt 파일을 편집하라. 모든 모듈은 FILE 키워드로 시작되는데 그중 필요한 것들만을 남긴다.
     /root/Bastille >> cp Question.txt Question.txt-orig
     /root/Bastille >> emacs(vi) Questions.txt BackEnd.pl &
     /root/Bastille >> ./InteractiveBastille

    물론 Bastille-Linux의 조치가 시스템을 안전하게 할만큼 충분하지는 않다.

    1. 어떠한 시스템도 100% 안전하지 않다.
    2. Bastille-Linux의 작업을 마무리 하기 위해서는 더욱 많은 조치가 필요하다.

    로그 파일 분석기, 포트 스캔 탐지 (portsentry, snort, snplog, 등), www.openwall.com 커널 패치 사용(비실행 스택, /tmp와 /proc 디렉토리의 권한 제한 등) 등의 조치가 있다.

    시스템을 안전하게 보호하는 것은 장황하고 힘든 업무이다. 따라서 보안구멍에 대해 자신이 잘 알고 있어야 한다 (securityfocus사이트로부터의 bugtraq같은 메일링 리스트를 통해)

 

결론

    Bastille-Linux는 널리 알려진 배포판을 안전하게 하는데 도움을 준다. 여러분은 "왜 이것을 사용하는가?"라고 질문을 던질 수 있는데, RedHat(Mandrake 도 유사)도 상당히 우수한 특징을 갖고 있다. 본 기사는 배포판을 장려(또는 비방)하려고 쓰여진 것은 아니다. 결국 선택의 자유는 자유 소프트웨어가 갖는 장점중의 하나이다. 사실 본 기사는 다양한 목적을 갖고 있다. 우선 짜릿함을 즐기는 누군가에 의해 파괴된 네트워크를 볼까 두려워하며 지내는 시스템 관리자의 영원한 걱정거리를 보여주고자 하는 것이다. 반면 본 도구를 통해 리눅스 시스템의 설정을 깊게 알아볼 수 있다. 이 점에서 초보자와 상급자에 모두에 대해 리눅스 설정의 신비를 깨닫게 하는 좋은 방법이다.

    두 개의 기본적이고 일반적인 개념은 최소화주의와 깊이로 더 적은 서비스를 가동하는 것이 더 적은 보안구멍을 의미한다. 각 서비스들을 하나가 아닌 여러 방법에 의해 보호하는 것이 보다 바람직하지만 이 방법은 올바르게 설정되지 않은 보호방법이 시스템을 손상시킬 수 있기 때문에 애매할 수 있다.

    마지막으로 다음 버전은 BUS (Bastille Unix Security)로 명명될 것임을 언급하자. BUS는 Bastille-Linux와 Usec (Unix Security Project)로 재명명된 Msec(Mandrake Security Project)의 결합체이다.

 

참고자료(References)

    ● http://bastille-linux.sourceforge.net : Bastille-Linux official site
    ● Bastille-Linux: A Walkthrough : on www.SecurityFocus.com site,
        by Jay Beale, main author of Bastille-Linux, presents the software and its installation.
        It helped me a lot to write the article you are reading ;-)
    ● http://www.sans.org : the site of the SANS group, (Jay Beale collaborates with them).
        A true information mine about computer security.
    ● http://www.securityfocus.com/frames/?content=/vdb/stats.
        html: still at SecurityFocus, an interesting study about OSes and their bugs.
        OS et leurs bugs.
        First places are for a well known "OS" family, next comes Linux.
    ● www.kitetoa.com : a site testing web servers...and finding interesting things.
        At the same time funny and pathetic (for sysadmin caught in the act) -French only-
    ● http://www.ssh.com : secured shell. ssh official site; freely usable for
        evaluation or non commercial use or for universities
    ● http://www.openssh.org : same as ssh ... but under BSD license  :)

    ---------------------------------------------------
    Last modified: Mon Jun 12 16:40:50 CEST 2000




▲ top

home으로...