퍼온곳 http://tunelinux.pe.kr

원문출처 http://www.linuxlab.co.kr/docs/00-07-4.htm

테스트해보려고 받으려했는데 커널 2.4.18용 패치는 없군요...
또 xfs패치와의 호환성도 알아봐야할듯합니다.
그부분은 따로 글을 쓰도록하겠습니다.

LIDS로 보안시스템을 구축하자
(Build a Secure System with LIDS)

번역 : 이국현 errai at hitel.net
원 문 : http://www.linuxsecurity.com/content/view/108614/169/

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는 많은 위대한 아이디어들을 가질 수 없었을 것이다.

관련 링크: http://www.lids.org

+ Recent posts