서버로 사용되는 시스템에는 관리자만이 사용할 수 있는 명령어와 일반사용자가 사용할 수 있
는 명령어가 동일하지는 않습니다.
서버관리자는 일반사용자와는 달리 서버의 상태점검, 보안점검 및 자원감시등의 작업들을 하기
때문에 일반사용자가 사용할 수 있는 명령어외에도 특수한 명령어들을 사용하게되 됩니다.
그런데 이들 명령어는 일반사용자들이 사용하게 되면 보안에 문제가 발생할 수 있습니다.
일반적으로 서버를 처음설치하고 나면 아래에서 설명드리는 대부분의 명령어들은 일반사용자
들도 사용할 수 있게 퍼미션되어있는 경우가 많습니다.
따라서 서버(OS)를 설치한 후에는 보안을 위하여 아래와 같은 명령어들의 퍼미션을 일반사용자
들이 사용할 수 없도록 다음과 같이 조정해 주시는 것이 좋습니다.
자신의 PC에서 웹브라우즈를 사용할때나 또는 PC사용도중 가끔씩 또는 자주 특정 웹사이트나 팝
업창이 뜨는 것은 스파이웨어(spyware)라는 프로그램때문입니다.
이와같은 스파이웨어는 불특정 다수의 웹사이트 접속통계등을 산출하기위한 선의의 용도로도 사
용되기도 하며, 또한 특정 사이트의 광고를 하기 위해 악용되기도 합니다.
어쨌든, 사용자의 동의를 받지않고 이런 스파이웨어를 설치하여 목적한 실행이 이루어 지도록 한
다는 것은 엄연히 근절되어야할 것입니다.
필자가 여기서 소개하는 Spy Sweeper는 이런 스파이웨어를 찾아서 삭제하고 설치되지 않도록 하
는 일종의 Spyware Cleaner입니다.
2. 웹사이트및 다운로드
www.webroot.com에서 다운로드 할 수 있습니다.
또는 http://ftp.superuser.co.kr에서도 다운로드 하실 수 있습니다.
http://gftp.shareware.co.kr/inet/spyware/spysweeper/ssfsetup1_6326947.exe
공격자들이 시스템을 공격하여 일정 권한을 획득한 후에는 차후에 다시 쉽게 들어올 수 있도록 자신만이 알고 있는 백도어(BackDoor) 를 만들어 두는 습성이 있다. 백도어는 여러 방식으로 구현 가능한데, 간단히 쉘을 복사해 두는 전통적인 방법부터 최근에는 커널 기반의 루트킷(RootKit) 까지 그 방식이 갈수록 교묘하고 고도화해지고 있어 백도어가 설치되어 있는지 여부를 점검하는 것이 매우 어렵다. 특히 보안에 그리 익숙하지 않은 초보 서버 관리자에게는 더더욱 그러한데, 이를 위해 아주 쉬우면서도 유용한 백도어 점검 프로그램인 chkrootkit 이라는 프로그램을 소개하고자 한다. 이 프로그램은 호스트내에서 t0rn 이나 라면 바이러스, 라이온 바이러스등 20여가지의 최근의 각종 루트킷 설치 여부를 점검해 주며 ifconfig, ps , netstat 등 변조되기 쉬운 40여가지의 바이너리 프로그램의 변조 여부를 체크해 준다.
이 프로그램을 이용하려면 먼저 http://www.chkrootkit.org/ 에서 최신 버전의 tarball 파일을 다운로드하여 압축 해제후 압축 해제한 디렉토리에서 make sense 를 실행하여 컴파일해 주기만 하면 모든 설치는 완료된다.
체크 방법은 두 가지로 할 수 있다. 첫번째는 chkrootkit 이 설치된 디렉토리에서
# ./chkrootkit 만 실행해 주면 자동으로 시스템을 검색하여 루트킷이나 파일 변조 여부를 알려준다. 좀 더 세밀한 분석을 하고자 할 경우에는 # ./chkrootkit -x | more 와 같이 strings 를 이용하여 바이너리 파일을 직접 분석할 수도 있다.
또한 ./chkproc -v 로 Hidden Process 여부도 확인 가능하다. Hidden Process 란 실제 프로세스에 떠서 작동하고는 있지만 ps auxw 등으로는 보이지 않는 것으로 이는 ps 에서 보이는 프로세스 정보와 /proc/pid/ 정보와 비교하여 ps 에서 보이지 않는 숨겨진 프로세스가 있는지 여부를 조사하는 방법으로 매우 유용하다. 하지만 짧은 시간에 많은 접속이 있는 웹서버등의 시스템의 경우 짧은 시간에 많은 프로세스가 죽었다 살았다를 반복하므로 잘못된 정보가 출력될 수도 있으므로 여러 번 실행해 보아야 한다.
# 환경설정 변경
1. 외부의 홈페이지를 현재의 사이트에서 실행할 필요가 없다면 allow_url_fopen 은 Off 로 설정하여 URL이 파일처럼 사용되지 않도록 한다.
2. 웹서버를 통해 전달받은 값들이 글로벌 변수로 사용되도록 설정하는 부분인 register_globals의 경우 보안상 Off로 설정하는 것이 좋으나 Off로 설장되어 있을 경우 특정 게시판에서 동작에 문제가 생기므로 사용중인 게시판 프로그램에 맞취 설정을 변경한다.
3.스크립트 실행 중 발생되는 에러는 외부의 침입자에게 유용한 정보가 될 수 있다. display_errors 를 Off로 설정하여 이러한 에러메시지가 접속자에 보여지지 않게 할수 있다.
또, display_errors 를 Off로 설정하더라도 PHP 시작기의 에러는 표시가 되는데, 시작기의 에러를 표시하지 않는 것은 display_startup_error 를 Off로 설정하여 해결할 수 있다.
4. 위의 display_errors 설정과 함께 log_errors 를 On 으로 설정하여 스크립트 에러 메시지가 서버의 에러 로스파일에 기록되도록 설정 할 수 있다. 또, 에러로그이 기록정도는 error_reporting의 설정을 통해 지정할 수 있다.
서버로 사용되는 시스템에는 관리자만이 사용할 수 있는 명령어와 일반사용자가 사용할 수 있
는 명령어가 동일하지는 않습니다.
서버관리자는 일반사용자와는 달리 서버의 상태점검, 보안점검 및 자원감시등의 작업들을 하기
때문에 일반사용자가 사용할 수 있는 명령어외에도 특수한 명령어들을 사용하게되 됩니다.
그런데 이들 명령어는 일반사용자들이 사용하게 되면 보안에 문제가 발생할 수 있습니다.
일반적으로 서버를 처음설치하고 나면 아래에서 설명드리는 대부분의 명령어들은 일반사용자
들도 사용할 수 있게 퍼미션되어있는 경우가 많습니다.
따라서 서버(OS)를 설치한 후에는 보안을 위하여 아래와 같은 명령어들의 퍼미션을 일반사용자
들이 사용할 수 없도록 다음과 같이 조정해 주시는 것이 좋습니다.
1. /etc/hosts.equiv 및 $HOME/.rhosts 체크하기
/etc/hosts.equiv파일을 널(/etc/null)로 다음과 같이 링크를 시켜두고, 소유자는 root로
되어 있어야하며, 퍼미션은 600으로 해두십시요.
#ln -s /dev/null /.rhosts
[root@www /]# find / -name .rhosts -print
#ln -s /dev/null /etc/hosts.equiv
[root@www /]# ls -l /etc/hosts.equiv
rwxrwxrwx 1 root root 9 Sep 2 22:57 /etc/hosts.equiv -> /dev/null
2. /etc/services
이 파일의 소유권은 반드시 root로 되어 있어야하며, 퍼미션은 일반적으로 644로 되어있습
니다.
[root@www /]# ls -l /etc/services
-rw-r--r-- 1 root root 11231 Aug 26 13:50 /etc/services
3. /etc/inetd.conf
이 파일의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 600이 안전합니
다.
-rw------- 1 root root 2935 Aug 22 22:25 /etc/inetd.conf
4. /etc/aliases
이 파일의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 644로 되어있습
니다.
-rw-r--r-- 1 root root 732 Mar 9 14:42 /etc/aliases
5. httpd에 대한 보안사항...
아파치를 설치했을 경우에는 보통 /usr/local/apache/에 설치하게되며 이중 가장 중요한
아파치설정파일의 소유권은 root로 해두시고 퍼미션은 600으로 해두신후에 일반사용자들
이 함부로 볼 수 없도록 해두십시요.
[root@superuser /conf]# ls -l httpd.conf
-rw------- 1 root root 38596 10월 22 17:27 httpd.conf
6. /etc/wtmp
이 파일의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 644로 되어있습
니다. 이파일은 시스템에 설치된후부터 현재까지의 모든 접속로그를 기록하고 있습니다.
who또는 last등의 명령어들은 모두 이 파일에 기록된 정보들을 참조하여 보여주게됩니다.
-rw-r--r-- 1 root utmp 384 Sep 1 11:42 /var/log/wtmp
7. /var/run/utmp
이 파일의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 644로 되어있습
니다. 이파일은 wtmp와는 조금다르게 현재 접속하 사용자의 정보를 저장하고 있는 파일입
니다.
-rw-r--r-- 1 root utmp 4224 Sep 2 22:53 /var/run/utmp
8. /etc/motd, /etc/mtab
이 파일의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 644로 되어있습
니다.
-rw-r--r-- 1 root root 0 Jul 7 1995 /etc/motd
-rw-r--r-- 1 root root 85 Sep 1 11:43 /etc/mtab
9. /etc/syslog.conf
이 파일의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 644로 되어있습
니다. 이 파일은 시스템에서 남겨지는 모든 로그파일의 정보를 저장하고 있습니다. 이파일
은 반드시 root만이 볼 수 있도록 해두십시요.
-rw------- 1 root root 712 Aug 22 22:36 /etc/syslog.conf
11. /tmp, /var/tmp
위의 두 디렉토리의 소유권은 반드시 root로 되어있어야하며, 퍼미션은 일반적으로 1777
로서 sticky-bit로 설정되어 있습니다.
drwxrwxrwt 6 root root 1024 Aug 26 13:52 tmp/
drwxrwxrwt 2 root root 1024 Aug 21 22:06 /var/tmp/
12. umask 값확인할 것..
root의 umask값을 확인하십시요. root가 새로 생성하는 모든 파일과 디렉토리의 기본퍼미
션을 설정하는 것입니다. 일반적으로는 022로 되어있습니다.
[root@www /]# umask
022
이렇게 설정되어 있다면 root가 생성하는 파일은 644로 생성되며, 디렉토리는 755로 생
성됩니다. 참고로 umask값이 755로 되어있을 경우에는 새로생성되는 파일은 640이 되
며, 새로생성되는 디렉토리의 퍼미션은 750이 됩니다.
아래의 표를 참조하십시요.
umask값
생성되는 파일
생성되는 디렉토리
022
644
755
027
640
750
13. /dev 에 device파일외의 것이 있나를 확인할 것..
아래와 같은 명령어(find)로 /dev에 디바이스(device)파일외에 다른 것이 있나를 확인하십
시요. 만약 이외의 파일이 있다면 당한(?)것으로 봐도 무방합니다.
[root@www /root]# find /dev -type f -exec ls -l {} \\;
-r-x------ 1 root root 26450 Jan 26 2000 /dev/MAKEDEV