이메일을 적으시면 보안관련 소식을 받을수 있습니다.
이메일:

작성자: 정웅구
편집자: 엔시스



안녕하세요! 정웅구입니다.

지난 번 포스팅에서는 윈도우 시스템 보안 설정에 관해서 포스팅을 했는데요 이번에는 유닉스 시스템 보안 설정에 관해 포스팅 하겠습니다. ^^

01. 계정 관리
02. 서비스 관리
03. 패치 관리
04. 접근 제어
05. 파일 및 디렉터리 관리


01. 계정 관리

 - 취약한 패스워드 점검

 - 사용하지 않는 계정의 삭제

 - 중복된 root계정의 존재 여부

   => root 이외의 관리자 계정의 존재 여부를 확인하는 방법은?!

# grep ':0:' /etc/passwd

    cf). root 계정 이외의 관리자 계정 생성하기

     ①. useradd로 wung9 계정 생성


     ②. /etc/passwd 파일의 내용 변경(User ID 부분을 "0"으로~)


       여기서 잠깐!!! /etc/passwd의 구조에 대해 알아보겠습니다. 각각의 정보는 ':'으로 나뉘어져 있고 의 각 항목이 의미하는 것은 순서대로 다음과 같습니다.

         ⓐ. 사용자 계정
         ⓑ. 암호화 되어 있는 패스워드(/etd/shadow file)
         ⓒ. 사용자 번호
           - 관리자 : 0번
           - 일반 사용자 : 500번부터
         ⓓ. 그룹 ID
         ⓔ. 실제 이름
         ⓕ. 사용자의 홈 디렉터리
         ⓖ. 사용자 쉘(로그인이 필요없는 사용자의 경우 /bin/bash -> /bin/false로 바꿔준다.)

     ③. 계정의 패스워드 설정


     ④. 생성 확인


 - 계정에 대한 정책 적용

   => /etc/shadow file에서 할 수 있습니다.


   ①. 사용자 계정
   ②. 암호화된 패스워드
   ③. 1970년 1월 1일을 기준으로 마지막 패스워드를 바꾼 날까지의 값(days)
   ④. 패스워드를 바꾸기 전에 패스워드를 사용한 기간(days)
   ⑤. 패스워드를 바꾸지 않고 사용할 수 있는 최대 사용기간(days)
   ⑥. 위의 ⑤번에서 설정한 값 몇 일 전에 경고를 보낼 것인가 지정(days)
   ⑦. 계정 사용에 대한 제한을 설정한 다음 언제 사용 정지되게 할 것인가 설정(days)
   ⑧. 계정의 사용이 정지된 기간(1970년 1월 1일을 기준으로)(days)
   ⑨. 관리자가 임의로 사용할 수 있는 부분


02. 서비스 관리

 - 먼저 솔라리스에서 기본적으로 동작되는 서비스를 nmap을 통해 알아보겠습니다.


 - 상당히 많은 서비스가 기본적으로 동작하고 있음을 알 수 있습니다. 그럼 중요한 서비스에 대해 알아볼까요?

   (1). echo(포트 7)

     - RFC862 에 정의(링크)

     - 어떤 시스템이 echo 포트로 데이터를 보내면 데이터를 보낸 시스템에게 똑같은 데이터를 보냄

   (2). discard(포트 9)

     - RFC863 에 정의(링크)

     - 어떤 데이터를 받더라도 그 데이터를 소거하는 역할(응답을 보내지 않음)

   (3). chargen(포트 19)

     - RFC 864에 정의(링크)

     - 입력 값에 상관없이 임의의 문자열을 보냄

   (4). ftp(포트 21)

     - 원격 버퍼 오버플로우 공격

     - 포맷 스트링 공격

     - anonymous 로그인

     - root 계정의 로그인 허용

     - 로그인 사용자의 제한

       => ftp의 경우 해당 시스템에 계정이 있으면 누구나 로그인 가능
       => /etc/ftpuser 파일을 통해 계정 제한

   (5). ssh(포트 22)

     - telnet의 계량형으로 암호화된 통신을 한다.

     - ssh는 ssh1, ssh2 2가지 종류가 있으며 둘의 특징은 다음과 같습니다.

       ①. Cipher for encryption

 Cipher ssh1  ssh2
 DES  ○  X 
 3DES  ○  ○
 IDEA  ○  X
 Blowfish  ○  ○
 TwoFish  X  ○
 Arcfour  X  ○
 Cast128-cbc  X  ○

       ②. Cipher for authentication

 Cipher  ssh1  ssh2 
 RSA  ○  X
 DSA  X  ○


   (6). telnet(포트 23)

     - /etc/default/login 파일에서 원격 접속 설정

       ①. #CONSOLE = /dev/console : 로컬 및 원격에서 root로 접속 가능
       ②. CONSOLE = /dev/console : 콘솔에서만 접속 가능
       ③. CONSOLE = : root로 로그인되지 않고 일반 유저로 접속 후 su를 통해 접속 가능

   (7). smtp(포트 25)

     - 메일을 보내기 위한 프로토콜

     - sendmail의 경우 expn과 vrty 명령의 실행을 통해 사용자 목록화 가능 이를 방지하기 위해 /etc/maill/sendmail.cf 파일 안의  O PrivacyOptionsnoexpnnovrfy를 추가해준다.

   (8). tftp(포트 69)

     - ftp의 간략화 버전으로 인증과정이 없다.

     - 라우터나 스위치처럼 저장 매체가 설치되지 않은 시스템이 자신의 운영체제를 내려받을 때 사용

     - tftp 사용 시 /etc/inetd.conf에서 주석 표시를 제거해주고 -s /tftpboot 옵션을 주고 실행

   (9). finger(포트 79)

     - 서버에 현재 로그인 중인 사용자 계정에 대한 정보를 확인

   (10). http(포트 80)

     - 웹 서비스  수행

   (11). sunrpc(포트 111)

     - 자신에게 연결을 요청한 클라이언트에게 등록된 포트 중 적당한 포트를 할당해주고 클라이언트는 rpc로 받은 서버 정보를 이용해 자신에게 필요한 서비스를 포트로 접속

     - 관련 취약 서비스 : rpc.statd, rpc.ttdbserver

     - /etc/init.d/rpc stop

     - /etc/rc2.d 아래에 있는 rpc 서비스 제거

   (12). lockd(포트 4045)

     - nfs를 사용할 경우에 하나의 클라이언트가 시스템 자원에 대해 자원을 공유할 때 파일을 여는 동안 다른 클라이언트가 중복 변경을 행하지 않도록 파일을 잠그는(lock) 데몬이다.

     - /etc/rc2.d/S73nfs.client 를 제거

03. 패치관리

 - 해당 벤더 사이트에서 패치

1. RedHat


2. Solaris


3. HP-UX


4. IBM


04. 접근 제어

 - 유닉스(솔라리스)에서 접근 제어를 하기 위해 TCPWrapper를 사용합니다.

 - TCPWrapper를 이용한 접근 제어를 하기 전에 inetd(수퍼 데몬)의 대한 이해가 필요합니다. 그래서 먼저 inetd에대해 살펴보고 그 후 TCPWrapper를 이용한 설정에 대해 알아보겠습니다.

 1. inetd 데몬

                                                                  <inetd 데몬의 구성>

   (1). 그림과 같이 텔넷과 FTP 클라이언트가 서버에 접속을 요구하면 inetd 데몬이 이를 확인

   (2). /etc/inetd.conf 파일에 데몬에 대한 설정을 읽음

   (3). /etc/services 파일에서 설정된 포트 번호에 대해 클라이언트의 요청이 있을 때  텔넷 데몬을 실행

   - /etc/inetd.conf 파일을 vi를 통해 열면 아래 그림과 같다. 파일에는 여러 데몬에 대한 설정이 7개 부분으로 나와 있는데 각 부분에 대해 알아보자.


     ①. telnet -> 서비스

       - 서비스 이름을 정의하며, /etc/services에 정의되어 있어야 한다.



     ②. stream -> 소켓 타입
    
       - tcp의 경우 stream, udp의 경우 dgram

     ③. tcp6 -> 프로토콜

       - /etc/protocols에 정의된 프로토콜의 종류와 번호


     ④. nowait -> 대기설정

       - inetd가 서비스 요청을 받은 경우 즉시 처리할 것인가의 여부에 따라 nowait or wait

     ⑤. root -> 로그인 이름

       - 데몬을 어떤 사용자의 권한으로 수행할 것인가 명시

     ⑥. /usr/sbin/in.telnetd -> 서버

       - 해당 서비스를 수행하기 위해 어떤 프로그램을 실행시킬 것인가를 절대경로로 표시

     ⑦. in.telnetd -> 인자

       - 데몬을 실행하는데 필요한 인자 값

2. TCPWrapper Tool

 - 솔라리스 9에는 /usr/sfw/sbin에 기본적으로 설치되어 있다.

 - 위에서 inetd 데몬에 대해 알아보았습니다. 여기에 TCPWrapper가 설치되면 데몬의 동작이 아래와 같이 바뀝니다.


   ①. inetd 데몬은 클라이언트의 요청을 tcpd 데몬에게 넘겨준다.

   ②. tcpd 데몬은 클라이언트의 요청이 적절한 접근 권한이 있는지 확인

 - TCPWrapper의 설정(telnet의 경우)

   ①. /etc/inetd.conf 파일의 telnet  stream  tcp6  nowait  root  /usr/sbin/in.telnetd  in.telnetd
telnet  stream  tcp6  nowait  root  /usr/sfw/sbin/tcpd  in.telnetd로 바꿔줍니다.

   ②. 접근 제어 설정 시 /etc/hosts.allow/etc/hotst.deny를 사용 

     -> 두파일에 기록하는 접근 통제 규칙

데몬 목록 : 클라이언트 목록 [:쉘 명령]

   ③. 설정 확인

/usr/sfw/sbin/tcpdck

05. 파일 및 디렉터리 관리

 - PATH에 현재 디렉터리를 의미하는 '.'를 포함시키지 않는다.

 - umask값을 022 또는 027로 지정

 - /etc 디렉터리
   ▷ 여러가지 시스템에 대한 설정 파일을 담고 있는 디렉터리
   ▷ 기본은 755이나 751로 주는 것이 좋다.

 - /bin
   ▷ 명령에 대한 실행 파일을 담고 있는 디릭터리
   ▷ 기본은 777이나 771로 주는 것이 좋다.

 - /usr/bin
   ▷ 기본은 755이나 751로 주는 것이 좋다.

 - /sbin


 - /tmp, /var/tmp
   ▷ 임의의 사용자가 모두 사용할 수 있는 디렉터리
   ▷ 이 디렉터리에는 스티키 비트가 설정되어 있다.

 - /var/log
   ▷ 여러가지 로그 정보를 담고 있는 파일
   ▷ 755 -> 751

 - /etc/ssh
   ▷ ssh 연결 시 필요한 공개키 등의 정보를 담고 있다.
   ▷ 755 -> 750

 - /etc/crontab
   ▷ cron 데몬에 의한 자동 실행을 설정할 수 있는 파일

 - /etc/syslog.conf
   ▷ 시스템 로그에 대한 설정을 담고 있는 파일
   ▷ 640이하로 권한 설정

 - /var/log/wtmp
   ▷ 시스템 접속에 대한 로깅
   ▷ 640이하로 권한 설정

 - /var/log/lastlog
   ▷ 시스템에 로그인한 사용자에 대한 로그 정보
   ▷ 640이하로 권한 설정

 - /etc/ftpusers
   ▷ 관리자나 특정 계정에 대해 ftp 로그인이 불가능하도록 설정하는 파일
   ▷ 644 -> 600

 - /etc/passwd
   ▷ 계정에 대한 기본적인 정보를 제공
   ▷ 444 -> 400

 - /etc/shadow
   ▷ 암호화된 패스워드가 있는 파일

 - /etc/hosts.equiv
   ▷ 시스템에 대한 신뢰(trust)를 설정할 수 있는 파일
   ▷ 권한을 600이하로 설정

 - /etc/hosts.allow, /etc/hosts.deny
   ▷ 기본적으로 존재하는 파일이 아니므로 생성 후 권한 변경
   ▷ TCPWrapper에서 접근 권한을 설정하는 파일
   ▷ 권한을 600이하로 설정

 - /etc/securetty
   ▷ 텔넷 등에 대한 접근 제어 설정
   ▷ 권한을 600이하로 설정

 - /etc/rc.d/init.d, /etc/init.d
   ▷ 시스템을 부팅할 때의 설정 파일
   ▷ 755 -> 750

 - /etc/initd.conf
   ▷ 시스템이 제공하는 서비스에 대한 정보를 담고 있다.
   ▷ 777 -> 600

 - /etc/cron.allow, /etc/cron.deny
   ▷ cron 데몬에 대한 접근 제어 파일
   ▷ 기본적으로 존재하는 파일이 아니므로 생성 후 권한 변경
   ▷ 권한을 400으로 준다.

 - /etc/hosts
   ▷ 시스템에 접근하는 호스트들에 대한 IP와 호스트 이름을 확인할 수 있는 정보를 제공
   ▷ 권한을 644 이하로 준다.



****************************************************************************************************

본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..

****************************************************************************************************

Posted by 알 수 없는 사용자
,