SYN Flooding 공격은 TCP 의 취약점을 이용한 공격의 형태이므로 먼저 TCP 에 대해
알아야 한다.   TCP 는 Transmition Control Protocol 의 약자로 UDP와는 달리 신뢰성 있는 연결을 담당한다.  따라서 서버와 클라이언트간에 본격적인 통신이 이루어지기 전에는
"3 Way handshaking" 이라는 정해진 규칙이 사전에 선행되어야 한다.


1단계.  A 클라이언트는 B 서버에 접속을 요청하는 SYN 패킷을 보낸다.
2단계.  B 서버는 요청을 받고 A 클라이언트에게 요청을 수락한다는  SYN 패킷과
          ACK 패킷을 발송한다.
3단계.  A 클라이언트는 B 서버에게 ACK 를 보내고 이후로부터 연결이 이루어지고
          본격적으로 데이터가 교환된다.

이것이 TCP 의 기본적인 Flow 이다.
그런데, 이 그림에서 악의적인 공격자가 1단계만 요청(SYN)하고 B서버로부터 응답을 받은 후(SYN+ACK) 3단계, 즉 클라이언트에게 ACK를 보내지 않는다면 어떻게 될까?
SYN+ACK 패킷을 받은 B 호스트는 A 로부터 응답이 올 것을 기대하고 반쯤 열린
이른바 “Half Open” 상태가 되어 대기 상태에 머무른 후 일정 시간(75초) 후에 다음 요청이 오지 않으면 해당 연결을 초기화 하게 되는데, 초기화하기 전까지 이 연결은 메모리 공간인 백로그큐(Backlog  Queue)에 계속 쌓이게 된다.

그런데, 이 위조된 연결 시도를 초기화하기 전에 위조된 새로운 요구가 계속 들어오게 된다면 또한 위조된 새로운 요구가 연결을 초기화하는 속도보다 더 빨리 이루어진다면 어떻게  될까?  이러한 경우  SYN 패킷이 어느 정도 백로그큐에 저장이 되다 결국 꽉차게 되어 더 이상의 연결을 받아들일 수 없는 상태, 즉 서비스 거부 상태로 들어가게 되는 것이다.  이처럼 백로그큐가 가득 찼을 경우에 공격을 당한 해당 포트로만 접속이 이루어지지 않을 뿐 다른 포트에는 영향을 주지 않고, 또한 서버에 별다른 부하도 유발하지 않으므로 관리자가 잘 모르는 경우가 많다.  또한 다른 DoS 공격과는 달리 많은 트래픽을 유발하는 공격이 아니므로 쉽게 파악이 되지 않는 공격 형태이다.

그렇다면 이 공격을 당하고 있는지 여부는 어떻게 알 수 있을까?
시스템에 로긴후 "netstat" 이라는 명령으로 확인 가능하다.


“그럼, 어떻게 파악하는가?”


netstat 은 시스템의 각종 네트워크 정보를 알려주는 명령어로 네트워크 연결, 라우팅 현황, 인터페이스 통계등의 정보를 확인할 수 있게 해 준다.  여기서 잠깐 netstat 으로 나오는 연결 상태에 대해 알아보자.
netstat -na 로 확인해 보면 Local Address,  Foreign Address,  State 등의 정보가 출력되는데,
이 중 State 부분에 보이는 메시지를 주목하면 된다.

### 참고 : State 부분에 가능한 연결상태 ################################################
LISTEN   : 서버의 데몬이 떠서 접속 요청을 기다리는 상태
SYS-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태
SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게
                          응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태
ESTABLISHED : 3 Way-Handshaking 이 완료된 후 서로 연결된 상태
FIN-WAIT1 ,  CLOSE-WAIT , FIN-WAIT2 :
서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태
CLOSING  : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해
                   당분간 소켓을 열어놓은 상태
CLOSED : 완전히 종료
################################################################################

Posted by coolplease
태그 TCP
시스템 정보

n         설치된 OS
▷ AIX, Solaris, HP-UX
# uname -s

n         설치된 OS 버전
▷ AIX
# oslevel
▷ Solaris, HP-UX
# uname -r
 
n         모델명
▷ AIX
# lsattr -E -l sys0 | awk '/modelname/ {print $2}'
▷ Solaris
# uname -i
▷ HP-UX
# uname -m
 
CPU 관련 정보
 
n         CPU 갯수
▷ AIX
# lsdev -Cc processor | wc -l
▷ Solaris
# psrinfo | wc -l
▷ HP-UX
# ioscan -fknC processor | grep processor | wc -l
 
n         CPU 속도
▷ AIX
# value=`lscfg -vp | grep "PS=" | head -1 | awk -F"PS=" '{print $2}' | awk -F"," '{print $1}'`
# value="0x$value"
# value=`printf "%dn" $value`
# expr $value / 1000000
▷ Solaris
# psrinfo -v `psrinfo | awk '{print $1}' | head -1` | awk '/operates/ {print $6}'
▷ HP-UX
# echo itick_per_user/D | adb -k /stand/vmunix /dev/mem | tail -1 | awk '{print $2}'
 
메모리 관련 정보
 
n         메모리 갯수
▷ AIX
# lsdev -C | grep -i memory | wc -l
 
n         메모리 용량
▷ AIX
# lsattr -E -l mem0 -a size | awk '{print $2}'
▷ Solaris
# prtconf | awk '/Memory size/ {print $3}'
▷ HP-UX
# value=`dmesg | grep Physical | grep Kbytes | awk '{print $2}'`
# expr $value / 1024
 
디스크 관련 정보
 
n         디스크 갯수
▷ AIX
# lsdev -Cc disk | wc -l
▷ Solaris
# format <<-! > /tmp/format.dat
 > 0
 > q
 > !
# cat /tmp/format.dat | grep cyl | wc -l
▷ HP-UX
# ioscan -fknC disk | grep disk | grep -v "CD-ROM" | grep -v "DVD-ROM" | wc -l
 
n         디스크 용량
▷ AIX
# lspv hdisk0 | grep "TOTAL PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
▷ Solaris
# bps=`prtvtoc /dev/dsk/c0t0d0s0 | grep "bytes/sector" | awk '{print $2}'`
# sectors=`prtvtoc /dev/dsk/c0t0d0s0 | grep -v "*" | grep "^ *2" | awk '{print $5}'`
# bc -l << !
 > scale=0
 > $sectors * $bps / 1024 / 1024
 > !
▷ HP-UX
# hwpath=`ioscan -fknC disk | grep disk | grep -v "CD-ROM" | grep -v "DVD-ROM" | head -1`
# name=`ioscan -fkn -H $hwpath | grep "/rdsk/" | awk '{print $2}'`
# value=`diskinfo $name | awk '/size:/ {print $2}'`
# expr $value / 1024


** 출처 : http://icarus096.egloos.com/
Posted by coolplease

1) HA (High Availability)

  • 번역 : 고가용성, 고가용도
  • HA가 가장 큰 범위임. HA의 방법으로 사용하는게 클러스터링, 이중화, RAID 등이 있음.
  • 가용성은 시스템 고장 발생시 빠른 시간내에 치료하여 다시 정상적으로 서비스할 수 있는 상태를 분석하기 위해서 사용되는 척도입니다...따라서 고가용성이란 결함 또는 고장 발생 빈도를 줄이면서 결함 발생시 빠르게 수리하여 일년중 대략 30분 가량만 서비스 불능 상태이고 나머진 정상적인 서비스가 가능하다는 것을 의미합니다...99.999%
  • HA란 바람직한 정도로 긴 시간동안 지속적으로 운영이 가능한 시스템이나 컴포넌트를 가리킨다. 가용성이란 흔히 "100% 가용" 등과 같이 상대적으로 측정되거나 또는 "절대 고장나지 않음" 등과 같이 표현될 수 있다. 널리 쓰이고 있지만 달성하기 결코 쉽지 않은 시스템 및 제품에 대한 가용성 표준에 흔히 "파이브 나인" (five 9) 이라고 부르는 99.999%의 가용성을 들 수 있다.
  • 하나의 컴퓨터 시스템이나 네트웍은 전체의 운영을 위해 모두가 사용 가능한 상태로 있어야만 하는 가능한 수많은 부품으로 구성되었기 때문에, 고 가용성에 대한 많은 계획들이 백업이나 장애극복 처리 및 데이터 저장 및 액세스 등에 집중되어 있다. 저장장치의 경우에는 RAID가 그중 하나의 접근 방법이며, 보다 최근에는 SAN과 같은 방법을 이용한다.
  • 일부 가용성 전문가들은, 만약 어떤 시스템에 고 가용성이 요구된다면 그 시스템의 모든 부품들이 잘 설계되고 실제로 사용되기 전에 완전하게 시험되어야 한다고 강조한다. 예를 들어, 완전히 시험되지 않은 새로운 응용프로그램은 실제 사용 현장에서 자주 문제를 일으키는 주 요인이 될 가능성이 매우 높다.
  • 절대 장애가 발생하지 않는것이 목적임.



2) 클러스터링 (Clustering)

  • PC 또는 서버를 하나의 시스템처럼 관리 및 운영하기 위해 사용하는 기술입니다...클러스터 시스템의 응용분야는 고가용성 클러스터 시스템, 고성능 클러스터 시스템, 웹서버 클러스터 시스템이 있습니다...먼저 고가용성 클러스터 시스템이란 PC 또는 서버를 연결하는 목적이 가용성을 높여 고가용성을 제공하기 위해 구성된 시스템을 말합니다...나머지 고성능이나 웹서버 또한 비슷하게 이해하시면 됩니다...
  • 클러스터라는 말 자체가 여러개가 모여서 하나를 구성하는 걸 말합니다.
    네트워크 부하로 인한 장애를 대비하기 위한 방법입니다.
    장애대책이기 때문에.. 고가용성을 위한 거죠. 결국 HA 중의 하나라는 얘기가 됩니다.
    예를 들면.. 사용자 폭주에 대비해서, 웹서버를 10대로 운영한다. 이런게 클러스터링입니다. 클러스터링은 하드웨어 / 소프트웨어 모두 가능합니다. 서버장비 한대에.. 포트를 달리해서, 아파치를 여러개 띄운다. 이러면 S/W 클러스터가 되겠죠.




3) 이중화 (Duplex 또는 Duplicate)

  • 위에서 가용성을 높인다는 표현을 많이 사용하였는데, 그럼 어떻게 하면 될까요? 이를 위한 가장 기본적인 방법이 이중화입니다...용어에서 힌트를 얻을 수 있는 것처럼 서버를 한대만 두는 것이 아니라 여분서버 하나를 더 비치하는 것입니다...즉 서버 2대를 사용하는 것이죠...이때 관리정책에 따라 Hot과 Cold 두가지 방식이 있습니다...Hot은 서버 2대를 동시에 동작을 시켜 한대의 서버가 고장이 발생하였을 경우 다른 한대의 서버가 바로 고장난 서버에서 제공하던 서비스를 인계받아 서비스를 하게 하는 것입니다...Cold는 우선 1대만 서비스를 하게 했다가 고장이 발생하면 다른 서버를 동작시키고 그 후 고장난 서버의 서비스를 인계받아 서비스를 제공하는 것입니다...
  •  고장에 대비하기 위한 방법입니다. 마찬가지 여러가지가 가능합니다.
  •  보통 액티브(Active)/스탠바이(Stand by)라고 얘기합니다. 하나는 돌고, 하나는 대기.. 
  • 예를 들어 서버이중화는.. www.domain.com 이라는 웹서버를 두대를 설치합니다. 평소에는 서버1이 작동합니다. 만일 서버1이 문제가 생기면 서버2가 즉시 동작합니다. 사용자 입장에서는 장애가 발생했는지 모릅니다.
  • 네트워크 이중화도 있습니다.
    100.100.100.x 라는 네트워크를 사용하는데 장애를 대비해서..
    100.100.200.x 라는 네트워크를 백업망으로 준비해 둔다. 이러면 네트워크 이중화입니다.
  • 랜 이중화도 있구요.
    서버한대에 랜카드를 두개를 꽂아둡니다. 하나가 고장이 나면.. 다른 랜카드가 바로 작동합니다.


 

4) RAID (Redundant Array of Inexpensive Disks)

  • 어떤 사람은 Inexpensive 대신에 Independent를 사용하는 사람도 있습니다.
  • RAID는 하드디스크 다시 말해서 저장장치를 중복하는 것입니다...목적은 위에 서버를 이중화하는 것과 비슷합니다...저장장치의 고장으로 인한 가용도 감소를 여러 저장장치를 중복하여 가용도를 높이기 위한 것이죠...이 또한 메커니즘에 따라 RAID0~RIAD5 방식이 있습니다...
  •  마찬가지 고장에 대비하기 위한 방법입니다.
  •  이중화는 좀 광범위하게 사용할 수 있는 용어입니다. 하지만.. RAID는 하드디스크에만 사용하는 용어입니다. 이중화하고 비슷한게.. RAID 1(미러링)입니다. 물리적으로 두개하드를 논리적으로 한개하드로 잡아줍니다.  하나에 기록하면, 똑같은 사본이 다른 하드에 저장됩니다. RAID에는 PARITY 체크라는 다른 방법도 사용합니다. 그래서.. 단순하게 사본만 저장하는 RAID 1외에도.. RAID 3, RAID 5 등 여러가지 방법이 있습니다.




자세한 구현 방법이나 원리는 http://www.linux-ha.org/ 을 참고하세요...
리눅스 기반으로 클러스터를 만들어 HA를 제공하기 위한 프로젝트로써 소스가 모두 공개이고 관련 기술 및 개념에 대한 document도 비교적 정리가 잘되어 있습니다...@

Posted by coolplease
<< PREV : [1] : [2] : [3] : [4] : [5] : ... [6] : NEXT >>

BLOG main image
by coolplease

공지사항

카테고리

분류 전체보기 (18)
My movies (4)
Pics (5)
Golf (4)
Tips (1)
Monologue (0)
참고사항 (4)

최근에 받은 트랙백

Total : 4,571
Today : 1 Yesterday : 4