JNB
rss

skin by 이글루스

보안

손에 잡히는 리눅스 시큐리티 ③ 06.10.02 18:42
[활용특집] 손에 잡히는 리눅스 시큐리티 ③
  출판일 :2005년 4월호

 리눅스는 오픈소스의 장점으로 인해, 중소기업의 서버 플랫폼으로 사용되고 있다. 리눅스는 오픈소스이기 때문에 사용자들 스스로 신속하게 버그나 취약점을 발견해 업데이트하기 때문에 더 안정적일 수 있다는 의견이 있다. 하지만 관리자가 리눅스의 파워 유저가 아니라면, 리눅스의 보안 문제가 발생했을 때 좀처럼 관리하기 힘들다. 이 글을 통해, 리눅스 보안에 적합한 몇가지 명령어와 툴을 이용해 리눅스 보안에 접근해 본다.



홍석범_오늘과내일 네트워크사업본부 차장

Part 3.
사고 대응과 모니터링


아무리 보안 설정을 하고 접근 통제를 했다 하더라도 웹 등 허용된 포트를 통해서 또는 예상치 못한 방법으로 비정상적인 접근이 발생할 수 있다. 이런 경우 어떻게 대응해야 하는지에 대해 살펴보자. 물론 어떤 환경이고 어떤 현상인가에 따라 대응 방법도 많이 달라질 수 있을 것이다. 다음에서 제시하는 방법은 가장 기본적이면서 필수적인 절차인데, 몇 가지 기본적인 명령어 사용만으로도 많은 정보를 확인할 수 있다는 것을 알 수 있다.

 

ps를 사용한 모니터링
먼저 ps는 리눅스를 사용하는 사용자라면 모두 아는 명령어일 것이다. 현재 시스템에 떠 있는 프로세스에 대한 정보를 확인해 볼 수 있는데, 적어도 서버 관리자라면 ps 실행시 보이는 프로세스가 어떤 프로그램인지, 또한 어떤 프로그램이 비정상적인 프로세스인지 분간할 수 있어야 할 것이다. 다음과 같은 경우 nobody 권한으로 작동중인 프로세스를 검색한 것인데, 제일 아래쪽에 ./shell이라는 이상한 프로세스가 있는 것을 알 수 있다. 일단 nobody 권한이므로 웹에서 실행한 것임을 알 수 있다.

# ps aux|grep nobody
nobody   22593  0.0  0.2  8520 5612 ?        S    Feb21   2:19 /www/bin/httpd
nobody   18963  0.0  0.2  8276 5296 ?        S    Feb26   0:46 /www/bin/httpd
nobody   28705  0.0  0.2  8208 5352 ?        S    06:00   0:10 /www/bin/httpd
nobody   19956  0.0  0.2  8188 5280 ?        S    07:46   0:12 /www/bin/httpd
nobody   27036  0.0  0.2  8132 5192 ?        S    08:05   0:12 /www/bin/httpd
nobody   27042  0.0  0.2  8200 5300 ?        S    08:05   0:13 /www/bin/httpd
nobody    3353  0.0  0.0  1440  276 ?        S    13:52   0:00 ./shell

이 프로세스가 어떤 것인지 확인하기 위해 다음과 같이 확인해 보니 exe -> /tmp/shell*인 것으로 보아 /tmp 디렉토리에 있는 shell이라는 파일을 실행한 것임을 알 수 있다.

# ls -la /proc/3353/
total 0
dr-xr-xr-x    3 nobody   nobody          0 Feb 28 18:41 ./
drwx------  448 root     root            0 Feb  1 21:58 ../
-r--r--r--    1 nobody   nobody          0 Feb 28 18:41 cmdline
-r--r--r--    1 nobody   nobody          0 Feb 28 18:41 cpu
lrwxrwxrwx    1 nobody   nobody          0 Feb 28 18:41 cwd -> //
-r--------    1 nobody   nobody          0 Feb 28 18:41 environ
lrwxrwxrwx    1 nobody   nobody          0 Feb 28 18:41 exe -> /tmp/shell*
dr-x------    2 nobody   nobody          0 Feb 28 18:41 fd/

/tmp/shell 파일을 읽어보니 원격에서 셸을 실행하는 프로그램임을 알 수 있었다. 현재 시스템에서 어떤 포트가 떠있는지 확인하기 위해 다음과 같이 실행했다.

# netstat -lnp

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp   0  0 0.0.0.0:8000           0.0.0.0:*               LISTEN      3353/shell
tcp  0  0 0.0.0.0:3306            0.0.0.0:*               LISTEN      23763/mysqld
tcp 0   0 0.0.0.0:29999           0.0.0.0:*               LISTEN      910/ipgClient
tcp 0   0 0.0.0.0:80              0.0.0.0:*               LISTEN      14432/httpd
tcp 0   0 0.0.0.0:21              0.0.0.0:*               LISTEN      1118/proftpd
tcp 0   0 0.0.0.0:22              0.0.0.0:*               LISTEN      982/sshd
tcp 0  0 0.0.0.0:25              0.0.0.0:*               LISTEN      7008/sendmail

이와 같이 실행해 보니 8000번 포트에 리슨하고 있는 것을 알 수 있다. 혹시나 해서 8000번으로 접속해 보니 다음과 같이 ID/패스워드를 인증 절차없이 바로 로그인이 가능한 것을 알 수 있다.
 
# telnet 0.0.0.0 8080
Trying 0.0.0.0...
Connected to 0.0.0.0.
Escape character is '^]'.

-bash-2.05b$

 

비정상적인 프로그램임을 확인했으므로 해당 프로세스를 죽이고, 해당 파일 역시 삭제해야 한다.

 

# kill -9 3353  (/tmp/shell의 pid)
# rm -f /tmp/shell

 

아울러 가능하다면 로그 등을 살펴보아 어떤 방법으로 nobody 권한을 획득했는지 체크하기 바란다. 이와 같은 경우 비정상적인 파일이 nobody 권한이었지만 이미 root 권한을 획득했는지 여부는 알 수 없다. 따라서 혹 시스템에 다른 이상은 없는지 root 권한으로 백도어 등은 없는지 확인해야 한다. 이를 위해서 여러 프로그램을 활용할 수 있는데, 대표적인 프로그램에 대해 살펴보도록 하자.
먼저 유용하게 사용할 수 있는 프로그램으로 rootcheck라는 것이 있다. 이 프로그램은 시스템의 전반적인 보안 점검을 하고자 할 때 유용하게 활용할 수 있는데, 다음과 같은 기능을 제공한다.

·LKM rootkit 에서 사용되는 숨겨진 포트나 파일점검
·인터페이스의 promisc 여부 점검
·패스워드 파일 점검
 - 암호가 없는 계정이 있는지 확인
 - 셸(shell)이 있는 시스템계정이 있는지 확인
·httpd.conf나 inetd.conf, xinetd.conf, sshd_conf 등의 설정 파일 점검
  - 설정 파일에 수상한 목록이 있는지 확인
  - 잘못 설정돼 있는지 확인
·삭제된 로그파일 등 로그 파일 관련 수상한 점 점검
·/proc과 ps를 점검해 숨김(hidden) 프로세스 여부 점검
·알려진 루트킷(rootkit) 존재 여부 확인
·기타 수상한 파일이나 디렉토리 및 퍼미션 등 점검
  - suid/sgid 파일 점검
  - history 파일이 /dev/null 등에 링크돼 있는지 확인
  - 몇몇 바이너리의 변경 날짜 확인

ootcheck의 홈페이지(www.ossec.net/rootcheck)에 접속 후 최신 버전의 패키지를 다운로드받아 설치하면 된다(화면 15).

(화면 15) rootcheck 홈페이지

설치된 디렉토리에서 다음과 같이 실행하면 사용할 수 있는 옵션이 나온다.

# ./rootcheck.pl --help
RootCheck 0.4
OptiOptions available:
        --help                   Shows this menu
        --checkfiles             Only check the files
        --checkbin               Only check the binaries
        --checkports             Only check the ports
        --checkif                Only check the interfaces
        --checkpasswd            Only check the passwd db
        --checklogs              Only check the logs
        --checkprocess           Only check the process
        --logfile=xx             Write the results in a different file
        --html           Log in html
        --silent                 Dont print anything.
        --terminal               Print on the terminal.
        --email=xx@xx.com        Send the result to your email.
        --smtpserver=xx.com      You need to specify when sending
to your email.
    
각자 환경에 맞게 적당한 옵션을 줘 스캔을 한 결과는 현재 디렉토리에 저장된다. suid 파일에 대한 정보는 suidfiles.txt에, 모든 파일은 logfiles.txt에, 시스템 배너는 banners.txt에, 스캔 결과는 result.txt에 각각 저장된다. 그리고 종합적인 결과는 result.txt에 저장되는데, 이 파일을 살펴 시스템이 무결한지를 확인하기 바란다.
더불어 꼭 살펴봐야 할 프로그램으로 chkrootkit이라는 것이 있다. 이 프로그램은 이름이 뜻하는 대로 시스템 내에 rootkit 존재 여부를 체크해 주는데, 특히 특정 바이너리 파일의 변조 여부를 정확하게 체크할 수 있다. 최근에 root 권한을 획득한 이후에는 ps나 netstat 등 각종 바이너리 파일을 변조해 특정 프로세스나 접속 정보 등을 보이지 않도록 하는 경우가 많은데 이같은 경우 많은 도움을 받을 수 있다.
chkrootkit의 홈페이지(www.chkrootkit.org)에 접속 후 최신 버전의 패키지를 다운로드와 설치하면 된다.

 

설치된 디렉토리에서 ./chkrootkit -h를 실행하면 사용할 수 있는 옵션이 나오는데, 옵션없이 ./chkrootkit을 실행하면 다음과 같이 바이너리 파일과 rootkit 설치 여부에 대해 스캔을 시작한다.
 
(화면 15) chkrootkit 실행화면


 

 

만약 변조된 바이너리나 rootkit을 찾게 되면 해당 파일과 rootkit 이름 등에 대해 결과를 보여줘  루트킷의 설치 여부 등을 직관적으로 모니터링할 수 있다. 해킹 등이 의심된다면, 특히 LKM 등과 같이 커널 기반의 해킹인 경우 일반적인 명령어로는 숨김 프로세스나 숨김 파일이 보이지 않아 쉽게 알 수 없으므로 이 프로그램의 사용은 거의 필수라고 할 수 있다.
지금까지 세 가지 원칙에 따라 몇 가지 명령어와 툴의 사용방법에 대해 알아봤다. 해킹 기술도 하루가 다르게 변화하므로 새로운 기법과 툴은 계속 나올 것이고, 이에 대응하는 툴과 명령어 등도 물론 변화하겠지만 그러나 보안을 강화하기 위한 이 세 가지 큰 원칙은 변함없이 지속될 것이다. 따라서 어디에서부터 무엇을 해야 할지 모르겠다면 이 원칙에 따라 하나씩 하나씩 구체적인 설정을 해 나간다면 안전한 리눅스 서버를 운영할 수 있게 될 것이다.

-온더넷 2005년 4월호

        

    
Copyright 1999-2018 Zeroboard / skin by JY