'syn flooding'에 해당되는 글 4건

  1. 2009.12.21 웹하드 서비스를 통해 생성된 Botnet을 이용한 DDoS 공격 피해사례
  2. 2009.09.09 SYN Flooding Attack 방어 (윈도우 환경) (1)
  3. 2009.07.21 해커의 수준 및 해킹 기법 분류
2009.12.21 18:14

웹하드 서비스를 통해 생성된 Botnet을 이용한 DDoS 공격 피해사례


웹하드 서비스를 통해 생성된 Botnet을 이용한 DDoS 공격 피해사례
KrCERT/CC 인터넷 침해 대응 센터


Trackback 0 Comment 0
2009.09.09 18:47

SYN Flooding Attack 방어 (윈도우 환경)

일반적으로 인터넷에 연결된 환경에서는 많은 IP 프로토콜들의 종류가 있지만 적어도 TCP(Transmission Control Protocol:6), UDP(User Datagram Protocol:17), ICMP(Internet Control Message Protocol:1)에 대해서는 익히 들어보았을 것입니다. 이중에서 TCP는 가장 많이 사용되는 프로토콜로 시스템간의 상호 대화하기 위해 사용됩니다.

TCP 프로토콜을 사용하여 두 시스템간의 연결 및 전송이 어떻게 구축되는지 알아보겠습니다. 다음은 TCP 프로토콜에 사용되는 플래그입니다. 이들 플래그를 통해 현재 연결이 시작되는지 종료되는지 에러가 발생하여 재전송 하는지 등의 상태를 나타냅니다.

  • SYN (Synchronization) : 초기 TCP 연결 요청
  • ACK (Acknowledgement): ACK 번호 필드에 값이 타당한지를 알려줌
  • FIN (Finish): TCP연결을 정상적으로 종료
  • RST (Reset): TCP연결을 즉시 종료
  • PSH (Push): 수신측에 가능한 빨리 데이터를 전달
  • URG (Urgent): Interrupt를 처리

따라서, 클라이언트에서 서버로 TCP 연결을 시도하면 다음과 같은 과정을 거쳐 연결이 구축됩니다.

  1. 정상적인 연결 구축 

    • Clinet -> Server : SYN 메시지 전송
    • Server -> Client : SYN-ACK 메시지 전송 ( 여기까지 과정을 수행하게 되면 서버는 스택(Stack)에 진행중인 연결에 대한 정보를 저장한다.)
    • Client -> Server : ACK 메시지 전송

  2. 주로 예상되는 공격 패턴

    • Client -> Server : SYN 메시지 전송
    • Server -> Client : SYN-ACK 메시지 전송
    • Client -> Server : 비정상적인 SYN 메시지 전송

    이러한 방식으로 서버는 스택에 계속 정보를 쌓아두기 때문에 나중에 시스템이 정지하는 일이 발생합니다.

    다음은 정상적인 연결에 사용되는 플래그의 조합과 공격으로 의심이 갈만한 플래그의 조합입니다.

  3. 정상적인 연결

    • SYN, SYN-ACK, ACK은 정상적인 TCP연결을 구축할 때 사용(3 Handshake 방식)
    • 초기 SYN패킷을 제외하면, 연결을 맺은 모든 패킷들은 ACK 비트가 설정되어야만 함
    • FIN ACK, ACK는 연결을 정상적으로 종료할 때 사용
    • RST ACK는 연결을 즉시 종료할 때 사용
    • 연결후에 송수신되는 패킷들은 디폴트로 ACK비트를 포함하고 있다.
    • 연결후 송수신되는 패킷에는 PSH 그리고/또는 URG가 포함될 수 있음

  4. 비정상적인 플래그 조합으로 공격이 의심되는 연결

    • SYN과 FIN을 동시에 수행하는 정상적인 패킷은 없다
    • SYN FIN PSH, SYN FIN RST, SYN FIN RST PSH와 같은 SYN FIN들의 다양한 변형들이 존재
    • 정상적인 패킷은 FIN플래그만을 포함하지 않음(주로 Port Scan, Network Mapping, Stealt에 사용됨)
    • NULL 패킷( 플래그가 설정되지 않은 패킷)
    • 정상적인 패킷들은 출발지 및 목적지의 포트가 0으로 설정되어 사용되지 않음
    • ACK 플래그가 설정되어 있을 때 ACK 번호는 0으로 설정되면 비정상적인 패킷임
    • SYN만 설정된 패킷은 어떤 Data를 포함하고 있지 않으며, 새로운 연결이 시도될 때만 설정된다.
    • TCP 연결은 목적지 주소로서 Broadcast주소(xxx.xxx.xxx.255)를 사용하지 않음

이제부터 어떻게 SYN Attack 을 막을지를 생각해봅시다.
가장 좋은 방법은 스택을 늘리는 것인데, 실제로 가능할지는 몰라도 우리가 구현하는 방법과는 거리가 멉니다. 그래서, MS사가 추천하는 방법을 소개하려고 합니다.

이 방법은 가장 기본적인 방법으로 레지스트리를 편집하는 방법입니다. 다른 방법으로는 보안 툴 또는 IDS(Intrusion Detect System:침입탐지시스템)을 이용할 수 있지만 좀 힘들겠죠 ?

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

  • SynAttackProtect
    - 형식 : REG_DWORD
    - 범위 : 0 – SynAttack 프로텍션을 사용하지 않음.
    1 – 재전송 시도를 줄이고, TcpMaxHalfOpen 및 TcpMaxHalfOpenRetried 설정이 만족한다면 RCE(route cache entry)를 지연시킴
    2 – 1 기능외에도 Winsock 에 대한 지시(indication)를 지연시킴
    - 기본 : 0
    - 추천 : 2
    - 설명 : SynAttack을 막는 방법은 SYN-ACKs 의 재전송을 줄이는 것입니다. 연결이 구축될때까지 RCE(route cache entry) 자원의 할당을 지연시킵니다. 만약 값 2를 적용한다면 3 handshake가 완료될 때까지 AFD의 연결 indication이 지연됩니다. 또한 TcpMaxHalfOpen 과 TcpMaxHalfOpenRetried 설정과 함께 사용되어야 합니다.

  • TcpMaxHalfOpen
    - 형식 : REG_DWORD
    - 범위 : 100–0xFFFF
    - 기본: 100 (Professional, Server), 500 (advanced server)
    - 추천 : 기본값
    - 설명 : 이 패러미터는 SYN-ATTACK 공격이 동작하기 전에 SYN-RCVD 상태에서 연결되는 개수를 제한합니다. 만약 SynAttackProtect 가 1로 설정되면 이 값은 AFD가 청취하는 보호하려는 포트의 Backlog보다 작은 값이어야 합니다.( Backlog에 대한 자세한 정보는 Backlog Parameters를 참고하세요.)

  • TcpMaxHalfOpenRetried
    - 형식 : REG_DWORD
    - 범위 : 80–0xFFFF
    - 기본 : 80 (Professional, Server), 400 (Advanced Server)
    - 추천 : 기본값
    - 설명 : 이 값은 SYN-RCVD 상태에서 연결되는 개수를 제어합니다. SYN-RCVD는 SYN-ATTACK 방어가 동작하기 전에 적어도 한번의 SYN 플래그를 재전송합니다. 이 값을 적용하기 전에 먼저 충분한 테스트를 거쳐 적절한 값을 얻어야 합니다.

  • EnablePMTUDiscovery
    - 형식 : REG_DWORD
    - 범위 : 0, 1 (False, True)
    - 기본 : 1 (True)
    - 추천 : 0
    - 설명 : 이 값이 1로 설정되면 원격 호스트에 이르는 경로에 MTU 또는 최대 패킷사이즈를 찾으려고 시도합니다. 경로 MTU를 찾고 및 TCP 세그먼트를 이 크기로 제한함으로써 TCP는 다양한 MTU로 연결된 네트워크에 있는 라우터의 분산(fragmentation)을 막을 수 있습니다. Fragmentation은 TCP 처리량과 네트워크 부하에 영향을 미칩니다. 이 값을 0으로 설정하면 로컬 서브넷에 있지 않은 호스트에 연결되는데 MTU를 576바이트로 설정하게 됩니다.

  • NoNameReleaseOnDemand
    - 형식 : REG_DWORD
    - 범위 : 0, 1 (False, True)
    - 기본 : 0 (False)
    - 추천 : 1
    - 설명 : 이 값은 네트워크에서 이름-해제 요청을 받았을 때 컴퓨터가 NetBIOS 이름을 해제할 지 여부를 결정하게 됩니다. 이 값을 설정함으로서 이름-해제(name-release) 공격에 대비할 수 있습니다.

  • EnableDeadGWDetect
    - 형식 : REG_DWORD
    - 범위 : 0, 1 (False, True)
    - 범위 : 0,1 (False, True)
    - 기본 : 1 (True)
    - 추천 : 0
    - 설명 : 이 값을 1로 설정하면 TCP는 dead-gateway 탐지를 수행하게 됩니다. 이 기능을 활성화하면 많은 수의 연결이 어려울 때 TCP는 IP에 백업 게이트웨이로 바꿀 것인지 물을 수도 있습니다. 백업게이트웨이는 TCP 등록정보의 고급 설정부분에서 지정할 수 있습니다.

  • KeepAliveTime
    - 형식 :REG_DWORD - 밀리세컨드
    - 범위 : 1–0xFFFFFFFF
    - 기본 : 7,200,000 (2시간)
    - 추천 : 300,000
    - 설명 : 노는 연결(idle connection)이 keep-alive 패킷을 전송함으로써 계속 유지되는지 확인하려고 할 때 종종 사용됩니다. 만약 원격 시스템에 여전히 도달할 수 있고 동작한다면 keep-alive 전송을 승인합니다. Keep-alive 패킷은 기본적으로 전송되지 않습니다. 이 기능은 애플리케이션에 의해 사용되는 연결에서도 활성화될 수 있습니다.

  • PerformRouterDiscovery
    - 형식 : REG_DWORD
    - 범위 : 0,1,2
    0 (disabled)
    1 (enabled)
    2 ( 만약 DCHP가 router discover option을 전송는 경우에만 활성화됨)
    - 기본 :
    - 추천 : 0
    - 설명 : Windows 2000에서 인터페이스 카드 기반으로 RFC 1256에 해당하는 router discovery 를 수행하게 할지를 제어합니다.

  • EnableICMPRedirects
    - 형식 : REG_DWORD
    - 범위 : 0, 1 (False, True)
    - 기본 : 1 (True)
    - 추천 : 0 (False)
    - 설명 : ICMP는 인터넷프로토콜에서 문제가 생기면 보고해주는 프로토콜로서 예를 들어 네트워크 접속문제인 "Echo Reply", "Destination Unreachable" 혹은 네트워크 라우팅 문제 인 "Redirect" 등을 알려준다. ICMP Redirect메시지는 호스트가 목적지 주소로 연결하고자할 때, 해당 라우터가 최적의 경로임을 호스트에게 알려주기 위하여 라우터로부터 호스트로 보내어진다.


    이상 SYN Attack 의 원리 및 방어에 대해 간략히 알아보았습니다. 실제로 이에 대한 자세한 정보를 알아보려면 아래 참고문서를 보시거나, 그 전에 TCP 의 원리에 관한 책 한권정도는 충분히 숙독하셔야 할 것입니다.
    잘못된 부분이나 번역상 또는 편집상의 오류를 발견하신다면 알려주시기 바랍니다.

    참고 문서 : http://www.certcc.or.kr
    http://www.microsoft.com/TechNet/security/dosrv.asp
    http://www.cert.org/advisories/CA-2000-01.html

    작성자 : 문일준( security@mcse.co.kr)

Trackback 0 Comment 1
  1. Favicon of https://blog.pages.kr 날으는물고기 2009.09.09 18:53 신고 address edit & del reply

    Parameters
    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip
    http://technet.microsoft.com/en-us/library/cc962453.aspx

2009.07.21 10:05

해커의 수준 및 해킹 기법 분류


. Wizard 해킹 수행 코드 작성 가능

앞서 언급한 바와 같이 해킹 수행 코드 작성 가능이란 의미는 난이도가 낮은 간단한 취약점을 이용하는 해킹 수행 코드 뿐만 아니라 버퍼 오버플로 공격이나 포맷 스트링 공격 등과 같은 프로그래밍 상의 오류를 이용한 공격과, 각종 프로토콜 상의 문제점을 이용한 해킹 수행 코드를 작성할 수 있는 경우를 의미한다. 이렇게 해킹 수행 코드를 직접 작성하여 해킹할 수 있는 수준의 해커를 Wizard라고 부르도록 한다. 해킹 수행 코드를 작성할 수 있는 수준의 해커는 다음의 2가지 수준으로 나누어 볼 수 있다.

Nemesis - 새로운 취약점을 발견하고 그에 대한 해킹 수행 코드 작성 가능

새로운 취약점을 발견하고 그에 대한 해킹 수행 코드를 만들 수 있는 해커는 최고 수준의 해커라고 볼 수 있다. 이 수준의 해커는 자동화, 에이전트화, 은닉화, 분산화된 해킹 도구를 제작할 수 있는 능력을 가지고 있으며, 시스템에서 수행되는 여러 작업간의 유기적인 문제를 이해하고 있다. 다른 수준의 해커들과 구별되는 가장 큰 특징은 창의적인 생각을 할 수 있고, 문제가 생기면 스스로 해결책을 찾아나갈 수 있는 능력이 있다는 것이다. 이 수준의 해커를 Nemesis라고 부르도록 한다. Nemesis라는 것의 원래 의미는 고대 그리스 신화에 나오는 여신의 이름으로, 악한 짓을 저지르거나 오만한 행동을 하는 인간이나 신을 처벌하는 복수의 여신이다.

Expert - 기존에 발견된 취약점에 대한 해킹 수행 코드 작성 가능

기존에 발견된 취약점에 대한 해킹 수행 코드를 작성할 수 있는 해커는 여러 OS에 대해 각각의 시스템 구조를 자세하게 이해하고 있으며, 복잡한 네트워크 프로그래밍이 가능하고, 시스템에서 제공하는 서비스 및 각종 프로토콜과 프로그램 등의 구조적인 문제를 이해하고 분석할 수 있는 능력이 있다. 이 수준의 해커를 Expert라고 부르도록 한다.

. Guru - 해킹 수행 코드의 수정 사용 가능

발표된 해킹 수행 코드를 수정하여 해킹하고자 하는 시스템에 적용할 수 있고, 이를 통해 해킹 성공률을 높일 수 있는 수준의 해커를 Guru라고 부르도록 한다. 이 수준의 해커들은 이미 발표된 해킹 수행 코드를 해킹하려는 시스템에 적용 가능하도록 수정하여 해킹 성공률을 상당히 높일 수 있는 수준인가, 성공을 위해 해킹 수행 코드를 변경시키더라도 성공확률이 높지 않은 수준인가에 따라 2가지 수준으로 나누어 볼 수 있다.

Experienced Technician - 발표된 Exploit Code 수정으로 해킹 가능 수준

이 수준의 해커는 기 발표된 해킹 수행 코드를 해킹하려는 시스템에 적용되도록 수정하여 해킹에 성공할 수 있는 수준의 해커를 의미한다. 이 수준의 해커는 여러 가지 운영체제에 대한 낮은 수준의 시스템 구조를 이해하고 있으며 각종 프로토콜을 이해하고 있다. 또한 어느 정도 수준의 네트워크 프로그래밍이 가능한 수준으로 해킹 수행 코드자체를 이해하고 각각의 코드들이 어떤 동작을 하는지 알고 있다. 만약 원하는 해킹 대상 시스템에 기존에 발표된 취약점이 존재하고, 이에 대한 해킹 수행 코드가 존재한다면 해킹이 가능하다. 이 수준의 해커를 Experienced Technician이라고 부르도록 한다.

Technician - 발표된 해킹 수행 코드를 수정하더라도 해킹 성공률이 낮은 수준

이 수준의 해커는 해킹하고자 하는 시스템에 해킹 수행 코드를 적용하기 위해 몇 가지 간단한 내용을 수정하지만 해킹 성공 가능성은 매우 희박한 수준이다. 비록 해킹 대상 시스템에 대한 취약점 점검을 통해 어떤 취약점이 있는지 확인하고, 해당 취약점에 대한 해킹 수행 코드를 찾을 수 있는 능력은 있지만, 만약 얻은 해킹 수행 코드가 해킹하려는 시스템에 정확히 일치하는 것이 아니면 해킹에 성공할 확률이 낮은 해커이다. 그러나 이러한 수준의 해커는 일반적인 시스템 프로그래밍이 가능하고 대부분의 해킹기법을 이해하고 있다. 그리고, 시스템 설정과 관련된 간단한 취약점을 이용하여 해킹이 가능하며, 기본적인 시스템 구조를 이해하고 있고, 간단한 네트워크 프로그래밍이 가능한 능력을 가지고 있다. 이러한 수준의 해커를 Technician이라고 부르도록 한다. 해킹 기법을 연구해본 사람은 알 수 있겠지만, 해킹 기법을 이해하는 것과 그 해킹 기법을 이용하여 실제 해킹에 성공하는 것은 크게 다르다.

. Script Kiddie - 해킹 수행 코드 및 해킹 프로그램의 단순 사용

발표된 해킹 수행 코드나 각종 해킹관련 사이트에서 얻을 수 있는 각종 프로그램을 단순히 사용하는 수준의 해커를 말한다. 물론 이 수준의 해커는 해커라고 불리지 않는다. 대부분 크래커라고 불리거나 과거 분류에 따라 스크립트 키디(script kiddie), 혹은 워너비(want to be, wannabe, 해커가 되고 싶은 사람)라고 불린다[4]. 본 문서에서는 이와 같이 이미 알려진 간단한 시스템 설정 문제나 소프트웨어 자체의 취약점을 이용하거나, 기 발표된 해킹 프로그램을 아무런 수정 없이 사용하는 수준의 사람을 Script kiddie라고 부르도록 한다.

Scripter - 발표된 해킹 수행 코드를 수정 없이 그대로 사용하는 수준

이 수준의 해커는 획득한 해킹 수행 코드를 수정 없이 실행하거나, 단순한 스크립트들을 수행시키는데, 이러한 수준의 해커는 해커라고 불리지 않는다. 이들은 획득하게 되는 각종 GUI 형태 및 UNIX 기반 해킹 프로그램을 단순히 설치하여 실행할 뿐이다. 기존에 알려져 있는 시스템이나 각종 서비스의 취약점에 대해 여러 명령어들을 이용하거나 웹 브라우저 상의 단순한 코드 조작으로 해킹할 수 있는 능력은 있으나, 해킹 수행 코드 자체를 이해하지는 못한다. 이러한 수준의 해커를 Scripter라고 부르도록 한다. 물론 이 수준의 해커 역시 해킹 수행 코드가 적용될 수 있는 시스템에 대한 해킹을 시도하는 경우에는 해킹이 가능하다.

Newbie –각종 해킹 프로그램 및 단순한 Unix 명령 사용 가능 수준

이 수준의 해커는 해킹 수행 코드라는 것이 무엇인지 이해하지 못하는 수준으로 해킹 사이트 등에서 얻어낸 각종 해킹 프로그램을 단순히 사용하는 수준이다. 이제 막 해킹 기법을 익히기 시작한 이들은 Unix시스템을 사용해본 경험이 있고, 몇몇 시스템 명령어를 사용할 수 있으며, 네트워크와 시스템에 대한 약간의 지식을 가지고 있지만 해킹에 적용시킬 능력은 없다. 사용하는 명령어 자체에 대한 이해 역시 부족하다. 대부분 GUI 형태의 해킹 프로그램을 사용한다. 이러한 수준의 해커를 Newbie라고 부르도록 한다. Newbie는 초보, 신참을 의미한다.

Kids - GUI 형태의 해킹 프로그램을 단순히 사용하는 수준

이 수준의 사람은 DoS 프로그램이나 패스워드 크랙 도구만 있으면 모든 사이트를 해킹할 수 있다고 생각하는 사람으로, 네트워크나 시스템에 대한 지식이 전무하며, 단순히 얻게 된 해킹 프로그램을 설치하여 실행해 본다. 또한 이런 류의 사람이 사용하는 프로그램은 GUI형태의 해킹 프로그램으로, PC방 등에 트로이잔 형태의 프로그램을 설치하고 해킹에 성공했다고 생각하는 사람이다. 해킹과 관련된 지식이 전무한 상태이다. 이러한 수준의 해커를 Kids라고 부르도록 한다.

현재 활동중인 거의 대부분의 해커들이 Technician 수준을 벗어나지 못한다. 이는 Gilbert Alaverdian의 분류에서도 언급된 Developed Kiddie 수준으로 이들은 단순히 발표된 해킹 수행 코드의 작은 수정을 통해 해킹에 종종 성공하기도 하는 수준이다. 매스컴을 통해 보고되는 거의 대부분의 해킹 사건들은 이 수준의 해커에 의해 시도되는 사건들이다.


1. 해킹 기법 및 수준 분류의 기준
 

. 해킹 기법 분류의 기준

해킹 기법들은 현재 알려져 있는 여러 해킹 기법들의 동작방식이나 목표, 사용하는 취약점 등을 기준으로 하여 분류하도록 한다. 적용되는 분류 기준의 우선 순위를 다음과 같이 정의한다.

- 기준 1: 공격의 목적

- 기준 2: 사용하는 취약점의 종류

- 기준 3: 일련의 해킹 과정에 포함될 수 있는 여러 방법

공격의 목적으로는 특정 권한 획득, 정보수집, 서비스 거부 공격(시스템 마비) 등이 있을 수 있고, 해킹에 사용되는 취약점의 종류로는 시스템 및 서비스 설정과 관련된 취약점, 프로그램 상의 오류로 인한 취약점, 각종 프로토콜 상의 취약점 등이 있을 수 있다. 그리고 일련의 해킹 과정에 포함될 수 있는 여러 방법으로는 악성 코드, 기타 여러 방법이 포함될 수 있다.

실제로 해킹 기법을 분류할 때, 하나의 해킹 기법은 여러 해킹 분류에 포함되어 질 수 있다. 예를 들어, 분산 서비스 거부 공격의 경우에는 프로토콜 상의 문제점을 이용하여 공격을 수행하게 되는 것이 대부분인데, 이 경우 사용하는 취약점의 종류에 따른 분류와 공격의 목적에 따른 분류에 포함될 수 있다. 또한 정보 수집에 이용되는 Banner Grabbing의 경우에는 시스템 설정과 관련된 취약점을 이용하여 정보 수집을 하게 되므로 2가지 분야에 포함되어 질 수 있다. 이러한 경우, 우선 순위에 따라 해킹 기법을 분류하도록 한다.

현재 대부분의 해킹 기법들은 해킹 대상 시스템의 특정 권한(루트 혹은 특정 사용자 권한)을 얻는 데 사용되어지는 기법들이다. 따라서 많은 해킹 기법들이 특정 권한 획득 분류에 포함되어 지게 되는데, 이런 경우 그 분류의 효율성이 매우 떨어지게 되므로 기준 1에서 특정 권한 획득으로 분류되는 해킹 기법에 대해서는 기준 2를 적용하여 다시 재 분류하도록 한다. 또한 프로토콜의 취약점을 이용한 정보수집, 예를 들어 패킷 훔쳐보기(packet sniffing) 등은 정보 수집의 목적보다는 프로토콜 취약점을 이용한 해킹에 더 큰 비중이 있다고 판단하여 프로토콜 취약점을 이용한 해킹 분류에 포함시키도록 한다. 따라서, 본 문서에서는 서비스 거부 공격, 정보 수집, 시스템 및 서비스 설정 취약점, 프로그램 상의 취약점, 프로토콜 상의 취약점, 악성 코드, 기타의 총 7가지 분류를 사용하도록 한다.

이와 같이 분류하게 되면 앞서 II장에서 설명한 기존의 분류기법과 약간의 차이를 보이게 된다. 기존의 버퍼 오버플로 취약점은 다른 여러 프로그래밍 상의 오류 및 프로그램 자체의 문제점을 이용하는 해킹 기법에 포함되어 삭제되고, 사용자 도용 해킹 방법은 특정 권한을 획득하기 위한 해킹 기법으로 분류되어 사용자 도용 해킹 방법들의 특징에 따라 여러 해킹 기법으로 분산된다. 또한 사회 공학 방법은 특정 권한을 얻기 위한 해킹 기법이지만 특별한 시스템, 프로그램, 혹은 기타 프로토콜의 취약점을 이용하는 것이 아니기 때문에 기타에 포함된다

. 해킹 기법 수준 분류의 기준

해킹 기법에 수준을 부여하기 전에 먼저 해킹 기법에 대한 수준을 부여하는 것의 목적은 앞서 언급했던 내부망의 보안성 평가의 기초가 되기 위한 작업이라는 것을 다시 한번 강조한다. 따라서 해킹 기법 수준 분류는 이미 정의한 해커의 수준 분류와 호환성을 유지하여야 하므로 해킹 기법 수준 분류 역시 총 7개의 레벨로 분류하도록 하고, 다음과 같은 기준을 바탕으로 해킹 기법에 대한 수준 분류를 시도한다.

- 기준 1: 해킹 기법의 수준은 어느 레벨의 해커가 사용할 수 있는 가에 따라 결정

- 기준 2: 프로그램을 이용하여 높은 수준의 해킹 기법을 사용하는 경우는 해당 프로그램에 적용된 해킹 기법의 수준을 이용하여 수준 분류

이와 같은 기준을 사용하는 이유는 첫째, 해커의 수준 분류와 호환되도록 분류하기 위해서 이고, 둘째 비록 낮은 수준의 해커라 할지라도 높은 수준의 해커에 의해 제작된 높은 기술 수준의 해킹 기법을 사용할 수 있는데, 이런 경우 해당 해킹 기법을 낮은 수준의 해킹 기법으로 분류해서는 안되기 때문이다. 레벨 7의 경우, 이미 알려져 있는 해킹 기법은 레벨 6의 해커에 의해서도 쉽게 사용되어질 수 있으므로, 현재 알려져 있는 레벨 7에 포함되는 해킹 기법은 없다고 판단했다.

해킹 프로그램을 이용하여 해킹하는 경우에 대해서는 악성코드 분류에서 유명한 몇몇 해킹 프로그램들에 대해 프로그램 자체의 수준 분류를 한다. 해킹 프로그램을 사용할 수 있는 해커의 수준과 관련된 보다 자세한 내용은 생략한다.

2. 해킹 기법 및 수준 분류

. 시스템 및 서비스 설정 취약점

이 분류에는 시스템 및 시스템에서 제공하는 각종 서비스의 설정과 관련된 취약점을 이용한 해킹 기법이 포함된다. 시스템 및 서비스 설정 문제를 이용한 해킹은 그 수준이 그리 높지 않은 경우가 대부분이다. 이는 일반적인 시스템 보안 취약점 분석도구를 이용하여 발견할 수 있고, 해킹을 위해 특별한 해킹 수행 코드가 필요 없는 경우가 대부분이기 때문이다.

본 분류에서는 레벨 3에는 파일 시스템의 쓰기 권한 취약점을 이용하는 경우와, suid 프로그램 관리상의 문제를 이용하는 경우, 환경 변수를 이용하는 경우가 포함된다. 이는 시스템 명령어들을 사용할 수 있고, 이를 이용하여 시스템 설정들을 확인할 수 있는 경우 해킹에 쉽게 적용시킬 수 있는 방법들이다. 레벨 4에는 r-series 프로그램의 설정 문제, ftp, nfs/nis, dns, sendmail, http 서버 설정 문제, X윈도 설정 및 인증 문제, 기타 데몬의 권한 설정 및 쉘 수행 가능 여부를 포함시켰다. r-series 프로그램이라는 것은 rlogin 과 같이 알파벳 r로 시작하는 각종 프로그램들을 의미한다. 이는 특별한 인증과정 없이 다른 시스템에 접속할 수 있기 때문에 잘못된 설정으로 인해 간단히 해킹당할 수 있다. 패스워드 암호방식을 이해하여 간단한 프로그램을 작성할 수 있어야 패스워드 크래킹이 가능하므로 패스워드 크래킹 역시 레벨4에 포함시킨다. 패스워드 크래킹은 패스워드 설정 시 취약한 패스워드를 사용하는 경우에 발생할 수 있기 때문에 본 분류에 포함시켰다. 그 외에 각종 서비스들에 대한 설정 문제를 이용한 해킹은 해당 서비스에 대한 충분한 지식이 필요하기 때문에 레벨 4에 포함시켰다.

. 프로그램 상의 취약점

프로그램 상의 취약점에는 프로그래밍 상의 보안 오류와 프로그램 동작 상의 보안 오류로 인하여 발생하는 취약점이 있을 수 있다. 후자의 경우에는 프로그램 단독으로 문제가 일어나는 경우도 있지만 여러 프로그램이 동시에 수행될 경우에 문제가 발생하는 경우도 있다. 프로그램 동작 상의 오류로 인한 문제는 특정 프로그램에 대한 문제로 권고문의 형태로 알려지고 패치가 가능하게 된다.

프로그램 오류를 이용한 기법은 해킹의 핵심이라고 할 수 있는데, 본 분류에는 레벨 3에 CGI/JAVA 스크립트 취약점, ASP, PHP 스크립트 취약점을 포함시켰다. 각종 스크립트 언어의 취약점은 기본적으로 각종 소스 파일들을 읽을 수 있는 능력이 있어야 하기 때문이다. 일반적으로 각종 스크립트의 취약점들은 스크립트 자체의 문제만으로 해킹에 이용되는 경우 보다는 다른 해킹 기법과 연관되어 이용되는 경우가 대부분이다. 레벨 4에는 버퍼 오버플로 공격, 힙 오버플로 공격, Race Condition을 포함시켰다. 이는 가장 기본적이면서도 가장 널리 사용되는 해킹 기법들이다. 이러한 해킹 기법을 익히고 이해하는 것과 실제 해킹 수행 코드를 작성할 수 있는 수준은 확연히 다르다. 여기서는 이러한 해킹 기법을 이해하고 간단한 해킹 수행 코드를 이해할 수 있는 수준으로 판단하고 레벨 4를 부여하였다. 레벨 5에는 Win32 버퍼 오버플로, 포맷 스트링 공격, OMEGA 프로젝트, Frame Pointer 오버플로 공격을 포함시켰다. 이는 기존에 알려져 있는 해킹 기법과 그 수준 차이는 크게 나지 않지만 널리 알려지지 않아 일반적인 버퍼 오버플로 해킹 기법보다 이해하기가 어려운 해킹 기법들이기 때문이다. 포맷 스트링 공격이나 Frame Pointer 오버플로 공격의 경우에는 최근 널리 활용되기도 하는 공격기법이다. 이 수준의 해커들은 위 해킹기법에 대한 이해뿐만 아니라 이를 이용한 해킹 수행 코드를 이용하여 실제 해킹을 수행할 수 있는 수준이다. 레벨 6에는 프로그램 설계 상의 보안 문제, 각종 보안 강화도구 회피, Shared Library Redirection, 종료되지 않은 인접 메모리를 이용한 오버플로 해킹 기법을 포함 시켰다. 레벨 6에 해당하는 해킹 기법은 프로그램 설계 상의 보안 문제를 활용할 수 있는 수준의 해킹 기법으로 프로그램의 흐름을 파악하고 취약점을 이해할 수 있는 능력이 있어야 한다. 또한 보안 강화도구 회피 기법은 각종 보안 강화 프로그램들의 동작방식을 이해하고 있어야 하므로 레벨 6에 포함시켰다.

. 프로토콜 취약점

프로토콜의 취약점이란 TCP/IP뿐만 아니라 각종 인터넷 프로토콜(ICMP, ARP, RARP, UDP 등등)의 설계 상의 취약점을 말한다.

프로토콜의 취약점을 이용하는 경우 해커는 각종 프로토콜 자체를 이해하고 있어야 한다. 따라서 다른 해킹 기법보다 높은 수준이 된다. 일반적으로 프로토콜 취약점을 이용한 해킹은 기 작성된 해킹 프로그램을 이용하는 경우가 대부분이다.

본 분류에서 레벨 4에는 Packet Sniffing, Connection Reset(ICMP)을 포함 시켰는데, 이 해킹 기법은 단순한 네트워크 프로토콜 상의 취약점을 이용하는 것으로 특별한 능력이 필요한 것은 아니기 때문이다. 즉, 네트워크 상에서 다른 호스트로 전송되는 패킷을 수집하여 확인하거나 전송되는 패킷에 대해 reset 패킷을 전송하는 것 만으로 수행 가능한 해킹 기법이기 때문이다. 레벨 5에는 IP Spoofing 을 포함 시켰는데, IP Spoofing은 전송되는 패킷의 헤더 부분의 IP 주소만을 변경시키는 것이 아니라 통신하고자 하는 대상 시스템의 SYN 번호를 guessing하는 것이 필요하기 때문이다. 레벨 6에는 Session Hijacking, Packet Redirection(ICMP), Routing Table 변경, ARP를 이용한 MAC Address 조작, Port Redirection을 포함시켰다. 이는 각종 프로토콜에 대한 구조적인 문제를 완벽히 이해해야 하고 상당한 수준의 네트워크 프로그래밍이 가능해야 하기 때문이다.

. 정보 수집

정보 수집이라는 것은 취약점 분석 도구 혹은 시스템 명령어 등을 이용하여 해킹하고자 하는 시스템에 대한 정보를 수집하는 행위를 말한다. 최근 보고되는 대부분의 해킹 시도가 정보 수집과 관련된 것이다(<표 2> 참조)[5].


일반적으로 정보 수집에 활용되는 도구로는 각종 취약점 전체를 확인해 주는 취약점 분석 도구뿐만 아니라 단순히 특정 취약점이나 포트만을 검색하는 도구들도 존재한다. 최근에 가장 많이 사용되는 프로그램으로는 nmap과 nessus등이 있다. 최근에는 취약점 점검 방법의 다양화로 인해 IDS와 같은 보안 강화도구 조차 취약점 점검을 당하고 있다는 것을 탐지하지 못하는 경우가 발생하기도 한다.

정보 수집이라는 것은 시스템에 침투하고 시스템 내부에서 일정 권한을 얻어내는 일반적인 해킹 기법은 아니다. 그러나 최근에는 시스템의 취약점을 수집하는 정보수집 자체도 해킹의 일부로 판단하고 해킹으로 구분하고 있다. 낮은 수준의 해커라도 다양한 보안 스캐너를 인터넷 상에서 쉽게 얻어 사용할 수 있다. 물론, 일반적으로 해킹을 하려하는 높은 수준의 해커들 역시 정보 수집을 위해 기 제작된 보안 스캐너를 그대로 사용하는 경우가 많은데, 이는 빠르고 정확하며 손쉽게 사용할 수 있기 때문이다. 특히 nessus나 nmap의 경우에는 decoy scan, stealth scan등을 구현하여 사용할 수 있게 함으로써 비록 낮은 수준의 해커라 하더라도 높은 수준의 정보 수집 기술을 사용할 수 있는 상황이다.

정보 수집과 관련된 해킹 기법에 대해 단순 포트 스캔, 간단한 시스템 명령을 이용한 정보수집은 레벨 2에 포함시켰다. 단순 포트 스캔이라는 것은 해당 포트로 접근을 시도하여 포트가 열려있는가를 확인하는 작업으로 이는 정상적인 행위로 받아들여지게 되므로 IDS등에 로그가 남지 않게 된다. 물론 이러한 방법은 시스템 자체의 로그에는 기록되게 된다. 이 기법은 간단한 시스템 명령어인 ping, traceroute 등의 명령을 이용하여 정보를 수집하게 된다. 레벨 3에는 복잡한 시스템 명령을 이용한 정보수집, 각종 서비스에서 제공하는 명령을 통한 정보 수집, Banner Grabbing을 포함시켰다. 시스템 명령을 자세히 알고 있는 경우에는 각종 보안 스캐너를 이용하지 않더라도 포트 스캔이나 취약점을 확인할 수 있다. 이런 경우에 활용되는 명령으로는 rpcinfo, showmount 등이 있다. 레벨 4에는 Finger Printing, SNMP를 이용한 정보 수집을 포함 시켰는데, 이 경우는 telnet, ftp, http 등 각종 서비스에서 제공하는 각종 메시지를 확인함으로써 정보를 확인하는 경우와, SNMP를 이용하여 정보를 얻어내는 경우이다. 특히 SNMP를 이용하는 경우에는 시스템 설정에 따라 해당 시스템에서 현재 수행되고 있는 모든 process들에 대한 정보도 얻을 수 있다. 레벨 6의 경우에는 Combined Scan/Distributed Scan/Stealth Scan/Decoy Scan, TCP/IP 스택을 이용한 스캔을 포함시켰다. 최근 발표되고 있는 각종 IDS들이 해당 네트워크에 대한 스캔 공격을 탐지하고 있다. 그러나 레벨 6에 포함되어 있는 기법을 사용하는 경우 효과적으로 탐지하지 못하게 된다.

. 서비스 거부 공격

최근 들어 가장 큰 문제가 되고 있는 해킹 기법 중의 하나가 서비스 거부 공격이다. 특히 분산 서비스 거부 공격의 경우에는 그 피해 정도가 매우 크기 때문에, 많은 보안 관련 업체들이 관심을 가지고 해결하려는 부분이다. 서비스 거부 공격이란 간단히 말해서 시스템이 정상적으로 동작하지 않도록 만드는 공격 기법으로 시스템의 관리자 권한을 얻기 위해 시도되는 일반적인 해킹과는 차이가 있다.

특히 문제가 되는 것은 네트워크를 통하여 원격지에서 시스템이 정상적으로 동작하지 않도록 공격하는 경우인데, 이런 경우에는 공격 대상 시스템뿐만 아니라 공격 대상과 같은 네트워크 상에 있는 다른 시스템에도 피해를 줄 수 있기 때문에 더 큰 문제가 되고 있다.

본 분류의 레벨 3에는 간단한 프로그래밍으로 수행할 수 있는 로컬 시스템 상에서의 서비스 거부 공격을 포함시켰는데, 이는 비교적 쉬운 공격 방법으로, 디스크 채우기, 메모리 고갈 시키기, 프로세스 무한 생성 등이 있다. 레벨 4에는 SYN Flooding/Ping Flooding, Mail Storm, Java Applet Attack/UDP Storm를 포함시켰다. 이 레벨은 TCP/IP, ICMP 등의 각종 프로토콜을 이해하고 있는 경우에만 사용할 수 있는 방법이지만, 그 난이도가 그리 높지 않은 방법이다. 레벨 5의 경우에는 Tear Drop, 일반 DDoS, Smurfing을 포함시켰는데, Tear Drop의 경우는 IP Fragmentation 기법에 대한 이해가 필요하고, 일반 DDoS의 경우 에이전트 형태의 백도어를 설치하는 것과 같은 수준의 기술이 필요하기 때문이다. 레벨 6에는 암호화된 DDoS를 포함시켰는데, 실제로 암호화된 DDoS는 거의 모든 해킹 기법이 포함되어 있다고 볼 수 있기 때문이다.

. 악성 코드

악성 코드에는 바이러스, 트로이잔, 백도어 등이 포함되고, 여러 해킹 기법이 포함되어 스스로 시스템을 해킹하고 자기복제를 실시하는 웜 역시 악성 코드에 포함된다. 본 문서에서는 주로 백도어와 트로이잔에 대해서 설명하도록 한다. 웜의 경우에는 웜 자체의 기술 수준이 매우 높기 때문에 단순히 높은 수준으로 분류하도록 하기 위함이며, 바이러스에 대해서는 실제로 해킹과는 거리가 있기 때문이다. 본 분류에서 바이러스와 관련된 내용에 대해서는 안철수 바이러스 연구소에서 분류한 바이러스 분류안을 이용하여 수준을 분류한다[6,7].

최근에는 트로이잔이나 백도어에 매우 다양화되고 고도의 기술이 포함되어지고 있다. 뿐만 아니라 일반 초보 해커들 조차 쉽게 사용할 수 있을 만큼 간단하고 편리한 사용자 인터페이스를 갖춘 프로그램들이 발표되고 있다.

레벨 3의 경우에는 인터넷 서비스를 이용한 루트 권한의 shell bind, 파일 및 부트 바이러스를 포함시켰다. 인터넷 서비스를 이용한 루트 권한의 shell bind의 경우에는 일단 로컬 시스템 내부에서 루트 권한을 얻은 후에 inetd.conf 파일을 조작하여 루트 권한의 shell을 bind시키는 것으로 매우 간단한 일이다. 레벨 4에는 단순한 백도어 프로그램과 암호화 바이러스를 포함시킨다. 단순 백도어 프로그램이란 각종 시스템 프로그램에서 특정 ID와 패스워드를 입력하는 경우 루트 권한의 쉘을 실행시키도록 만든 것이다. 그러나 이러한 백도어는 파일 크기와 생성 일시가 원본 파일과는 다르기 때문에 쉽게 찾아 낼 수 있는 백도어 이다. 레벨 5에는 은폐형 바이러스, 매크로 바이러스와 원본과 동일한 크기와 생성 일시를 갖는 백도어를 포함시켰다. 레벨 6에는 Raw Socket을 이용한 shell bind, 에이전트형 백도어, Reverse telnet, ssh, 커널 레벨 백도어, Stealth Backdoor, 각종 웜, 다형성 바이러스를 포함시켰다. Raw Socket을 이용하여 shell을 bind시키는 경우에는 시스템 명령(netstat 등)을 통해 시스템에 연결되어 있는 커넥션을 확인할 수 없게 된다. 커널 레벨 백도어의 경우도 기존의 백도어 확인 프로그램을 이용하여 존재여부를 확인하는 것이 매우 어려워진다. 이에 위 백도어 기술들을 레벨 6에 포함시킨다. 그리고 윈도용 각종 트로이잔 프로그램(Back Orifice, Sub7 등)을 레벨 6에 포함시킨다.

. 기타(사용자 도용)

~까지 설명된 분류에 포함되지 않지만 해커의 수준을 측정하는 데 유용한 몇가지 해킹 기법들을 이 분류에 포함시켰다. 본 분류에서는 레벨 3에 일부 로그 삭제를 포함 시켰는데, 이는 시스템에 기록되는 각종 로그 기록이 어느 위치에 저장되는지를 알지 못하는 수준이기 때문이다. 레벨 4에 간단한 암호화 알고리즘의 decryption과 모든 로그 삭제를 포함시켰는데, 로그가 기록되는 모든 파일을 삭제함으로써 로그 삭제가 이루어진 것을 시스템 관리자가 확인할 수 있게 되는 수준이기 때문이다. 레벨 5에는 사회공학적인 방법과 패스워드 추측, 레벨 6에는 다른 로그에 영향 없이 자신의 흔적 제거를 포함시켰다. 로그가 기록되는 파일 내에서 해커 자신과 관련된 로그 기록만 삭제하는 것으로 시스템 관리자는 아무런 흔적도 찾을 수 없게 된다.

출처 : [기타] 인터넷 : 최양서* 서동일** 손승원***(해커 및 해킹 기법 수준 분류)


Trackback 0 Comment 0