강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

LIDS(Linux Intrusion Detection System)로 보안시스템을 구축하자

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle69.gif
(Build a Secure System with LIDS)

번역 : 이국현 (errai@hitel.net)
원문 : http://www.linuxsecurity.com/feature_stories/feature_story-12.html

 

LIDS(Linux Intrusion Detection System)는 리눅스 커널을 강화한 커널 패치 이다. 본 문서에서는 LIDS를 가지고 무엇을 할 수 있으며, 어떻게 보안 리눅스시스템을 구축할 수 있는지에 대해 이야기하고자 한다.

 

1. 왜 LIDS 인가.

인터넷에서 리눅스의 인기가 확산됨에 따라, 현재의 GNU/Linux시스템에서 발견되는 보안 구멍들의 수가 늘고 있다. 독자들은 아마도 해커들에 의해 시스템을 쉽게 파괴시킬 수 있는 버그들이 리눅스 상에서 발견되었다는 이야기를 인터넷을 통해 접했을 것이다.

오픈 소스 프로젝트의 창조물로 리눅스가 만들어진 이후에, 보안 버그는 쉽게 발견할 수 있고, 또 빠르게 패치 될 수 있다. 그러나 보안구멍이 발표되었을 때 관리자의 게으름으로 버그 패치를 소홀히 할 경우, 시스템이 고장 나거나, 더 심한 경우에는 해커에 의해 루트를 빼앗길 수가 있다. 현재의 GNU/Linux 시스템에서 루트의 권한을 가진 해커는 그가 원하는 모든 것을 할 수 가 있다. 자 이제 과연 무엇이 문제이며 , 우리는 무엇을 할 수 있는지 알아보자.

현재의 GNU/Linux 시스템의 잘못된 점들

* 슈퍼유저(root)는 권한들을 남용하고 있다. 루트가 되면 원하는 모든 것을 할 수 있다.
   현재 존재하는 모든 기능을 루트에 의해 쉽게 변경할 수 있다.
* 많은 시스템 파일은 쉽게 변경할 수 있다. /bin/login과 같이 중요한 파일들이 시스템에
   존재한다. 만약 해커가 침입해 들어와서 /bin/login을 제거하고 변경된 /bin/login을 업로드
   한다면, 해커는 어떤 계정이나 패스워드를 입력하지 않고도 재접속을 할 수 있게 된다.
   그러나 이와 같은 파일은 여러분이 시스템을 업그레이드 하길 원하더라도 종종 변경될
   필요가 없다.

* 모듈은 커널을 가로채어 쉽게 사용할 수 있다. 모듈은 리눅스 커널을 만들 때 더 다양하고
   더욱 견고하게 해주는 좋은 디자인이다. 그러나 모듈이 커널안에 입력되었을 때, 그것은
   커널의 일부로 커널이 할 수 있는 모든 일을 할 수 있게 된다. 그러므로 어떤 불안정한
   코드를 모듈화 해서 커널 안에 넣을 수 있는 것이다. 그 코드는 시스템콜로 리다이렉트되어
   바이러스와 같이 동작할 수 있다.

* 프로세스는 보호되지 않고 있다. 웹 서버 데몬과 같은 유명한 프로세스는 해커들의 공격을
   받을 수 있다.

리눅스 보안에 관한 위의 설명을 보고, 우리가 어떻게 보안 시스템을 구축해야 할지 알겠는가? 우리는 보안커널을 가져야만 하고, 그 보안커널을 기반으로 하여 보안 시스템을 구축해야 한다. 이것이 LIDS가 하는 일이다.

 

2. LIDS의 특징

Linux Intrusion Detection System은 커널의 보안을 강화한 패치이다. LIDS를 설치하면 파일접근 선택, 모든 시스템/네트워크 관리 운영, 사용할 수 있는 권한, rawdevice, mem, 그리고 I/O access 등을 루트라 할지라도 접근할 수 없게 만들 수 있다. 또한 모든 시스템,네트워크, 파일시스템의 보안사항에 대한 제어 및 제어의 범위 설정이 커널안에 포함되어 보안을 강화할 수 있다. 여러분은 온라인상에서 보안 방어 및 중요한 프로세스 숨기기, 네트워크를 통한 보안 경호 받기 등을 할 수 있다.

결론적으로 LIDS는 리눅스 커널을 통해 침입자에 대해 보호, 탐지, 응답의 세가지 기능을 제공한다.

* 보호(Protection). LIDS는 여러분의 하드 디스크에 있는 중요한 파일을 보호할 수 있다.
   이때 파일시스템의 타입은 문제가 되지 않는다. 루트를 포함한 누구든지 지정된 파일을
   변경할 수 없게 된다. LIDS는 또한 중요한 프로세스에 대해 kill 되어지는 것을 방지할 수
   있다. LIDS는 인증되지 않은 프로그램으로부터의 RAW IO operation을 보호할 수 있다.
   여러분의 하드디스크를 포함하여 MBR까지 보호할 수 있다.

* 탐지(Detection). 누군가 여러분의 호스트를 스캔했을 때 LIDS가 그것을 탐지하여 관리자
   에게 알려줄 수 있다. LIDS는 또한 규정을 어긴 시스템상의 행동을 알아 챌 수도 있다.

* 응답(Response). LIDS에 의해 보호되고 있는 시스템 상에서 누군가 시스템상의 규정을
   어겼을 때(주로 해킹을 위해) LIDS는 그 규정을 어긴 행동에 대해 자세한 메세지를 시스템
   로그 파일로 기록한다. LIDS는 또한 여러분의 메일박스로 로그 메세지를 보낼 수도 있다.
   이런 경우 LIDS는 즉시 유저 세션을 셧다운 시킬 수 있다.

 

3. LIDS로 보안 리눅스 시스템 구축하기

LIDS의 특징들을 이해했으리라 생각된다. 이제 어떻게 보안 시스템을 구축하는지 하나씩, 하나씩 알아보도록 하자.

 

3.1  LIDS 패치와 정식 리눅스커널 다운 받기

여러분은 LIDS 홈페이지 (http://www.lids.org)나 LIDS FTP Site(ftp://ftp.lids.org) 혹은 LIDS 미러싸이트 (http://www.lids.org/mirrors)를 통해 LIDS 패치를 다운받을 수 있다.

패치 이름은 lids-x.xx-y.y.y.tar.gz 의 형식으로 x.xx는 lids 버젼을 나타내고 y.y.y는 리눅스 커널 버젼을 나타낸다.

여러분은 정식 커널 버젼을 다운받아야 한다. 예를 들어 lids-0.9pre4-2.2.14.tar.gz를 다운받았다면 리눅스 커널 2.2.14 소스 코드를 다운로드 받아야 한다.
Kernel FTP site(ftp://ftp.linux.org)나 그 미러 싸이트를 통해 커널을 다운받을 수 있다.

1. 리눅스 커널 소스 트리 압축 풀기
# cd linux_install_path
# bzip2 -cd linux-2.2.14.tar.bz2 | tar -xvf -

2. lids 소스 코드 압축 풀기
# cd lids_install_path
# tar -zxvf lids-0.9pre4-2.2.14.tar.gz

 

3.2  정식커널에 LIDS 패치하기

커널 소스와 LIDS를 다운로드 받은 후 압축을 푼다. 예를 들어 lids-0.9pre4-2.2.14.tar.gz 와 lids- 2.2.14.tar.bz2 를 다운받았다면

3. 리눅스 커널 소스에 lids를 패치 하기.

# cd linux_install_path
# patch -p0 < /lids_install_path/lids-0.9pre4-2.2.14.patch

4. LIDS를 사용하여 리눅스 커널을 컨피그 한다.

아래의 옵션을 켠다:
[x] Prompt for development and/or incomplete code/drivers
[x] Sysctl support

LIDS를 위한 옵션들이 덧붙여 질 것이다.
주의: LIDS를 위한 많은 커널 옵션이 있다. 이런 옵션들의 컨피그를 위한 자세한 정보는 lids-howto를 참조하기 바란다. (
http://www.lids.org/lids-howto/)
 

# cd linux
# make menuconfig or make xconfig

 

5. 리눅스 커널을 컴파일한다.
 

# cd linux
# make dep clean
# make bzImage
# make modules
# make modules_install

 

6. bzImage를 /boot로 복사하고 /etc/lilo.conf 파일 편집한다.

7. 새로운 커널 인스톨을 위해 /sbin/lilo를 실행한다.

# /sbin/lilo

 

3.3  lidsadm 프로그램 컴파일 하기

lidsadm은 LIDS를 관리하기 위한 유틸리티를 포함하고 있다. 이것은 여러분의 새로운 커널로 시스템을 재부팅 하기 전에 반드시 설치해야 한다.
그러나 이것을 설치하는데 새로운 커널을 컴파일하거나 패치할 필요는 없다.
 

# cd lids_install_path/lidsadm-0.9pre4
# make or make VIEW=1 (use VIEW=1 to see exact LIDS state)
# make install

 

컴파일이나 lidsadm 동작에 대한 자세한 내용은 LIDS 패키지에 들어있는 README를 참조하기 바란다.

 

3.4  LIDS 시스템 초기화

이제 리부팅하기 전에 반드시 여러분이 필요로 하는 보안설정에 맞게 LIDS 시스템을 configure 해야 한다. 보호해야 할 파일이나 프로세스에 대한 설정을 할 수 있다. 다음 장에서 이 주제에 대해 자세한 내용을 알아볼 것이다.

 

3.5  시스템 재부팅

여러분의 시스템을 configure한 후에 시스템을 재부팅 한다. lilo가 보일 것이고 LIDS가 탑제된 커널을 로드하도록 선택한다. 그 다음에 여러분은 LIDS의 놀라운 세계로 들어가게 된다.

 

3.6  커널

시스템을 부팅 한 후에 lidsadm으로 커널을 확인하는 것을 잊지 말아야 한다. /etc/rc.local 의 마지막 라인에 명령어를 입력시켜도 된다.

# /sbin/lidsadm -I -- -CAP_SYS_RAWIO -CAP_NET_ADMIN

lidsadm에 대한 모든 옵션의 세부 내용을 알고 싶다면 LIDS-HOWTO를 참조하도록 한다. (http://www.lids.org/lids-howto)

 

3.7  온라인 관리

커널을 확인한 후, 여러분의 시스템은 LIDS에 의해 보호받게 된다. 그것 위에서 각종 테스트를 할 수도 있다. 만약 옵션과 같은 설정된 내용을 바꾸고 싶다면 패스워드를 입력하고 LIDS Security level online으로 변경하면 된다.

# /sbin/lidsadm -S -- -LIDS

 

4. LIDS 설정

이번 장에서는 LIDS 설정에 대해 이야기할 것이다.

 

4.1  파일 보호하기

첫째로, 여러분은 보호하려고 하는 파일을 정해야 한다. 대부분의 경우에서 /usr, /sbin, /etc, /var/log/와 같은 System binary files이나 system 설정 파일을 보호하려고 할 것이다.

둘째로, 그 파일을 보호하는 방법을 결정해야 한다. LIDS는 3가지 타입의 보호방법을 제공한다.

* Read Only Files. 읽기 전용의 파일로 아무도 그 파일을 변경할 수 없게 된다.
   /etc/passwd 같은 화일이 알맞은 용도가 될 것이다.

사용법:
lidsadm -A -r filename_to_protect

예제:
1. /sbin/ 디렉토리를 읽기 전용으로 보호
# /sbin/lidsadm -A -r /sbin/

2. /etc/passwd 파일을 읽기 전용으로 보호
# /sbin/lidsadm -A -r /etc/passwd

* Append Only Files. /var/log/message 나 /var/log/secure와 같은 시스템 로그 파일에
   첨가전용 파일타입이 사용된다. 이 파일들은 오직 append mode에서만 열릴 수 있으며,
   위와 마찬가지로 변경할 수 없다.

사용법:
lidsadm -A -a filename_to_protect

예제:
1. 시스템 로그 파일들을 보호
# /sbin/lidsadm -A -a /var/log/message
# /sbin/lidsadm -A -a /var/log/secure

2. apache httpd 로그파일들을 보호

# /sbin/lidsadm -A -a /etc/httpd/logs/
# /sbin/lidsadm -A -a /var/log/httpd/

아래는 LIDS-HOWTO에 나오는 Philippe Biond 의 예이다.
 

lidsadm -Z
lidsadm -A -r /boot
lidsadm -A -r /vmlinuz
lidsadm -A -r /lib
lidsadm -A -r /root
lidsadm -A -r /etc
lidsadm -A -r /sbin
lidsadm -A -r /usr/sbin
lidsadm -A -r /bin
lidsadm -A -r /usr/bin
lidsadm -A -r /usr/lib
lidsadm -A -a /var/log

 

주의: 만약 /etc/lids.conf 파일을 읽기 전용으로 보호한다면 LIDS가 적용되지 않은 커널로
        부팅 할지라도 어떤 파일의 형식도 변경할 수가 없게 된다.

‘lids.conf’ 파일의 위치를 고치기 위해서는
‘lidsadm.c’파일의 아래 라인을 고친다.

#DEFINE LIDS_CONF “/etc/lids.conf”

그리고 컴파일을 다시 하면 된다.

 

4.2  프로세스 보호

LIDS는 부모프로세스 init(pid=1)의 모든 프로세스들을 보호할 수 있다.

다음과 같은 특정한 옵션으로 실행시키면 된다.

# lidsadm -I -- +INIT_CHILDREN_LOCK

 

4.3  능력 보호(Protect with capability)

능력(capability)은 프로세스에게 주어지는 특권과 같은 것이다. 루트 프로세스는 모든 능력을 가지고 있다. 그러나 능력에 대한 묶음이 존재한다. 일반적인 커널에서는 그 묶음에서부터 능력을 제거하면 다음 부팅때까지는 아무도 사용할 수가 없게 된다.
(http://www.net com.com/~spoon/lcap를 참조하기 바란다.)

LIDS는 여러분이 원할 때 언제든지 on off 스위치를 통해서 이런 행동을 조절할 수 있다.
/proc/sys/kernel/cap_bset 에 대한 접근은 가두어져 있으며 보안 경보가 울린다. lidsadm은 모든 jab 을 수행한다. lidsadm에 의해 동작함으로써 LIDS 안에서는 모든 능력을 사용할 수 있다. 그리고 각각의 능력에 대해 정확한 의미를 알아볼 수도 있다.

그런 능력들 중 우린 두 가지에 대해 이야기 해보자.

CAP_SYS_RAWIO

이 능력을 켜면 우리는 ioperm/iopl 과 /dev/port,/etc/mem,/dev/kmem에 대한 접근 및 raw block devices(/dev/[sh]d??)에 대한 접근이 허용된다.

우리가 이 능력을 금지시키면 , 우리는 raw device에서 시스템 권한의 모든 프로세스들을( lilo의 동작과 같은) 사용할 수 없게 된다.

그러나 XF86_SVGA와 같은 것을 동작하기 위해서는 이 능력이 필요할 것이다.
이런 경우에는 커널 컴파일할 때 제외되는 프로그램 리스트를 넣을 수 있다.

CAP_NET_ADMIN

이 능력은 아래와 같은 기능을 가진다.

인터페이스 설정
IP firewall, masquerading , accounting 관리
소켓의 debug option 설정
routing table 변경
정해지지 않은/혹은 그룹/및 사용자 프로세스 설정
transparent proxying 을 위한 주소 binding
TOS(type of service) 설정
promiscuous mode 설정
driver statistics 비우기
multicasting
read/write of device-specific registers

보안상의 이유로 네트워킹 설정 변경을 금지할 때 위의 기능을 끄면 된다. 그것이 허락되지 않았을 때 firewall 규칙 변경은 허락되지 않는다.

Choosing the capability and sealing the kernel
(능력 선택 및 커널 적용)

여러분은 커널적용시에 어떤 기능을 끌 것인지 정해야만 한다. 여기에 예제가 있다.

rc 스크립트( rc.local, /etc/init.d/lids, /etc/rc.d/rc.d/init.d/lids, etc.) 에 다음 내용을 추가하면 된다.

lidsadm -I -- -CAP_SYS_MODULE\ -CAP_SYS_RAWIO -CAP_SYS_ADMIN\ -CAP_SYS_PTRACE -CAP_NET_ADMIN\ +LOCK_INIT_CHILDREN

 

4.4  네트워킹 보안

LIDS로 네트워크 보안을 향상시킬 수 있다.

network security with capability
(capability로 네트워킹 보안)

각종 능력을 가지고 네트워킹 보안을 향상 시킬 수 있다. anti-snifferring과 같은 것은 1024보다 아래의 포트를 bind할 수 없다. routing 규칙이나 방화벽도 변경할 수 없게 된다.

Scanner detector in kernel
(커널 안의 스캐너 탐지)

LIDS는 여러분의 시스템을 scan하려는 사람들을 탐지해낼 수 있도록 scanner detector를 제공한다. scanner는 nmap이나 satan과 같은 툴을 이용하여 half-open scans 혹은 nornam scans 등을 결정할 수 있다.

이때는 raw sockets을 사용불가로 하면 유용하다. 이런 경우에는 어떤 소켓도 사용할 수가 없게 된다. user space detector보다 한 차원 높은 보안 기능이 될 것이다.

 

4.5  침입자 반응 시스템

LIDS 는 정의된 규칙에 따라 위반사항을 결정할 때, 다음과 같은 방법에 의해서 행동에 반응할 수 있다.

Logging the message
(메세지 기록하기)

누군가 규칙을 위반했을 때 lids_security_log는 klogd에 메세지를 기록한다.

또한 anti_logging_flood의 능력도 가지고 있다.
커널 컴파일할 때 이 부분을 설정해 줄 수 있다.

Logging the message via mail server
(mail 서버를 거쳐서 메세지 기록하기)

LIDS는 여러분의 메일로 메세지를 보내는 새로운 특징을 가지고 있다. 메일서버의 ip와 주소등을 커널 컴파일할 때 정해줄 수 있다.

Shutdown the console

사용자가 규칙을 위반했을 때 유저콘솔을 shutdonw시킨다.

 

5. 고마운 사람들

무엇보다도 먼저 나의 친구, Kate lee에게 고맙다고 전하고 싶다. 이 문서와 같은 여러 문서들을 적을 때 나에게 항상 용기를 불어넣어 주었다. 그녀에게 이 문서를 바친다.

그리고 이 프로젝트에 많은 공헌을 한 Philippe Biond 와 Christophe Long 에게 감사를 전한다. 그들이 없었다면 이 프로젝트는 지금과 같이 잘 발전할 수 없었을 것이다.

모든 LIDS 사용자들에게 또한 감사한다. 그들의 기고와 토론들이 없었다면 LIDS는 많은 위대한 아이디어들을 가질 수 없었을 것이다.


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,056 명
  • 현재 강좌수 :  35,910 개
  • 현재 접속자 :  243 명