[IT 알아보기]/IT 소식

리눅스 취약점 #2

이호스트ICT 2009. 9. 8. 11:49

6. Tcp wrapper 적용
가장 기본적인 보안툴 입니다.
허가된 ip 로만 접속을 허용하고 그 외 나머지 ip 로 들어오는 접속은 전부 거부 되도록 합니다.

대부분의 리눅스 패키지에는 기본적으로 설치되어 있습니다.

1) 간단한 사용법
우선 /etc/inetd.conf 를 열어 적용하려는 데몬에 다음과 같이 적용합니다.

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
pop3 stream tcp nowait root /usr/local/bin/popper popper -s

접속을 허용할 ip address 또는 block을 /etc/hosts.allow 에 적습니다.

ALL: 123.456.789.10 123.456.789.

/etc/hosts.deny 는 다음과 같이 적습니다.

ALL: ALL

위와 같이 하면 123.456.789.10 이나 123.456.789 로 시작되는 ip 에서만 접속을 허용하고 나머지는 전부 거부하게 됩니다.



7. 불필요한 daemon 죽이기

대부분의 리눅스 관리자들은 OS를 인스톨 후 별다는 관리작업을 하지 않아 보안상 문제가 되고 있습니다.

사용하지 않는 불필요한 데몬을 구동시키는것은 외부 공격자들이 침입을 허용할 기회를 넓히는 결과가 되므로 서버의 용도와 상관없는 불 필요한 데몬은 구동시키지 않도록 합니다.

# /usr/sbin/ntsysv
사용하지 않는 데몬은 선택하지 마십시요.

특히 amd, ssh,httpd,named, smb, NFS,NIS 에 관련된 데몬은 사용하지 않으면 구동시키지 않토록 합니다.

inetd에 구동되는 데몬이라면 /etc/inetd.conf 에서 comment시킨후 inetd를 다시 구동 시킵니다( kill -HUP pid_of_ientd)



8. Backdoor 또는 Trojan horse 찾기

만약 리눅스 시스템이 해킹당했다면 backdoor가 설치되어 있을 확률이 높습니다.

리눅스의 경우 Rootkit이라는 backdoor프로그램들이 널리 사용 됩니다.

1) backdoor 찾기
보통 다음과 같은 프로그램들이 backdoor들로 대체거나 설치 됩니다.

bindshell,chfn,chsh,crontab,du,find,fix,
ifconfig,inetd,killall,linsiffer,login,ls,
netstat,passwd,pidof,ps,rshd,syslogd,tcpd,top

위의 설치된 프로그램들은 마치 정상적인 프로그램인것처럼 동작하며 해커가 사용하고 있는 특정 프로세스나 파일들을 감출수 있는 기능이 있습니다.

그러므로 이런 rootkit이 설치된 서버는 관리자가 아무리 패스워드를 바꾸고 보안을 강화 하더라도 언제든지 해커가 다시 들어올수 있게 됩니다.

이런 경우, 우선 해킹당하지 않았다고 생각되는 리눅스 시스템에서 find , ls , netstat ,ifconfig 등과 같은 명령어들을 다운받아 반드시 이를 통해 시스템을 점검해야 합니다.

일반적으로 rootkit 설정파일들은 서버 관리자가 쉽게 발견하지 못하도록 /dev에 device 파일인 것처럼 위장하는 수법을 씁니다. (물론 항상 그런것은 아닙니다만..)

# find /dev -type f

/dev/MAKEDEV
/dev/ptyr
/dev/ptyq
/dev/hda02

위의 명령어는 /dev 디렉토리에 일반파일이 있는지를 점검하는 명령어 입니다.
보통 리눅스의 경우 MAKEDEV 파일만 존재하고 그외 나머지 파일들은 존재해서는 안됩니다.

만약 위의 예제과 같이 /dev/ptyr,/dev/ptyq 등과 같은 파일들이 존재한다면 rootkit 이 설치되었다고 볼수 있습니다.

위의 파일들을 열어보면 외부 칩입자가 숨길려고 하는 프로세스이름, 프로세스 아이디,ip address, port 번호 등의 정보가 들어있습니다.

이 정보들을 이용하여 설치된 프로그램을 찾아 제거해야 합니다.

(보통 eggdrop 이라는 IRC bot 이나 sniffer와 같은 프로그램이 실행된 경우가 많습니다.)

또는 점이나 space 로 시작되는 디렉토리가 있으면 의심 해봐야 합니다.

# find / -type d -name " *" -ls ( space 로 시작되는 directory 찾기)

or find / -type d -name ".*" -ls ( . 으로 시작되는 directory 찾기)

또한 /etc/rc.d/init.d 에서 구동되는 script들을 확인하여 이상한 프로그램이 구동되는지도 확인 합니다.

일단 rootkit이 설치되어 있다고 가장 확실한 방법은 다시 인스톨하는 것입니다 :-(

만약 그럴 상황이 되지 않는다면 Clean 한 시스템의 바이너리들을 다운받아 모두 교체해야 합니다. (특히 daemon들의 경우 다시 설치할것을 권고 합니다.)

또한 만약 sniffer와 같은 프로그램이 구동되어 있다면 다른 시스템의 ID와 패스워드가 다 노출된 상태이기 때문에 반드시 패스워드를 교체해야 합니다.



9. 패스워드 강화하기

패스워드를 예측하기 쉽지 않토록 설정 합니다.
(전통적으로 현재까지도 예측하기 쉬운 패스워드를 이용한 공격은 너무나 쉽게 행해지고 있습니다.)

Tcp wrapper가 설치되어 있지 않다면 외부에서는 이 계정을 통해 로긴할수 있으며 또한 local에서 root를 획득하는 일은 외부에서 root를 얻는것보다 더욱 쉽게 이루어 질 수 있습니다.



10. 보안툴 적용하기

1) Tcp wrapper
위의 본문내용을 참고 하세요.

2) snort ( 침입 탐지 시스템)
인터넷에 공개된 Free IDS로 여러가지 알려진 침입시도를 탐지할수 있는 유용한 툴입니다.

자세한 내용은 다음사이트를 참고하세요.

http://www.clark.net/~roesch/security.html


3) Tripwire ( File Intergrity Checker)
Backdoor의 설치를 탐지하기위해서 미리 file의 intergrity를 점검하는 것이 중요 합니다. 이를위해 tripwire를 사용 할것을 권합니다.

자세한 설치방법과 사용법은
http://www.tripwire.com 을 참고하세요.



11. 주기적인 로그 모니터링

보통 시스템을 공격하기 전에 시스템의 정보를 얻고자 하는 사전작업이 이루어지게 됩니다.

/var/log/messages, /var/log/secure 등과 같은 파일들을 주기적으로 검사하면 이러한 정보를 얻을수 있습니다