전문가칼럼

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

취약점 분석과 조치

전문가칼럼
DBMS별 분류
MS-SQL
작성자
dataonair
작성일
2002-04-01 00:00
조회
11854





구성요소와 현황

eceo200204010_01.gif

김진희
나일소프트 연구2팀 과장

취약점 분석과 이에 따른 조치를 어떻게 할 것인가. 이 질문에 컴퓨터 사용자를 비롯해 시스템관리자, 개발자 어느 누구도 자유롭게 대답하지 못할 것이다. 이를 위해서는 먼저 취약점이란 무엇이고 그 종류에는 어떤 것이 있는지를 알아봐야 한다. 이후 시스템에 어떤 취약점이 있을 수 있고 대응은 어떻게 해야 될지를 생각해야 할 것이다.

취약점(vulnerability)이란 운영체제나 애플리케이션의 구조적인 결함 혹은 관리 부족 등으로 인해 시스템에 불법으로 침입할 수 있는 허점(hole)을 말한다. 취약점의 종류는 크게 3가지로 나누어 볼 수 있다.

첫째, 운영체제의 구조적인 결함으로 발생하는 취약점이 있다. 대표적인 예로 Race Condition을 들 수 있다. UNIX는 멀티 프로세스, 멀티유저를 지원한다. 여러 개의 프로세스가 동시에 실행되면서 시스템의 자원(Resource)을 공유하게 된다. 이런 공유 과정에서 불법 침입자는 자기가 원하는 파일, 예를 들어 .rhosts을 생성하여 root 권한을 획득할 수 있다.

둘째, 애플리케이션의 결함으로 발생하는 취약점이 있다. 애플리케이션 개발자들이 프로그램을 개발할 때 보안사항을 고려하지 않고 개발한 결과 불법 침입자는 이를 이용해 시스템에 침입할 수 있다. 대표적 예로 Buffer Overflow를 들 수 있다. Buffer Overflow는 개발자들이 프로그램을 작성할 때 버퍼의 정확한 길이를 고려하지 않는 오류로 인해 발생한다.

셋째, 관리 부족으로 인해 발생하는 취약점이 있다. 필자가 취약점분석을 했던 한 기관 중에 .rhosts을 생성하여 rcp와 rlogin 서비스를 이용하고 있는 곳이 있었다. rcp나 rlogin 서비스 그 자체는 취약하다고 말 할 수는 없다. 하지만 .rhosts를 +로 설정하였다면 문제는 심각해진다. +란 의미는 어떤 호스트라도 권한을 준다는 의미이기 때문이다. rcp나 rlogin은 사용하기 편하기는 하지만 시스템 관리 측면에서 보면 매우 불안한 서비스이다. 취약점과 편리성은 반비례 관계에 있는 경우가 대부분이다. 시스템을 이용하는데 편리한 만큼 취약할 가능성은 그만큼 늘어나게 된다.


취약점 파악 전 점검사항

취약점을 파악하고 이에 대응하기 위해 자신의 시스템에서 기본적으로 파악해야 할 내용들을 정리해 보면 다음과 같다.

△어떤 운영체제를 사용중인가: 자신의 시스템에 사용하는 운영체제가 UNIX계열, LINUX계열 혹은 Windows계열인지를 먼저 파악해야 한다. 가장 기본적인 항목이다.

△운영체제 버전이 어떻게 되는가: UNIX계열이라도 많은 운영체제 종류와 버전이 존재한다. 정확한 운영체제 종류를 파악해야 한다. 보통 UNIX계열은 uname 이라는 명령어가 존재한다. Uname 명령어를 통해 확인해볼 수 있다. Windows계열일 경우 서비스팩 몇 번까지 패치를 하였는지를 파악해야 한다.

보통은 자신의 컴퓨터(windows 바탕화면에 존재) 등록정보를 확인해보면 시스템의 서비스팩 번호를 확인할 수 있다. 또한 MS사에서는 서비스팩이나 패치상황을 파악할 수 있도록 하는 툴을 제공해 준다.

△시스템에 어떤 종류의 응용프로그램이 운영중인가: 시스템에 어떤 목적을 가지고 어떤 응용프로그램이 운영중인지 파악돼 있어야 한다. 예를 들어 웹 서버로 사용하고 있다면 IIS(Internet Information Server) 서버가 설치되어 있는지 혹은 아파치 서버가 운용 중인지 파악되어 있어야 할 것이다. IIS나 아파치의 버전 정도는 파악되어 있어야 한다.

△시스템의 어떤 포트가 열려져 있는가: 시스템의 어떤 포트가 열려져 있고 해당 포트에 대한 서비스가 어떤 종류의 서비스인지를 파악하고 있어야 한다. 참고로 열려진 포트에 대한 정보는 기본적으로 netstat 명령어로 알 수 있다. netstat는 UNIX나 Windows에 공통적으로 존재하는 명령어이다. 또다른 방법으로는 nmap을 인스톨하고 nmap localhost를 시도해 본다. namp은 www.insecure.

org/nmap/에서 다운로드 할 수 있다.

△시스템에 어떤 서비스가 실행되고 있는가: 시스템에 ftp 서비스가 실행 중인지, telnet서비스가 실행 중인지, 혹은 기타 다른 서비스가 실행 중인지 파악되어야 할 것이다. UNIX계열일 경우 /etc/inetd.conf에 오픈되어 있는 서비스를 대략적으로 알 수 있다(물론 전체적인 서비스 목록이 아니다).

Windows 2000일 경우 [시작]->[프로그램]->[관리도구]->[서비스]를 확인하면 실행중인 서비스를 파악할 수 있다. 일단 기본적으로 자신의 시스템을 파악한 후 내 시스템에는 어떤 취약점이 있을 수 있을까라는 의문이 들 것이다.

국내에서는 www.certcc.or.kr에서 취약점 리포트를 해주고 있다. 아직까지 국내에서 버그 리포트가 활성화되어 있지는 않다.

국외 사이트 중 대표적으로 관심을 가지고 방문을 해야 할 사이트는 △www.cert.org/advisories/ △www.securityfocus.com/ △http://www.iss.net/ △www.iss.net/security_center/search.php △ciac.llnl.gov/cgi-bin/index/bulletins △cve.mitre.org/

△www.auscert.org.au/Information/Advisories/

aus_advisories.html △www.microsoft.com/technet/

security/current.asp △www.microsoft.com/korea/

technet/security/current.asp 등이다.

자신의 시스템을 파악한 후에는 이들 사이트에서 항상 주기적으로 버그리포트에 따라 버그를 패치 해야하며 꾸준한 관심을 필요로 한다. 이것은 상당히 까다롭고 성가신 일이다. 그래서 취약점 스캐너라는 제품이 이러한 일들을 대신해 주고 있다.

이와 관련해 UNIX 시스템에 대한 보안 점검, Windows 시스템에 대한 보안점검, 스캐너 순으로 언급한다. UNIX시스템에서 살펴보아야 할 취약점은 어떤 것이 있고 어떻게 대처해야 하는지 알아보자.


패스워드 관련 취약점

모든 시스템이 그렇지만 패스워드는 전방에서 총을 들고 보초를 서는 군인과도 같은 존재다. 따라서 아무리 강조해도 지나치지 않다. 그렇지만 의외로 사용자들이나 심지어 시스템 관리자들도 패스워드에 대해서는 그리 관심을 기울이지 않는다.

인터넷에서는 패스워드 크래킹을 하는 도구들을 어디서나 쉽게 구할 수 있다. 패스워드 설정은 보안의 가장 첫걸음이라고 할 수 있다. UNIX에서는 패스워드를 /etc/passwd란 파일에서 관리하고 있다. 최근의 UNIX 시스템에서는 /etc/shadow란 파일에서 관리한다. 패스워드에 대해 알아보자.

user:$1$9MtDpTB4$OuRmIYSwRuPewBkrwMUxT1:11669:0:99999:7:::

UNIX 시스템 패스워드는 DES방식으로 암호화되어 있다. DES알고리즘 자체의 역함수를 구하기란 현실적으로 불가능에 가깝다. 필자의 기억에 슈퍼컴퓨터를 동원하여 오랫동안(아마 수십년) 역함수를 구하면 구할 수 있다고 한다.

하지만 사용자가 이용할 만한 암호자체를 추측해 이를 DES 방식으로 암호화한 뒤 /etc/shadow에 있는 $1$9MtDpTB4$OuRmIYSwRuPewBkrwMUxT1 문자와 같은지를 비교하여 패스워드를 추측할 수 있다. 이점에 착안하여 크래커들은 brute force방법을 사용하여 패스워드를 추측하는 방법을 사용하기도 한다. 또한 패스워드와 관련하여 brute force방법 중에는 telnet이나 ftp가 열려져 있으면 해당 계정으로 사전에 있는 패스워드를 이용하여 계속적인 로그인 시도로 패스워드를 알 수 있다.

특별한 해킹 기술이 없어도 할 수 있는 방법이기 때문에 패스워드를 추측 가능한 패스워드로 설정하였다면 상당히 위험할 수 있다. 그만큼 계정과 패스워드는 보안에서 중요한 자리를 차지한다.


규칙적인 사용자 패스워드 감시필요

일반적인 패스워드 규칙은 △패스워드를 최소 6자 이상(관리자의 재량에 따르겠지만 최소 6자 이상 권고)으로 설정 △알파벳과 숫자를 조합하여 사용 △사용자 ID를 패스워드로 사용금지 △사용자 신상(생년월일, 부서명, 가족이름 등)에 관련된 패스워드를 금지 △사전에 등록된 단어를 패스워드로 사용금지 △호스트명을 패스워드로 사용금지 △동일한 문자를 반복사용금지 △패스워드를 주기적으로 갱신 △패스워드 여러 번 입력 실패 시 계정 잠금 설정 △패스워드 입력 시 타인이 지켜보고 있지는 않은지 확인 △타인과 패스워드 공유금지 등이다.

시스템관리자는 사용자들의 패스워드를 시스템 스캐너로 점검해야 한다. 만약 상업용 시스템 스캐너가 없다면 인터넷에서 패스워드 크래킹 툴을 구해 패스워드 검사를 주기적으로 해주어야 한다.

UNIX 시스템에는 공개용 패스워드 크랙 도구를 제공해주고 있다. Window NT나 2000에 대한 패스워드 검사는 L0phtCrack이라는 도구를 트라이얼 버전으로 제공하고 있으므로 한번쯤 사용해서 패스워드에 문제점이 없는지 검사해 보는 것이 좋다. L0phtCrack 툴은 www.atstake. com/research/lc3/download.html에서 구할 수 있다.


X Windows 관련 취약점

X Windows는 클라이언트/서버기반으로 동작하도록 되어있다. 이런 구조의 결함을 이용해 X Windows서버의 콘솔에서 일어나는 키보드 이벤트(keyboard event)를 중간에 가로챌 수 있다. 자신의 시스템에 X Windows를 사용한다면 xhost 명령어를 이용하여 ACL(Access Control List)를 설정해주어야 한다.

현재 이 취약점을 이용하여 xkey.c라는 공격소스코드가 공개되어 있다. xkey를 이용하면 공격자는 상대방 호스트의 모든 내용을 ASCII 형태로 볼 수 있다.


유틸리티 취약점

시스템을 처음 도입하면 보통은 처음 setup된 상태 그대로 두고 사용하는 경우를 종종 볼 수 있다. 이는 시스템에 필요 없는 서비스까지 오픈된 채로 운용될 수 있다. 보안상 사용하지 않는 서비스는 제거하는 것을 원칙으로 삼아야 한다. echo, chargen, daytime, rwho,time,uucp, Telnet,FTP, Finger, rsh, rlogin 등의 서비스는 필요 없는 경우가 많다. 이런 서비스는 close하도록 하자. echo나 chargen 서비스는 DOS(Denial Of Service )공격을 받을 가능성이 있다.

uucp(Unix to Unix Copy Program) 서비스는 오래 전에 시리얼 통신으로 호스트간 통신을 하는데 주로 사용된 프로그램이다. 요즘에 누가 시리얼 통신을 사용하고 있겠는가 하지만 크래커들에게는 좋은 해킹환경을 제공하고 있다. 보통의 조치방법은 /etc/inetd.conf에서 주석(#)처리 후 inetd를 다시 기동하면 된다.


FTP(File Transfer Protocol)

FTP는 파일을 원격에서 주고받을 수 있도록 해준다. 인터넷에서 거의 FTP로 파일을 주고 받을 수 있도록 되어있다. 처음 운영체제가 설치될 때 in.ftpd와 같은 ftp 데몬이 설치되기도 하지만 요즘은 wu-ftpd(Washington University File Transfer Protocol Daemon)이 많이 사용되기도 한다.

기본적으로 제공해주는 솔라리스 ftpd중에는 사용자 유무를 알려주는 취약점이 있다. CWD ~username 명령을 실행하면 원격시스템에서 사용자 존재유무를 알아내는 것이 가능하다.


SMTP(Simple Mail Transfer Protocol)

UNIX에서는 sendmail을 주로 메일서버로 이용하고 있다. sendmail은 크고 복잡한 프로그램이다. 프로그램이 크고 복잡하다는 것은 그만큼 해킹에 대한 노출가능성이 클 수밖에 없다. 현재 sendmail은 꾸준한 버전업을 이루어 sendmail 8.12.2가 릴리즈 되어 있다.

자세한 사항은 www.sendmail.org/에서 확인할 수 있다. 메일 시스템이 sendmail를 사용하고 있다면 버전을 확인해 보자.


WWW(World Wide Web)

WWW서비스는 html과 cgi(common gateway interface)라는 web프로그램으로 이루어져 있다. 우선 웹서버를 인스톨하면 예제 cgi들이 있을 것이다. 이런 예제 cgi부터 제거하도록 하자. 일부 예제 cgi는 보안결함이 있다고 알려져 있다.

그 외에 많은 cgi가 보안 결함이 있다고 보고되고 있다. 너무 많아 관리자가 확인하기가 매우 어렵다. 공개된 cgi check 프로그램을 이용하도록 하자. 인터넷에 cgichk.c라는 cgi 를 check하여주는 공개 프로그램이 존재한다. 다른 cgi check 프로그램도 많이 있으니 찾아보도록 하자.


Sniffing, Spoofing, DOS(Denial of Service)

Sniffing이란 네트워크를 통해 전송되어지는 패킷(packet)을 잡아서 훔쳐보는 것을 의미한다. Sun에서 snoop이란 관리도구를 제공하는데 Sniffing tool이라고 생각하면 쉽게 이해가 될 것이다. Spoofing이란 말 그대로 자신을 타인이나 다른 시스템에게 속이는 행위를 의미한다.

TCP/IP의 구조적 모순을 이용한 Spoofing은 크래커가 마치 trust host 인 것처럼 속여 목표호스트에 침입하는 것을 말한다. DOS는 목표호스트에 과부하를 줌으로서 host가 다운되거나 서비스를 방해하는 것을 말한다.


백도어

백도어는 해커가 해킹을 하고 나서 다음에 시스템에 침입하기 위한 hole을 설치하거나 내부 침입자에 의해 설치되기도 한다. 현재도 많은 백도어 프로그램이 해커들에 의해 제작되고 배포되고 있다. 만약 해당 시스템에 이미 백도어까지 설치되어 있다면 세심한 주의가 필요하다. 단지 백도어만 제거한다고 시스템이 안전하다고 할 수는 없다. 보안 전문가에게 문의하고 이에 적절한 조치를 취해 주어야 한다.

우선 시스템의 자료를 백업한다. CERT(자체 CERT 팀이나 한국정보보호진흥원(www.certcc.or.kr )에 연락해 해킹사실을 알린 후에 면밀한 조사 후에 시스템을 재 설치후 보안 패치를 한 후 다시 운영해야 할 것이다.

지금까지 주로 UNIX 시스템에 대해 언급했는데 NT에 대해서도 짚어본다. Windows 운영체제의 취약점은 크게 4가지 정도로 나눌 수 있다.

첫째, 사용자의 부주의에 의한 취약한 패스워드와 관리자의 서버 운영 부주의에 의한 관리적 취약점. 둘째, IIS(Internet Information Server)와 Exchange Server, SQL Server 등과 같은 백오피스에 존재하는 취약점. 셋째, 운영체제 내부의 취약점이나 Value값에 등에 의한 시스템 취약점. 넷째, Windows상에서 설치되는 응용프로그램들과 인터넷상에 많이 유포되고 있는 백도어 등과 같은 취약점을 묶은 기타 취약점 등이다.

이 중에서 관리적인 취약점의 대부분과 시스템 취약점의 일부분은 관리자의 서버 운영에 따라 제거할 수 있는 부분이다.


사용자 및 그룹 관리

Windows NT는 도메인 사용자 관리자에서, Windows 2000은 컴퓨터 관리 및 로컬 보안 정책이라는 관리도구에서 사용자와 그룹에 대한 관리를 하게 된다. 가장 대표적인 것이 패스워드 관리이다.

NT는 사용자 계정에 대한 적절한 설정을 해 주어야 한다. 이것은 중앙에서 관리자가 컨트롤 할 수 있는 부분이다. 기본적인 패스워드 정책을 비롯하여(중복된 암호 사용 금지, 최소 암호 길이, 암호 사용 기간 제한 등) 잘못된 로그인 시도에 대한 잠금 설정이라든지 임시 사용자에 대한 로그인 제한, 또는 적절한 권한 설정을 도메인 사용자 관리자, 컴퓨터 관리 그리고, 로컬 보안 설정에서 해 줄 수 있게 된다. 또한 사용자의 행동을 추적할 수 있는 감사 설정도 이곳에서 해주게 된다.

NT에서는 그룹 관리라는 것이 있는데 관리자가 계정 관리시 각각의 사용자 계정에 권한을 부여하고 정책을 설정하면 규모가 작은 사이트는 별다른 무리 없이 관리되겠지만 규모가 커지고 계정이 늘어나면 관리가 어려워지게 된다. 따라서 시스템 그룹 외에 사이트의 성격과 규모에 맞게 적절한 그룹을 생성하여 계정을 추가시키고 그룹에 권한을 부여하는 것이 좋다.

eceo200204010_02.gif


감사 설정에 대한 관리

사용자의 행적을 추척하기 위해서 감사 설정은 매우 중요하다. 특히 여러 감사 항목 중에 로그온 이벤트에 관한 실패 감사는 필수적이라고 할 수 있다. 올바르지 못한 사용자가 로그온 시도를 할 경우 해당 감사 설정에 따라 보안 로그가 남아 추적할 수 있기 때문이다.


디스크 관리

Windows NT는 NTFS, FAT16의 파일 시스템을 지원하고 Windows 2000은 NTFS, FAT16, FAT32 파일 시스템을 지원한다. 하지만 보안을 필요로 하고 또한 보안을 강화하기 위해서는 FAT 파일 시스템보다는 NTFS 파일 시스템을 사용할 것을 권고한다.

Windows NT에서는 디스크 관리, Windows 2000에서는 컴퓨터 관리에서 볼 수 있다.

NTFS 파일 시스템은 △폴더나 파일에 대한 권한 부여 △파일 시스템 복구 △대용량 저장 미디어 지원 △2백55자까지의 긴 파일 이름 지원 △다양한 추가적인 기능 △폴더·파일의 압축, 디스크 할당, 감사, Netware 지원, MAC 지원 등의 특징을 지닌다.


서버의 공유와 서비스 관리

Windows NT는 서버 관리자, Windows 2000는 컴퓨터 관리와 서비스에서 관리할 수 있다. 필요 없거나 사용하지 않는 공유는 제거하도록 하자.

공유 이름 뒤에 $ 표시가 붙은 것은 관리적인 공유로서 일반 사용자에게는 보이지 않지만 보안상 제거하는 것이 좋다. 서비스도 마찬가지로 사용하지 않는 서비스는 중지시키는 것이 보안상 바람직하다.

eceo200204010_03.gif


이벤트 관리

Windows NT/2000에서는 보안 이벤트, 응용프로그램 이벤트, 시스템 이벤트의 세 가지 이벤트 로그를 남겨준다. 이 중에서 응용프로그램과 시스템 로그는 시스템에서 자동으로 남겨주지만 보안 로그는 감사 설정에 따라 남게 된다. 관리자의 선택에 따라 선택한 이벤트에 대한 보안 로그가 남을 수도 있고 남지 않을 수도 있다. 관리자는 정기적으로 로그를 살펴보고 서버에 잘못된 요청이 없었는지 짚어보아야 할 것이다.

지금까지 일반적으로 NT에서 사용되고 있고 또 사용해야 할 관리부분에 대하여 알아봤다. 하지만 규모가 더 크고 도메인이 복잡하게 설정되어 있는 환경이라면 다른 도구들과 여러 정책들을 이용해 올바르게 서버를 운영해야 할 것이다.

시스템에 관한 보안은 방화벽, IDS가 해주지는 않는다. 방화벽이나 IDS는 크래커의 접근을 막는데 목적이 있다. 원천적인 보안 결함은 그대로 둔채 차단하는데만 주력한다는 것은 어딘가 맞지 않는다.

결론적으로 시스템 보안 책임자는 시스템 취약점에 대해 계속적인 관심과 관리가 필요하다. 하지만 현실은 어떠한가 보통의 전산실에는 시스템관리자가 여러 수 십대의 서버를 관리하고 응용프로그램의 안정적 동작을 감시한다. 현실적으로 시스템관리자는 알려진 보안 취약점까지 관리할 수 없다. 그래서 시스템의 보안 취약점을 감시하고 조치방안까지 제시하는 스캐너(scanner)라는 제품도 등장하고 있다.


제공 : DB포탈사이트 DBguide.net