작성자: 정웅구
편집자: 엔시스
안녕하세요! 정웅구입니다.
지난 번 포스팅에서는 윈도우 시스템 보안 설정에 관해서 포스팅을 했는데요 이번에는 유닉스 시스템 보안 설정에 관해 포스팅 하겠습니다. ^^
01. 계정 관리
02. 서비스 관리
03. 패치 관리
04. 접근 제어
05. 파일 및 디렉터리 관리
01. 계정 관리
- 취약한 패스워드 점검
- 사용하지 않는 계정의 삭제
- 중복된 root계정의 존재 여부
=> root 이외의 관리자 계정의 존재 여부를 확인하는 방법은?!
cf). root 계정 이외의 관리자 계정 생성하기
①. useradd로 wung9 계정 생성
②. /etc/passwd 파일의 내용 변경(User ID 부분을 "0"으로~)
ⓐ. 사용자 계정
ⓑ. 암호화 되어 있는 패스워드(/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 PrivacyOptions에 noexpn과 novrfy를 추가해준다.
(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를 사용
-> 두파일에 기록하는 접근 통제 규칙
③. 설정 확인
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 이하로 준다.
본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..
****************************************************************************************************