인터넷에는 open 또는 closed 소스로 개발되어 자유롭게 이용이 가능한 보안 프로그램들이 많이 공개되어 있다. 물론 일반적으로 이러한 프로그램들은 상용 장비나 솔루션에 비해 인터페이스나 기능 등이 부족한 단점이 있다.
그렇다고 해서 자유롭게 이용이 가능한 이러한 솔루션이 모두 조잡하거나 신뢰성이 떨어지는 것은 아니다. 어떤 프로그램의 경우 심지어는 상용 솔루션보다 더욱 안정적이면서 우수한 성능을 내는 경우도 있고, 특히 최근에는 개인이 아닌 개발자 커뮤니티를 통한 프로젝트 형식으로 진행되면서 상용 이상의 성능과 기능을 제공하는 경우도 적지 않다.
이번 글에서는 이러한 많은 프로그램 중 여러 환경에서도 사용이 가능한 대표적인 공개 프로그램의 활용 방안에 대해 자세히 알아보도록 하겠다.
지난 2003년 nmap의 관리자는 nmap의 사용자들을 대상으로 가장 많이 사용하는 보안 툴에 대한 조사를 진행한 적이 있었다. 이 결과는 2000년에 진행한 조사와 크게 다르지 않았는데, 2005년을 맞이한 지금 역시 크게 다르지 않을 것이다.
이렇듯 몇 년간의 결과가 바뀌지 않는 이유는 이러한 프로그램들이 많지 않다는 이유도 있겠지만 그보다는 커뮤니티를 통해 사용자의 요구를 적극적으로 수용해 지속적인 업데이트로 상용 수준의 기능과 성능을 제공하고 있기 때문이 아닐까 싶다(참고로 앞의 조사에 대한 모든 목록은 http://www.insecure.org/toolk.html에서 확인할 수 있다).
물론 이외에도 많은 보안 툴들이 있겠지만 대중적으로 사용되고 있는 만큼 해당 프로그램의 기능과 작동 방식 등은 알아두는 것이 좋을 것이다. 왜냐하면 이 프로그램은 훌륭한 보안 프로그램이지만 다른 용도로 사용된다면 관리자에게는 심각한 문제를 유발할 수 있는 치명적인 공격 툴이 될 수도 있기 때문인데, 대표적인 몇 개 프로그램의 활용 방안에 대해서 알아보도록 하자.
nessus로 상용 수준의 취약성 점검을!
첫 번째 소개하고자 하는 프로그램은 앞의 조사에서도 부동의 1위를 차지한 ‘nessus’라는 프로그램이다. 이 프로그램은 로컬 또는 원격지에서 다양한 방법을 통해 시스템이나 네트워크의 알려진 취약성에 대한 점검을 수행하며 점검을 통해 취약성의 내용과 해결 방법 등을 상세하게 제공한다.
nessus(http://www.nessus.org/)는 다음과 같은 특징이 있다.
◆ 서버/클라이언트 구조로 작동한다.
nessus는 서버/클라이언트 구조로 작동하는데, 서버에는 nessus 데몬과 각종 취약성 점검 플러그인 등이 설치되며 클라이언트는 서버에 접속해 취약성을 점검하고 결과를 조회할 수 있는 인터페이스를 제공한다. nessus 데몬은 MAX OS X이나 IBM AIX에도 설치될 수 있으나 리눅스 등 유닉스 계열에 설치하는 것이 좋다. 그리고 클라이언트는 윈도우나 유닉스에 설치될 수 있는데, 여기에서는 윈도우에 설치해 알아보도록 하겠다.
◆ 사용이 자유롭고 플러그인 업데이트 등이 쉽다.
클라이언트에서 GUI 형태로 모든 취약성 점검 설정과 아울러 그 결과를 알 수 있어 초보자도 쉽게 사용이 가능하다. 또한 취약성이 공개되면 일반적으로 1~2일 이내에 취약성 DB에 추가되어 업데이트가 매우 빠르다.
◆HTML 등 여러 형태로 결과를 리포트 해준다.
리눅스뿐만 아니라 유닉스, 윈도우 및 라우터 등 모든 OS 및 장비에 대한 취약성 정보를 제공하며 취약성 점검 결과는 txt나 html 또는 pdf 등의 형식으로 자유롭게 저장할 수 있다.

nessus 다운로드 및 설치
nessus는 서버 클라이언트 구조로 작동하므로 서버 프로그램과 클라이언트 프로그램을 각각 설치해야 한다. nessus 홈페이지에 접속한 후 다운로드를 클릭해 nessus installer를 선택하면 된다.

이와 같이 실행하면 자동으로 설치를 시작하게 된다. 설치과정에서 플러그인을 수시로 업데이트하기 위해서는 nessus 홈페이지에서 이메일을 등록한 후 메일로 받은 등록키를 입력해야 한다. 이후 엔터를 입력하면 설치가 완료된다.
nessus와 nessusd 옵션 설정
이렇게 해서 설치를 끝낸 후에는 이후에 클라이언트가 nessus 데몬에 접속시 인증에 필요한 사용자 이름과 암호를 설정할 차례이다. 다음으로 취약성 DB를 메일 자동으로 업데이트하도록 다음과 같이 실행하고 이를 cron에 설정하도록 한다.
# /usr/local/sbin/nessus-update-plugins
이제는 nessus 데몬을 띄우도록 한다.
# /usr/local/sbin/nessusd -D
클라이언트 프로그램은 http://nessuswx.nessus.org/에서 최신 버전을 다운로드 받아 윈도우 PC에 설치하면 된다. 설치한 후 『Session

임의의 이름을 입력하면 다음과 같이 입력창이 나오는데, 먼저 Targets에는 취약성 점검을 수행할 IP 또는 IP 대역을 지정하도록 한다. Add를 클릭해 IP를 입력하면 된다. 다음으로 Connection에서는 nessus 데몬에 접속하기 위해 nessus 데몬의 IP 주소 및 앞에서 생성한 로그인 유저와 암호를 입력한다.
이와 같이 설정한 후 확인을 선택하고 해당 세션의 오른쪽 마우스를 클릭하고 Execute를 실행해 연결하면 된다. 잠시 후 해당 서버에 대한 취약성 점검을 시작한다. 점검이 완료된 후 ‘view’를 클릭하면 취약성 점검 결과를 바로 확인할 수 있으며, ‘Report’를 클릭하면 취약성 결과를 txt나 html 또는 pdf 등 다양한 방식으로 저장할 수 있다.

취약성의 수준에 따라 다른 색으로 보여지고 해당 경고창을 클릭하면 우측에 상세한 정보가 보여지게 된다. <화면 5>의 경우 161/udp를 사용하는 snmp에서 public이라는 문자열을 사용하기 때문에 보안 경고가 뜬 것을 알 수 있다.
nikto로 웹 해킹에 대응하자
최근 시스템의 셸이나 다른 별도의 툴을 사용하지 않고, 웹 서버나 게시판 등 서버측에서 실행되는 응용 프로그램의 취약성을 이용한 소위 ‘웹 해킹’이 자주 발견되고 있다. 이러한 웹 해킹은 셸 로깅이 아니므로 로그가 잘 남지 않고 방화벽에서도 허용되어 있고 특히 국내의 경우 게시판이나 자료실 등을 운영하면서 서버측 언어를 많이 사용하므로 이 추세는 계속적으로 증가할 것으로 보인다.
이러한 웹 해킹에 대응하기 위해 웹 서버나 웹 기반의 응용 프로그램의 취약성을 점검할 수 있는 대표적인 프로그램으로 nikto라는 프로그램을 활용해 보기로 하자.
nikto의 기능 및 특징
nikto는 웹 서버 설치시 기본적으로 설치되는 파일과 웹 서버의 종류와 버전 등을 스캔하며 특히 방대한 DB를 이용해 취약한 CGI 파일을 스캔하는 기능이 매우 뛰어하다. 여기에서는 이러한 nikto의 기능 및 특징에 대해 알아보도록 하자.
[1] nikto는 취약하다고 알려진 3100여개의 방대한 CGI 파일에 대한 정보를 갖고 있으며 625개가 넘는 서버에 대한 버전 정보를 갖고 있다. nikto는 서버에서 보안적으로 잘못 설정된 부분(misconfigurations)이나 웹 서버 설치시 기본적으로 설치되는 파일이나 스크립트의 존재 유무, 안전하지 못한 파일이나 스크립트의 유무, 오래되어 취약성을 가지고 있는 프로그램의 유무 등을 검색한다.
[2] 취약성 DB는 수시로 업데이트가 되며 원격지에서도 쉽게 업데이트가 가능하다.
[3] 취약성 점검 결과는 html이나 txt, csv 등으로 저장 가능하다.
[4] nikto 사이트(http://www.cirt.net/code/nikto.shtml)에서 소스를 다운받을 수 있다.
nikto의 홈페이지에서 소스 파일을 다운받는다. 소스 파일을 다운받은 후 압축해제하면 된다.


nikto 활용하기
nikto는 기본적으로 perl로 되어 있기 때문에 사용시 별도로 컴파일 과정은 필요하지 않고 바로 사용할 수 있다. 사용 형식은 다음과 같다.
./nikto.pl [-h target] [options]
아무런 옵션 없이 nikto.pl을 실행하면 전체 옵션을 보여주는데, 많이 사용되는 몇몇 옵션에 대해 알아보도록 하자(모든 옵션은 홈페이지를 참고하기 바란다).
-Cgidirs
이 옵션을 사용하면 스캔을 진행할 cgi 디렉토리를 지정할 수 있다. 통상적으로 all로 지정하면 되고 이때 모든 cgi 디렉토리를 스캔한다. 다음은 스캔 예제이다.
# ./nikto.pl --Cgidirs all -h test.nikto.com
이때 웹 서버의 access_log를 보면 <화면 7>과 같이 보이게 된다.

-generic
스캔시 ‘Server:’ 문자열에 보이는 정보와는 관계없이 스캔을 진행하도록 한다.
-findonly
웹 서버가 사용하는 웹 포트를 스캔하기 위한 옵션이다. 이를테면 80번이 아닌 다른 포트에서 웹 서비스를 하는 포트를 찾을 경우에 사용된다.

-Format
스캔 결과를 파일로 저장하고자 할 때 어떤 형식으로 남길지 지정한다. 기본 옵션은 txt로 저장되나 이외 htm이나 csv 등을 지정할 수 있다. 또한 이때 -output과 함께 사용해 스캔 결과로 저장될 파일명도 함께 지정해야 한다. 다음은 스캔 예제로서 htm 형식으로 저장하며 저장 결과는 result.html로 남도록 했다.
# ./nikto.pl -Format htm -output result.html -h test.nikto.com
<화면 9>는 이때의 스캔 결과 html 파일을 브라우저로 읽은 화면이다.

-id
만약 해당 웹 서버가 HTTP Authentication으로 보호되고 있을 때 ID/PW로 인증할 필요가 있는데, 이때 사용될 수 있다. 형식은 userid:password이다.
-update
룰 등을 업데이트할 때 필요하다. 웹을 통해 자동으로 다운받아 업데이트하게 된다. 다음은 실행 예이다.
# ./nikto.pl -update
만약 점검하고자 하는 서버 또는 도메인이 여럿인 경우 점검하고자 하는 리스트를 파일로 만들어서 일괄 스캔할 수도 있다. 이를테면 다음과 같이 스캔하고자 하는 목록을 한 줄에 하나씩 list.txt에 설정한 후 실행하면 순서대로 실행하게 된다.
# ./nikto.pl -h list.txt
10.1.1.2
10.1.1.3
10.1.1.50:443
연재를 마치며
이번 글에서는 연재 마지막으로 대표적인 취약성 점검 프로그램과 함께 관리자나 개발자가 웹 사이트 운영 과정에서의 실수로 당하기 쉬운 웹 해킹에 대응하기 위한 프로그램에 대해 살펴봤다. 사실상 하루가 다르게 새로운 취약성과 공격코드, 변종 그리고 보안 권고문이 발표되고 있는데, 전문적인 보안 관리자가 아닌 이상 매일 이러한 취약성과 보안권고문에 매달릴 수 없는 것이 사실이다.
이러한 경우 자신이 관리하는 시스템에 대한 정기적인 취약성 점검은 발생할 수 있는 보안 사고를 예방하는데, 큰 도움이 될 수 있을 것이다. 그러나 완벽한 보안은 없는 만큼 보안 프로그램에 대한 과신 역시 경계해야 할 것 중 하나이다.
마지막으로 노파심에 한 마디 하자면, 앞의 프로그램들은 어떠한 목적으로 사용하는가에 따라 공격 툴로 둔갑될 수도 있는 만큼 자신의 시스템이나 네트워크의 취약성 점검 외 다른 시스템을 스캔하는 데는 사용하지 않도록 주의하기 바란다.@
* 이 기사는 ZDNet Korea의 제휴매체인 마이크로소프트웨어에 게재된 내용입니다.
지금 뜨는 기사
이시각 헤드라인
ZDNet Power Center
