루트킷 예방
루트킷 예방은 어떤 다른 형태의 공격에 대한 예방과 같이 기본적인 시스템 보안에서 출발한다. 기본적인 시스템 보안계획은 소프트웨어 벤더에서 제공하는 패치로 애플리케이션을 업데이트하는 것 뿐만 아니라, 방화벽과 VPN등을 포함한다. 기본적인 보안 도구들을 실행함으로써 관리자는 상대적으로 안전한 네트워크를 보증할 수 있다.
보안기초
모든 네트워크에 대한 방화벽
방화벽을 사용하여 인터넷으로부터 연결되는 모든 네트워크가 보호된다고 확신하는 것은 방화벽에 대한 오해의 좋은 예이다. 관리자는 방화벽만이 침입자를 단념시키는 유일한 예방도구가 아니라는 점을 명심해야 한다.
모든 시스템 상에서 무엇이 실행되고 있는지 정확하게 알고 있어라.
어떤 시스템이 설치된 후에는 무엇이 실행되고 있는지 목록을 작성하라. 불필요한 서비스는 모두 종료시켜라. 비인가 애플리케이션을 실행하지 않도록 하기 위해서 시스템 프로세스에 대한 감사(audit)를 주기적으로 수행하라.
사용자에게는 해당 업무를 수행에 필요한 만큼의 접근을 승인하라.
사용자에게 절대로 필요 이상의 네트워크 서비스 접근을 제공하지 말아라. 사용자가 업무를 수행하기에 필요한 서비스에 대해서만 허가를 승인하라.
VPN과 Secure Shell과 같은 보안 통신을 가능하게 하라
VPN을 설치함으로써 관리자는 WAN상에서 전송되는 모든 데이터가 암호화된다는 것을 확신할 수 있을 것이다. Secure Shell(SSH)은 텔넷(telnet) 프로토콜을 대체한다. SSH는 사용자명과 암호를 포함한, 세션간 전송되는 모든 데이터를 암호화한다.
모든 벤더가 업데이트하는 것에 대하여 최신의 상태를 유지하라
운영체제 및 애플리케이션에 대한 보안 및 버그 패치는 주기적으로 이루어진다. 보안 이슈를 해결한 최신의 벤더 배포 버전으로 시스템을 최신 상태로 유지하라. 많은 공격자들은 매일 사용되는 애플리케이션에서 공개된 취약성을 악용하여 관리자 레벨 접근 권한을 획득한다.
호스트 및 네트워크 기반의 침입탐지 시스템을 설치하라
여러분의 네트워크에서 어떤 일이 일어나는지 아는 것은 매우 중요하다. 침입자가 접근권한을 획득하려고 할 때, 여러분의 IDS(Intrusion Detection System-침입탐지시스템) 애플리케이션으로 하여금 여러분에게 알려주도록 설정하라.
모든 로그 파일을 모니터링 하라
대부분의 시스템 활동이 로그(log)로 남기 때문에 로그 파일을 모니터링 한다면, 관리자가 매우 유리한 위치를 점유하게 된다. Logwatch나 LogSentry같은 로그 검사 프로그램을 사용하여 이런 일을 자동화하는 것은 매우 좋은 생각이다. 물론 로그 파일을 하는 것으로 관리자가 루트킷의 공격을 바로 알 수는 없다. 로그인 시도에 대하여 성공하거나 실패한 것과 같은 비정상적인 시스템 활동을 알 수 있는 것이다.
기본적인 보안 사전경고를 실시하는 것은 시스템에 대한 침입을 막고 어떤 종류의 공격도 예방하는 첫번째 단계이다. 관리자는 파일 보안을 확립함으로써 루트킷의 공격을 막아낼 수 있다.
파일속성(Attributes) 보안
파일 보안을 구현하기 위해서는 관리자가 따라야 할 몇 가지 단계가 있다. 공통 파일은 덮어쓰거나 변경될 수 없다고 보증하는 것이 한 가지 방법이다. 이것은 중요한 시스템 파일들에 대해서 immutable Flag를 셋팅함으로써 이루어진다.
Immutable Flag의 사용
immutable이라는 용어는 "변경할 수 없는"이란 뜻이다. immutable flag를 어떤 파일에 셋팅함으로써 그 파일은 수정하거나, 이름을 바꾸거나, 지울 수 없고, 심지어 링크도 걸 수 없다.
파일에 immutable flag를 셋팅하기 위해서는 대부분의 리눅스 배포판에서 찾을 수 있는 "chattr"이라는 명령어를 사용하면 된다.
·chattr +i <file>: immutable flag를 셋팅한다.
·chattr -i <file>: immutable flag를 해제한다.
·lsattr <file>: 파일에 적용된 속성들을 화면에 출력한다.
일부 공통 파일에 immutable flag를 셋팅하는 것은 그 파일이 변경될수 없다고 표시하는 것이기 때문에 대부분 루트킷의 작동을 불가능하게 만든다. 이런 방법으로도 LKM(loadable kernel modules) 루트킷을 막을 수는 없다. 이것은 커널이 "불변"으로 설정될 수 없는 것과 같다. 보고서 초반에 제시한 파일 목록은 어떤 파일에 immutable flag를 셋팅할 지 결정할 때, 좋은 출발점이 될 것이다.
immutable flag는 루트(root)에 의해서만 셋팅되거나 해제될 수 있다. 이 flag는 쉽게 셋팅할 수 있는 것처럼 쉽게 해제할 수도 있음을 기억하라. 공격자가 시스템에 접근했다는 것은 그 flag가 셋팅된 것을 발견하고 해제시켰을 수도 있음을 의미한다. 공격자는 immutable flag를 해제한 이후에 루트킷을 설치할 수 있다. 그러므로 루트킷에 대한 유일한 방어수단으로서 immutable flag만을 의지하지는 말아라.
다음의 보안 기초 가이드라인을 준수하라. 보안도구를 설치한 이후에 관리자는 그 시스템들에 대하여 실제로 탐지하고 모니터링 하는 것을 시작해야만 한다.
루트킷 탐지 및 모니터링
관리자는 어떻게 숨어있는 프로그램을 모니터링 할 수 있는가?
기본적으로 관리자가 시스템의 활동을 모니터링할 수 있도록 도와주기 위해 개발된 애플리케이션이 있다. 그런 애플리케이션을 사용하면 관리자가 루트킷을 모니터링 할 수도 있다.
Tripwire와 AIDE
Tripwire와 AIDE는 모두 파일의 무결성을 모니터링하기 위해 사용되는 유틸리티이다. 두 프로그램 모두 현재의 파일 및 디렉토리의 변화를 비교하기 위하여 파일 및 디렉토리 속성을 DB에 저장하고, DB에 대한 보안 암호를 생성한다. 파일 무결성 검사를 위해서 MD5를 이용한다. MD5는 임의의 길이의 문자열 데이터를 더 짧은 고정길이의 값으로 변형시키는 해쉬(Hash)함수이다. 어떤 두 문자열 데이터도 같은 MD5값을 가질 수 없다고 믿어진다.
리눅스 레드햇(Linux Redhat) 7.1 시스템에서 netstat와 ls에 대한 md5sum결과 값은 다음과 같다.
dc1961b6ce3ff6d6fe2c89c8603f4985 ls
30286974e55bb9f9e82f93cc44c39492 netstat
만약 모니터링되고있는 파일이 어떤 방식으로든 수정된다면, Tripwire와 AIDE는 관리자에게 변경사실을 알려줄 것이다.
두 애플리케이션 모두 보안 분야에서 광범위하게 사용되고 있다. 나는 이에 대해 더 자세히 살펴보고, 여러분의 기업 전체에서 사용하기를 권고한다. Tripwire는 사업적 또는 GNU licensing으로 모두 사용가능하다. AIDE는 GNU licensing으로 사용가능하다.
http://www.tripwire.com commercial license
http://www.tripwire.org gnu license
http://www.cs.tut.fi/~rammer/aide.html
레드햇 패키지 관리자(Redhat Package Manager)
Tripwire와 AIDE등과 상당히 유사하게, 레드햇 패키지 관리자(rpm)은 설치된 애플리케이션의 첵섬(checksum)을 검증하는데 사용될 수 있다. rpm은 첵섬을 검증할 뿐만 아니라, 파일의 접근권한 및 크기(size)와 같은 다른 종류의 불일치 사항도 검증할 수 있다. rpm은 옵션(option)으로 "-V"가 붙어서 설치된 임의의 rpm 패키지의 서명(signature)을 검사하는데 사용된다. "-Va"옵션을 사용하면 모든 설치된 패키지를 검사할 수 있다.
테스트 시스템에서 "rpm -V util-linux"을 실행시켜 보면 다음과 같은 결과를 얻을 것이다.
.......T c /etc/fdprm
.......T c /etc/pam.d/chfn
.......T c /etc/pam.d/chsh
S.5....T c /etc/pam.d/login
아래에서 볼 수 있는 "man"에서 발췌한 것을 이용하면, 여러분은 위의 rpm명령어의 실행결과를 이해할 수 있을 것이다. 결과에 따르면, 모든 파일에서 mTime(T)가 변화하였다는 것을 알 수 있다. mTime은 파일의 수정 날짜와 시간이다. 또한 "login"파일에서는 파일크기(file size:S)와 MD5 첵섬(checksum:5) 역시 변경되었음을 알 수 있다. 이런 정보를 이용하여 관리자는 왜 파일이 변경되었는지 알아볼 수 있다.
RPM에 대한 "man"의 출력결과:
S 파일 크기(Size)가 변경됨
M 모드(Mode)가 변경됨(접근권한permission 및 파일 타입을 포함)
5 MD5 첵섬이 변경됨
D 주/부(major/minor) 장치(Device) 수가 일치하지 않음
L 읽기 연결(readLink)(2)경로가 일치하지 않음
U 사용자(User) 소유권이 변경됨
G 그룹(Group) 소유권이 변경됨
T 파일수정일시(mTime)이 변경됨
Chkrootkit이라 불리는 다른 애플리케이션은 관리자가 루트킷 서명(signature)를 탐지하는 것을 돕는다.
Chkrootkit
Chkrootkit은 루트킷에 의한 변형작업에 대하여 시스템 바이너리(binaries)를 검사하기 위한 쉘 스크립트이다. 이 프로그램은 잘 알려진 LKM(loadable kernel modules)루트킷을 탐지할 수도 있다. Chkrootkit은 Nelson Murilo에 의해 만들어져 유지보수 되고 있으며, "www.chkrootkit.org"에서 찾을 수 있다.
다음 명령어 파일들을 이용하면, chkrootkit은 시스템 내에 루트킷이 자리잡은 공통파일과 디렉토리 들을 찾을 수 있다.
· awk
· cut
· echo
· egrep
· find
· head
· id
· ls
· netstat
· ps
· strings
· sed
· uname
Chkrootkit은 "/proc" 디렉토리에 대한 ps실행결과를 검사하여 숨겨진 프로세스에 대한 검사를 수행할 수도 있다. 많은 루트킷이 숨겨진 프로세스로서 스니퍼(sniffer)와 백도어(backdoor)를 실행시킨다. 전체자원이 가동중인 시스템 상에서, 한 프로세스가 비교작업을 완료하기 전에 시스템이 그 프로세스를 종료시킬 수도 있기 때문에, 이 프로세스가 생성한 긍정적인(positive) 결과에는 오류가 있을 수 있다.
Chkrootkit은 또한, 네트워크 인터페이스가 'promiscuous mode'에 있지 않은지 검증한다. Promiscuous 모드는 네트워크 상에서 도착하는 모든 네트워크 패킷에 대해 네트워크 장비가 가로채서 읽을 수 있도록 허용한다. 이모드에서는 분석을 위해 모든 패킷을 스니퍼(sniffer) 프로그램에 제공한다.
Chkrootkit을 사용하면 대체(alternate)경로로부터 명령어 파일들을 사용할 수도 있다. 이 옵션을 사용하면, 관리자는 위의 목록에 있는 파일들을 쓰기 방지된 파일시스템 또는 CD, 플로피 디스켓에 저장할 수 있다. 만약 복사 방지가 가능하다면, immutable flag를 지정함으로써 덮어쓰기를 확실히 방지할 수 있다. 이것은 chkrootkit이 감염되지 않은 파일을 사용하고 있다는 것이 확실하다는 뜻이다. 이미 감염된 파일을 사용한다면 이 애플리케이션을 사용하는 목적을 망치고 있는 것이다.
앞서 언급한 바와 같이, chkrootkit은 알려진 LKM 루트킷을 모니터링하고 탐지한다. 덧붙여, lsmod, kstat와 같은 명령어를 활용하면 관리자가 이런 종류의 루트킷을 모니터링하는 것에 도움이 될 것이다.
LSMOD
Lsmod는 커널에 로드된 모듈 목록을 작성하기 위해 사용하는 유틸리티이다. 관리자는 이 명령어의 실행결과에 친숙해져야 한다. 다음은 RedHat 7.2 시스템에서 실행시킨 lsmod명령어의 실행결과이다. 다음 결과는 모듈명과 모듈크기, 사용횟수 그리고 참조하는 모듈 목록 등을 보여준다.
3c59x 28424 1
cdrom 31936 0 (autoclean) [sr_mod]
sr_mod 16056 10 (autoclean)
ext3 64768 2
usb-uhci 24324 0 (unused)
usbcore 71072 1 [usb-uhci]
ext3 64768 2
jbd 47892 2 [ext3]
aic7xxx 128256 3
sd_mod 12832 6
scsi_mod 104800 4 [sr_mod aha1542 aic7xxx
sd_mod]
커널로 로드되는 모든 모듈을 추적하는 것은 LKM 루트킷을 모니터링하는 매우 좋은 프로세스이다. lsmod가 루트킷 모듈에 의해서 변형되어 루트킷 모듈을 숨기는 데 악용될 수도 있다. 커널로 로드되는 모듈이 어떤 것인지 목록을 만들기 위해 사용되는 또 다른 명령어가 있다. 이것은 'cat'이라고 불린다.
Cat는 파일을 연결시키고 화면 또는 기타 출력장치로 출력시키는 명령어이다. '/proc/modules'에 대하여 cat을 실행시키면 lsmod의 실행결과와 동일한 정보를 화면에 보여줄 것이다.
블로그 주인의 푸념
루트킷, exploit, 하이재킹, 스푸핑, 스니핑, 커널링, BOF, DDoS 웹 상에서 마치 전쟁이라도 벌어지듯 많은 일들이 일어난다.. 특히 웹서버나, 어떤 회사, 특히 상용 서비스라면 장난이 아니다.
서버나 웹을 공격, exploit code, 스니핑, 심지어는 cgi script, troy 변조 방법 까지 엄청난 자료들이 구글링과 커뮤니티에서 구할 수 있다.
필자인 나는 8월부터 11월까지 총 3번의 홈서버(smb,ftp,APM) 등 간단하게 사용할 목적으로 REDHAT9.0 을 설치해서 사용했지만...
3번이나 털렸다 각각 한번씩 털릴때마다 재설치 했고 어차피 파일 삼바 전용이라 신경도 안썻다 물론 역추적은 해봤지만..., 전부 웹 스크립타, 아파치를 타고 들어왔으며..
1번째 ,,, 는 .. 루마니아 ?!
2번째, 3번째는 엄청난 대륙 차이나..
그런데 이번 11월에 4번째로 털렸다..
루트킷이다...
사용자 계정은 접속 거부가 뜬다 미친...ㅠㅠ 그래서 루트킷을 파해치고 보안에 신경을 쓸것이다..
그래서 '리눅스 보안 - 루트킷' 관련 글들을 수집하고 기재했다 ..
물론 내가 전부 작성 한건 아니다, 원작자와, 스크랩을 가능하게 해주신 분들에게 감사드린다..
루트킷 내가 파해쳐서 반격할거다..
기다려 내서버 아파치만 깔면 터는 인간들아

