본문 바로가기

시스템/웹/포렌식 보안/시스템 해킹/보안

솔라리스 시스템 보안설정

1.     암호 없는 계정을 가진 사용자 검색

 

적어도 솔라리스 8에서는 암호 없이 시스템을 사용하는 사용자에 대한 걱정은 하지 않아도 좋다. 암호 없는 계정을 만들 수는 있어도 그것을 사용할 수 있는 일은 전혀 없으니. (텔넷상에서는 물론, 콘솔에서도 암호 없이는 로그인을 할 수 없다. , 새로운 암호를 입력해야만 로그인이 가능하다)

그러나 만일, 시스템 관리자가 실수로 새 계정을 만든 후에, 암호를 집어넣지 않았다면 누구든 그 계정으로 일단 접속하기만 하면 접속자 스스로 암호를 만들어 사용할 수 있다. 일반 사용자의 계정이라도 문제가 되겠지만 그것이 권한 있는 관리자계정일 경우에는 중대한 문제가 야기된다.

행여 내 시스템 내에 그러한 계정은 없는가 살펴보자.

 

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

# logins -p

 

이렇게 하면 암호 없이 등록된 계정이 화면에 나타난다. 사용자에게 속히 연락하여 암호를 새로이 입력하도록 조치해주자.

 

2.     로그인에 실패한 접속기록 살펴보기

 

일단 시스템에 로그인하는 것을 실패하는 경우는 대부분 입력을 잘못해서 그럴 수도 있다. 그러나 로그인 입력과정을 다섯 번이나 실패했다면 이는 충분히 의심해볼 사유가 된다. 허가 받지 않은 이가 불법으로 접속을 시도했을 가능성이 크기 때문이다.

이렇게 비정상적인 로그인 시도 기록은 파일로 보관할 수 있다. 솔라리스 8은 자동으로 이를 기록으로 남겨주지 않는다. 그러나 관리자가 다음파일을 수동으로 직접 만들어 준 이후에는 자동으로 이러한 비정상적 접속기록을 파일로 남겨준다.

 

/var/adm/loginlog

 

 

Loginlog 파일 안에는 다섯 번씩 로그인에 실패한 기록이 자동으로 기록된다. 이 파일을 만들 때에는 root만이 읽고 쓰기가 가능하도록 권한을 부여해주어야 한다.

(왜 하필 다섯 번일까. 텔넷으로 솔라리스에 로그인을 다섯 번 실패하면 자동으로 접속이 끊어진다. 이는 기본설정이 그렇게 되어있기 때문이며 /etc/default/login파일에서 RETRIES부분의 주석을 제거하고 값을 변경하여 관리자가 임의로 변경하는 것이 가능하다.)

 

로그인에 실패한 기록은 다음과 같이 남겨진다.

 

# cat loginlog

oracle:/dev/pts/2:Fri Dec 22 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />15:45:29 2000

oracle:/dev/pts/2:Fri Dec 22 15:45:36 2000

oracle:/dev/pts/2:Fri Dec 22 15:45:44 2000

oracle:/dev/pts/2:Fri Dec 22 15:45:51 2000

 

위에서 보면 로그인에 실패한 사용자의 id, 터미널 명, 접속을 시도한 때 (, , , 시각)이 나타난다.

만일 여러분의 시스템에서 loginlog 파일의 크기가 나날이 증가한다면 그것은 여러분의 시스템이 누군가에 의해 끊임없이 침입을 시도 당하고 있다는 증거이다.

 

loginlog 파일은 다음과 같은 방법으로 만들자.

 

superuser 권한을 갖는다

# touch /var/adm/loginlog

# chmod 600 /var/adm/loginlog

# chown root:sys /var/adm/loginlog

 

3.     superuser (root) 로서의 로그인 제한하기

 

수퍼 유저는 시스템이라는 세계 안에서는 전지전능한 신의 권위를 갖는다. 그의 손가락 하나로 그 세계를 파괴해버리는 것은 그리 어렵지 않다. 이러한 권능이 악의를 품은 제 3자에게 넘어간다면...

3자가 접근할 수 없는 안전한 곳에 위치한 콘솔상에서만 root로 로그인하는 것이 가능토록 설정하는 방법은 다음과 같다.

 

수퍼 유저 권한을 갖는다.

/etc/default/login 파일을 편집기로 open한다.

CONSOLE=/dev/console 이라고 씌여진 줄 맨 앞에 # 표시를 지워준다.

 

이후로는 원격지 터미널에선 수퍼 유저로서 login할 수 없다. (처음 시스템을 설치 하였을 때 기본적으로 이렇게 설정되므로 확인만 해보기 바람.)

 

4.     누가 su 명령어를 사용했을까 ?

 

앞서 이야기했듯 su명령어는 시스템 관리자 이외에는 사용할 수 도 없고, 해서도 안된다. 그러려면 관리자 암호의 철저한 관리 및 주기적인 암호 교체가 최상의 방법이다.

 

그러나 관리자 암호가 연상되기 쉬운 것으로 설정되어 있거나, 여타의 방법으로 노출되었다면... 그래서 누군가가 원격지 터미널에서 심심풀이로 가끔씩 su 명령을 사용하고 있다면 ...

혹시 이러한 일이 내 시스템에서도 발생하고 있을지도 모를 일이다. 이것을 알아보는 방법은 다음과 같다.

 

수퍼유저 권한을 취득한다.

/etc/default/su 파일을 편집기로 open한다.

SULOG=/var/adm/sulog 라고 씌여진 줄 맨앞에 # 표시를 지워준다.

 

이후부터는 su 명령어를 사용한 모든 기록이 sulog 파일에 기록된다. 시스템 관리자 본인이나 su 권한을 허가받은 사용자 이외에 다른이가 su 명령어를 사용한 기록이 없는가를 살펴보도록 하자.

su 명령어를 사용한 사용자는 다음과 같이 적발(?) 가능하다.

 

수퍼유저 권한을 갖는다.

/etc/default/su 파일을 편집기로 open한다.

CONSOL=/dev/console 이라고 씌여진 줄 맨앞에 # 표시를 지워준다.

 

이후부터는 su 명령어를 사용한이들이 모두 화면에 출력될 것이다.

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />su 명령어를 타인이 실행할 수 없게 만드는 방법

su (switch user) 명령어를 시스템 관리자나 몇몇 특정인 이외에는 절대로 사용할 수 없도록 만드는 간단한 방법이 있다. 터미널은 물론이고 콘솔에서조차 사용할 수 없도록...

방법은 좀 단순 무식하다.

/usr/bin에 있는 su 파일을 rename시키는 것이다.

예를 들어 다음과 같이 파일명을 변경시킨다면

 

mv su pcbee

 

변경된 순간부터 su명령어대신 pcbee라는 명령어를 수행해야만 switch user 명령어가 수행된다. 물론 새로 rename시킨 명령어는 필요한 몇몇 사람만 알도록 해야하고...

 

5.     restricted shell

 

여러분이 시스템 관리자라면 사용자들의 계정 발급시 특정 shell환경을 함께 지정할 것이다.

이때 아무 생각없이 /bin/sh shell을 지정해주지는 않는지 ...

만일 그렇다면 시험삼아 다른 사용자의 계정으로 ftp login후 다른 디렉토리로 이동해보길...

아주 자유롭게 root 디렉토리까지 넘나들며 시스템의 파일을 무한정 다운받을 수 있다는 사실을 알게 될 것이다.

이것을 막기위하여 일반 사용자들에게는 제한된 쉘이란 의미의 rsh (restricted shell) 환경을 제공해 줄 수 있다. rsh /usr/lib/rsh shell을 지칭하며, 일반 사용자가 접근할 수 있는 작업 디렉토리의 영역과 사용할 수 있는 명령어를 제한해준다.

 

restricted shell의 기능은 아래와 같다.

 

- 사용자는 자신의 home directory에서만 화일을 생성할 수 있다.

- "cd" 명령을 사용하여 다른 directory로 갈 수 없다.

- 사용자는 root PATH 변수에 지정한 directory안에 있는 명령만 사용할 수 있다. 물론 지정된 PATH는 사용자가 변경 할 수 없다.

- 사용자는 자신의 home directory와 하위 directory에 있는 화일만 access할 수 있다.

- 사용자는 ">" 혹은 ">>" 를 사용하여 output을 다른 화일로 redirection할 수 없다.

 

restricted shell 설정하기

- /etc/password 파일을 한번 살펴보자. 여기서 일반사용자중 제한된 쉘을 적용할 이들의 login shell /usr/lib/rsh로 변경한다.

 

) junghee:x:1004:10::/export/home/junghee:/bin/sh

junghee:x:1004:10::/export/home/junghee:/usr/lib/rsh 로 변경.

 

- /etc/profile 또는 사용자의 home direcroty에 사용자의 .profile을 만든후 이 파일에 사용자의 PATH를 지정한다. (만일 별도로 PATH를 지정하지 않으면 /usr/bin이 사용자의 경로로 지정된다)

- 사용자의 home directory .profile을 만들 때 다음과 같이 permission을 정해준다.

 

1) owner root로 한다. : # chown

2) 사용자가 내용을 변경할 수 없게 한다. : # chmod 755 .profileroot:bin .profile

 

6.     불필요한 서비스 중단 및 스크립트 제거

 

처음 솔라리스8을 설치할 때, 대부분의 사용자들은 CD에 수록된 모든 것을 설치하기 마련이다. 몇 번 사용하지 않거나, 한번도 사용하지 않는 프로그램이 그 가운데는 수두룩하다.

이것은 시스템 성능에도 영향을 미친다. 그러나 여기에만 그치는 것이 아니고 시스템 보안에도 문제를 발생시킬 수 있다.

 

Solaris 운영체제가 설치된 시스템은 아주 많은 서비스를 제공할 수 있지만 이들 대부분이 보안에는 잠재적인 위험요소이다. 예를 들어 /etc/inetd.conf 에는 35가지의 서비스가 제공되고 있다. 이중 ftp telnet을 제외한 나머지 서비스는 관리자조차도 거의 신경을 쓰지 않는 항목들이다.

(gopher 서비스를 생각조차 해본적이 있을까 ? 그러나 엄연히 서비스중인 항목이다) 시스템 관리자가 불필요한 서비스라고 판단되는 항목은 # 주석을 달아 중단시킬 필요가 있다.

다음으로는 /etc/rc2.d /etc/rc3.d 디렉토리에 있는 스크립트 파일들이다. 이들은 시스템이 부팅될때마다 자동으로 실행된다. 그러나 이들중 상당수가 시스템 운영에는 그다지 필요하지 않다. 단지 보안에 있어서 위험요소는 될 수 있다.

이러한 스크립트 파일들의 자동실행을 중단시키려면 스크립트 파일명의 맨 앞자인 대문자 'S'를 소문자 's'로 바꿔주면 된다. 이후, 특정 스크립트 실행이 필요할 때에는 소문자를 다시 대문자로 바꾸어주면 되고... 아래 열거된 스크립트 파일들은 별로 필요치 않으면서도 시스템 보안에는 위험한 요소가 될 수 있는 것들이다.

 

/etc/rc2.d 디렉토리

S73nfs.client - NFS mounting.

S74autofs - automounting,

S80lp - printing (서버에서 프린트작업을 수행할 일이 얼마나 있을까?)

S88sendmail - incoming email listener. (이것 없이도 메일을 전송시킬 수 있다)

 

* 아래 스크립트는 보안에는 도움이 되지 않지만 CDE 구동에 꼭 필요하다. 일반 솔라리스 사용자들에게 있어서 CDE환경은 꼭 필요할 수 있다. 그러나 CDE환경이 필요 없는 시스템도 있다. (웹서버가 대표적인 예일 것이다) 이러한 경우에는 아래 스크립트의 자동실행을 중단시키는 것이 좋다.

S71rpc - portmapper daemon

S99dtlogin - CDE daemon

 

/etc/rc3.d 디렉토리

S15nfs.server - 파일 시스템 공유에 사용.

S76snmpdx - snmp daemon

 

CDE OpenWindows와 같은 GUI환경은 시스템 사용에는 매우 편리하지만 편한만큼 보안성은 떨어진다. 시스템 보안이 우선이라면, 그리고 GUI 인터페이스가 꼭 필요하지 않다면 이러한 GUI 환경은 사용하지 않는 것이 좋다. CDE 구동을 위하여 얼마나 많은 포트와 서비스가 필요한지는 CDE환경에서 다음 명령어를 실행시켜 보면 알 수 있다.

 

ps -aef | wc - l

 

만일 S99dtlogin 스크립트 및 S71rpc 스크립트의 실행을 중단시킨 후, CDE환경을 더 이상 사용하지 않은 이후에 위의 명령어를 다시 한번 실행시켜보면 , 얼마나 많은 서비스가 시스템에서 중단되었는가를 비교해볼 수 있다. 서비스가 적게 실행될수록, 시스템 성능은 물론이고 보안성도 향상된다.

 

7.     CORE Installation

 

운영체제를 설치할 때 CORE Installation 이라는 항목이 있다. 시스템 운영을 위한 최소한의 요소만 설치하는 것이다. 이것은 시스템 보안을 위하여 널리 권장되는 항목이다.

만일 Core installation을 선택하여 이미 시스템을 설치하였다면 이제껏 언급된 내용은 걱정하지 않아도 된다. Core installation GUI환경을 제공해주지 않기 때문이다.

 

시스템 보안을 위한 Core installation에 관한 자세한 사항은 Sun Micro System의 공식 bule print 문서를 다운받아서 읽어보길 권한다. 아래 주소에 이에 관한 문서가 있다.

http://www.sun.com/blueprints/1299/minimization.pdf

 

8.     특정 서비스 중단

 

시스템에서 현재 제공되는 ftp service telnet서비스와 같은 특정 서버 프로그램을 중단하는 방법은 /etc/inetd.conf 파일안에 있는 해당 서비스 항목 앞에 #표시를 붙여주면 된다.

 

) ftp telnet service를 중단하려면

/etc/inetd.conf 파일을 연다.

다음과 같이 ftp telnet 항목 앞에 #표시를 붙여준다.

 

# ftp and telnet are standard Internet services.

#

#ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd

#telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd

 

이후 다음 명령을 수행시킨다.

# kill -HUP inetd-pid

(inetd-pid inetd daemon process id로서 ps 명령어로 확인할 수 있다)

 

9.     ftp 사용자의 제한

 

ftp 사용자를 제한하는 경우는 다음 두가지가 있다.

첫 번째로 root bin 계정과 같은 시스템 계정으로 access하는 것을 방지하는 것이다.

두 번째로는 의심가는 사용자에 대하여 ftp 사용권한을 박탈하는 것이다.

이러한 계정에 대한 ftp 서비스를 중단하려면 /etc/ftpusers 파일에 해당 계정을 적어주면 된다.

 

아래는 /etc/ftpusers 파일의 한 예이다.

root

daemon

bin

sys

adm

lp

uucp

nuucp

listen

nobody

noaccess

nobody4

lance

 

 

 

10.  보안을 위한 경고메시지 출력

 

여러분의 시스템에 텔넷으로 접속할 때마다 경고문구가 나온다면, 크래킹과 같은 이상한 행동을 심리적으로 억제해주는 효과가 있다. 이러한 경고문구가 나오게 하려면 /etc/issue 라는 텍스트 형태의 파일을 작성해준다. 그러면 시스템에 로그인할 때마다 경고 메시지가 화면에 출력된다.

 

아래는 /etc/issue 파일의 한 예이다.

# 경 고 : 여러분이 접속하여 실행시키는 모든 사항은 모니터링중입니다.

# 또한 모든 내용이 시스템에 기록되고 있습니다.

# 사소한 불법행위도 고발 조치되어 형사처벌 대상이 됩니다. 

 

위 문구는 으시시할 수록 효과적이다.