해킹을 당했습니다. 어떻게 해결해야 합니까?
정보 보안에는 바이러스보다 더 심한 것이 있다
필자의 지난번 기사(보안 관리-그 기본적인 선택의 문제에 관하여)를 읽어보셨다면, 적어도 실제 사용할 의향이 없는 경우가 아니라면 몰라도 그렇지 않다면 어떤 시스템도 100% 안전할 수는 없다는 제 생각을 이미 알고 계실 것입니다. 제가 믿고 있는 또 하나의 기본 명제(http://www.britannica.com/ebc/article?eu=405886&query=lemma&ct= )는 정보 보안에는 웜이나 바이러스 말고도 훨씬 더 심한 것이 있다는 사실입니다. (웜과 바이러스에 차이점이 있긴 하지만 이 분야의 전문가들도 확실히 어떤 점이 다른지를 놓고 논쟁을 벌이는 상황이며 여기서의 우리의 관심사는 주로 전반적인 악성 코드에 관한 것이므로, 여기서부터는 웜과 바이러스를 같은 유형의 공격으로 간주하여 모두 "웜"이라 부르기로 하겠습니다.) 그런데도 우리는 항상 웜에만 관심을 집중하는 경향이 있는데 그래서는 안될 이유에 대해 알아보기로 합시다. Sasser, Blaster, Lion, Trino, Ramen, Slapper 및 그 밖의 기타 다른 웜은 파괴력이 매우 강할 뿐 아니라 이를 제거하는 데 막대한 비용이 들어갑니다. 그러나 몇 가지(Linux Ramen 웜 및 Code Red 등)를 제외하면 웜 자체가 파괴적인 것은 아닙니다. 그렇다고 웜에 파괴력이 있을 수 없다고 말하는 것은 아니지만, 적어도 사람들이 웜을 다룰 때는 기본적으로 그 대상이 무엇인지 알고 있을 것입니다. 많은 사람들에게 동일한 웜이 나타났었고 적어도 그 중 몇 명이 그 웜을 찾아낼 수 있었기 때문에 나머지 사람들은 가만히 있어도 문제를 해결할 수 있었습니다.
그러나 어떤 웜은 시스템에 백 도어를 만들어 놓기도 합니다. 정말 강력한 웜은 이 백 도어를 통해 실제 웜이 하는 것보다 훨씬 더 치명적인 공격을 시스템에 가할 수 있습니다. Nimda가 바로 그러한 웜입니다. Slapper(또 다른 Linux 웜)도 그렇습니다. 일단 웜이 시스템에 백 도어를 만들게 되면 이 시스템은 인터넷상에서 해커와 같은 사람들에 의해 조종을 당할 수 있습니다. 또한 이러한 웜은 어떠한 종류의 로그 파일도 만들지 않기 때문에 이 백 도어를 통해 어떤 일이 행해졌는지를 알 수 없습니다. 일단 시스템이 이러한 웜에 감염되면 더 이상 이 시스템상의 어떤 것도 믿을 수 없게 됩니다. 실제로 이 웜이 시스템상에 침투하게 되면 이 시스템을 믿을 수 없는 것으로 진단을 내린 후 치료를 해야 합니다. 또 다른 공격이 이미 그 웜과 동일한 벡터(공격 방법)를 사용하여 웜 자체보다 훨씬 더 파괴적인 일을 해놓았을 수도 있습니다. 하지만 여기서 중요한 점은 웜에만 관심을 가질 것이 아니라 웜이 이용하는 보안상의 취약점에 더 신경을 써야 한다는 것입니다.
전자 메일 웜의 경우 이것과는 문제가 조금 다릅니다. 본질적으로 전자 메일 웜은 레이어 8 문제 즉, 기술이 아닌 사용자를 악용하는 문제입니다. 다시 말해 전자 메일 웜의 경우 다른 방식으로 대처해야 한다는 뜻입니다. 사용자가 전자 메일의 첨부 파일을 열어보지만 않으면 이러한 문제는 사라집니다. 하지만 반대로, 의심스러운 첨부 파일은 열어보지 않아야 한다는 사실조차 알려고 하지 않는 사용자를 위해서라도 관리자들이 모든 전자 메일 첨부 파일을 차단할 수 있다면 이 문제는 사라질 수 있습니다. 비교적 최신 버전의 Microsoft Exchange와 Outlook이 있으면 이러한 작업을 아주 간단히 수행할 수 있습니다. 물론 사용자들 중 누군가가 악성 Trojan을 열어볼 수도 있겠지만 이러한 경우는 직접적인 처리의 문제입니다. 전자 메일 웜이 시스템에 들어왔다는 사실만으로는 Sasser와 같은 네트워크 웜이 시스템에 들어왔을 때와 같은 방식으로 활동적인 공격자에 의해 시스템이 감염되었다고 볼 수 없습니다.
결론적으로 필자는 웜 보다 활동적인 공격자가 훨씬 더 걱정스럽습니다. 활동적인 공격자는 다양한 벡터를 이용하여 시스템과 네트워크에 침투할 수 있기 때문입니다. 웜의 문제는 비교적 간단한(구현이 간단하다기 보다는 열거하기 편리한) 다음과 같은 단계를 거쳐 해결할 수 있습니다.
? 관련 패치가 나오는 즉시 배포되고 있는지 확인합니다.
? 방화벽을 사용합니다.
? 바이러스 방지 프로그램을 사용합니다. 이러한 프로그램이 없는 경우 http://www.microsoft.com/korea/protect/에서 무료로 구할 수 있습니다. 대규모 환경에 바이러스 방지 솔루션을 배포하는 방식에 대한 자세한 내용은 http://go.microsoft.com/fwlink/?LinkId=28734 에서 새로 발표된 Microsoft 바이러스 방지 심화 가이드를 참조하십시오.
? 사용자들이 원치 않는 첨부 파일의 경우 적법한 메일인지 먼저 확인하기 전에는 열어보지 못하게 하거나 아예 열어볼 수 없도록 차단합니다.
활동적이며 단호한 공격자들의 시스템 침투를 예방하는 일이 늘 간단한 것은 아닙니다. 또한 일부 독자들이 지적하셨듯이 시스템을 신뢰할 수 있을 정도로 복구하기에 충분한 백업이 갖춰지지 않은 경우도 있습니다. 따라서 시스템 손상 여부를 탐지하고 시스템 손상을 발견했을 경우 어떻게 대응할 것인지가 매우 중요합니다. 이를 위해서는 몇 가지 방법을 사용할 수 있습니다.
백업 부재 시의 데이터 저장
필자를 잠 못 들게 만드는 일 중의 하나는 (비행기를 탔을 때 어린 아이들이나 엔진 소음 때문에 잠 못자는 경우를 제외하고) 공격자들이 대문에서 서성거린다는 사실이 아니라, 이들이 대문 안으로 이미 들어와 있는데도 우리가 그 사실을 모르고 있을 경우입니다. 공격자들을 항상 공격할 틈을 놓치지 않으려고 하고 있습니다. Microsoft가 최근 개최한 Tech-Ed 컨퍼런스 기간 동안, 어떤 범죄 집단에서는 이 컨퍼런스의 네트워크를 파괴할 수 있는 사람에게 5만 달러의 상금을 내건 일도 있었습니다. 이런 사람들이 이미 시스템 안에 들어와 있는지 어떻게 알 수 있을까요? 수준이 낮은 공격자들이라면 새 계정이나 수상한 파일, 안정성 저하의 위험이 있는 시스템 등 뭔가 흔적을 남겨놓을 것입니다. 오늘날 대다수의 공격자들은 이러한 부류에 속하며, 적어도 필자는 이러한 공격자들이 그렇게 하기를 희망하고 있습니다. 다음으로는 진짜 실력자들이 있습니다. 이러한 공격자들은 시스템에 침투한 순간 OS로 사라져버립니다. 그리고는 시스템을 더 이상 믿을 수 없게 만드는 루트키트(rootkit)를 시스템상에 설치합니다. 이렇게 되면 Windows Explorer와 명령줄이 시스템상에 실재하는 파일을 표시하지 못합니다. 레지스트리 편집기가 거짓말을 하게 되며, 계정 관리자 도구도 모든 사용자를 다 표시하지 않습니다. 침입 수준이 이러한 단계에 이르면 시스템 정보를 더 이상 신뢰할 수 없습니다. 이 경우에는 모든 것을 지우고 다시 구축("nuke and pave"라고도 함)해야 합니다. 시스템이 완전히 감염된 것입니다. 이런 일을 당한 경험이 있습니까? 그 때는 어떻게 하셨습니까?
이러한 유형의 침입을 탐지할 수 있는 몇 가지 요령이 있습니다. 하나는 네트워크 기반 침입 탐지 시스템(IDS)을 사용하여 네트워크에 들어가고 나가는 트래픽을 추적하는 방법입니다. 네트워크 기반 IDS는 중립 시스템으로서, 이 시스템 자체가 손상되어 있지만 않으면 시스템에 들어가고 나가는 의심되는 모든 정보를 알려줍니다. IDS 시스템에 대한 설명은 이 기사의 논점에서 벗어나는 것이므로 여기서 다루지 않으며 대부분의 독자에게는 IDS 시스템이 당장 필요하지 않을 것입니다. 대부분의 경우 IDS를 설치하는 데 시간을 들이기보다는 실제로 네트워크를 보안함으로써 더 나은 효과를 얻을 수 있습니다. 대부분의 네트워크에서는 다양한 추가 보안 작업을 사용할 수 있으며, 먼저 이런 작업을 이용하지 않으려는 경우에는 다량의 IDS 로그를 확보하면 됩니다.
또한 시스템 자체를 분석하여 손상 여부를 알아낼 수 있지만 이렇게 하려면 몇 가지 심층적이고 과학적인 수사 작업이 필요합니다. 예를 들어, 시스템 자체를 신뢰할 수 없으므로 중립 미디어, 가능하면 읽기 전용 미디어를 이용하여 시스템을 부팅해야 합니다. 한 가지 옵션은 Windows PE로 부팅하는 것인데 Windows PE는 명령줄로만 이루어져 있으며 Windows XP 또는 Windows Server 2003을 CD로 부팅할 수 있는 버전입니다. 그러나 일반적으로 Windows PE를 구하는 것은 어렵습니다. 또 다른 옵션으로는 Winternals ERD Commander 또는 System Restore 사본을 구하는 방법이 있습니다(http://www.winternals.com ). 두 가지 도구 모두 WinPE를 기반으로 한 것입니다. ERD Commander는 본질적으로 WinPE 상의 GUI로서 파괴된 시스템을 부활시킬 수 있는 유용한 도구 모음을 제공합니다. 이것은 중립적 설치 방식이므로, 이 디스크상의 명령을 신뢰하여 의심스러운 시스템상에서 실제로 어떤 일이 일어나는지 알 수 있습니다. System Restore는 ERD Commander의 수퍼세트(superset)이며 여기에도 역시 시스템을 기준선에 맞춰 점검하는 기능이 포함되어 있습니다. 웹 서버를 구축하는 경우를 예로 들어봅시다. 웹 서버가 구축되는 즉시 시스템이 갖춰야 할 모양에 대한 기준선을 만들 수 있습니다. 이 시스템이 가동된 후 어떤 시점에서 해킹 당했다는 의심이 든다고 합시다. 예를 들어, 이 시스템에서 이상한 네트워크 트래픽이 방출되는 것을 감지하고 이를 분석하기로 결정했다고 합시다. 이 경우에는 시스템을 오프라인 상태로 두고 복구 디스크로 부팅한 후 최신 스냅샷과의 비교를 실행할 수 있습니다. 이렇게 하면 어떤 변화가 일어났는지 알 수 있습니다. 그러한 변화가 실제로 침입 내용을 나타내는 것인지는 확실하지 않지만 말입니다. 따라서 그 부분을 확인해보아야 합니다.
과학적 수사 작업의 마지막 사항은 이것입니다. 침입 당했다는 확신을 가지고 법적 행동을 취하려는 경우 개인적으로 수사 작업을 벌여서는 안 된다는 것입니다. 감염 확산을 막기 위해 시스템의 연결을 끊은 다음 과학적 수사 전문가에게 연락하십시오. 증거를 손상시켜 법정에서 증거로서 인정 받지 못하는 상황을 초래할 위험이 매우 크기 때문입니다. 증거 보존이 필요한 상황이라면 그 일은 전문가에게 맡기는 것이 좋습니다.
공격 이후의 복구 작업 ? 유용한 도구
마지막으로 가장 중요한 단계는 시스템이 해킹 당한 후 어떻게 서비스를 다시 정상으로 되돌릴 수 있는가 하는 문제입니다. 이것은 시스템 유형에 따라 달라집니다. 우선 필자는 클라이언트 백업 방식은 믿지 않습니다. 네트워크상의 클라이언트는 자체 데이터를 서버에 저장하므로 사용자들은 서버를 백업하게 합니다. 하지만 클라이언트가 감염된 경우에는 해당 클라이언트를 재구축하면 됩니다. 서버를 백업하는 것은 복잡하므로 백업 계획에 클라이언트를 포함시켜 일을 더 힘들게 만들 필요가 없습니다.
그러나 이것은 분명히 가정에서나 규모가 작은 네트워크의 경우에는 해당되지 않는 상황입니다. 이러한 환경에서는 몇 가지 기본 제공 도구를 이용하여 최소한의 데이터(프로그램 제외) 백업을 생성해야 합니다. Windows XP와 Windows 2000에는 꽤 쓸모 있는 백업 도구가 내장되어 있습니다. 이 도구를 이용하여 시스템 백업을 임의의 미디어에 만들 수 있습니다. 필자의 생각으로는 파일 및 설정 전송 마법사를 사용하는 방법이 이보다 다소 간단할 것 같습니다. 몇 주에 한 번씩 필자는 Windows XP에 있는 파일 및 설정 전송 마법사를 실행하여 컴퓨터 안의 모든 데이터와 프로필의 사본을 생성합니다. 그리고 이 백업을 CD로 굽거나 다른 하드 드라이브로 복사합니다. 시스템이 다운되면 단 몇 시간 내로 복구하고 모든 패치를 재설치한 후 파일 및 설정 전송 마법사를 이용하여 이 데이터와 프로필을 복구할 수 있습니다. 또한 다른 보안 방식으로, 집에 있는 제 컴퓨터를 로밍 프로필로 구성합니다. 이 프로필은 같은 시스템 안의 다른 하드 드라이브로 이동할 뿐이지만 적어도 하드 드라이브 고장 시에는 이 방법이 도움이 됩니다. 그러나 문제가 단지 평범한 바이러스인 경우, 백업을 이용하여 시스템을 복구하는 것은 지나친 대응 방식이 될 수 있습니다. 단지 바이러스만을 제거하려면 Microsoft 바이러스 방지 심화 가이드(http://go.microsoft.com/fwlink/?LinkId=28734 )의 4장에서 구체적인 방법을 확인하십시오.
대규모 네트워크의 경우에는 서버 백업이 필요합니다. 여기서 백업 계획과 과정에 대한 전반적인 내용을 다룰 수는 없습니다. 그러나 지난 번 기사에 대해서도 많은 분들이 의견을 보내오셨듯이, 백업 계획이 있다 해도 그 용량이 부족하기 때문에 감염된 시스템의 데이터를 재구축해야 하는 경우가 있습니다. 이를 위한 몇 가지 요령이 있습니다. 먼저 믿을 수 있는 최종 백업을 확인하여 그 곳의 데이터를 분리된 대체 시스템으로 복구합니다. 그런 다음 감염된 시스템의 데이터를 분리된 대체 시스템으로 복사합니다. 다음에는 Windiff과 같은 분리 도구를 이용하여, 감염된 시스템에서 발견된 내용과 비교하여 백업의 차이점을 찾아냅니다. 이 작업은 앞에서 설명한 대로 감염된 시스템을 중립 미디어로 부팅해 놓은 상태에서 수행되어야 한다는 점에 주의하십시오. 그렇지 않으면 백업까지 감염될 위험이 있습니다. 변경된 모든 항목에 대해 데이터의 소유자를 확인하십시오. 이제 각각의 데이터 소유자에게 달라진 점을 확인하게 합니다. 차이점이 용인할 만한 수준이면 다시 이들을 신뢰할 수 있는 백업으로 통합시킵니다. 이것은 복잡하고 시간이 걸리는 작업이지만 새 시스템에 꼭 필요한 내용을 되돌려 놓되 감염된 상태 그대로 되돌려 놓는 일을 방지할 수 있는 유일한 방법입니다. 감염된 백업을 복구해봤자 믿을 수 없는 데이터를 갖게 될 뿐입니다. 그리고 최악의 경우 또 하나의 감염된 시스템을 생성하는 결과가 될 수 있습니다.
결론
위에서 간단히 설명한 과정은 분명히 쉬운 작업은 아니며 이 점에 대해서는 의심의 여지가 없습니다. 필자가 말씀드릴 수 있는 한 가지는 "어리석은 일은 하지 말자"는 것입니다. 시스템 해킹 방지 방법을 연구하는 일에 우리가 이토록 많은 노력을 기울이는 이유가 바로 이것입니다. 서비스 복구 작업은 쉽지 않은 일입니다. 이와 비교할 때 여러분 스스로가 해킹을 당하지 않도록 주의하는 것이 장기적으로는 훨씬 더 간단한 일이며, 사고 발생으로 인해 다시 작업해야 하는 비율도 훨씬 줄어들게 됩니다. 다음 칼럼에서는 다시 앞으로 돌아가 복구의 필요성을 최소화할 수 있는 처방 지침에 대해 소개할 예정입니다.
언제나 그렇듯이 이 칼럼은 여러분을 위한 것입니다. 같이 의논해야 할 내용이나 여러분의 시스템 보안에 도움을 드릴 수 있는 방법을 원하시면 저희에게 알려주십시오. 아래 “설명(Comments)” 링크를 눌러 메일을 보내주시면 됩니다.
'개발 관련 글' 카테고리의 다른 글
감은 저절로 떨어지지 않는다 (0) | 2004.11.24 |
---|---|
정보를 모으는 방법 (0) | 2004.11.24 |
보안 관리-그 기본적인 선택의 문제에 관하여 (0) | 2004.11.04 |
[TIP] 전세계의 모든 파일형식들 (파일 확장자 목록) (0) | 2004.11.04 |
복잡한 IT 인프라 관리「닷넷 WMI로 푼다」 (0) | 2004.11.04 |