1. 취약점 점검 도구
(1) 개요
- 특정 시스템, 네트워크, 어플리케이션 등에 존재할 수 있는 보안 취약점을 사전에 점검하여 보안을 강화하기 위한 도구
- 보안 취약점 유형 : 네트워크 보안 취약점, 시스템 보안 취약점, 웹 보안 취약점
- 대표적인 취약점 점검 도구 : 네서스, 닉토
- 네서스(nessus) : 미국 테너블사가 개발 및 배포, 로컬 또는 원격지에서 다양한 방법을 통해 시스템, 네트워크, 웹 어플리케이션 등 알려진 취약점에 대한 점검을 수행, 취약점 내용과 해결방법을 상세히 제공
- 닉토(nikto) : 공객용 웹 취약점 점검 도구, 웹 서버 설치시 기본적으로 설치되는 파일과 웹 서버 종류와 버전 등을 스캔, 방대한 DB를 이용해 취약한 CGI 파일 스캔 기능 뛰어남
(2) 네서스(nessus)
1) 특징
- 클라이언트/서버 구조로 동작 : 서버에 nessus 데몬과 취약점 점검 플러그인 등이 설치되며 취약점 점검하고 결과 조회할 수 있는 인터페이스 제공(GUI), 클라이언트는 nessus 데몬에 접속하여 점검 실시
- 사용이 자유롭고 플러그인 업데이트 등이 쉽다.
- HTML 등 여러 형태로 결과를 리포트 해준다.
2) 실습
- (terminal에서) /etc/init.d/nessus restart -> ps -ef | grep nessusd -> nessus 데몬 기동시 기본 포트 8834/tcp 사용
- 웹 브라우저로 로그인 수행하여 기능 사용 가능
(3) 닉토(nikto)
1) 특징
- 방대한 취약점 DB를 통해 웹서버 잘못된 설정, 기본 설치파일이나 스크립트 존재 유무, 안전하지 못한 파일 등 웹서버에 대한 포괄적 점검을 수행
- HTML 등 여러 형태로 결과 저장 가능
2) 실습
- (terminal에서) nikto -h 192.168.56.100 -output vul.html -Format html -> 192.168.56.100 웹서버 대상으로 웹 취약점 점검 수행하며 결과는 html 형식으로 출력
2. 무결성 점검 도구(tripwire)
(1) 개요
- 파일시스템의 상태추적 및 허가받지 않은 변경 여부를 주기적으로 점검하여 의심스러운 변화가 감지되면 이를 검사하고 복구하는 과정
- tripwire는 유닉스/리눅스 환경에서 대표적인 파일시스템 무결성 점검 도구로 오픈소스 버전과 상용 버전 존재
- 무결한 상태에서 외부 공격자가 루트킷/백도어 설치시 감지할 수 있지만, 공격자가 루트킷/백도어 설치후 tripwire 데이터베이스 갱신해버리면 공격사실을 알 수 없다는 단점이 있다.
(2) 동작방식
- 최초 설정파일에 등록된 파일 및 디렉터리의 해시값을 생성하여 데이터베이스에 저장한다.
- 주기적으로(스케줄링) tripwire가 동작하면서 기존 데이터베이스에 저장된 해시값과 현재 각 파일 및 디렉터리 해시값을 비교한다.
- 비교결과 값이 다를 경우 변경 내역을 출력하고 관리자가 이를 확인한다.
(3) 실습
- tripwire 정책 설정 : 정책설정파일을 통해 점검할 파일 및 디렉터리 설정
- 데이터베이스 초기화 : 점검 전에 이루어져야 한다.
- tripwire 실행, 결과 리포트 확인하기
3. 루트킷 점검 도구(chkrootkit)
(1) 개요
- 루트킷(rootkit) : 지속적으로 자신의 존재가 탐지되지 않도록 숨기면서 관리자 권한획득과 백도어 등 기능을 수행하는 코드와 프로그램의 집합
(2) 실습
1) chkrootkit 실행
- chkrootkit : 옵션없이 실행하면 모든 파일 결과를 보여줌 (-q : quiet 모드로 변조된/감염된 파일정보만 보여줌)
- INFECTED : 해당 파일이 변조/감염되었음
- not infected : 해당 파일이 변조/감염되지 않았음
- not tested : 파일 변조/감염 여부를 체크하지 못했음
- not found : 해당 파일이 존재하지 않음
- ~ process hidden for ps command -> ps 명령 실행시 숨겨진 프로세스 발견됨, 실제 공격자가 의도적으로 숨긴 것인지 확인 필요
2) 루트킷의 hidden process 탐지 원리
- /proc : 유닉스/리눅스 커널이 메모리상에 사용하고 있는 모든 자원들에 대한 정보들을 파일 형식으로 보관하는 파일시스템, 물리적 디스크 영역이 아닌 메모리 영역에 조냊하는 파일시스템으로 매 부팅시마다 새롭게 생성
- /proc/<pid>/exe : 프로세스 실행파일명 및 경로를 확인할 수 있는 심볼릭 링크 파일
- /proc/<pid>/cmdline : 프로세스를 실행한 명령어 및 전달인자 정보를 담고 있는 파일로 프로세스가 실행된 방식을 정확하게 파악하는데 활용
- 일반적으로 루트킷은 공격자가 숨기고자 하는 프로세스가 출력되는 부분만 제거하고 출력하도록 ps 프로그램을 만들어 타겟 시스템에 있는 정상적인 ps 프로그램과 교체하는 방식으로 동작
- 루트킷 탐지 프로그램은 ps 실행결과와 /proc 디렉터리에 있는 프로세스 정보를 비교하여 /proc 디렉터리에는 프로세스가 있지만 ps 실행시 보이지 않는 프로세스를 히든 프로세스로 탐지
- 일반적으로 공격자는 백도어 실행 후 실행파일 흔적을 숨기기 위해 실행 후 삭제하는 방식을 많이 사용 (실행파일명 및 경로 끝에 deleted 붙음)
(3) 대응방안
1) RPM(Redhat Package Manager) 명령을 이용하여 변조된 파일 확인
- rpm : 리눅스에서 프로그램 설치를 쉽게 하기 위해 만든 설치파일을 패키지라 하며, 이러한 패키지 관리하는 명령어
- 절차 : rpm -qf 명령을 통해 해당 실행파일이 어디 패키지에 속해있는지 확인 -> rpm -V 명령 실행하여 변경여부 확인
rpm -Uvh 패키지파일이름.rpm | 해당 패키지 신규 설치 또는 업그레이드 수행 |
rpm -qf 파일절대경로 | 해당 파일이 어느 패키지에 포함되어 있는지 확인 |
rpm -V 패키지이름 | 해당 패키지를 통해 설치된 파일의 무결성을 검사(verify) |
S : 파일크기변경, M : 파일 퍼미션 변경 5 : MD5 체크섬 변경, T : 파일 수정시간 변경 U : 소유자 정보 변경, G : 소유그룹 정보 변경 D : 장치 정보 변경, L : 심볼릭링크 정보 변경 |
2) strace 명령 이용하여 변조된 파일 확인
- strace : 유닉스/리눅스 시스템에서 특정 프로그램(실행파일)의 시스템 콜과 시그널을 추적하는데 사용하는 디버깅 도구로 정상적인 프로그램과 변조된 프로그램의 시스템 콜을 비교하여 변조 여부를 확인 가능
3) 패키지 재설치
- rpm -Uvh --force 명령 : 동일하거나 더 높은 버전의 패키지가 설치되어 있더라도 강제로 기존 것 삭제하고 재설치
- 재설치시 오류 발생하는 경우, 공격자가 속성 설정하였을 가능성 높다.
- lsattr 명령을 통해 파일속성정보를 확인해보면 i(변경불가능) 속성이 설정되어 삭제되지 않은 것을 알 수 있다.
- chattr 명령을 통해 i 속성을 제거(-i)한 후 rpm 명령을 통해 재설치
- 주요 실행파일이 변조/감염되었다는 것은 이미 해킹당했다는 것이므로, 변조/감염이 확인된 파일만 교체하는 것은 임시방편이고 최선의 방법은 해당 시스템을 다시 설치하는 것이다.
4) 리눅스 파일 속성(Attribution) 설정
- lsattr [파일명] : 해당 파일의 속성 정보를 확인, i(읽기전용모드, 변경,추가,파일삭제 불가), a(내용추가만 허용), A(엑세스 타임 변경하지 않는다)
- chattr : + 속성을 통해 속성을 설정하고, - 속성을 통해 속성을 제거한다.