[ 네트워크 보안 (서비스별) ]
  
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. $HOME/.rhosts
r commands를 인증하는 파일로서 대상 호스트의 지정 사용자를 아무 인증없이 홈디렉토리에 로그인 할 수 있게 합니다.

[이 파일이 필요없다면(기본적으로 잘 쓰지 않는다.)]
개인 계정의 홈 디렉토리에 .rhosts 파일을 가지고 있지 않도록 확인해야 합니다. 이 파일들은 각각의 유저들에 의해 만들어질 수 있기 때문에 /etc/hosts.equiv 파일 보다 더 보안상 위험한 상태에 놓여지게 됩니다. 그리고 주기적으로 cron을 사용하여 이것을 체크해주고 내용을 정리해서 $HOME/.rhosts 파일을 지워 주도록 해야 합니다.

[만약 이 파일의 사용이 꼭 필요하다면]
1) 파일의 첫번째 문자가 ‘-’로 시작하지 않도록 확인해야 합니다.
2) 파일 퍼미션이 600으로 되어있는지 확인해야 합니다.
3) 파일의 소유자가 해당계정의 소유자인지 확인해야 합니다.
4) 파일내에 어떤 라인에서도 ‘+’가 포함되지 않도록 해야 합니다. 이것은 해당 계정에 다른 이용자의 로그인이 가능할 수도 있기 때문입니다.
5) 이 파일은 주석문을 사용할 수 없기 때문에 파일에 ‘!’혹은 ‘#’ 을 허용하지 말아야 합니다.
6) HOME/.rhosts의 사용을 제한할 수 있는 log daemon 을 사용할 수 있다는 것을 기억해야 합니다.

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

[/etc/hosts.equiv 파일을 가지고 있어야만 한다면]
1) 최소한의 신뢰된 호스트의 목록만을 유지하는지 확인해야 합니다.
2) NIS 혹은 NIS+를 사용한다면 좀 더 관리에 쉬운 네트웍 그룹을 사용해야 합니다.
3) 관리하에 있거나 도메인 내부의 호스트들만을 허가해야 합니다.
4) salsari.org 와 같은 완벽하게 사용되어지는 호스트 네임 들을 사용하는지 확인해야 합니다.
5) 시스템을 access하는 유저의 허용때문에 파일 어느 곳에도 “+”를 가지지 않도록 해야 됩니다.
6) 이 파일에서는 주석을 위한 어느 문자도 지원하지 않으므로 ‘!’ 혹은 ‘#’를 사용하지 않도록 해야 합니다.
7) 파일의 퍼미션이 600으로 셋팅되어 있는지 확인해야 합니다.
8) 파일의 소유자가 root 인지 확인해야 합니다.
9) O/S 인스톨이나 패치 후에는 꼭 체크하십시요.

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

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

6. tcp_wrapper
1) 시스템에 이 툴을 설치하고 최적화해야 합니다.
2) PARANOID 모드로 enable 시켜야 합니다.
3) RFC931 옵션과 함께 실행하는 것을 고려해야 합니다.
4) /etc/hosts.deny 파일에서’all:all’을 삽입하여 모든 호스트를 거부한 다음 /etc/hosts.allow파일에서 시스템에 허용된 호스트의 목록을 나열해야 합니다.
5) /etc/inetd.conf 파일에서 enable되어 있는 모든 TCP서비스들을 wrapping 하는 것이 좋습니다.

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

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

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

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

11. anonymous ftp

[anonymous ftp가 필요하다면]
ftp 서버상의 모든 기본 환경설정 옵션을 모두 확인해야 합니다.

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

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

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


4) ftp의 홈디렉토리(~ftp/)가 모드는 555, 소유자는 root (ftp가 아님)로 되어 있는지 확인하십시요.
5) 실제 /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를 제공하기 위해 사용합니다.
6) 실제 /etc/group 파일을 ~ftp/etc/group 파일로 카피본을 만들지 않도록 하고, 퍼미션이 444 이고 소유자가 root인 이 파일을 하나 만들어야 합니다. 7) ~ftp/.rhosts와 ~ftp/.forward 파일이 존재하지 않도록 해야 합니다.
8) ftp 계정의 로그인 쉘을 전혀 기능이 없는 /bin/false 와 같은 것으로 셋팅하는 것이 좋습니다.
9) anonymous ftp를 위해서 쓰기 가능한 디렉토리들을 가지지 않도록 해야 합니다. 쓸 수 있는 디렉토리를 만들지 않는게 가장 안전한 방법이나, 필요성이 있다면 그 수를 하나로 제한하도록 하는 것이 좋습니다.
10) 쓰기 가능한 디렉토리를 만들 경우에는 읽기 가능하지 않도록 해야 합니다. 읽기 및 쓰기 모두 가능한 디렉토리는 인증되지 않은 방식으로 사용될 수 있습니다.
11) 소유자가 root 인 쓰기 가능한 디렉토리는 퍼미션이 1733이 되도록 해야 합니다.
12) 쓰기 가능한 디렉토리는 가능하면 파티션을 분류하여 넣도록 해야 합니다. 이것은 서비스에 대한 공격을 막는데 도움이 됩니다.

13. sendmail
1) 항상 최신 버젼의 sendmail을 사용하여야 합니다.
2) 만일 밴더에서 제공하는 sendmail을 사용한다면, sendmail이 보안상 취약의 온상지가 되어 왔기 때문에 최신의 패치를 인스톨 하기 바랍니다.
3) syslog에 의해 제공되는 logging의 레벨을 증가시켜야 합니다. syslog파일이나 콘솔로 logging 되어지는 메일 메세지를 위한 ‘info’의 최소레벨을 enable시키는 것이 좋습니다.
4) 변경된 환경파일이 유효하기 위해서는 sendmail의 재시동이 필요하다는 것을 기억해야 합니다.
  
  
[돌아가기]