JNB
rss

skin by 이글루스

보안

손에 잡히는 리눅스 시큐리티 ① 06.10.02 18:43
[활용특집]손에 잡히는 리눅스 시큐리티 ①
  출판일 :2005년 4월호

 리눅스는 오픈소스의 장점으로 인해, 중소기업의 서버 플랫폼으로 사용되고 있다. 리눅스는 오픈소스이기 때문에 사용자들 스스로 신속하게 버그나 취약점을 발견해 업데이트하기 때문에 더 안정적일 수 있다는 의견이 있다. 하지만 관리자가 리눅스의 파워 유저가 아니라면, 리눅스의 보안 문제가 발생했을 때 좀처럼 관리하기 힘들다. 이 글을 통해, 리눅스 보안에 적합한 몇가지 명령어와 툴을 이용해 리눅스 보안에 접근해 본다.


홍석범_오늘과내일 네트워크사업본부 차장

리눅스는 핀란드 헬싱키대학의 리누즈 토발즈라는 학생이 취미 삼아 처음으로 만들었던 운영체제 시스템이다. 리누즈는 작은 유닉스 시스템인 미닉스(Minix)에 관심이 있었는데 표준 미닉스를 능가하는 시스템을 개발하기로 결심해 1991년에 개발했다.
리눅스는 GPL(General Public License)에 따라 개발되고 있으며 소스코드는 누구나 자유롭게 사용할 수 있다. 리눅스와 그 배포판들이 모두 무료는 아니며 사용자들은 소스코드에 대해 대가를 지불해야 사용할 수도 있다.
리눅스는 다른 운영체제에 비해 낮은 가격으로 인해 네트워킹, 소프트웨어 개발, 그리고 데스크톱 엔드유저 플랫폼으로서 다양한 목적으로 사용되고 있다. 리눅스의 기능성과 누구나 쓸 수 있다는 특성은 파워 유저들에게는 매력적인 요인이 됐으며, 많은 소프트웨어 프로그래머들이 리눅스 소스 코드를 자신의 필요에 맞게 수정하기도 했다. 현재는 리눅스 프로젝트를 다양한 하드웨어와 다양한 목적에 부합하도록 포팅하는 일련의 작업들이 진행되고 있다. 현재 국내의 기업 환경에서 리눅스가 활용되고 있는 실정이다.
이같은 리눅스의 폭넓은 보급과 함께 여러 애플리케이션의 취약점이나 환경 설정 등의 부주의로 인해 해킹 사고가 빈번히 발생하고 있다. 국내외적으로 많은 피해를 입었던 DDoS(Distributed Denial of Service)도 결국엔 일부 취약한 기계들이 사전에 해킹을 당해 이용된 것이다. 또한 최근 급속도로 증가하고 있는 인터넷 쇼핑몰 및 개인 운영 서버들이 리눅스 플랫폼 기반으로 만들어지고 있음을 볼 때, 리눅스 보안 관리에 대한 노력이 더욱 절실하게 요구되고 있다.
리눅스 보안은 윈도우처럼 지속적인 업데이트를 지원하는 것이 아니기 때문에, 관리자가 리눅스에 대해 자세히 모른다면 어렵고 힘든 작업으로 치부되기 쉽다. 하지만 OSI 7 계층처럼 큰 원칙을 분류해 하나씩 세분화해 정리하면 그리 어렵지 않게 느껴질 것이다. 기준에 따라 여러 가지 분류가 있을 수 있겠지만, 대략 다음과 같이 3가지로 구분할 수 있다.

·패치와 보안 설정 : 초기 시스템을 구축 후 서비스를 제공하기 전에 또는 제공하면서 주기적으로 점검해야 할 항목에 대해 알아보자.
·접근 제어 : 허용된 IP 또는 허용된 사용자만 접근하도록 설정하는 것은 보안의 필수이면서 기본적인 사항이다. 여러 가지 방법으로 접근 제어할 수 있는 방안에 대해 알아보자.
·사고 대응과 모니터링 : 네트워크에 연결된 이상 아무리 보안을 염두해 두었다 하더라도 언제든 침해 가능성이 존재하는 것이 사실이다. 만약 침해사고 발생시 대응 요령에 대해 알아보자.

 

Part 1.
패치와 보안 설정으로 리눅스 보안 강화

리눅스에서 패치를 설치하는 방법으로 YUM(Yellow dog Updater, Modified)을 이용해 업데이트를 자동화하는 것이 가장 쉬운 방법이다. 정도의 차이는 있겠지만 취약성은 어떤 운영체제에서나 발생할 수 있다. 더구나 많은 애플리케이션들이 탑재되면서 애플리케이션의 오류로 인한 보안 취약성도 점차 큰 문제가 되고 있어 취약성 패치는 중요 보안 이슈가 되고 있다.

 

YUM을 이용한 패치와 보안 설정
윈도우의 경우 윈도우 업데이트를 통해 브라우저로 특정 사이트에 접속하는 것만으로 쉽게 업데이트를 할 수 있지만, 리눅스는 대부분 CLI(Command Line Interface) 기반으로 사용하다 보니 업데이트가 쉽지 않은 것이 사실이다. 그러나 알고 보면 리눅스의 경우 cron을 이용해 자동으로 패치를 할 수 있고, 더군다나 커널 패치가 아닌 이상 패치 이후 재부팅할 필요가 없어 오히려 윈도우보다 더 편리하다. 이는 YUM이라는 프로그램을 통해 가능한데, 미국의 듀크 대학에서 python 언어로 개발되고 있는데, YUM에 대한 자세한 내용은 홈페이지(http://linux.duke.edu/projects/yum)를 참고하기 바란다(화면 1). 
먼저 듀크 사이트에서 자신의 배포판 버전에 맞는 YUM 프로그램을 다운로드해 설치한다. 이후 몇 가지 옵션을 주어 YUM을 실행하면 현재 시스템이 설치돼 있는 RPM 버전 정보와 최신 업데이트 버전 정보를 비교해 업데이트 여부를 확인 후 업데이트 또는 설치할 수 있다. 

 

(화면 1) YUM 홈페이지

 

이때 /etc/yum.conf 설정파일에 지정돼 있는 YUM 서버에 접속해 다운로드하게 되는데, 여러 곳에서 여러 버전의 서버를 제공하고 있으므로 적당한 서버를 지정해 사용하면 된다. 이를테면 레드햇 9.0을 사용할 경우 먼저 다음의 명령어를 실행해 YUM을 설치한다.

# rpm -ivh 
http;/download.fedora.us/fedora/redhat/9/i386/RPMS.stable/yum-2.0.3-0.fdr.1.rh90.noarch.rpm

그리고, /etc/yum.conf를 다음과 같이 지정한다.
여기에서 특히 자주 사용되는 명령어만 알아보면 다음과 같다.

 

·YUM 업데이트
현재 시스템에 설치돼 있는 모든 패키지에 대해 헤더의 버전 정보를 비교해 최신 버전으로 설치한다. 이때 의존성 문제는 자동으로 해결해 설치하고 패키지가 많아 매번 설치 때마다 설치 여부를 묻지 않도록 하려면 -y 옵션을 추가해 실행하면 된다. 다음은 레드햇 9인 시스템에서 YUM을 실행한 결과인데, 현재 모든 패키지가 업데이트돼 있다는 것을 알 수 있다. 

 

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
tolerant=1
exactarch=1
exclude=kernel*

[base]
name=Red Hat Linux $releasever - $basearch - Base
baseurl=http://download.fedoralegacy.org/redhat/$releasever/os/$basearch
gpgcheck=1

[updates]
name=Red Hat Linux $releasever - $basearch - updates
baseurl=http://download.fedoralegacy.org/redhat/$releasever/updates/$basearch
gpgcheck=1

 

(화면 2) YUM 업데이트 실행 화면

 

·YUM 인스톨 
업데이트는 시스템에 이미 설치돼 있는 패키지의 상위 버전을 체크해 업데이트하는 명령어임에 비해 인스톨은 설치돼 있지 않은 패키지를 업데이트할 때 사용된다. 다음의 경우 PINE이라는 패키지가 설치돼 있지 않아 YUM을 이용해 설치하는 화면을 보여주고 있다.

 

(화면 3) YUM 설치 실행 화면

 

만약, 관리하는 서버가 많다면 YUM 서버를 별도로 구축해 운영하는 것도 좋은 방법이다. 그리고 YUM 업데이트 명령어를 cron에 설정해 둔다면 매번 명령어를 입력할 필요없이 정기적으로 YUM 서버에 접속해 최신 버전으로 업데이트를 자동 실행하므로 언제나 최신의 패키지 상태로 유지할 수 있을 것이다.

 

'사용하지 않는 서비스 중지하기'
비단 리눅스뿐만 아니라 윈도우나 심지어는 네트워크 장비까지 초기에는 너무 많은 서비스를 지원하도록 설정돼 있다. ps를 실행하면 어떤 서비스인지 생소할 정도로 많은 프로세스가 떠 있기도 한데, 이는 일반 배포판의 경우 사용자가 어떤 환경에서 어떤 목적으로 운영체제를 사용하는지 알 수 없기 때문에 범용적인 서비스가 실행되도록 설정했기 때문이다. 별다른 설정없이 그대로 사용한다면 심각한 보안 문제를 유발할 수 있다. 따라서 운영체제를 설치한 후에는 제일 먼저 불필요한 프로세스나 서비스를 제거하는 것이 좋다.
먼저 어떤 프로세스가 떠 있는지 확인하기 위해서는 ps aux 등으로 확인할 수 있지만, 어떤 프로세스가 어떤 서비스와 관련된 것인지 알기 어려우므로 runlevel 내 서비스 여부를 설정하는 명령어인 ntsysv를 실행하면 쉽게 서비스를 제어할 수 있다.
이는 단순히 ntsysv를 실행하면 되고, 해당 서비스명에서 스페이스바(spacebar)를 실행하면 재부팅시 실행될 것인지 여부를 지정할 수 있다(화면 4). *은 부팅시 실행된다는 의미이고 스페이스바를 한번 더 실행하면 공란으로 바뀌는데 이는 실행되지 않는다는 것을 의미한다. 꼭 필요한 서비스가 아니라면 실행되지 않도록 하는 것을 권장한다.

 

(화면 4) ntsysv 실행화면

 

그런데 이 설정은 부팅시 실행되므로 현재 실행중인 서비스에 대해 바로 제어하려면 다음과 같이 service라는 명령어를 이용한다. 다음 (화면 5)의 경우 xfs라는 서비스를 중지하고 있는 것을 보여주고 있는데, 서비스를 이용하거나 /etc/에 있는 부팅스크립트를 이용해 중지해도 된다.
 
(화면 5) xfs를 중지하는 화면


(화면 6) xfs 중지시 pid 직접 지정

(화면 7) xfs 중지시 서비스 실행 파일 직접 지정

(화면 8) xfs 중지시 실행 파일 경로 지정
        
또는 직접 해당 프로세스를 중지(kill)해도 되는데, (화면 6)과 같이 해당 pid를 직접 지정하거나, (화면 7)과 같이 서비스 실행 파일의 이름을 직접 지정하거나, (화면 8)과 같이 실행 파일의 경로를 지정해도 된다. 이는 각자의 상황에서 적당한 명령어를 이용하기 바란다.

 

쉬운 암호를 사용하는 계정 찾기
물론 해킹은 잘 알려지지 않거나 구현하기 어려운 고급 기술을 이용해 이뤄지는 경우도 있지만 대부분 사회공학적 기법 등을 활용해 이뤄진다. 그 중에서도 가장 많이 사용되는 방법이 바로 단순 암호 입력을 통한 brute force로, 추측하기 쉬운 암호를 사용하는 계정을 찾는 것이다. 공격자의 입장에서 1개의 취약한 계정을 확인해 로그인할 수 있다면 그 다음부터는 일이 쉬워질 것이다.
이를테면 1000개의 계정이 있는 서버에서 999개의 계정에 대한 암호 관리를 철저히 했지만, 실수로 id:test, pw:test라는 계정을 초기에 생성했다가 삭제하지 않았다면, 서버에 대한 접근 권한을 쉽게 허용해 아무런 의미가 없어진다는 것이다. 따라서 많은 계정이 존재하는 호스팅 서버 등에서는 암호를 철저히 관리해 아이디와 동일한 암호를 사용하거나 1234 등 누구나 추측이 가능한 암호를 사용하지 않도록 엄격하게 유지하는 것이 좋다. 그러나 암호 파일은 /etc/shadow에 암호화돼 저장되기 때문에 어떤 암호가 쉬운 암호인지 알기 어려운데, 이같은 경우 'John the ripper'라는 암호 해독 프로그램을 사용하면 쉬운 암호를 사용하는 계정 정보를 쉽게 찾을 수 있다.
먼저 홈페이지(www.openwall.com/john)에서 소스 파일을 다운로드해 설치한다. 설치는 압축 해제 후 src 디렉토리로 이동해 'make linux-x86-any-elf'로 컴파일하면 된다. 이후 run 디렉토리로 이동한 후 (화면 9)와 같이 실행하면 된다.

 

(화면 9) john 실행 화면

 

(화면 9)를 보면 우측에 나오는 정보가 username이고 좌측에 나오는 정보가 해당 사용자에 대한 암호 정보인데, 이 시스템의 경우 test라는 계정은 암호를 동일하게 사용하고 amoun이라는 사용자는  1234라는 쉬운 암호를 사용하고 있는 것을 알 수 있다. 이를 통해 쉬운 암호를 사용하는 계정에 대해서는 변경하도록 권장하고 만약 그래도 변경하지 않을 경우에는 어떤 암호도 사용할 수 없도록 잠금장치(lock)을 걸어둘 수 있다.

 

(화면 10) 계정에 lock을 설정하는 화면

 

(화면 10)과 같이 lock을 걸면 (화면 11)과 같이 /etc/shadow의 암호 부분이 !!로 채워져 어떤 암호를 입력해도 로그인할 수 없게 된다.

 

(화면 11) lock이 걸렸을 때의 shadow 파일
 

 

-온더넷 2005년 4월호


        

    
Copyright 1999-2018 Zeroboard / skin by JY