수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620525
  • Today | 387
  • Yesterday | 670

1 Articles, Search for '포트스캐닝'

  1. 2007/05/11 libpcap을 이용한 포트스캐닝 검사 (2)
Programming/Network Programming2007/05/11 10:20

libpcap을 이용한 포트스캐닝 검사

Port scanning을 검사해내는 간단한 프로그램을 작성해보도록 하겠다. 덤으로 DOS와 같은 고전적인 공격을 검사해내는 프로그램에 대한 아이디어도 얻을 수 있을 것이다.


1절. 소개
2절. JPSD 제작
2.1절. 프로그램에 대한 개략적인 기능명세
2.1.1절. Port Scanning 탐지및 PORT 통계
2.1.2절. DOS공격 탐지
2.2절. 구현 프로세스
3절. 예제
4절. 결론

--------------------------------------------------------------------------------

1절. 소개
이번에는 두번에 걸쳐 다루었던 libpcap기술을 응용해서 각 서비스 포트에 대한 네트워크 통계및 포트스캐닝을 검사하는 프로그램을 만들어 보도록 하겠다.


--------------------------------------------------------------------------------

2절. JPSD 제작
이번에 작성하고자 하는 프로그램은 JPSD라는 다소 촌스러운 이름을 가진 프로그램이다. 눈치 챘겠지만 Joinc Port Scanning Decter의 첫 글자를 따서 이름을 지었다. 다소 거부감이 느껴지더라도 그러려니 하고 넘어가주기 바란다.


--------------------------------------------------------------------------------

2.1절. 프로그램에 대한 개략적인 기능명세
2.1.1절. Port Scanning 탐지및 PORT 통계
크래킹을 하기 위해서 가장 먼저 하는 일은 목적으로 하는 서버에 대한 정보를 취득하는 작업이며, 이를 위한 가장 손쉽고 효과적인 방법은 열려있는 포트에 대한 정보를 얻는 작업이다. 이러한 포트검색을 위한 대표적인 프로그램은 namp이며 서버에 Port Scanning이 이루어졌다면 주의깊게 서버를 감시해야될 필요가 있다.

JPSD의 주요 기능은 PORT통계를 내고 이를 기초로 Port Scanning이 있었는지를 확인한다.


--------------------------------------------------------------------------------

2.1.2절. DOS공격 탐지
DOS(DDOS)공격은 공격기법중에서도 매우 고전적이고 어찌보면 고리타분한 공격일 수도 있겠지만 구현이 매우 쉬운데다가 마땅히 차단할 방법이 없기 때문에 간혹 네트워크(혹은 단일 호스트)에 매우 치명적인 영향을 주기도 한다.

2003년 1월 25일 발생한 인터넷 대란이 이러한 경우다. 원인은 SQL_Hell이라는 웜바이러스 때문인데 이 바이러스는 MSSQL의 resoultion버그를 이용해서 특정포트로 무한정 패킷을 보낸다. 또한 주위의 또다른 MSSQL서버에 침투에서 이와 동일한 일을 하게 되고 결국 전체 네트워크 시스템이 맛이가게 되었다. 전체 네트워크 시스템으로 확대되기는 했지만 결국 특정 서비스에 대해서 다량의 패킷을 보내에서 호스트를 마비시키고 덤으로 네트워크 트래픽을 증가시켜서 네트워크에 문제가 발생하는 공격이란 점에서 이번 인터넷 대란은 (좀더 지능적인)DOS 공격에 의해서 일어난 것으로 분석할 수 있다.

만약 이때 라우터나 특정 호스트에 이러한 DOS공격을 탐지할 수 있는 장치가 마련되어 있었다면 국가 전체의 네트워크 시스템이 맛가는 일은 막을 수 있었을 것이다. 기본적으로 DOS공격을 완벽하게 막는건 거의 불가능하다고 할 수 있지만 탐지는 그리 어렵지 않게 가능하다.

라우터나 혹은 패킷을 검사할 수 있는 호스트에서 패킷을 검사하고 패킷에 대한 목적지 포트번호를 가져오고 이에 대해서 일정시간 간격으로 카운팅 하기만 하면 된다. 이들 카운팅 테이터는 일정한 시간단위로 저장되어서 평균값을 유지하고 최근의 카운팅 데이터와 비교하면 특정 포트로의 변화를 감지 할 수 있게 된다. 만약 특정 포트에 대해서 평균치에 비해 갑자기 많은 카운팅이 발생한다면 이를 위험신호로 판단하여 조취를 취할 수 있을 것이다.

우리가 작성할 JPSD는 비록 포트에 대한 대략적인 통계와 이들 통계에 대한 자료를 이용하여 PORT Scanning이 이루어지고 있는지 확인하는 정도이지만, 단지 포트에 대한 통계만을 가지고서도 대략적인 DOS공격에 대한 탐지도 가능할 것이다.


--------------------------------------------------------------------------------

2.2절. 구현 프로세스
아이디어를 (제대로)구현하기 위한 프로세스는 그리 간단하지가 않다.

일단 호스트에 설치된 JPSD는 자신의 IP를 목적으로 하고 있는 모든 패킷에 대해서 검사를 해야만 한다. 이는 RAW소켓을 이용해서 검사하면 된다.

패킷을 얻었다면 IP헤더를 검사해서 목적지와 포트를 검사한다음 포트에 대한 카운팅을 실시한다. 카운팅이 되었다면 카운팅 된 숫자가 일정갯수를 초과하는지 검사해야 한다. 이때 초과여부는 두가지 방법에 의해서 검사된다. 첫번째는 절대값에 의한 검사이며, 두번째는 예전에 조사되었던 카운팅의 평균값을 구하고 그 평균값과 현재의 값을 비교하는 방법으로 두가지 방법 모두 병행해서 사용한다. 이 평균값을 구하는 것 역시 그리 간단하지가 않다. 단지 평균값보다 얼마를 초과 했느냐를 구하는게 아닌 증가율을 구해야 하기 때문이다. 또한 동일한 증가율이라고 하더라도 카운팅갯수에 따라 달라져야 한다. 예를 들어 평균 카운팅 갯수가 100000개인데 가장 최근 카운팅 갯수가 200000이라면 DOS류의 공격으로 의심할 수 있을 것이다. 그러나 10개에서 20개로 늘어났을 경우 단지 2배의 증가율을 보였다고 해서 DOS류의 공격으로 의심할 수는 없을 것이다.

게다가 이러한 정보들을 파일로 저장하고 있어야 한다. 파일로 저장된 정보라면 그래프로 이들 정보를 보여줄 수도 있을 것이다. 제대로 만들려면 이래 저래 해결해야 될 문제들이 꽤 많다.

여기에서는 이런 복잡한 것들에 대해서 신경쓰지 않을 것이다. 단지 포트에 대한 카운트를 검사하고 일정시간 후에 이를 출력해서 DOS공격인지에 대한 판단은 유저에게 맡기도록 할 것이다. 사용고 5분단위로 카운팅된 정보를 클라이언트로 전달하는 정도의 기능만 포함 시키도록 하겠다.

제대로 작동하는 DOS공격 탐지 프로그램은 개인적으로 별도의 프로젝트로 진행할 생각으로 때가 되면 공개하도록 하겠다. (그 때가 언제가 될런지는 아무도 모른다 -.-);


--------------------------------------------------------------------------------

3절. 예제
다음은 예제 프로그램이다. 언제나 처럼 코드는 깔끔, 효율, 효과적..과는 거리가 먼 그냥 돌아가는 한마디로 말해서 최소한의 기능구현에만 신경을 쓰면서 작성되었다. (한마디로 귀찮아서 대충대충 작성한 -.-);

좀더 그럴듯하게 만드는건 각자의 몫으로 남겨두도록 하겠다.

예제 : jpsd.cc

               

화면 출력을 위해서 ncurses라이브러리를 사용했다 ncurses에 대한 정보는 ncurses 프로그래밍을 참고하기 바란다. 포트 통계를 위해서 사용한 pcap라이브러리에 대한 설명은 libpcap를 이용한 프로그래밍을 참고하면 된다.

ncurses와 libpcap에 대한 이해만 가지고 있다면 주석만으로도 충분히 이해가능한 코드이다. 컴파일 방법은 다음과 같다.

# g++ -o jpsd jpsd.cc -lpthread -lpcap -lpthread
               

다음의 필자의 사이트에서 실제로 jpsd를 실행시킨 결과의 화면이다.

사용자 삽입 이미지
그림 1. jpsd의 실행화면


정말로 port scan을 검사해 낼 수 있는지의 확인을 원한다면 nmap등을 통해서 테스트 해보기 바란다.


--------------------------------------------------------------------------------

4절. 결론
이상 libpcap을 이용해서 포트통계와 포트 스캐닝을 검사해내는 프로그램을 만들어 보았다. 위의 프로그램은 매우 아이디얼한 프로그램으로 실제 그럴듯하게 작동하기 위해서는 많은 기능들이 추가되어야만 할것이다.

우선은 결과값을 네트워크를 통해서 원격지에 전송할 수 있도록 서버/클라이언트 모델로 확장시켜야 하며, 정확한 통계를 위해서 통계결과값을 파일이나 DB로 남기는 기능을 추가시켜야 한다. 또한 문제가 발생했을 경우 문제될만한 IP에 대한 목록을 출력하는 기능도 포함되어야 한다.

보여주는 것 역시 투박한 터미널 화면 보다는 GUI화면을 통해서 쉽게 결과를 확인가능 하도록 만들어 주어야 할것이다.

위에서 언급했듯이 필자는 좀더 그럴듯하게 작동하는 프로그램을 만드는 프로젝트를 진행할 계획이며, 어느정도 완성되었을 경우 공개할 예정이다.



출처  : http://joinc.co.kr/modules.php?name=new ··· 3Dnested
"Network Programming" 카테고리의 다른 글
  • SNMP개요및 설치,운용 (0)2007/05/11
  • SNMP응용 프로그램 제작 (0)2007/05/11
  • libpcap을 이용한 포트스캐닝 검사 (2)2007/05/11
  • 네트워크관련 정보 얻기 (0)2007/05/11
  • Socket에서 완벽한 Receive처리 (0)2007/03/02
2007/05/11 10:20 2007/05/11 10:20
Posted by webdizen
Tags libpcap, 포트스캐닝
No Trackback 2 Comments

Trackback URL : http://www.webdizen.net/blog/trackback/2926

Leave your greetings.

  1. 비밀방문자

    관리자만 볼 수 있는 댓글입니다.

    2008/11/06 16:30 [ Permalink : Modify/Delete : Reply ]
    • webdizen

      안녕하세요. 정진님.
      제가 도와드리고 싶지만 세그멘테이션 오류가 발생하는 경우가 한두가만 있는 것이 아니라서 파악하기 어렵네요.
      컴파일 환경만 알고서는 오류의 원인을 파악하기 어렵습니다.

      2008/11/10 07:08 [ Permalink : Modify/Delete ]
[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 산림환경과학대학
  • C++
  • 화면 보호기 제어
  • 콩코드
  • 아이팟
  • WinDbg
  • 부자
  • 강원대학교 후문
  • 기본 명령어
  • Checker
  • 콜 레퍼런스
  • DSS
  • 감옥
  • JPG
  • VisualUnitTest++
  • 장르
  • 평점
  • 전처리
  • BDM
  • 텍스트큐브

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 10:36
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.