호스팅 업체에 4년 동안 일하면서 온갖 장애들을 겪어왔고, 그때마다 장애 처리하면서 이런저런 것들을 배울 수 있었다.
그렇게 겪어왔던 장애들 중엔 기본적인 대책 없이 사용하다가, 서비스가 요단강을 건넌 경우가 절반 이상이었다.
이번 글에서는 지금까지의 경험을 통해 자주 일어나는 장애로부터 서비스를 지킬 수 있는 기초 사항 3가지에 대해 설명하고자 한다.
방화벽
방화벽은 모든 보안 솔루션들 중에서 가장 기본이 되는 요소인데, 하드웨어 장비로도 존재하지만 OS 내부 기능으로도 제공한다.
방화벽을 ‘가장 기본이 되는 보안 솔루션’이라고 얘기한 이유는 외부로부터 공격 당할 경로를 적은 비용으로 효과적으로 줄일 수 있기 때문이다.
(괜히 OS에서 기본 제공해주는 것이 아니다)
방화벽은 출발지 IP, 도착지 IP, 접속하려는 Port 를 기준으로 외부 트래픽과 내부 트래픽을 통제한다.
예를 들어 웹 서버는 외부의 불특정 다수의 고객들에게 웹 서비스를 제공한다. 이때 클라이언트의 요청에 대해 응답하기 위한 데이터를 얻기 위해 DB 서버에 접속하게 되며, 개발자가 웹 소스를 변경할 수 있도록 SSH와 FTP를 접속하게 된다. 글로 길게 적었지만 이를 방화벽 정책으로 정리한다면 다음과 같다.
- 모든 IP -> 웹서버 IP의 TCP 80, 443에 접속 허용
- 웹서버 IP -> DB서버 IP의 TCP 3306에 접속 허용 (MySQL 기준)
- 사무실 IP -> 웹서버 IP의 TCP 21, 22에 접속 허용
- 그외 접속 트래픽은 차단 (방화벽은 기본적으로 모든 트래픽을 차단하는 정책을 암묵적으로 가진다)
위의 정책을 통해 막을 수 있는 공격은 어떤 것이 있을까?
- FTP, SSH 계정을 알아내기 위한 Brute Force 공격 차단 (사무실 IP에서만 접속을 허용하기 때문)
- MySQL 계정을 알아내기 위한 Brute Force 공격 차단 (웹 서버에서만 DB 서버로의 접속이 가능하기 때문)
- 그외 웹 서버에서 SMTP, NFS 등의 서비스들을 사용하고 있다면 메일 릴레이 기능을 이용한 스팸메일 발송이나 NFS 접속 시도 등의 위험에 대비할 수 있다 (방화벽 내부에서만 사용하는 서비스들에 대해 외부에서의 접근이 불가능하기 때문)
- 등등
방화벽도 완벽한 장비는 아니다. 앞에서 이야기했다시피 공격 당할 경로를 최소화할 뿐 아예 없애지는 못한다.
위의 조건에서 방화벽으로 막을 수 없는 공격은 무엇이 있을까?
- 웹 서비스에 대해 따로 제어하고 있는 것이 없으므로 대부분의 웹 해킹 공격에 취약하다
- 웹을 통한 웹셸 또는 랜섬웨어 업로드를 막을 수 없으며, 이후의 피해도 막을 수 없다.
- DoS나 DDoS로 인해 방화벽 장비가 다운될 경우 제공되는 모든 서비스가 중단된다.
- APT 공격을 이용하여 사무실의 PC를 장악한 후 웹 서버나 DB 서버에 접속한 후 데이터를 빼돌리는 경우는 막을 수 없다.
- 등등
방화벽을 통해 외부와 내부 사이를 다니는 트래픽을 통제했다면, 서비스들에 대한 취약점을 분석하고 위험도를 평가하여, 추가로 필요한 솔루션들을 도입하고 운영하는 방식이 보안을 높이는 기본적인 사항들이다 (물론 물리적 통제나 APT 공격이나 스팸메일로 인한 피해를 막기 위한 직원 교육 등의 방식도 앞에서 얘기한 기본 사항들에 포함된다. 그래서 정보보안이 어렵다)
모니터링 업무 중 발생한 보안 사고의 절반은 방화벽이 아예 없었거나, 잘못된 정책 설정으로 인해 외부에 노출되면 안 될 서비스 고스란히 노출된 경우가 많았다.
잘못된 정책의 대표적인 예는 아래와 같다.
- 모든 IP -> 웹서버 IP의 TCP 21, 22에 접속 허용
- 모든 IP -> 웹서버 IP의 모든 포트에 접속 허용
특히 간과하지 말아야 하는게 중국, 러시아, 미국 등의 해외 IP에서 서버 접속 정보를 알아내기 위한 Brute Force 공격은 매크로를 동원하여 진행하기 때문에 1초에 수백 건 이상의 비정상적인 접속 시도를 발생시킨다. 이 공격으로 외부에 접속 계정의 패스워드가 노출될 경우 서비스 중단뿐만 아니라 데이터 유출과 같은 추가 피해도 발생할 수 있다.
RAID
Dell, HP, IBM, 기타 조립서버들을 다루면서 가장 많이 고장나는 부품은 하드디스크였다.
다른 부품들이 대부분 전자식으로 동작하는데 비해 하드디스크는 기계식으로 동작하기 때문에 물리적인 충격이나 오동작에 매우 취약하고 고장이 잦다.
그런데 하드디스크가 어떤 부품인가? OS가 설치되고, 데이터가 저장되어 있으며, 각종 로그와 백업본이 저장되는 곳이다. 그런 하드디스크가 고장난다면 서비스 복구에 엄청난 시간과 수고를 쏟아야 한다.
이런 하드디스크 장애에 대비하기 위한 방법이 바로 RAID 이다.
RAID는 Redundant Array of Independent Disks 또는 Redundant Array of Inexpensive Disks 의 약자이며, 여러 개의 디스크에 데이터를 나눠서 저장하는 기술을 말한다.
RAID를 통해 일부의 디스크가 고장나더라도 다른 디스크에 저장된 데이터를 통해 서비스의 무중단 운용과 디스크 교체 후 데이터 복제를 진행할 수 있다.
RAID에는 여러 종류가 있지만 (여기서는 RAID에 대한 자세한 설명은 생략하겠다), 소규모 고객들이 많이 사용하는 것은 RAID 1과 RAID 5이다.
특히 RAID 5가 3개 이상의 하드디스크가 필요한 것에 비해, RAID 1은 2개의 하드디스크만 있으면 되기 때문에, 이중에서도 RAID 1을 많이 사용한다.
그럼에도 디스크 구매 비용이 아깝다는 이유로 RAID를 사용하지 않는 고객들이 많다. 이런 고객들은 결국 디스크 고장으로 인해 데이터 유실과 서비스 중단이라는 대재앙을 맞게 된다.
이런 상황이 온다면 방법은 2가지 밖에 없다.
- 디스크 복구 업체에 맡긴다. 이때 데이터를 100% 살릴 수 있단 보장이 없다.
- 새로운 디스크에 OS와 서비스를 새로 설치한다. 백업본이 있다면 복원에 도움이 되지만 그마저도 없다면 서비스 원상 복구는 아예 불가능하다 (OS와 서비스는 새로 설치하면 된다고 하지만 데이터는 없기 때문이다)
하드디스크 1개 가격이 비쌀 지, 서비스 복구와 디스크 복구 가격이 비쌀 지 어느 쪽을 택할 지는 결국 고객 몫으로 남게 된다.
[추가]
각 서버 벤더 사들은 각종 하드웨어 관리 툴들을 제공한다. 이를 통해 디스크 상태뿐만 아니라 하드웨어 전반적인 점검도 할 수 있단 점을 참고하자.
백업
앞에서 언급한 디스크 고장이나 웹셸/랜섬웨어로 인해 데이터가 유실되는 사태가 생길 수 있다.
만약 기존의 데이터를 어딘가 따로 보관하고 있었다면 위와 같은 상황에서 서비스를 어느 정도 복구 할 수 있다.
윈도우의 경우 이미지 백업 기능을 제공하며, 특정 데이터를 이미지라는 파일이나 패키지 형태로 백업하는 방식이다.
윈도우의 백업 기능의 장점은 추가 비용 없이 무료로 사용할 수 있고 (물론 윈도우 라이선스 가격은 공짜가 아니다), 이미지 백업본을 저장하는 디스크를 OS로부터 숨기기 때문에 랜섬웨어에 의해 다른 디스크들의 데이터들이 암호화돼도 백업본은 무사한 경우가 많다.
리눅스의 경우 윈도우와 같은 이미지 백업 형태의 기능은 기본 제공하지 않는다 (물론 이를 이미지 백업 기능을 지원하는 오픈소스를 사용한다면 사용할 수 있다)
다만 tar, zip 등의 명령어들을 조합하여 특정 폴더와 파일들을 묶어서 백업하는 것은 가능하다.
스크립트를 이용하여 자유롭게 백업 경로나 방식 등을 결정할 수 있으나, 리눅스 실력이 중급 이상이 되어야 원할하게 사용이 가능하다는 단점이 있다.
이외에도 아크로니스와 같은 상용 솔루션을 사용하는 방법이 있다. 위의 기능들이 OS에서 기본 제공하는 것에 비해 비용을 지불하고 사용해야 하는 점이 다르다.
아크로니스의 경우 전체 백업 및 증분 백업을 지원하며, 이미지 백업 및 파일 백업이 가능하여 OS 전체를 복원할지 개별 파일만 복원할지를 선택할 수 있다.
최근에는 랜섬웨어 탐지기능이 있어 OS에서 사용하는 특정 파일이 비정상적으로 변경될 경우 이를 백업된 파일로 자동 복구 한 후 관리자에게 알려준다.