네트워크 침입 탐지 시스템 FAQ
Version 0.8.3, March 21, 2000

번역 : 윤봉환 el@linuxlab.co.kr

 

     

    이 FAQ는 네트워크를 통해 시스템을 공격하는 침입자를 탐지하는 것과 관련된 질문들, 특히 탐지하는 방법에 대한 대답들입니다.

    질문? 피드백?
    nids-faq@robertgraham.com에게 메일을

 

문서에 대해

    이 글은 주로 UNIX 계열의 시스템을 다루고 있습니다. 다른 UNIX나 Windows NT 혹은 Windows 9x 계열, Netware에 대한 이야기들이 있고, 웹 서버도 Apache 뿐만 아니라 IIS, 넷스케이프 등 여러 가지를 다룹니다. 그러니까, 리눅스월드의 어떤 독자들께서는 탐탁치 않게 여기실지 모르지만, 리눅스만 다루지는 않습니다. 왜냐하면, 서버로 리눅스의 점유율이 꽤 높다 하더라도 아직 대부분의 클라이언트는 MS 윈도우즈 시리즈이고 한 네트워크 안에서 동작하는 서버들도 Windows NT, Solaris, Linux 등 여러 가지 머신이 있기 때문입니다.

    아직도 어떤 뉴스 그룹에는 리눅스는 악당, MS 윈도우즈는 최선, 혹은 그 반대의 토론들이 보입니다. 물론 좋아하는 이유도 분명히 있고 싫어할 만한 까닭도 그럴듯해 보입니다. 그렇지만, 앞으로 서버를 다루어야 할 분들은 그렇게 배부른 소리를 못하게 될 것입니다. 적어도 제가 본 분들은 거의 모든 플랫폼을 다룰 줄 알아야만 하더군요. 리눅스뿐만 아니라 다른 분야에도 관심이 많았으면 좋겠습니다.

 

0. FAQ에 대해

    0.1 저작권

    Copyright 1998-1999 by Robert Graham (mailto:rob-nids-faq@RobertGraham.com. All rights reserved. This document may be reproduced only for non-commercial purposes. All reproductions must contain this copyright notice. Reproductions must not contain alterations except by permision.

    [이 문서는, 상업적으로 쓰이지 않는다면 옮겨 실을 수(전문, 일부) 있습니다. 이 글을 옮겨 실을 때에는 반드시 이 copyright를 알려야 합니다. 허락을 받지 않고 내용을 바꾸면 안됩니다. ]

    - Korean Translation - Copyright 1998-2000 by (el@kldp.org)  

    이 한국어판의 저작권은 원작을 따릅니다.
    (리눅스월드는 무가지는 아니지만 영리를 목적으로 하지 않는 리눅스 저널임을 원저자에게 알리고 양해를 구했습니다)

    0.6 어디에서 구할까

    홈페이지: (느립니다)
    http://www.robertgraham.com/pubs/network-intrusion-detection.html (HTML)
    http://www.robertgraham.com/pubs/network-intrusion-detection.txt (text)

    TICM (fast link)
      - http://www.ticm.com/kb/faq/

    Shake Communications (Australia)
      - http://www.shake.net/misc/network-intrusion-detection.htm

    IT Sec (Germany)
      - http://www.it-sec.de/mirrors/ids/network-intrusion-detection.html

    Russian translation:
      - http://www.citforum.ru/internet/securities /faq_ids.shtml

    Japanese translation:
      - http://www.sfc.keio.ac.jp/~keiji/ids/ids-faq-j.html

    Korean translation: 준비 중입니다.

    0.7 Thanks to

    도움과 조언을 주신 분들께 감사드립니다.
    (주: SPAM에 써먹을 주소를 자동으로 수집하는 시스템을 피하기 위해, 사람들만 잘 알아볼 수 있는 방법으로 메일 주소를 변조했습니다)

    Olaf Schreck <chakl at syscall de>
    John Kozubik <john_kozubik at hotmail com>
      (see http://www.networkcommand.com/john /index.html for NT login-script tips).
    Aaron Bawcom <abawcom at pacbell net>
    Mike Kienenberger <mkienenb at arsc edu>
    Keiji Takeda <keiji at sfc keio ac jp>
    Scott Hamilton <sah at uow edu au>
    Holger Heimann <hh at it-sec de>
    Bennett Todd <bet at mordor dot net>

    0.8 Version History

    Version 0.7, October 9, 1999
     - 한계에 대한 정보를 추가

    Version 0.6, July 17, 1999
     - NAI에서 정보를, 그리고 벤더들로부터(내가 제대로 했기를 바랍니다) 직접 NFR을
        업데이트 했습니다. 8.7과 8.8을 덧붙였습니다.

    Version 0.5, May 19, 1999
     - 러시아어와 일본어로 번역되었습니다. 몇 가지 새로운 IDS 제품들이 추가되었습니다.

    Version 0.4, April 8, 1999
     - 섹션 8. TOC를 고쳤습니다.

    Version 0.3, January 1, 1999
     - 마이너 업데이트들
        FAQ의 텍스트-전용 버전을 만들기 위해 하이퍼-링크 포맷이 바꾸었습니다.
        스팸-낚시꾼들이 문서에 들어있는 이메일 주소를 추출해내지 못하도록 바꾸었습니다.
        
    TOC를 추가했습니다.

    Version 0.2, November 1, 1998
     - 마이너 업데이트

    Version 0.1, August 1, 1998
     - 첫 버전

 

1. 들어가며

    1.1  “네트워크 침입 시스템(NIDS)”이란 무엇인가?

    침입(intrusion)이란 누군가(A.K.A. “hacker”나 “cracker”) 여러분 시스템을 깨고 들어가거나 악용하려는 시도를 말합니다. “악용(misuse)”이란 말에는 넓은 의미가 있는데, 기밀 데이터를 훔치는 것처럼 중대한 것부터 스팸에 쓰려고 여러분의 메일 시스템을 악용하는 등 사소한 일까지 생각할 수 있습니다.(이렇게 말하기는 했지만 우리 대부분에게 중요한 문제입니다 !)

    “Intrusion Detection System(IDS)” 는 그런 침입들로부터 시스템을 보호하기 위한 것입니다.
    이 FAQ의 목적에 따라, IDS는 아래 카테고리들에 분류될 수 있습니다:

    network intrusion detection systems (NIDS) 는 네트워크 선에 흐르는 패킷들을 모니터링해서 해커/크래커가 여러분의 시스템을 깨고 들어오려(또는 서비스 거부 공격을 목적으로) 하는 것을 발견합니다. 전형적인 예는 타깃 머신의 많은 다른 포트들에 다수의 TCP 연결 요청(SYN)을 살피고 있다가, 누군가 TCP 포트를 스캔하려 하는 것을 발견하는 시스템입니다. NIDS는 자신의 트래픽을 살피려는 타깃 머신에서 실행하거나(일반적으로 스택과 자신의 서비스들에 통합됩니다), 전용 머신을 두어 모든 네트워크 트래픽을 두루 살피게 할 수 있습니다(hub, router, probe). 다른 것들은 머신 하나만  모니터하는데(IDS가 설치된 머신 하나), “network” IDS는 많은 머신들을 모니터합니다.

    시스템 무결성 검증(SIV: system integrity verifiers) 시스템은 침입자가 바꾼 시스템 파일들을(그들이 숨겨둔 백도어) 모니터합니다. 그런 시스템으로 가장 유명한 것은 “Tripwire” 입니다. SIV는 잘 알려진 흔적들을 찾기 위해 Windows 레지스트리와 chron 환경 등 다른 컴포넌트들을 살필 수도 있습니다. 또한, 일반 사용자가 어떤 이유에서든 root/administrator 수준의 권한을 요구하는 것을 발견할 수도 있습니다. 이 영역에 속하는 많은 기존 제품들이 완벽한 “시스템들” 보다 “도구들” 을 중요하게 여깁니다: 즉, “Tripwire” 같은 프로그램은 중요한 시스템 구성요소들이 바뀌는 것은 검출하지만 침입이 일어날 때 실-시간 경고는 하지 않습니다.

    기록 파일 모니터(LFM: log file monitors)는 네트워크 서비스들에 의해 만들어진 로그 파일들을 모니터합니다. NIDS와 비슷한 방식인데, 이런 시스템들은 로그 파일에서 침입자가 공격한 흔적이라 여겨지는 패턴들을 찾습니다. 전형적인 예는 HTTP 서버 로그 파일들에서 잘 알려진 보안 결함, 예를 들어 “phf” 공격 같은 짓을 시도한 침입자가 있는지 살펴보는 파서(parser)가 있습니다. 예: swatch

    속임수 시스템(deception systems: A.K.A. decoys:가짜 상선 실제로는 전함Q-boat, lures:미끼, fly-traps:파리 잡는 끈끈이, honeypots:꿀 항아리)은 해커를 잡기 위해 잘 알려진 결함을 흉내내어 가짜-서비스들(pseudo-services)을 제공합니다. 속임수 툴킷의 예는 http://www.all.net/dtk 에서 찾아볼 수 있습니다. 또, 간단한 속임수로 NT의 “administrator” 계정 이름을 바꾸고, 권한이 없는 모조 계정을 설정해서 기록을 많이 남기도록 할 수 있습니다.

    이 문서에서 미처 다루지 못한 새로운 “속임수” 들이 있을 것입니다.
    http://www.enteract.com/~lspitz/honeypot.html을 참고 합니다.

    other
    더 많은 것들이 알고 싶다면 http://www.icsa.net/idswhite/.을 참고 합니다.

    1.2  누가 시스템을 어지럽히는가?

    침입자를 부르는 말은 두 가지가 있습니다:
    해커와 크래커. 해커는 어떤 일에 빠져들기를 좋아하는 사람을 가리키는 일반적인 용어입니다. 좋은 해커는(남자든 여자든) 자신의 컴퓨터에 파고들어 어떻게 동작하는지 이해하려 애쓰는 것 자체가 좋은 사람입니다.
    나쁜 해커는 굳이 다른 이의 시스템에 들어가려는 사람입니다. 좋은 해커들은 나쁜 일이 있을 때마다 모든 해커들이 미디어를 통해 구설수에 오르는 일이 멈추기를 바라며 나쁜 짓을 일삼는 이들에게 해커 대신 ‘cracker’라 부르기를 바랍니다. 불행하게도, 아직 그렇지 않습니다.
    아무튼, 이 FAQ에서는 여러분의 시스템에 들어가려는 누군가를 ‘침입자’라 부를 것입니다.

    침입자는 두 가지 카테고리로 분류할 수 있습니다.

    외부인 (Outsiders)
    여러분의 네트워크 밖에서 외부로 드러난 것들을 공격하는 침입자입니다 (웹 서버를 더럽히고, e-mail 서버들을 통해 스팸을 전송하는 등). 그들은 내부 네트워크에 있는 머신들을 공격하기 위해 방화벽 주위를 어슬렁거릴지도 모릅니다. 외부 침입자들은 인터넷, 전화접속(dial-up lines), 물리적인 침입, 또는 여러분과 협력관계인 네트워크인 동료 (벤더, 고객, 판매상 등) 네트워크를 통해 들어옵니다.

    내부인 (Insiders)
    여러분의 내부 네트워크를 합법적으로 사용할 수 있는 침입자입니다. 여기에는 악용 권한(사회 보장 직원이 자신이 싫어하는 사람을 죽었다고 표시한다든가)을 가진 사용자나 높은 권한을 가진 사용자를 사칭하는 것 등을 포함합니다(다른 사람의 터미널을 사용하는 등). 자주 인용되는 통계는 보안 침해의 80% 정도가 내부자의 소행이라는 것입니다.

    침입자에는 몇 가지 유형이 있습니다.

      ·폭주족들은(Joy riders) 그냥 할 수 있으니까 해크 합니다.

      ·약탈자들은(Vandals) 파괴 자체나 여러분의 웹 페이지를 더럽히는 것이 목적입니다.

      ·부정한 자들은(Profiteers) 돈을 가로챈다든가 회사 정보를 훔쳐 파는 등
        그들의 기업으로부터 부당한 이득을 꾀합니다.

    1.3  침입자들은 어떻게 시스템에 들어올까?

    침입자들이 시스템에 들어가는 주된 방법들입니다:

    물리적인 침입
    침입자들이 머신에 물리적으로 접근할 수 있다면 (예를 들어 키보드를 사용할 수 있다거나 시스템을 열어볼 수 있는 등), 그들은 침입할 수 있을 것입니다. 콘솔이 가진 특별한 권한들로부터 시스템을 분해하고 디스크 드라이브를 제거하는(그리고 다른 머신에 달아서 읽고/쓰는) 것까지 가능한 범위입니다. 심지어 BIOS 보호를 피해 가는 것도 간단합니다: 실제로 모든 BIOS는 백도어 패스워드가 있습니다.

    시스템 침입
    이 해킹 형태는 침입자가 이미 그 시스템에 최소한의 권한이 부여된 사용자 계정을 가지고 있다고 가정합니다. 만약 최신 보안 패치를 게을리 한다면, 관리자 권한을 얻기 위해 알려진 악용방법을(exploit) 써먹을 수 있도록 좋은 기회를 제공하는 것입니다.

    원격 침입
    이 해킹 형태는 네트워크를 통해 원격지에서 시스템에 침투하려는 침입자를 포함합니다. 처음에 침입자는 특별한 권한이 없습니다. 이 해킹에는 몇 가지 형식이 있습니다. 예를 들자면, 침입자와 사냥감이 된 머신 사이에 방화벽이 있다면 훨씬 힘든 시간들을 쏟아야 할 것입니다. 네트워크 침입 탐지 시스템은 주로 원격 침입과 관련되었다는 것을 기억하세요.

    1.4  왜 시스템에 침입하지?

    소프트웨어는 늘 버그들을 가지고 있습니다. 시스템 관리자와 프로그래머들이 모든 가능한 결함들을 찾아내어 제거할 수는 없습니다. 그러나 침입자들은 깨고 들어갈 수 있는 결함 단 하나만 찾아내면 됩니다.

      1.4.1  소프트웨어 버그들

      소프트웨어 버그들은 서버 데몬들, 클라이언트 어플리케이션, 운영체제를 악용해서 네트워크를 공격하는 데 이용됩니다. 소프트웨어 버그는 아래와 같은 형식으로 분류됩니다:

      버퍼 범람(Buffer overflows):

      출판물에서 보는 거의 모든 보안 결함들은 이 문제에 따른 것입니다. 전형적인 예는, 프로그래머가 로긴 사용자이름에 256 글자들을 받아들이도록 비워두는 것입니다. 프로그래머가 생각하기에는, 그보다 더 긴 이름을 사용할 사람은 없을 것이라 확신할 것입니다. 그러나 해커들은, 그보다 더 길게 잘못된 이름을 넣으면 어떻게 될까? 남는 글자들은 어디로 가지? 하고 생각합니다. 그런 생각이 들자 해커가 바로 작업을 시작하면, 서버에 의해 실행될 코드를 넣어서 300 글자를 보낼 수 있고, 보란 듯이 깨고 들어갑니다.

      해커들은 몇 가지 방법을 이용해 이런 버그들을 찾아냅니다. 제일 먼저, 많은 서비스들에 쓸 소스 코드를 네트워크에 적용합니다. 해커들은 이 코드를 통해 버퍼 범람 문제를 가진 프로그램을 기계적으로 검색합니다. 두 번째로, 읽기는 매우 어려운 일이지만 그런 문제가 있는지 보기 위해 어셈블리 출력을 직접 살펴봅니다.

      세 번째로, 해커들은 프로그램에 있는 입력 모든 곳에 시험하고, 랜덤 데이터로 오버플로를 시도할 것입니다. 만약 프로그램이 고장 나면, 해커가 깨고 들어갈 수 있도록 정교하게 짜 맞춘 내용을 입력합니다. 이 문제는 C/C++로 쓴 프로그램에 흔히 들어 있지만, Java로 작성한 프로그램에도 드물게 나타납니다.

      예상하지 못한 조합
      (Unexpected combinations):

      프로그램들은 보통 가장 아래층의 기반 운영체제를 포함하여 많은 코드 층으로 구성됩니다. 침입자들은 어느 한 레이어에는 무의미하지만 다른 레이어에는 의미심장한 입력을 흔히 보냅니다.
      웹에서 사용자 입력을 처리하는 언어로 가장 일반적인 프로그램은 PERL입니다. PERL로 쓰여진 프로그램들은 보통 기능을 확장하기 위해 다른 프로그램들에 그 입력을 보냅니다.
      일반적인 해킹 기술은 “| mail < /etc/passwd” 같은 무언가를 넣는 것입니다. PERL은 그 입력과 더불어 부차적인 프로그램을 실행하도록 운영체제에 요청할 것이므로 시스템에서 이 명령이 실행됩니다. 그러면 운영체제는 파이프 ‘|’ 문자를 해석해서 ‘mail’ 프로그램을 실행하고, 침입자는 어렵지 않게 패스워드 파일을 메일로 받게 됩니다.

      엉뚱한 입력(Unhandled input):

      대부분 프로그램들은 유용한 입력을 다루도록 작성됩니다. 대부분 프로그래머들은 누군가 지정한 형식을 벗어나는 입력을 넣는 일들에 대해서 고려하지 않습니다.

      경쟁 상태(Race conditions):

      요즘 대부분 시스템들은 “멀티태스킹/멀티쓰레드”를 지원합니다. 이 것은 한 번에 하나 이상의 프로그램을 실행할 수 있다는 것을 뜻합니다. 두 프로그램이 같은 시간에 같은 데이터에 접근해야 한다면 위험하게 됩니다.

      같은 파일을 수정해야 하는 두 프로그램 A와 B를 생각해 봅시다. 파일을 수정하기 위해 각 프로그램은 반드시 먼저 파일을 메모리로 읽어 들이고, 메모리에서 그 내용을 바꾼 다음, 메모리를 복사해서 다시 파일에 내어 씁니다. 레이스 컨디션은 프로그램 A가 파일을 메모리로 읽어 들인 다음 바꾸려 할 때 발생합니다. 그렇지만, A가 파일에 쓰기 전에, 프로그램 B가 그 파일에 읽기/고치기/쓰기 작업을 모두 하려고 끼어 듭니다. 이제 프로그램 A는 그 카피를 파일에 내어 씁니다. 프로그램 A는 B가 변경을 만들기 전에 카피와 함께 시작했으므로, B의 모든 변경은 사라질 것입니다. 바른 순서에 따라 이벤트들이 발생해야 하므로 멀티태스킹 시스템이 올바로 동작하려면 레이스 컨디션이 매우 중요합니다. 침입자들은 이런 비정상적인 조건을 만들려고 보통 수 천 번 이상 시도해서 시스템을 해크해 들어갑니다.

      1.4.2  시스템 설정 System configuration

      시스템 설정 버그들은 아래처럼 분류됩니다:

      기본 환경들(Default configurations):

      대부분 시스템이 기본적으로 사용하기 쉽게 설정되어 구매한 이에게 배송 됩니다. 불행하게도, “사용하기 쉬운”이란 말은 “깨트리기 쉬운”이란 말과 같습니다. 거의 모든 UNIX나 WinNT 머신이 해크되기 쉬운 상태로 여러분에게 배송 됩니다.

      게으른 관리자(Lazy administrators):

      놀랍도록 많은 수의 머신들이 root/ 관리자 패스워드가 비어있는 채로 설정됩니다. 필요한 때마다 바로 설정하기에 관리자가 너무 게으르고, 패스워드도 넣을 것 없이 서둘러 머신을 실행하려고 몸 달아 있기 때문입니다. 불행하게도, 그들은 그 후로 패스워드를 결코 고치지 않고, 침입자들이 손쉽게 접근하도록 허용합니다. 침입자들이 네트워크에서 가장 먼저 하는 일 가운데 하나는 비어있는 패스워드를 찾기 위해 머신 전체를 스캔하는 것입니다.

      결함 만들기(Hole creation):

      실제로 모든 프로그램들이 보안 모드가 아닌 채로 실행하도록 설정될 수 있습니다. 때때로 관리자들의 부주의로 머신에 결함이 열립니다. 대부분 관리 가이드에서 우연히 결함이 드러나는 것을 피하기 위해 머신에서 정말 필요한 서비스 외에는 모두 꺼버려야 한다고 관리자들에게 제안합니다. 보안 감사 패키지들은 통상 이런 구멍들은 찾아서 관리자에게 알립니다.

      신뢰할 수 있는 관계(Trust relationships):

      침입자들은 흔히 신뢰관계를 악용해서 네트워크를 통해 “island hop(譯註:원래 섬을 돌아다니며 관광하는 것을 가리킵니다. 여기서는 신뢰관계를 이용해 패스워드를 묻는 등 로긴 절차 없이 시스템에 들어가는 것을 말합니다)”를 합니다. 서로 믿는 머신들로 구성된 네트워크는 가장 약한 머신(link)을 쫓습니다(譯註: 자주 인용되는 말로, 나무로 짠 물통을 생각해 봅니다. 물은 가장 짧은 널로 넘쳐서 다른 널들이 아무리 길어도 더 많이 담을 수 없을 것입니다)

       

      1.4.3  패스워드 크래킹

      패스워드 크래킹 자체로도 하나의 특별한 카테고리입니다.

      정말 취약한 패스워드
      (Really weak passwords):

      사람들 대부분이 그들의 패스워드에 자신의 이름, 자식 이름, 배우자 이름/SO, 애완동물 이름, 또는 자동차 모델 이름 등을 사용합니다. 게다가 “password”라는 패스워드를 사용하거나 그냥 아무 것도 넣지 않는 유저들도 있습니다. 이렇게 한다면 침입자들은 서른 개도 안 되는 목록만으로 그런 것들을 맞출 수 있습니다.

      사전 공격(Dictionary attacks):

      위 공격이 실패하면 침입자는 “dictionary attack”을 시도합니다. 사전 공격은 시스템에 반복해서 로긴하거나 시뮬레이션을 이용합니다. 시뮬레이션에서 침입자는 먼저 암호화된 패스워드들을(/etc/passwd나 /etc/shadow) 모읍니다. 그 다음 사전에 있는 단어들을 가져다가 실제 로긴 할 때 일어나는 일들을 흉내 내어 암호화해서 차례대로 모아 놓은 패스워드와 일치하는지 비교합니다. 침입자들은 이런 목적으로 보통 영어 사전은 물론 다른 언어 사전도 가지고 있습니다.

      무식한 공격(Brute force attacks):

      사전공격과 비슷한데, 침입자는 가능한 모든 문자들의 조합을 이용해서 크랙을 시도합니다. 소문자로만 구성된 네 글자짜리 짧은 패스워드는 단지 몇 분만에 크랙 될 수 있습니다 (대충 오십만 개쯤 조합이 있습니다). 소문자와 대문자, 그리고 숫자와 구두점들로 구성된 일곱 글자 정도 긴 패스워드는(10조 개 정도 조합이 있습니다) 일초에 백만 개쯤 조합을 대입할 수 있다 하더라도 몇 달씩 걸릴 수 있습니다.(실제로는 머신 하나로 초당 천 개 정도 대입할 수밖에 없을 것입니다)

      1.4.4  보안장치가 없는 트래픽 엿보기

      공유 매체(Shared medium):

      전통적으로 이더넷에서, 네트워크 한 쪽에 스니퍼를 두기만 하면 세그먼트를 흐르는 모든 트래픽을 볼 수 있습니다. 이제는 많은 회사들이 스위치 이더넷으로 전환하고 있기 때문에 스니퍼링이 좀 더 어려워졌습니다.
      서버 엿보기(Server sniffing):

      비록 스위치 네트워크라 해도, 스니퍼를 서버에 설치할 수 있다면(특히 라우터로 동작하는 것), 여러분은 아마 그 정보를 이용해 클라이언트 머신과 신뢰하는 머신을 깨고 들어갈 수 있을 것입니다. 예를 들자면, 여러분은 아마 사용자의 패스워드를 알지 못하겠지만, 그들이 로그인할 때 telnet 세션을 엿보면 패스워드를 얻게 됩니다.

      원격 엿보기(Remote sniffing):

      많은 수의 박스들이 의례 RMON이 활성화되어 있고 공중 커뮤니티에 연결됩니다. 대역폭은 매우 낮지만(모든 트래픽을 엿보지는 못합니다), 흥미로운 가능성들이 있을 것입니다.

      1.4.5  설계상의 결함

      비록 소프트웨어 실행이 설계에 따라 완벽하게 옳은 것이라도, 침입에 이용할 수 있는 설계상의 버그들이 여전히 남을 수 있습니다..

      TCP/IP 프로토콜 결함
      (TCP/IP protocol flaws):

      TCP/IP 프로토콜은 우리가 지금 알고 있는 커다란 규모의 해킹에 대한 경험이 거의 없을 때 설계되었습니다. 그 결과, 보안 문제에 이르게 하는 설계상 결함이 여럿 있습니다. 그런 예로는 smurf 공격들, ICMP를 막아 접속 끊기, IP 속이기, 그리고 SYN 넘침 등을 꼽을 수 있습니다. 가장 큰 문제는 IP 프로토콜 자체가 바로 “신뢰”를 기반으로 하는 것입니다: 해커들은 별 어려움 없이 IP 데이터를 손쉽게 위조하고 변조합니다. IPsec (IP 보안)는 이런 결점들을 극복하기 위해 설계되어 왔지만, 아직 널리 쓰이지는 않습니다.

      UNIX 설계상 결함(UNIX design flaws):

      침해에 자주 이용되는 UNIX 운영체제 고유의 결함들도 다수 있습니다. 첫 번째 문제는 오직 ‘root’에게만 관리권한이 주어지는 접근 통제 시스템입니다. 그 결과,

    1.5 침입자는 어떻게 패스워드를 손에 넣는가?

    침입자는 아래와 같은 방법들로 패스워드를 손에 넣습니다:

    암호화되지 않은 순수한-텍스트 엿보기
    (Clear-text sniffing):

    몇 가지 프로토콜들은(telnet, FTP, 기본적인 HTTP) 클라이언트와 서버 사이의 회선을 오가는 동안 암호화되지 않은 순수한-텍스트 패스워드들을 사용합니다. 침입자는 그런 패스워드들을 찾기 위해 프로토콜 분석기를 이용해 회선을 살필 수 있습니다. 더 나가서, 필요하다면 침입자는 그 패스워드들을 로긴하는데 바로 사용할 수 있습니다.

    암호화된 트래픽 엿보기
    (Encrypted sniffing):

    거의 모든 프로토콜들이, 패스워드에 일종의 암호화를 사용합니다. 이런 경우, 침입자는 패스워드를 해독하기 위해 패스워드에 사전공격이나 무식한 공격(Brute Force attack)을 수행해야 할 것입니다. 침입자는 아직 활동이 전혀 없으며 회선을 통해 어떤 것도 전송하지 않고 있으므로 여러분들은 여전히 침입자의 존재를 알지 못합니다. 패스워드 크래킹에는 네트워크를 통해 침입자 자신의 머신은 여러분의 패스워드를 밝혀내는 데 쓰이고 있으므로 회선상에 무언가 전송해야 할 필요가 전혀 없습니다

    재생 공격(Replay attack):

    어떤 경우, 침입자들은 패스워드를 해독할 필요가 없습니다. 그 대신 시스템에 로긴하기 위해 암호화된 폼을 사용할 수 있습니다. 이렇게 하려면 암호화된 패스워드를 사용하도록 만들기 위해 대개 클라이언트 소프트웨어를 재컴파일 해야 합니다.

    패스워드 파일 훔치기
    (Password file stealing):

    전체 사용자 데이터베이스는 흔히 디스크상의 파일 하나에 담겨 있습니다. UNIX에서 이 파일은 /etc/passwd입니다.(또는 그 파일의 미러, /etc/shadow) 그리고 WinNT에서는 SAM 파일입니다. 어느 쪽이든 침입자가 패스워드 파일을 가로채면, 그 안에 취약한 패스워드가 있는지 찾아보는 크래킹 프로그램을(위에서 설명했습니다) 돌릴 수 있습니다.

    관찰(Observation):

    패스워드 보안에서 고전적인 문제 가운데 하나는 패스워드는 반드시 길어야 하고 짐작하기 어려워야 한다는 것입니다(사전 공격이나 무식한 크랙이 어려워집니다). 그러나, 그런 패스워드들은 기억하기도 어려워서, 사용자들은 시스템 주변 어느 곳에 패스워드를 써 놓기도 합니다. 침입자들은 패스워드를 써 둔 종이 조각 등을 찾으려고 사람들이 일하는 근처를 찾아볼 수도 있습니다(주로 키보드 아래 둡니다). 침입자들은 다른 사용자들의 어깨 너머로 패스워드를 훔쳐보는 연습을 하기도 합니다.

    사회 공학(Social Engineering):

    보통(성공적인) 기법으로 단지 사용자에게 전화를 걸어 이렇게 말합니다: “안녕하세요. MIS의 Bob입니다. 네트워크에서 몇 가지 문제를 추적하려 하는데요. 그게 당신의 머신으로부터 온 것 같거든요. 패스워드가 뭐죠?” 이런 상황에서 많은 사용자들이 그들의 패스워드를 건네줄 것입니다. (많은 회사에서 상대가 누구이건, 사용자들의 패스워드를 말하지 않도록, 심지어 상대가 MIS 부서라도 패스워드를 말하지 않도록 정책적으로 사용자를 교육하지만, 이 기법은 여전히 성공적입니다. 이런 정책을 피해 가는 한 가지 손쉬운 방법으로 6개월 정도 된 신입 사원에게 전화를 걸어 패스워드를 물어 보아 대답을 하면, 패스워드를 함부로 말한다고 나무랍니다. 마치 초병에게 당직 사관이 총 줘봐 하는 것 같습니다)

    1.6 전형적인 침입 시나리오는?

    전형적인 시나리오는 다음과 같을 것입니다:

    Step 1 : 외벽 정찰(outside reconnaissance).

    침입자는 그들 자신을 노출하지 않고 가능한 많은 것들을 찾아내려 합니다. 그들은 공개 정보나 정규 사용자인 듯 보이는 것들을 찾아 필요한 것들을 얻습니다. 이 단계에서, 여러분은 그들에 대해 전혀 감지하지 못합니다. 침입자들은 등록된 도메인 이름처럼  여러분의 네트워크에 대해 가능한 많은 정보를 찾아내기 위해 ‘whois’ 명령을 실행할 것입니다(예를 들어 foobar.com 같은). 침입자는 여러분 머신 이름을 찾기 위해 여러분의 DNS 테이블을 쉽게 둘러볼 수 있습니다(‘nslookup’, ‘dig’, 또는 도메인을 전송하기 위해 쓰이는 다른 도구들). 침입자는 여러분의 공개 웹사이트나 익명 FTP 사이트처럼, 외부에 공개된 다른 정보를 구경하고 다닐 것입니다. 그리고 여러분 회사에 대한 뉴스 기사들과 출판물 등을 찾아볼 것입니다.

    Step 2 : 내부 정찰 (inside reconnaissance)

    침입자는 정보를 스캔하기 위해 좀더 적극적인 방법들을 사용하지만, 여전히 신경을 긁을만한 짓은 하지 않습니다. 그들은 여러분의 웹 페이지를 돌아다니고 CGI 스크립트를 살핍니다(CGI 스크립트들은 더러 쉽게 해크되기 때문입니다). 그들은 머신이 켜져 있는지 알아보기 위해 ‘ping’을 날려보낼 것입니다. 그들은 어떤 서비스들이 제공되고 있는지 알아보기 위해 타깃 머신에 UDP/TCP 스캔/촬영 도구를 사용할지도 모릅니다. 그들은 어떤 것들이 쓸모 있는지 알아보기 위해 ‘rcpinfo’, ‘showmount’, ‘snmpwalk’, 등 도구들을 실행할 것입니다. 이 시점에서, 침입자는 시스템에서 ‘normal’ 행위를 마치고 침입으로 여길만한 어떤 것도 하지 않습니다. 이 시점에서 NIDS는 여러분에게 “누군가가 문손잡이를 검사하고 있다”고 알려줄 수 있겠지만, 실제로 아무도 문을 열려고 시도하지 않습니다.

    Step 3 : 악용(exploit).

    침입자는 선을 넘어 타깃 머신에 가능한 결함들을 공격하기 시작합니다. 침입자는 입력 필드에 셸 스크립트를 보내서 CGI 스크립트를 고장내려 할 지도 모릅니다. 침입자는 데이터를 한꺼번에 많이 보내 잘 알려진 버퍼-오버런 결함을 공격할지도 모릅니다. 침입자는 쉽게 추측할 수 있는 (또는 비어있는) 패스워드를 가진 로긴 계정이 있는지 검사하기 시작할 것입니다. 해커는 몇 단계 공격을 거칠지도 모릅니다. 예를 들어, 해커가 사용자 계정에 접근할 수 있다면, 이제는 root/관리자 권한을 얻기 위해 다음 단계 공격을 시도할 것입니다.

    Step 4 : 발판 다지기(foot hold).

    이 단계에서 해커는 머신을 해킹하여 여러분의 네트워크 안에서 근거지를 성공적으로 획득합니다. 침입자의 주 목표는 공격한 흔적을 남기지 않고(자취를 남길 수 있는 회계 기록과 로그 파일들을 변조합니다), 다음 번에 다시 들어올 수 있게 만드는 것입니다. 그들은 아마 원하는 접근 권한을 주는 ‘toolkits(혹은 rootkit)’을 설치하고, 백도어 패스워드를 가진 트로얀 목마로 원래 있던 서비스들을 바꿔치거나, 자신을 위한 계정을 만들 것입니다. 시스템 무결성 점검(SIV) 시스템들은 시스템 파일들이 변경된 기록을 통해 이 시점에서 침입자를 감지해내곤 합니다. 대부분 네트워크에서 내부 공격에 대해서는 더 적은 보안 장치를 설치하므로 해커는 이 머신을 다른 시스템을 해킹하는 발판으로 삼을 것입니다.

    Step 5 : 이득(profit).

    침입자는 기밀 정보를 훔치고, 시스템 자원들을 악용하거나(예를 들어 다른 사이트를 공격하는 무대로 여러분의 사이트를 이용합니다), 웹 페이지를 훼손하기 위해 그들의 상황을 이용할 것입니다.

    다른 출발점을 가진 시나리오도 있습니다. 특정 사이트를 공격하는 대신 특정한 결함을 찾기 위해 인터넷 주소를 무작위로 스캔하기도 합니다. 예를 들어, 침입자는 SendMail DEBUG 결함이 있는 머신을 찾기 위해 인터넷 전체를 스캔할 수도 있습니다. 일단 결함이 있는 머신을 찾으면 틈새를 악용하는 것은 간단합니다. 그들은 여러분을 직접 타깃으로 삼지 않으며, 심지어 여러분이 누구인지 알려고도 하지 않습니다.
    (‘birthday attack’으로 알려진, 잘 알려진 보안 결함 리스트와 IP 주소 리스트를 주고, 어딘가에 있는 어떤 머신에 그런 결함 가운데 하나라도 있을 확률은 꽤 높습니다)

    1.7 “침입 표시”는 보통 어떤 것인가?

    세 가지 공격 형태가 있습니다:

    정찰(reconnaissance)

    여기에는 ping 날리기, DNS zone 전송, e-mail 정찰, TCP나 UDP 포트 스캔, 그리고 cgi 결함을 찾기 위해 어떻게든지 공개 웹 서버 인덱싱하기(譯註:보통 웹 서버의 설정파일에서 indexing은 막아놓습니다. indexing이 열려 있을 경우 웹 디렉토리 안에 있는 파일 목록들이 보일 것입니다. 예를 들어 아파치 웹서버에서는 Indexes 옵션을 지우거나 주석문으로 처리합니다. )

    악용(exploits)

    침입자들은 시스템 접근 권한을 얻기 위해 숨겨진 기능이나 버그들을 이용합니다.

    서비스 - 거부
    (DoS: denial-of-service attacks)

    공격 침입자가 네트워크 링크에 과부하를 일으키고, CPU에도 과부하를 일으키거나 디스크를 꽉 채워 어떤 서비스를(혹은 머신 자체를) 마비시키는 것을 말합니다. 침입자는 정보를 얻으려고 애쓰지는 않고, 여러분이 자신의 머신을 사용하는 것을 어떻게든 막으려고 단순 무식하게 공격합니다.

    1.8 어떤 것들을 주로 악용하는가?

      1.8.1  CGI scripts

      CGI 프로그램들은 보안성을 해치기로 유명합니다. 전형적인 보안 결함은 셸 메타문자를 이용해서 부당한 명령들을 포함한 입력을 명령 셸에 직접 전달하는 것으로, 숨겨진 기능을 이용해서 시스템상의 파일들을 보여주게 하든가, 그렇지 않으면 시스템 정보를 필요 이상 노출시킵니다. 가장 잘 알려진 CGI 버그는 NCSA httpd에 들어있는 ‘phf’ 라이브러리입니다. ‘phf’ 라이브러리는 서버 쪽에서 해석된 HTML을 허용하도록 설정되어 있지만 아무 파일이나 악용할 수 있는 발판이 되었습니다.
      침입자가 악용할 수도 있는 잘 알려진 CGI 스크립트들로는: TextCounter, GuestBook, EWS, info2www, Count.cgi, handler, webdist.cgi, php.cgi, files.pl, nph-test-cgi, nph-publish, AnyForm, FormMail. 누군가 이런 CGI 스크립트 가운데 하나나 그 이상을 엑세스하려 애쓴다면 (여러분이 사용한 것도 아닌데), 침입 시도의 명백한 징조입니다(여러분이 설치만 해 두고 실제로 사용하지 않는 경우를 가정합니다).

      1.8.2  웹 서버 공격

      CGI 프로그램들 실행되는 저 너머에는 웹 서버 자체에 다른 결함들이 있을지도 모릅니다. 많은 웹 서버들이 (IIS 1.0과 NetWare 2.x를 포함해서) 경로 이름 속에 “../”를 연속해서 쓸 수 있도록 허용하므로, 파일 시스템의 어떤 곳이든지 이동해서 아무 파일이나 접근할 수 있는 결함을 가집니다. 또 다른 일반적인 결함은 요청 필드나, 혹은 다른 HTTP 필드 가운데 어떤 것에서 일어날 수 있는 버퍼 범람(buffer overflow)입니다.
      웹 서버는 자신을 받쳐주고 있는 운영체제(operating system)와 상호작용 관계에서도 버그가 있습니다. 오래된 버그 가운데 하나로 Microsoft IIS에서는 똑 같은 파일을 두고 긴 파일 이름, 짧은 이름 두 가지가 뒤섞여 있어, 때로 퍼미션을 비켜서 엑세스할 수 있는 방법이 있었습니다. NTFS (비교적 새로운 파일 시스템)에서는 Macitoch 데이터와 비슷한 것으로 “데이터 스트림 대체”라 부르는 기능, 그리고 자원 분기(resource forks)가 있습니다. 여러분이 파일이름에 “::$DATA” 를 덧붙이면 스크립트를 실행하는 대신, 그 내용을 볼 수 있습니다.
      서버들은 오랫동안 URL과 관련된 문제들이 있었습니다. 예컨대, 오래된 Apache에는 “엄청난 슬래시에 의한 죽음 : death by a thousand slashes” 문제는 URL에 넣은 수천 개의 슬래시를 각각 디렉토리로 처리하려고 해서 CPU에 엄청난 부하를 일으킵니다.

      1.8.3 웹 브라우저 공격  ( Web browser attacks )

      Microsoft와 Netscape

      웹 서버의 모든 버전에 보안 결점이 있는 것 같습니다(물론, 가장 최근 버전에는 우리가 알고 있는 버그들은 결코 없겠지만..). 여기에는 URL, HTTP, HTML, JavaScript, Frames, Java, ActiveX 공격이 포함됩니다.

      URL

      필드는 HTTP 헤더로 해석된 다음, 스크린에 출력되거나, 다른 어떤 방법으로 처리되므로(캐시 히스토리로 저장되는 등) 버퍼 범람 상황을 유도할 수 있습니다. 또, 인터넷 익스플로러에 있는 오래된 버그 가운데 어떤 것은 LNK나 URL 커맨드를 실행하는 버그와 상호 작용을 허용했습니다.

      HTTP

      헤더에서 어떤 필드는 특정 정보만을 기다리는 함수로 통용되므로 악용 버그에 사용될 수 있습니다.

      HTML

      은 넷스케이프 커뮤니케이터의 <EMBED> MIME-type 범람처럼 악용되곤 합니다.

      JavaScript

      는 특히 좋아하는 공격대상인데, 파일이름 만들기와 숨겨진 “SUBMIT”의 자동 동작을 이용해서 “file upload” 기능을 흔히 악용합니다.
      이 버그를 고치기 위해 많은 변화가 이루어지고 있지만 장난꾸러기들은 그 것을 교묘히 빠져나가는 새로운 방법들을 찾아냈습니다.

      Frame

      은 흔히 자바스크립트나 Java 해크의 일부로 쓰여(예를 들어, 1px 크기로 스크린을 줄여 웹 페이지를 숨깁니다) 특별한 문제들을 일으킵니다. 예를 들어, 프레임을 이용해서 신뢰할 수 있는 사이트에 링크를 포함한 다음, 여러분이 링크를 클릭할 때 그런 프레임들을 내가 만든 웹페이지로 바꾸면(여러분이 가려는 원격 사이트와 같은 모양으로) 그 프레임은 여러분에게 원격 사이트의 일부로 보일 것입니다.

      Java

      는 철벽 보안 모델이 있지만 이따금씩 버그가 발견되고 있습니다 (그럼에도 불구하고 그 밖의 다른 것들과 비교하면, 최고의 보안성을 가진 시스템 구성 요소들 가운데 하나로 입증되고 있습니다). 게다가, Java의 철벽 보안은 오히려 파멸의 원인이 되기도 합니다: 보통 자바 애플릿은 로컬 시스템에 엑세스할 수 없지만, 어느 때 로컬 시스템에 엑세스할 수 있다면 매우 유용한 해킹도구가 될 수 있습니다. 그런 이유로, “trust” 모델의 실행이 오히려 시스템이 더욱 해크되기 쉬운 상태가 될 수 있습니다.

      ActiveX

      는 순전히 신뢰 모델로부터 동작하며 남이 만든 코드를 그대로(native code) 실행하므로 Java보다 더욱 심각한 위험요소입니다. 어떤 벤더로부터 구입한 코드에 뜻하지 않게 포함된 바이러스를 우연히 발견할 수도 있습니다.

      1.8.4  SMTP (SendMail) 공격

      SendMail은 널리 사용되는 프로그램이고, 빈번한 보안 결함의 원천이 되는 매우 복잡한 프로그램입니다. 오래 전에(‘88년 Morris Worm) 해커들은 DEBUG 명령에 있는 결함을 이용하거나 숨겨진 WIZ 기능을 이용해서 SMTP를 깨고 들어갔습니다. 요즘, 해커들은 버퍼 오버런을 흔히 사용합니다. SMTP는 VRFY 명령을 이용하여 유저 이름들을 찾아보는 등 정찰 공격에 악용될 수도 있습니다.

      1.8.5  Access

      로긴 실패, 파일 엑세스 실패, 패스워드 크래킹, 관리자 권한 남용

      1.8.6  IMAP

      유저들은 IMAP 프로토콜을 통해 서버로부터 e-mail을 꺼내옵니다(이와 반대로, SMTP는 서버들 사이에서 e-mail을 전송합니다). 해커들은 유명한 IMAP 서버들에 있는 버그들을 찾아냈습니다.

      1.8.7  IP spoofing

      모든 IP 패킷마다 출발지 주소(source address)가 따라가지만, 실제로 라우팅에 쓰이는 것은 아닙니다. 이것은 침입자가 서버와 대화할 때 여러분인 것처럼 가장할 수 있다는 것을 의미합니다. 침입자는 응답 패킷을 결코 보지 않습니다(비록 여러분의 머신에는 패킷이 도착하더라도, 여러분이 보낸 어떤 요청과도 부합되지 않으므로 그것들을 버립니다). 침입자는 이렇게 데이터를 돌려 받지 못하겠지만, 여러분을 사칭해서 서버에 계속 명령들을 보낼 수 있습니다.

      IP 스푸핑은 다른 공격들의 일부로 자주 이용됩니다:

      SMURF

      브로드캐스트 ping의 출발지 주소가 위조되어, 아주 많은 수의 머신들이 위조된 주소가 가리키는 머신에 응답을 보내고, 결국 먹이감은 과부하에 걸립니다(또는 먹이의 링크에).

      TCP 일련 번호 예측
      (TCP sequence number prediction)

      TCP 연결을 시작할 때, 여러분은 반드시 여러분 쪽의 일련번호(ISN: initial sequence number)를 선택해야 하고, 서버는 반드시 서버 쪽의 일련 번호를 선택해야 합니다. 오래된 TCP 공격들에서는 예측할 수 있는 일련 번호들을 고르고(내공이 필요합니다), 그것에 따라 위조한 IP 주소를 이용해(여러분이 위조할 대상 머신은 결코 응답 패킷을 보지 않을 것입니다. 여러분이 공격을 완성하기 위해 클라이언트 머신을 멈추게 하기 때문입니다), 침입자는 보안 장치들을 피해서 TCP 연결을 생성합니다.]

      시퀀스 예측을 통한 DNS 중독(DNS poisoning through sequence prediction)

      DNS 서버들은 “재귀적”으로 DNS 이름을 풀어냅니다. 클라이언트 요청을 만족시키려는 DNS 서버는 자신이 클라이언트가 되어 상위 서버에 재귀적인 사슬을 만듭니다. 일련 번호들은 이것을 이용해 추측할 수 있습니다. 그래서, 침입자는 DNS 서버에 요청을 보내고 사슬의 다음 서버로부터 온 것처럼 위조해서 응답합니다. 그러면 위조된 응답을 믿고, 가짜 정보를 이용해 다른 클라이언트들의 질의를 풀어줍니다.

      1.8.8  버퍼 범람(Buffer Overflows)

      그밖에 버퍼 오버플로우 공격들은:

      DNS overflow

      서버에 지나치게 긴 DNS 이름을 보냅니다. DNS 이름은 점으로 구분된 단위마다 최대 64 바이트까지 쓸 수 있으며, 모두 더해서 256 바이트를 넘지 않도록 제한됩니다.

      statd overflow

      지나치게 긴 파일이름을 보냅니다.

      1.8.9 DNS attacks

      DNS서버를 오염시킬 수 있다면, 신뢰 관계를 이용할 수 있으므로, DNS는 주요 공격목표가 됩니다:

      DNS 캐시 중독 DNS cache poisoning

      모든 DNS 패킷은 “Question” 섹션과 “Answer” 섹션을 포함합니다. 취약한 서버들은 여러분이 Question과 함께 보낸 Answer들을 신뢰할(그리고 캐시로 보관) 것입니다. 전부는 아니지만, 대부분, DNS 서버들은 1998년 11월 버전으로 패치되었습니다.

      시퀀스 예측을 통한 DNS 중독(DNS poisoning through sequence prediction)

      위를 보세요.

      DNS overflow

      위를 보세요.

    1.9 일반적이 정찰 스캔에는 어떤 것이 있는가?

      1.9.1  Ping 휩쓸기(Ping sweeps)

      어떤 머신들이 살아있는지 찾기 위해 IP 주소 한 묶음에 그냥 ping을 보내는 단순한 스캔입니다. 좀더 고상한 스캐너들은 이 일을 하는데 다른 프로토콜들을(SNMP 휩쓸기 등) 사용합니다.

      1.9.2  TCP scans

      침입자가 악용할 수 있는 서비스를 찾기 위해 열린(‘open’ 또는 ‘listening’) TCP 포트들을 검색합니다. 스캔들은 평범한 TCP 연결들을 이용할 수도 있고, 반만-열린(halt-open) 연결들을 이용해서(시스템에 기록이 남는 것을 예방하기 위해) 자신을 은폐한 채로 스캔하거나 FIN을(결코 포트를 열지 않지만, 누군가 듣고 있는지 테스트합니다) 스캔할 수 있습니다.

      1.9.3  UDP scans

      UDP는 비연결형 프로토콜(connectionless protocol)이기 때문에 UDP 스캔은 조금 더 어렵습니다. 방법은 목적 포트에 쓰레기 UDP 패킷을 보내는 것입니다. ICMP “destination port unreachable” 메시지와 함께 응답이 돌아오면 대개 그 포트에서 준비하고 있는 서비스가 없다는 뜻입니다. 그런데, 많은 머신에서 ICMP 메시지를 제한하고 있기 때문에, 아주 빠르게 대상을 스캔할 수 없다는 문제가 있습니다.

      1.9.4  OS 식별(OS identification)

      불법적인(illegal 또는 strange, 그러니까 표준을 따르지 않는) ICMP나 TCP 패킷들을 보내서, 침입자는 먹이의 운영 체제가 무엇인지 알아낼 수 있습니다. 표준(Standards)에는 합법적인 패킷에 대해서 머신들이 응답하는 통상적인 방법을 지정하므로 옳은 입력에 대해서는 머신들이 한결같이 응답하는 경향이 있습니다. 그러나, 표준은 옳지 않은 입력에 대한 응답은 생략합니다(대개 고의적으로). 그래서, 운영체제마다 옳지 않은 입력에 대해 응답하는 형식이 다르게 되었고, 해커들은 대상 머신이 무슨 시스템인지 유추해낼 수 있습니다. 이런 형태의 움직임은 저수준에서(은폐 TCP 스캔처럼) 발생하기 때문에 시스템에 기록이 남지 않습니다.

      1.9.5  계정 스캔(Account scans)

      계정으로 로그온하려는 시도들:

      ·패스워드가 없는 어카운트
      ·유저 이름과 같은 패스워드나 “passwrd”라는 패스워드를 가진 어카운트
      ·제품이 발매될 때 기본적으로 들어 있는 어카운트(SGI 시스템 공통의 문제로,
        셋업을 쉽게 마치도록)
      ·소프트웨어 제품들과 함께 설치된 어카운트(유닉스와 Microsoft 공통의 문제로,
        제품들을 실행할 때에 자신만의 특별한 사용자 어카운트가 있어야 하기 때문)
      ·익명 FTP(Anonymous FTP) 문제들(CWD ~root)
      ·신뢰 로긴(패스워드 인증이 필요 없는 로긴)을 지원하는지 rlogin/rsh/rexec 포트를 스캔

    1.10 DoS(Denial of Service) 공격에는 일반적으로 무엇이 있나?

      1.10.1  죽음의 Ping(Ping-of-Death)

      패킷이 끝나기 전에 옳지 않는 조각을 보내서 이전 패킷의 끝을 제한된 것보다 길게 늘입니다.

      1.10.2  SYN 넘침(SYN Flood)

      TCP SYN 패킷(연결을 시작하는 패킷)를 매우 빠르게 보내서, 먹이가 아주 많은 연결들이 완료되기를 기다리도록 만듭니다. 그러면, 리소스 범위를 넘어 실행되고, 합법적인 연결을 받아들이지 못합니다. 이 공격에 대해 방어하는 새로운 방법은 “SYN cookies”입니다. 연결의 양쪽에는 자신의 일련번호가 있습니다. SYN에 응답할 때 공격당하는 머신은 연결의 “cookie”인 특별한 일련 번호를 생성하고 연결에 대해 알고 있는 모든 것을 잊어버립니다. 그 다음 합법적인 연결로부터 다음 패킷이 들어올 때 연결에 대해 잃어버린 정보를 새로 만들 수 있습니다.

      1.10.3  Land/ La tierra

      동일한 출발지/목적지(source/destination) 주소/포트로 위조된 SYN 패킷을 보내면 그 시스템은 TCP 연결을 마치려고 무한 루프에 빠지게 됩니다.

      1.10.4  WinNuke

      포트 139(NetBIOS Session/SMB)에 OOB/URG 데이터를 보내면(TCP 연결), Windows 시스템이 맛이 갑니다.

    1.11 침입당하면 얼마나 위험한가?

    나는 사람들이 “그 시스템에는 누군가 가져가려 할만한 것이 아무 것도 없어.”라고 말하는 것을 자주 듣습니다. 그러나 여러분에게 불리한 조건이 될 다양한 시나리오가 있습니다. 신용카드로 온-라인에서 결재한 정보나, 재정 정보 또는, 사회 보장 번호가 개인 머신에 남아 있을 수도 있습니다.

    더욱 중요한 것은, 법적인 문제입니다. 여러분은 어쩌면 해커가 여러분의 머신을 이용해 입힌 손실에 대해 책임져야 할 것입니다. 여러분은 자신의 머신을 해커로부터 지키기 위해 합당한 보안조치를 해 두었다는 것을 법정에서 입증할 수 있어야만 합니다. 예를 들어, 여러분이 머신을 빠른 링크에(케이블 모뎀이나 DSL) 두고, 관리자/루트 어카운트를 패스워드 없이 열어두었다고 생각해 봅시다. 그리고, 해커가 여러분의 머신을 깨고 들어가, 은행을 해크해 들어갈 때 그 머신을 이용했다면, 여러분은 아마 법정에서 어려운 지경에 빠질 것입니다. 가장 뻔한 보안 조치마저도 하지 않았기 때문입니다.

    [John D. Howard의 보고서 http://www.cert.org/research/JHThesis/Start.html 는 인터넷에서 해킹이 얼마나 많은지, 여러분은 얼마나 위험한지 논의하는 좋은 문서입니다.]

    1.12 최근 침입에 대한 통계는 어디서 찾을까?

    NIPC에서 배포하는 CyberNotes (http://www.fbi.gov/nipc/welcom.htm)
    CyberNotes는 National Infrastructure Protection Center (NIPC)에서 두 주마다 발간합니다. 이 노트는 사이버 세계의 취약점, 해커 악용 스크립트(hacker exploit scripts), 해커 동향, 바이러스 정보, 그리고 그밖에 다른 정보기반구조-관련(infrastructure-related) 최선의 실전경험에 대한 정보를 제때에 보안 시스템과 정보 시스템 전문가들에게 제공하는 것이 임무입니다.

    NIPC는 1998년 중만 FBI에 의해 설치되었으며, 첫 번째 주요 활동은 멜리사 바이러스(W97M.Melissa)의 진원지 추적을 돕는 일이었습니다. CyberNotes 문서는 1999년 1월로 거슬러 올라갑니다.

    AusCERT 통합 통계 프로젝트AusCERT Consolidated Statistics Project (http://www.auscert.org.au/Information/acsp/index.html)

    웹에서 침입 통계들을 모으고 통합하는 프로젝트입니다. 그들은 사람들이 이 프로젝트에 참여하고 정보를 보내길 바랍니다.
    1989 - 1995  (http://www.cert.org/research/JHThesis/Start.html)
    John D. Howard의 논문, 카네기 멜런 대학
    CERT 보고서, 기사, 발표물 CERT Reports, Articles, and Presentations (http://www.cert.org/nav/reports.html)

    [CERT는 침입에 대한 역사적인 통계를 꽤 가지고 있지만 NIPC 정도의 최신 정보는 가지고 있지 않습니다.]

    1999 CSI-DBI 조사 Survey (http://www.gocsi.com/summary.htm) 또는 (http://www.gocsi.com/prelea990301.htm

    [CSI (Computer Security Institute)는 침입과 보안에 대해 많은 조사를 합니다.]




▲ top