해킹과 보안(III)

이재욱 / salsari@hotmail.com

 

     

1. 들어가기 전에

    - 이 부분을 이해하려면

    여러분들은 UNIX system administration에 관한 기본적인 개념을 어느 정도는 알고 있어야 한다. 어려운 부분도 있겠지만 읽으면서 관심을 가지고 UNIX 관리에 관한 공부도 해보자.

    - 알아두어야 할 용어  및  명령어

    Account  : 계정, 사용자 명, 로그인 명
    cron       : 일련의 작업이 주기적으로 실행되도록 한다.
    finger      : 사용자 정보를 알아내는 명령어.
    .forward  : 메일 수신시 .forward 에 적힌 메일주소로 메일이 전송된다.
    httpd      : web server 데몬.
    quotas    : 디스크 용량을 각 사용자마다 일정한 크기로 제한하는 것.
    sendmail : 메일 송/수신 프로그램.
    shadow   : passwd 파일을 보다 엄격하게 관리하는 방식.
    syslog     : 메일 디버깅 정보.
    su           : 로그인 하지 않고 사용자를 바꿀 수 있게 하는 명령어.
    tftp         : Trivial File Transfer Protocol
    UUCP     : Unix-to-Unix Copy Protocol
    밴더        : 시스템 공급자.
    트로이 목마 : 유용한 프로그램으로 위장하면서 실제는 해로운 영향을 주는 프로그램

     

 2. 안전한 시스템 구축

     

    2.1  Account 보안

      2.1.1  사용자가 해야 할 보안

      가. 사용자의 계정(USER ID)을 패스워드로 사용하지 않는다.
      나. 사용자의 이름을 패스워드로 사용하지 않는다.
      다. 사용자의 개인정보를 패스워드로 사용하지 않는다.
      라. 유추하기 쉬운 숫자나 문자를 패스워드로 사용하지 않는다.
      마. 대소문자, 특수문자를 함께 조합한 패스워드를 사용한다.
      바. 한글 발음, 한글을 패스워드로 사용하는 것이 좋다.

      2.1.2  관리자가 해야 할 보안

      가. 주기적으로 패스워드를 변경한다.
      나. 오랫동안 사용하지 않는 계정에 대해 검사를 하고 지정된 기간동안(보통 3개월)
           사용하지 않은 계정은 disable시켜라. 보통 전자우편으로 계정 변경에 대한 공지를      보내고 응답이 없을 경우 지우도록 한다.
      다. 유추하기 쉬운 패스워드를 입력하지 못하도록 한다.
      라. Crack을 사용하여 유추하기 쉬운 패스워드가 있다면 사용자에게 변경할 것을
           요청하라.
      마. 모든 계정이 패스워드를 가지고 있는지 확인하라. 
           shadow를 확인하고 가지고 있다면 NIS passwd도 그 내용이 비어있는지 확인하라.

     

    2.2  네트워크 보안  

      2.2.1  R COMMANDS

      r commands(rsh, rlogin, rcp)라 함은 타겟 호스트의 신뢰 시스템을 이용한 서비스 방식이다. r commands는 기본적으로 사용하지 않는 것이 좋은데 만약 여러 호스트를 두루 사용하고 있다면 일일히 로그인 명과 패스워드를 입력하기 귀찮을 것이다. 이때 많이 사용하는 것이 r commands 인데 중요한 보안의 문제점을 안고 있다.

      ★ 만약 r commands를 사용해야만 한다면

      필요로 하는 곳에서 좀더 보안이 강화된 버젼의  r command들을 사용하라. Wietse Venema의 logdaemon package는 r command daemon의 좀 더 보안이 강화된 버젼을 포함하고 있다. 이러한 버젼들은 $HOME/.rhosts에 대해서가 아닌, 단지 /etc/hosts.equiv 를 강화시키기 위해 설정되어질 수 있다. 또한 여기에는 와일드 카드 (‘+’)를 사용하지 못하게 하는 옵션을 포함하고 있다. 라우터에서 포트번호 512,513,514 (TCP)들을 필터링하라. 이것은 외부에서의 이러한 명령들의 불법 이용뿐 아니라 내부의 이용도 막을 수 있을 것이다. 이렇게 하기 위해서는 이러한 명령들을 disable하 는 것을 필요로 한다.

      2.2.2  $HOME/.rhosts  

      r commands를 인증하는 파일로서 대상호스트의 지정 사용자를 아무 인증없이 홈디렉토리에 로그인 할 수 있게 한다.

      ★ 이 파일이 필요없다면(기본적으로 잘 쓰지 않는다.)

      개인 계정의 홈 디렉토리에 .rhosts 파일을 가지고 있지 않도록 확인하라. 이 파일들은 각각의 유저들에 의해 만들어질 수 있기 때문에 /etc/hosts.equiv 파일 보다 더 보안상 위험한 상태에 놓여지게 된다. 그리고 주기적으로 cron을 사용하여 이것을 체크해주고 내용을 정리해서 $HOME/.rhosts 파일을 지워 주도록 하라. 유저들에게 이러한 작업을 주기적으로 당신이 실행한다는 것을 알리도록 하라.

      ★ 만약 이 파일의 사용이 꼭 필요하다면..

      가. 파일의 첫번째 문자가 ‘-’로 시작하지 않도록 확인하라.
      나. 파일 퍼미션이 600으로 되어있는지 확인하라.
      다. 파일의 소유자가 해당계정의 소유자인지 확인하라.
      라. 파일내에 어떤 라인에서도 ‘+’가 포함되지 않도록 하라. 이것은 해당 계정에 다른
           이용자의 로그인이 가능할 수도 있기 때문이다.
      마. 이 파일은 주석문을 사용할 수 없기 때문에 파일에 ‘!’혹은 ‘#’ 을 허용하지 마라.
      바. HOME/.rhosts의 사용을 제한할 수 있는 log daemon 을 사용할 수 있다는 것을
           기억하라.

      2.2.3  /etc/hosts.equiv

      rlogin과 같은 프로그램들은 패스워드의 적용없이 어떤 허가된 시스템으로부터 여러분들의 시스템의 동일 계정으로 로그인하는데 사용될 수 있다. 만일 r command를 사용하지 않거나 다른 시스템으로부터의 로그인 허용을 원하지 않을 경우에는 이 파일을 사용하지 않아도 되고 필요하다면 지워도 된다. 이 파일이 존재하지 않는다면 그것은
      r command들을 사용하더라도 별 문제를 일으키지 않을 것이다.

      ★ /etc/hosts.equiv 파일을 가지고 있어야만 한다면

      가. 최소한의 신뢰된 호스트의 목록만을 유지하는지 확인하라.
      나. NIS 혹은 NIS+를 사용한다면 좀더 관리에 쉬운 네트웍 그룹을 사용하라.
      다. 당신의 관리하에 있거나 도메인 내부의 호스트들만을 허가하라.
      라. salsari.org 와 같은 완벽하게 사용되어지는 호스트 네임 들을 사용하는지 확인하라.
      마. 시스템을 access하는 유저의 허용때문에 파일 어느 곳에도 “+”를 가지지 않도록
           하라.
      바. 이 파일에서는 주석을 위한 어느 문자도 지원하지 않으므로 ‘!’ 혹은 ‘#’를 사용하지
           않도록 하라.
      사. 파일의 퍼미션이 600으로 셋팅되어 있는지 확인하라.
      아. 파일의 소유자가 root 인지 확인하라.
      자. O/S 인스톨이나 패치 후에는 꼭 체크하라.

      2.2.4  UUCP

      가. 만일 당신의 사이트에서 필요로 하지 않는다면 로그인을 위해 실행가능한 shell을
           포함하여 uucp 계정을 disable시켜라. 그렇지 않으면 uucp는 위험한 상태로 놓여질
           수 있다.
      나. uucp 홈 디렉토리에 있는 .rhosts파일을 제거하라.
      다. L.cmd 파일의 소유자가 root 인지 확인하라.
      라. 소유자가 uucp인 파일들이 모든 유저들이 쓰기 가능한 퍼미션을 열어 두지 마라.
      마. 당신의 시스템에 uucp실행이 필요한 각각의 사이트를 위해 다른 uucp 로그인을
           지정했는지를 확인하라.
      바. 각각의 uucp 로그인들이 최소한으로 실행할 수 있는 명령의 수를 제한했는지
           확인하라.
      사. 필요하지 않은 전체의 uucp 서브시스템을 지웠는지 확인하라.
      아. 밴더에서 제공하는 uucp 혹은 root의 crontab 단위가 없는지 확인하라.

      2.2.5  /etc/inetd.conf

      가. 이 파일의 퍼미션이 600으로 되어 있는지 확인하라.
      나. 이 파일의 소유자가 root 인지 확인하라.
      다. 필요로 하지 않는 서비스들은 disable시켜라. 이렇게 하기 위하여 우리는 각 라인의
           첫 머리를 주석(#)처리하는 것을 추천한다.
           또한 마찬가지로 첫머리의 ‘#’를 제거함으로써 필요한 서비스를 다시 enable시킬
           수 있다. 특히 ‘r’명령어들과 tftp는 보안에 취약한 대표적인 예이기 때문에 막는게
           좋다. 파일이 변경된 경우 그에 대한 효과를 얻기 위해서는 inetd 프로세스의 재시동
           이 필요하다.

      2.2.6  tcp_wrapper

      가. 당신의 시스템에 이 툴을 설치하고 최적화하라.
      나. PARANOID 모드로 enable 시켜라.
      다. RFC931 옵션과 함께 실행하는 것을 고려하라.
      라. /etc/hosts.deny 파일에서’all:all’을 삽입하여 모든 호스트를 거부한 다음
           /etc/hosts.allow파일에서 당신의 시스템에 허용된 호스트의 목록을 나열하라.
      마. 세부 사항의 운용에 대해서는 이 유틸리티와 함께 배포되는 문서자료를 참조하라.
      바. /etc/inetd.conf 파일에서 enable되어 있는 모든 T CP서비스들을 wrapping하라.

      2.2.7  tftp

      tftp가 필요하지 않다면 /etc/inetd.conf 파일에서 주석(#)처리하고 inetd 프로세스를 재 시동하라.

      2.2.8  fingerd

      Finger는 당신의 호스트에 관한 많은 정보를 침입자에게 제공할 수도 있다는 것을 인지하기 바란다. 당신이 제공하는 finger정보를 고려하고 finger를 disable하거나 엄격한 정보에 의해 제공되는 버전으로 대체함으로써 내용을 감소시키는 것을 생각하기 바란다.
      rusers나 netstat와 같은 다른 서비스들이 비슷한 정보를 제공할 수도 있다.

      2.2.9  httpd

      가. root 계정으로 서버를 실행하지 마라.
      나. root 계정으로 클라이언트를 실행하지 마라.
      다. 만일 웹 서버가 설치되어 있지 않다면 chroot()를 이용하여 안전하게 설치하라.
      라. 서버 실행시 환경 옵션의 사용에 주의하라.
      마. CGIWRAP를 사용하라.
      바. 필요하지 않다면 CGI 스크립트가 실행되지 않도록 하라.
      사. CGI 프로그램 작성시 매우 주의를 해야 한다. 이러한 프로그램들은 클라이언트로부
           터 전달되는 정보들을 계산하고, 가끔은 악의를 가진 외부 이용자로부터의 입력을
           실행할 수 있다. 만일 이러한 프로그램들이 주의깊게 작성되지 않는다면 외부의
           유저가 서버시스템 상의 임의의 명령을 실행함으로써 시스템을 망가뜨릴 수도 있다.
           거의 모든 취약점들은 이러한 원인으로 발생된다.
      아. CGI들은 인터프리트되는 스크립트보다는 정적으로 링크된 바이너리로서 제공
           하도록 하라. 이것은 chr ooted 환경내에서 사용될 수 있는 명령해석요구를 제거할
           수 있다.
      자. cgi-bin 디렉토리 내에 있는 파일들의 퍼미션, 소유자 그리고 파일의 내용을 확인
           하라.  /usr/ucb/ mail과 같이 외부로 메세지를 넣어 보내어지도록 명령들을 허용
           하는 Perl, AWK 그리고 유닉스 쉘 프로그램 같이 명령 해석기로 직접적인 입력이
           가능하도록 하는 것을 피하라.
      카. 유저들의 사용시 명령해석기로 넘겨주기 전에 잠재적으로 위험한 문자의 사용을
           필터링하라. 가능한 위험한 문자로는 \n \r (.,/;~!)>|^&$`< 등이 있다.

      2.2.10  ftpd

      가. 당신이 사용하는 ftp 데몬이 최근의 버전인 것인지 확인하라.
      나. 당신의 ftp 서버상에 있는 디폴트 환경설정 옵션을 모두 체크하라.
      다. /etc/ftpaccess 파일의 설정을 최적화시켜라.
      라. /etc/ftphosts 파일을 수정하여 원하지 않는 호스트로부터의 침입을 방지할 수 있다.
      마. 당신의 ftpd에 연결을 허용하지 않을 유저들이 기술된 /etc/ftpusers 파일이 셋업
           되어 있는지를 확인하라. 이곳에는 최소한 계정에 넣은 모든 밴더와 nobody,
           news,daemos, ingres, uucp, bin, root등을 포함시켜라.

      2.2.11  anonymous ftp

      ★ anonymous ftp가 필요하다면

      가.  ftp 서버상의 모든 기본 환경설정 옵션을 모두 확인하라.

      ★ anonymous ftp가 필요하지 않다면

      가. 당신의 시스템에 anonymous ftp를 실행 중인지를 확인하기 위해서 anonymous ftp
           를 사용하여 호스트에 접속해 보라.
      나. 패스워드로서는 RFC822에 정의된 완전한 유저네임을 사용해야 한다.
      다. anonymous ftp를 disable시키기 위해서 ~ftp/ 내의 모든 파일을 다른 곳으로
           옮기거나 지워라.
      라. 그리고 당신의 /etc/passwd 파일에 있는 ftp user 를 지우도록 하라.
      마. 만약 당신이 분산된 패스워드를 사용하고 있다면 (예를 들어 NIS, NIS+) 당신의
           시스템에 제공되는 패스 워드 엔트리뿐 아니라 로컬 패스워드 파일을 체크해 볼
           필요가 있다.

      2.2.12  ftp 서버의 환경설정

      가. 당신의 ftp 서버상의 모든 기본 환경설정 옵션을 모두 확인하라. 보든 버전의 ftp가
           환경설정 되어지는 것만은 아니다. 만일 당신이 환경설정 가능한 버전의 ftp를
           가지고 있다면 (예를 들어 wu-ftp) 모든 guest및 anonymous 유저들에 대해서
           삭제, 삽입, 변경, chmod,umask옵션 등을 허용하지 않도록 하라.
           보통 anonymous 유저들은 불필요한 권한을 가지지 않도록 해야 한다.
      나. ~ftp/bin 과 ~ftp/usr/bin, ~ftp/sbin 혹은 그 외 비슷한 성격의 디렉토리에 shell
            이나 펄과 같은 명령 해석기들을 포함하지 말아야 한다.
      다. /etc/passwd 와 /etc/shadow 파일에서 ftp를 위한 부분이 사용 불가능한 패스워드
           와 쉘로 셋팅하도록 하라. 이것은 다음과 같을 수 있다.

           ftp:*:400:400:Anonymous  FTP:/home/ftp:/bin/false

      라. ftp의 홈디렉토리(~ftp/)가 모드는 555, 소유자는 root (ftp가 아님)로 되어 있는지
           확인하라.
      마. 당신의 실제 /etc/passwd 파일을 ~ftp/etc/passwd 파일로 카피본을 만들지
           않도록 하고, 퍼미션이 444 이고 소유자가 root인 파일을 하나 만들어라. 이곳에는
           실제 /etc/passwd에 포함된 계정을 포함하고 있어서는 안된다.
           이곳에는 단지 root와 ftp를 포함하도록 하라. 이것은 패스워드를 disable시킨
           dummy entry가 되도록 한다.

           root:*:0:0:Ftp maintainer::ftp:*:400:400:
           Anonymous FTP::

           이 패스워드 파일은 ls(1) listing 을 위해 유저이름에게 단지 uid를 제공하기 위해
           사용한다.
      바. 당신의 실제 /etc/group 파일을 ~ftp/etc/group 파일로 카피본을 만들지 않도록 하고, 퍼미션이 444 이고 소유자가 root인 이 파일을 하나 만들어라.
      사. ~ftp/.rhosts와 ~ftp/.forward 파일이 존재하지 않도록 하라.
      아. ftp 계정의 로그인 쉘을 전혀 기능이 없는 /bin/false 와 같은 것으로 셋팅하라.
      자. anonymous ftp를 위해서 쓰기 가능한 디렉토리들을 가지지 않도록 하라.
           쓸 수 있는 디렉토리를 만들지 않는게 가장 안전한 방법이나, 필요성이 있다면 그
           수를 하나로 제한하도록 하라.
      차. 쓰기 가능한 디렉토리를 만들 경우에는 읽기 가능하지 않도록 하라. 읽기 및 쓰기
           모두 가능한 디렉토리는 인증되지 않은 방식으로 사용될 수 있다.
      카. 소유자가 root 인 쓰기 가능한 디렉토리는 퍼미션이 1733이 되도록 하라.
      타. 쓰기 가능한 디렉토리는 가능하면 파티션을 분류하여 넣도록 하라.
           이것은 서비스에 대한 공격을 막는데 도움이 된다.

      2.2.13  sendmail

      가. 항상 최신 버젼의 sendmail을 사용하라.
      나. 만일 당신이 밴더에서 제공하는 sendmail을 사용한다면, sendmail이 보안상 취약의
           온상지가되어 왔기 때문에 최신의 패치를 인스톨 하기 바란다.
      다. syslog에 의해 제공되는 logging의 레벨을 증가시켜라. syslog파일이나 콘솔로
           logging 되어지는 메일메세지를 위한 ‘info’의 최소레벨을 enable시켜라.
      라. 변경된 환경파일이 유효하기 위해서는 sendmail의 재시동이 필요하다는 것을
           기억하라.

 

    2.3  시스템 보안

      2.3.1  Patch

      밴더로부터 패치 목록을 구한 다음 시스템에 추천되는 패치중에 아직 인스톨되어 있지 않은 것을 인스톨 하라.

      2.3.2  General

      가. 당신의 시스템 상에 불법적인 목적을 가진 .exrc파일들이 있는지를 확인하라.
      나. .exrc 파일 기능을 disable시키기 위해 EXINIT 환경변수의 사용을 고려해 보라.
           이러한 파일들은 이 파일이 포함된 디렉토리에서 vi(1) 혹은 ex(1) 같은 명령을
           실행했을 경우 당신의 시스템 보안에 문제가 생기게 할 수도 있다.
      다. 유저의 홈 디렉토리에 있는 .forward 파일들이 인증되지 않은 명령이나 프로그램을
           실행하지 않는지 확인하라. mailer는 권한이 있어야만 실행이 되는 것들을 일반
           유저에게 허용하도록 잘못되어질 수도 있다. 인증되지 않은 프로그램들은 smrsh의      사용을 통해서 제한되어질 수 있다.
      라. Startup and shutdown scripts가 “chmod 666 motd”를 하지 않도록 하라. 이것은
           유저 로그인시 보여주는 메세지를 일반 유저가 변경시킬 수 있도록 허용한다.  
      마. /dev 에 있는 모든 파일들이 특수 파일인지를 확인하라. 특수 파일들은 퍼미션 비트
           의 첫번째 부분을 확인함으로써 알 수 있다.
      바. /dev 이외에 비정상적인 스페셜 파일이 있는지 확인하라.
      사. 유저 영역을 적절하게 백업하고 그 내용을 기록하라.
      아. 설정되어 있지 않다면 계정에 대해 quotas를 설정하도록 하는게 좋다.

      2.3.3  Passwd shadowing

      가. 밴더에서 제공되는 passwd shadowing, 혹은 third party 제품을 enable 시켜라.
           passwd shadowing 은 이용자의 암호화된 패스워드의 접근을 제한한다.
      나. 인증되지 않은 검사나 불일치성에 대해 당신의 passwd 및 shadow 파일을 주기적
           으로 검사하라.

      2.3.4  Special accounts

      가. 보안 정책에 따라 root의 다른 분산된 계정이 없도록 하라. 계정의 비밀번호를 한
           사람 이상이 알지 않도록 하라.
      나. guest 계정을 disable시켜라. 아직까지는 guest 계정을 만들지 않는 게 좋다.
      다. 일반 유저가 root가 되기 위해 su 명령을 사용할 때 엄격성을 위하여 특별한
           group(SUN OS에서는 “wheel”과 같은)을 사용하라.
      라. OS와 할께 제공되는 모든 기본 밴더 계정들을 dis able시켜라. 이것은 각각
           업그레이드나 인스톨 한 후에 체크되어야 한다.
      마. “sync”와 같이 명령을 수행하는 패스워드를 가지고 있지 않은 계정들을 disable
           시켜라. 이러한 계정에 의해 소유된 파일들의 소유자를 바꾸든지 삭제하라.
           이러한 계정들이 cron 이나 jobs를 가지고 있지 않도록 하라. 이러한 계정들을 전부
           지우는게 가장 좋은 방법이다.
      바. 만일 필요하지 않다면 sync, daemon, bin 등과 같은 시스템 계정에 /bin/false과
           같은 기능이 없는 쉘을 지정하라.

      2.3.5  root 계정

      가. root 패스워드를 알고 있는 사람의 수를 엄격히 제한하라. 이것은 groupid가 0으로
           등록된 유저들 이여야 한다(예를 들어 SunOS에서는 wheel group).
           전형적으로 이것은 대부분 3~4 명으로 제한된다.
      나. 보안정책에 따라 네트워크를 통해 root로 로그인 하지 마라.
      다. 일반적으로 root로 로그인하는 것보다 유저 계정에서 su를 실행하는 게 더 나은
           보안을 제공한다.
      라. root 는 ~/.rhosts 파일을 가지지 않도록 하라.
      마. root의 path 에 “.”을 넣지 않도록 하라.
      바. root의 login 파일들은 root에 의해 소유되지 않은 파일을 사용하지 말고 group나
           world에 의해 쓰기 가능하지 않도록 하라.
      사. root의 cron jobs 파일은 root에 의해 소유되지 않은 파일을 사용하지 말고 group나
           world에 의해 쓰기 가능하지 않도록 하라.
      아. root 명령 수행 시 절대 path 경로를 사용하도록 하라.(예를 들어 /bin/su, /bin/find)
           이것은 root가 트로이 목마의 실행을 막기 위해서 필요하다. 현재 디렉토리에서
           명령을 실행하기 위해서는 “./”와 함께 명령을 실행해야 한다.

      2.3.6  log file

      log 파일에는 해킹의 흔적들이 남겨져 있을 수 있다. 그러므로 주기적으로 로그 파일을 백업하고 체크하는 습관을 길러라.

      가. su(1)시도에 관한 로그들을 주기적으로 모니터링 하라.
      나. 반복적인 로그인 실패에 관해 주기적으로 모니터링 하라.
      다. 로그인 거부 메세지에 대해 주기적으로 모니터링 하라.
      라. 기본적 log 파일의 위치( /var/adm, /var/log)

    2.4  NFS/NIS 보안

      2.4.1  NFS

      네트워크를 통하여 서로 다른 컴퓨터들이 파일 시스템들을 공유할 수 있도록 한다. NFS를 사용할 때 일반적으로 마운트된 파일들을 관리해주는 NFS 서버의 보안을 전적으로 신뢰하는 경향이 있다.

      가. NFS 트래픽을 라우터에서 필터링하고, port 111상의 TCP/UDP와 port 2049상의
           TCP/UDP를 필터링 하라. 이것은 당신의 서브넷 상에 있지 않은 기계들이 당신의
           기계에 export된 파일 시스템의 사용을 막아줄 것이다.
      나. 사용할수 있는 모든 패치를 적용하라. NFS는 많은 보안상의 문제점을 안고 있기
           때문이다.
      다. NFS port 모니터링을 enable시켜라. 파일시스템 마운트를 위한 호출들은 오직
           포트번호 1024이하의 것만 허용한다. 이것은 어떤 상황하에서는 더 나은 보안을
           제공한다.
      라. exports 파일에 “localhost” entry가 포함하도록 허용하지 마라.
      마. 오직 제한된 전체의 호스트 네임으로 export하라.
      바. export 리스트가 256문자를 초과하지 않도록 제한하라. /etc/export내에서 host
           들의 목록을 실행한다면, 그 목록은 호스트 이름이 확장된 후 256 문자이상을
           초과할 수 없다.
      사. 무심결에 파일시스템을 전세계로 절대 하지 마라.
           -access=host.domainname.au  옵션이나 그에 상응하는 것을 사용하라.
           “export” 나 “dfstab” 에 관해 더 많은 기능을 알고자 한다면 manual page를
           참조하라.
      아. 가능하면 파일 시스템을 read-only(-ro)로 export하라.
      자. 만약 NIS가 필요한 상황이라면, exports 파일과 마운트 요청에 보안옵션을
           사용하라.(보안 옵션이 사용가능한 경우)
      차. 현재 export되어있는 것을 보고자 한다면 “showmount-e”를 사용하라.
      카. 클라이언트에서 마운트 요청을 허용하지 않는 rpcbind나 portmapper를 실행했는지
           확인하라. 악의있는 NFS 클라이언트는 마운트 대몬에게 요청을 받아들이게 하기
           위해 서버의 portmapper daemon에게 요청할 수 있다. 이 경우 마운트 대몬은
           그 요청을 portmapper로부터 직접적으로 온 것처럼 실행한다. 파일 시스템이 자체
           마운트될 경우 이것은 파일 시스템에게 인증되지 않은 허가를 주게 된다.
           /etc/exports를변경하는 것은 /usr/etc/exports 혹은 그 외 상응하는 것을 실행 한
           후에야 비로소 효과를 얻을 수 있다는 것을 기억하라.

      2.4.2  NIS

      중요한 시스템 데이터베이스 파일들을 네트워크를 통하여 공유함으로써 관리자와 사용자들에게 일관성 있는 시스템 환경을 제공한다.

      가. /etc/passwd 파일에 ‘+’ entry 를 가진 기계가 NIS master 서버가 아닌
           클라이언트로 사용되어지고 있는지를 확인하라.
      나. /etc/rc.local 혹은 그에 대응하는 스타트업 절차가 ypbind 를 -s 옵션과 함께
           스타트하기 위해 셋업되어 있는지 확인하라. 이것은 모든 시스템들에서 적용되지
           만은 않을 것이다. 당신의 시스템 문서를 확인하라.
      다. secure RPC를 사용하라.

 

3. SECURITY TOOL을 이용한 시스템 구축

    보안 툴들은 아래와 같이 몇 가지 형태로 분류할 수 있다.

    - 패스워드 강화 툴
       Npasswd, Passwd+, Shadow, Chacct, Crack, SKey
    - 파일 시스템 변경 및 Checksum 관리 툴
       MD5, MD5 check, Tripwire
    - 모니터링 툴
       Tcpdump, NETMAN, Netlog, NFSwatch
    - 시스템 보안점검 툴
       COPS, Tiger
    - 네트워크 보안상태 분석 및 보안 툴
       SATAN, Gabriel, SAINT, ISS

    그럼 몇 가지 보안툴들을 자세히 살펴보자.

    - COPS
    COPS(Computerrized Oracle and Passward System)는 UNIX system 의 보안점검 프로그램이다. COPS 패키지는 보안을 조사해 주는 실제 프로그램들과 설치방법과 작동방법 그리고 결과를 해석하는 도큐먼트들로 구성되어 있다. COPS는 root가 뿐만 아니라 일반 user 도 사용할 수 있다.

    주요 특징 :
    -> root suid file들의 리스트와 write 가능 여부, shell script 여부
    -> crack 으로 발견되기 쉬운 password check
    -> 주요 system file, directory, device의 owner 와 permission check
    -> password file 과 group file 내의 UID=0 등의 기본적인 체크
    -> /etc/rc*.d/* 에 의해 수행되는 program 들과 crondaemon에 의해 수행되는
        프로그램들의 vulnerability
    -> 주요 binary file들의 CRC check하여 변동시 시스템 관리자에게 통보
    -> /etc/inetd.conf 에 의해 감추어져 있을지 모를 hidden shell check
    -> 각 사용자들의 home directory의 .cshrc, .profile, permisson check
    -> /etc/hosts.equiv 의 ‘+’ 여부 (없어야 함)
    -> unrestricted NFS mount setup
    -> /etc/ftpuser 에 root 가 들어 있는지 여부(들어 있어야 함 : ftp로 root 거부한다는 뜻)
    -> CERT 에 의한 보고 된 파일의 patch 여부
    -> anonymous ftp 환경설정이 제대로 되어있는지 등을 체크

    단점 :
    -> COPS는 단지 보안문제에 대하여 알려주기만 할 뿐 수정을 해 주지는 않는다.
    -> 실행시간이 굉장히 길고, 시스템내의 로드도 상당히 심하다.
    -> 최신 버그에 대해서는 무방비하며 OS별로 나타나는 특정 버그나 hole에 대해서도
         대응할 수 없다.

    - SATAN
    Dan Farmer와Wietse Venema가 만든 SATAN(System Administrator Tool for Analyzing Network)은 리모트 시스템의 보안 취약점을 체크한다. 따라서 이 프로그램을 작동시키는 모든 사용자는 다른 시스템의 보안상 문제점을 발견할 수 있다. SATAN은 네트워크를 통하여 리모트 시스템의 보안정도를 조사하고 그 자료를 HTML Browser을 통하여 호스트의 타입, 서비스, vulnerability 등의 보고서를 만들어 보여준다. SATAN은 문제를 발견하면 검색기 상에 그것이 왜 문제가 되는지와 어떻게 하면 문제를 해결할 수 있는지를 알려준다.

    주요 특징 :
    ->FTP vulnerabilities
    -> 권한이 주어지지 않는 NFS 파일시스템 export(access control을 검사)
    -> portmap을 통한 NFS의 export(현재 export되어서 사용 중인 호스트 검사)
    -> NIS의 패스워드 파일 접근
    -> REXD 액세스
    -> Sendmail vulnerabilities
      - Sendmail 4.1 pipe bug
      - Sendmail 5.55 pipe bug
    -> TFTP의 파일 접근
    -> r-shell의 접근 (.rhost, /etc/hosts.equiv 에 +기호가 있는가)
    -> 제한이 없는 X 서버로 의 접근
    -> 쓰기 권한이 있는 FTP의 홈 디렉토리
    -> finger 사용 여부

    단점 :
    -> 업그레이드가 진행되지 않아서 체크가능한 버그 리스트가 최신이 아니다.
    -> 해커가 공격할만한 목표 시스템을 대상으로 remote bug를 조사할 수 있다.
    -> SATAN 수행도중 secret key가 노출될 경우 역해킹 당할 수 있다.

    -ISS
    Iss는 internet security scanner의 약자로서 원격 호스트의 포트 스캔을 기본으로 하는 security checker이다. 주로 public하게 공개되어 있는 호스트 (이를테면 bbs를 돌리는 호스트나 anonymous ftp 서비스를 지원하는 호스트)를 스캔 할 목적으로 제작되었다. 하지만 인터페이스가 상당히 좋지 않기 때문에 그리 좋은 평가는 받지 못했다. 그럼에도 불구하고 한번에 넓은 범위의 호스트들을 한꺼번에 빠른 속도로 스캔 할 수 있다는 장점이 있다.

    주요 특징 :
    -> guest, bbs, lp 등의 시스템 내의 보안적인 측면에서 공격대상이 될만한 계정을  remote로
        조사
    -> 각종 프로그램의 vulnerability를 remote로 체크
    -> iss 는 스켄 범위에 지정된 여러 호스트를 빠른 속도로 체크할 수 있다.
    -> 딸려 나오는 부가적인 tool들을 이용하여 exploit에 이용할 수 있다
         - netbug
         - strobe
         - ypx

    단점 :
    -> iss 의 interface는 문자기반이기 때문에 사용자들이 사용하기에 불편할 수도 있다.
    -> iss 는 빠른 속도로 port check와 hole을 알아 낼 수 있다. 하지만 자세한 부가 설명이
         없으므로 이를 이해하려면 어느 정도의 수준이 필요하다.
    -> 외부에서의 port 스캔 등은 뛰어나지만 자체적인 내부의 OS 차원 버그는 체크를 해주지
         못한다.
    -> 해커가 remote로 공격 시스템의 정보를 입수할 수 있다.
    -> 소스의 공개로 변형소스들이 직접 공격에 가담되기도 한다.

    -Tiger
    Tiger는 Cops와 비슷한 종류의 UNIX Security check program 이다.

    -Crack
    UNIX 시스템의 passwd는 DES(Data Encryption Standard)를 따르므로, 역함수를 구할 수 없다. 하지만, 이 패스워드를 추측하여 사전파일을 만들어 이를 /bin/passwd에 의해 암호화 시킨 뒤 이것을 /etc/passwd 파일 내의 암호와 비교하여 암호를 추적하는 것이 Crack이다.

    -Tripwire
    침입자의 발생으로 시스템의 파일이 손상되었거나 변형되었다고 했을 때 손상된 파일 시스템은 찾아내어 복구할 수 있지만 침입자가 백도어 등의 목적으로 시스템 파일을 변형시켰을 경우 발견되지 않는 한 영원히 남아 있게 될 수도 있다. 이 때문에 심각한 문제를 발생시킬 수도 있다. 침입당하기 이전에 시스템 파일에 관한 데이터베이스가 작성이 안되어 있었다면 파일이 변형이 되었는지를 알기란 쉬운 일이 아니다. Tripwire는 바로 그 데이터베이스를 만들어 놓고 그것과 파일 시스템의 상태를 비교해 불법적인 변화를 발견해서 관리자에게 알려주는 역할을 한다.

    - Cmp
    해커가 시스템에 침투하여 root권한을 얻고 packet sniffing을 할 경우 네트워크 인터페이스는 ‘promiscuous mode’로 전향된다. Cmp는 바로 네트워크 인터페이스가 ‘promiscuous mode’인지 아닌지를 알려준다.

    - Netlog
    TCP와 UDP등의 패킷 전송상황을 모니터할 수 있는 Tool이다. 자신의 호스트로의 접속뿐만 아니라, 서브넷 상에서 이동하는 모든 패킷들을 볼 수 있다. 하지만 패킷만 보여줄 뿐, 이를 분석하는 루틴들은 제공되지 않으므로 사용하는데 상당한 지식과 관심이 필요한 모니터링 Tool이다.

    - TCP wrapper
    Wietse Vanema에 의해 제작된 TCPwapper 는 호스트레벨에서 특정 프로토콜과 포트, 네트워크 IP 에 따른 접속허가를 내줄 것인지 거부할 것인지 결정하는 packet dropper이라고 볼 수 있다.

    - TCPdump
    네트워크 상을 오가는 TCP 패킷들을 모니터링하는 툴이다.

    - TIS Firewall Toolkit
    Trusted Infomation System 에 의해 제공되는 TIS는 특정한 네트워크로부터의 접근을 원천봉쇄하는 일종의 방화벽이며, 공개된 버전이므로 손쉽게 설치하여 사용할 수 있다.

 

4. 방화벽(Firewall)

    방화벽이란 2개의 네트워크 사이에서 접근제어 정책을 구현할 수 있도록 하는 시스템이나 시스템들의 집합이다. 궁극적으로 이 시스템이 수행하는 기능의 입장에서는 2개의 메카니즘으로 이루어지는데, 즉 네트워크에서의 트래픽을 막는 것과 허용하는 것이다. 방화벽에 따라 2가지중 어떤 하나가 더욱 강조될 수 있으나 아마 가장 중요한 것은 방화벽이 접근제어 정책을 구현한다는 사실이다.

    - 방화벽의 사용 이유
    인터넷에서도 일반 사회에서 벌어지는 다른 사람의 벽에 낙서를 하거나 우체통을 훼손하거나 차량을 훼손하는 등등의 일들과 유사한 행위들이 벌어지고 있는데, 여기에는 중요한 데이타나 자원들이 있을 수 있어 인터넷에 가입된 기관은 이를 막으려 하고 있다. 방화벽의 주된 목적은 이러한 불법행위에 대해 자신의 네트워크를 보호하고 내부에서는 일상적인 업무를 평시와 같이 할 수 있도록 하자는 것이다.

    - 방화벽이 할 수 있는 일
    어떤 방화벽은 단지 전자우편 트래픽만을 허용하기도 하는데, 기본적으로 E-mail 서비스 공격이 아닌 모든 네트워크공격에 대해 보호한다. 어떤 방화벽은 보다 느슨한 제한을 두어 단지 문제가 알려져 있는 서비스만 막는다. 일반적으로 방화벽은 외부에서의 불법적인 대화형 접근을 막을 수 있도록 구성할 수 있으며 불법행위자들이 내부의 네트워크 기계로 접근하는 것을 봉쇄한다. 그러면서 내부 사용자는 외부에 자유롭게 접근할 수 있도록 허용한다. 하지만 방화벽은 어디에서 출발한 트래픽일지라도 제어할 수 있다. 방화벽은 보안과 기록(Audit)이 필요한 곳이라면 단 하나의 점검할 수 있는 기능이 제공되어 매우 중요하다. 방화벽이 제공하는 로그를 이용하여 어떠한 트래픽일지라도 관리자에게 보고 할 수 있도록 만들고 얼마나 많은 침입시도가 있었는지를 알 수 있다.

     

참고한 글

    ACERT의 UNIX Computer Security Checklist (Version 1.1) Last Update 19-Dec-1995
    인터넷 방화벽 시스템 - FAQ Marcus J. Ranum, ranum@iwi.com

    ----------------
    혹시 이 글에 대한 내용 중 틀린 글이 있거나 저작권에 위배된 내용이 있다면 저에게 메일주세요.
    이재욱 E-Mail : salsari@hotmail.com

     




▲ top

home으로...