2015년 4월 15일 수요일

DoS(Denial of Service) 공격

ㅇ ㅂㅇ

* DoS(Denial of Service, 서비스 거부) <- :="" br="">   - 시스템 자원 고갈 공격 : CPU, 메모리, 디스크의 사용에 과다한 부하 가증
  - 네트워크 자원 고갈 공격 : 쓰레기 데이터로 네트워크의 대역폭 고갈

 * DDoS(Distributed Denial of Service) <- 17="" 1999="" 8="" br="" cnn="" ddos="" nbc="" yahoo="">
 * Ping of Death
 > ping을 이용하여 ICMP 패킷을 정상 크기보다 아주 크게 만드는 것
 > 크게 만들어진 패킷은 네트워크를 통해 라우팅(Routing)되어 공격 네트워크에 도달하는 동안 아주 작은 조각(fragment)으로 쪼개지고 공격 대상은 조각화된 패킷을 모두 처리해야 하므로 정상적인 ping보다 부하가 훨씬 많이 걸림 => 패킷이 쪼개지면 헤더가 추가되기 때문에 처리하는 쪽은 부하가 생긴다.
 ( fping/hping으로 공격 가능 )

 * 라우팅과 패킷의 분할
 > 라우팅은 출발지 주소와 목적지 주소를 확인하고 최적의 거리를 찾아 패킷을 전달 해 주는 것
 > 전달 과정에서 패킷은 항상 특성이 똑같은 네트워크를 지나지는 않음. 프레임 릴레이 ATM, 토큰 링, 이더넷 등 다양한 네트워크를 지나 목적지에 도달
 > 네트워크마다 최대 전송 가능 패킷 길이가 달라 최대 전송 가능 패킷 길이가 더 작은 네트워크를 지날 때 데이터는 작게 분할됨
 > 한 번 분할된 패킷은 더 긴 패킷 길이를 허용하는 네트워크를 지나도 다시 커지지 않음

 -- ping of death

* hping3을 이용한 Ping of Death 공격
 > rpmforge에서 제공
* yum을 이용한 hping 설치



* Ping of Death 실행
 # hping --icmp --rand-source IP -d [패킷크기] --flood
  --icmp : 전송 패킷의 종류
  IP : 공격 대상
  -d [숫자] : 전송 패킷의 길이 (최대 65,535)
  --flood : 최대 속도로 패킷 생성
  --rand-source : 소스 IP를 랜덤하게 결정한다.
  -c : 패킷 갯수
 ex)
  # hping --icmp -c 1 192.168.10.125 -d 1200
  # hping --icmp -c 1 192.168.10.125 -d 65000

 > 패킷의 크기에 따라 분할된 패킷의 개수와 identification을 살펴본다.
 > 가능한 소스 IP를 랜덤으로 수행하지 않는다.
 > --flood는 패킷을 캡처 할 때는 하지 않는 것이 좋다.






2015년 4월 14일 화요일

DDOS(Distributed Denial of Service) 공격

ㅇ ㅂㅇ

DDOS 공격

DDos 공격의 구조
 > 공격자(Attacker) : 공격을 주도하는 해커의 컴퓨터다.
 > 마스터(Master) : 공격자에게서 직접 명령을 받는 시스템으로, 여러대의 에이전트(Agent)를 관리한다.
 > 핸들러(Handler) 프로그램 : 마스터 시스템의 역할을 수행하는 프로그램이다.
 > 에이전트(Agent) : 공격 대상에 직접 공격을 가하는 시스템이다.
 > 데몬(Daemon) 프로그램 : 에이전트 시스템 역할을 수행하는 프로그램이다.

< 왼쪽부터 공격자 / 마스터 / 에이전트 / 목표물 순서 >

공격자가 마스터와 에이전트를 획득하여 실제적으로 DDoS 공격을 하는 순서
 1). 많은 사용자가 사용하며, 대역폭이 넓다. 관리자가 모든 시스템을 세세하게 관리 할 수 없는 곳의 계정을 획득하여 스니핑이나 버퍼 오버플로우 등의 공격으로 설치 권한이나 루트 권한을 획득한다.
 2). 잠재적인 공격으 대상을 피하기 위해 네트워크 블록별로 스캐닝을 실시한다. 그리고 원격지에서 버퍼 오버플로우를 일으킬 수 있는 취약한 서비스를 제공하는 서버를 파악한다.
 3). 취약한 시스템 목록을 확인 후 실제 공격을 위한 프로그램을 작성한다.
 4). 권한을 획득한 시스템에 침투하여 프로그램을 컴파일하여 설치한다.
 5). 설치한 프로그램으로 공격을 시작한다.

다양한 DDoS Tool
TFN(TribedFlood Network)
 > 1999년 8월 사고를 일으켰던 Trinoo의 약간 발전된 형태로 믹스터(Mixter)라는 사람이 개발
 > TeletubbyFlood Network라고 부르기도 함
 > TFN도 Trinoo처럼 statd, cmsd, ttab 데몬의 취약점을 공격
 > 클라이언트를 구동하면 패스워드를 사용하지 않고, 클라이언트와 데몬 간에는 ICMP Echo Request 패킷을 사용
 > 클라이언트의 각 명령은 ICMP Echo Request 패킷에 16비트 이진수로 데몬에 전송
 > TFN은 공격자 시스템과 마스터 시스템 간 연결이 암호문이 아닌 평문으로 전달되는 약점이 있음, 이는 데이터가 다른 해커나 관리자에게 스니핑되거나 세션 하이재킹 될 수 있으며, 공격자를 노출시키는 등 치명적일 수 있음.

TFN 2K
 > TFN의 발전된 형태로, 역시 믹스터가 개발
 > 특징
  - 통신에 특정 포트를 사용하지 않고 암호화되어 있으며, 프로그램을 통해 UDP, TCP, ICMP를 복합적으로 사용하며 포트도 임의로 결정한다.
  - TCP, SYN Flooding, UDP Flooding, ICMP Flooding, Smurf 공격을 쓰고 있다.
  - 모든 명령은 CAST-256 알고리즘으로 암호화된다.
  - 지정된 TCP 포트에 백도어를 실행할 수 있다.
  - 데몬은 설치 시 자신의 프로세스 이름을 변경함으로써 프로세스 모니터링을 회피한다.
  - UDP 패킷의 헤더가 실제 UDP 패킷보다 3바이트 만큼 더 크다.
  - TCP 패킷의 헤더의 길이는 항상 0이다. 정상 패킷이라면 절대로 0일 수 없다.

Stacheldraht
 > 독일어로 ‘철조망’이라는 뜻
 > 1999년 10월에 처음 출현 한 것으로 알려져 있으며, TFN을 발전시킨 형태
 > Stacheldraht(슈타첼드라트) 역시 TFN 2K 처럼 공격자와 마스터, 에이전트, 데몬과의 통신에 암호화 기능이 추가됨
 > 공격자가 마스터에 접속하면 마스터는 현재 접속을 시도한 이가 올바른 공격자인지 확인하기 위해 패스워드 입력을 요구
 > 입력된 패스워드는 최초 설치되기 전에 'Authentication'의 'Passphrase'를 사용하여 암호화된 상태로 공격자에게서 핸들러로 보내짐

Trinoo
 > 1999년 6월 말부터 7월 사이에 퍼지기 시작했으며, 미네소타 대학 사고의 주범, 원래 이름은 TrinOO
 > 처음 솔라리스 2.x 시스템에서 발견되었으며, 최초 227개 시스템이 공격에 쓰인 것으로 알려져 있음
 > UDP를 기본으로 하는 공격을 시행하며, 'statd, smsd, ttabserverd' 데몬이 주 공격 대상
 > Trinoo는 기본적으로 아래 표와 같은 포트 번호를 사용하지만 소스 코드에서 임의로 변경 가능


접속자
대상
프로토콜
포트
공격자
마스터
TCP
27665
마스터
에이전트
UDP
27444
에이전트
마스터
UDP
31335
에이전트
공격대상
UDP

 * 마스터 명령
 die : 마스터 작동 중지
 quit : 마스터 logout
 dos(mdos) IP : IP를 대상으로 공격
 mtimer N 공격 시간 지정 N은 1~1,999 까지 (d : 300)

DDOS 공격 by Trinoo

 공격 실습

 1). Trinoo master 컴파일
  > Trinoo 소스 압축 풀기


< 마스터 데몬 실행 비밀번호 : gOrave, 마스터 접속 비밀번호 : betaalmostdone >

 > master 디렉토리로 이동 후 make 명령을 이용 컴파일하기


 2). Trinoo 에이전트 컴파일 및 실행

< master와 마찬가지로 압축을 푼다. >

  > 이후 daemon 디렉토리에 있는 ns.c 파일을 master 디렉토리에 복사 후 편집한다.


< agent는 master의 ip 주소를 따로 지정해 주어야 한다. >

  > Makefile 편집
< Makefile의 내용이 바뀐 것을 확인 가능 >

  > master와 마찬가지로, 컴파일 후 daemon 실행

< 컴파일 후 데몬 실행 >

< 데몬을 실행하여 제대로 작동 중인지 확인 >

 3). 마스터 실행
  > master 디렉토리에서 master를 실행한다.
  > 암호는 gOrave이다. (O는 대문자)


< master의 실행이 제대로 되었는지 확인 >

 4). 공격을 위해 마스터 접속
  > telnet 192.168.10.104 27665 로 접속
  > 암호는 ' betaalmostdone ' 이다.
  > trinoo> 창에서 명령을 내릴 수 있다.


  > bcast 명령은 에이전트 목록을 검사한다.


  > 가끔 마스터에서 bcast 명령을 통해 에이전트 목록 확인이 불가능 할 경우
     에이전트의 데몬을 재실행하자.

< 목록이 안뜨는 경우 > 
< 에이전트의 데몬을 재실행 >

  > mdos 명령을 이용 대상을 공격 시도

< mdos와 관련된 정보 확인 >

 > 아주 잠깐이라도 UDP 패킷이 10만개 정도 전달
 > 공격에 참여한 에이전트 PC의 상태도 공격 당한 PC 만큼 좋지 않게 된다.

< tcpdump로 목표물이 주고 받은 패킷을 기록한 결과 325만개의 패킷 기록 >


< DDoS 공격은 UDP, ICMP 패킷을 가지고 공격을 하기에 UDP, ICMP 패킷이 가장 많이 확인된다. >

rpmforge 설치 및 사용법

ㅇ ㅂㅇ

1. rpmforge란 ?
 - rpmforge는 CentOS나 RedHat과 별개로 진행되는 프로젝트로 프로그램을 설치하는 툴 중 하나이다.

2. rpmforge 설치
 1). 설치를 할 OS가 32비트 인지 64비트 인지 확인한다.
  > i386, i486, i586, i686 등은 32비트
  > x86_64 는 64비트

< 32 비트 운영체제 >
 2). rpmforge 파일 다운로드
  > http://pkgs.repoforge.org/rpmforge-release/에서 버전을 확인, 해당 rpm을 다운로드 한다.
  > wget이 없다면 yum -y install wget 명령어를 통해서 설치한다.


  > wget http://pkgs.repofrge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.



 3). rpmforge 설치
  > rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.i386


 4). rpmforge 설치 후 프로그램 다운로드 및 설치
  > hping 설치


 5). 기타 설치
  > htop 모듈 설치
    # yum --enablerepo=rpmforge -y install htop








2015년 4월 13일 월요일

SSL 암호 통신

ㅇ ㅂㅇ

SSL 이란?

SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다.
  1. [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)
  2. [웹서버] Public Key를 인증서와 함께 전송한다.
  3. [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.
  4. [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비롯한 URL, http 데이터들을 암호화해서 전송한다.
  5. [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.
  6. [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.
  7. [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.

인증서(Certificate)

당신과 접속해있는 사람이나 웹 사이트가 믿을 수 있는지 어떻게 판단할 수 있을까? 한 웹사이트 관리자가 있다고 가정하자. 그 사람이 당신에게 이 사이트가 믿을만하다고 (심각할 정도로) 열심히 설명했다. 당신이 그 사이트의 인증서를 설치해 주기를 바라면서 말이다. 
인증서는 여러 부분으로 이루어져있다. 아래는 인증서 속에 들어있는 정보의 종류를 나타낸 것이다.
  1. 인증서 소유자의 e-mail 주소
  2. 소유자의 이름
  3. 인증서의 용도
  4. 인증서 유효기간
  5. 발행 장소
  6. Distinguished Name (DN)
    - Common Name (CN)
    - 인증서 정보에 대해 서명한 사람의 디지털 ID
  7. Public Key
  8. 해쉬(Hash)
SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다는 것이다. 이것은 마치 트리(Tree)와 같은 구조를 이루면서 인증서끼리 서명하게 된다. 그러면 최상위 인증서는? 이 인증서를 발행한 기관을 Root Certification Authority(줄여서 Root CA)라고 부르며, 유명한 인증 기관(역주:Verisign, Thawte, Entrust, etc)의 Root CA 인증서는 웹브라우저에 기본적으로 설치되어 있다. 이러한 인증 기관은 자신들이 서명한 인증서들을 관리할 뿐만 아니라 철회 인증서(Revoked Certificate)들도 관리하고 있다. 그러면 Root CA의 인증서는 누가 서명을 했을까? 모든 Root CA 인증서는 자체 서명(Self Signed)되어 있다.

 * SSL 암호화 통신

 1 단계 : 클라이언트는 자신의 SSL 버전과 암호화 알고리즘, 임의로 만든 데이터, 서버가 인증과 관련해 요구하는 일반 정보를 서버로 보냄
 2 단계 : 서버는 서버의 SSL 버전과 암호화 알고리즘, 클라이언트가 접속하는 데 필요한 정보를 클라이언트에 보냄
 3 단계 : 서버가 자신의 인증서를 클라이언트에 보내주면, 클라이언트는 서버가 보낸 인증서를 확인하여 서버를 인증, 인증에 실패할 경우 신뢰할 수 없는 서버임을 경고
 4 단계 : 인증이 확인되면 서버는 클라이언트에 'Master Secret'를 암호화하여 전송하고, 클라이언트와 서버는 'Master Secret'를 이용하여 통신에 사용할 세션키를 만들어 냄
 5 단계 : 이후 서버와 클라이언트 간에 전송되는 데이터는 모두 세션키를 통해 암호화하여 전송됨


 * SSL MITM 공격

 1. DNS 스푸핑 공격 (dnsspoof.hosts)
 2. webmitm을 이용 인증서 생성
  - mitm 공격 시작
 3. ettercap을 이용한 ARP 리다이렉트
 4. DNS 스푸핑
 5. DNS 정보를 지우고 https://~ 사이트 접속
 6. 사이트 접속과 인증서 오류 확인
 7. 접속중 패킷을 캡처
 8. ssldump 명령을 이용한 해석

접속할 사이트 : https://addons.mozilla.org/ko/firefox


 1. DNS 스푸핑 공격 준비(dnsspoof.hosts)


 2. webmitm을 이용 인증서 생성

< 아무런 값을 입력하여 생성 >

< cat 명령어로 인증서 확인 >

 6. 사이트 접속과 인증서 오류 확인

< 과정으로 인해서 접속이 막힌 https 사이트 >

< 인증서가 달라져 해당 메시지가 출력 된다. >

 7. 접속 중 패킷을 캡처한다.
  #tcpdump -w mitm.pcap
  > tcpdump로 패킷을 캡처 한 후 wireshark 등으로 읽을 수 있다.

< mozilla에 접속한 것을 확인 가능하다 >


 8. ssldump 명령을 이용한 해석
  > ssldump 설치
  #yum -y install ssldump


  ssldum 명령
  # ssldump -a -d -k [인증서 파일명] -r [패킷 덤프파일]

< 해당 파일을 해석 후 a.txt에 저장 >

< a.txt 를 vi 명령어로 열어서 확인한 모습 >



MITM(Man In The Middle)

ㅇ ㅂㅇ

MITM 공격 (Web 정보 변조)
 > 두 개체 간 통신에 끼어서 데이터 끼워넣기/빼기/복호화 등 데이터 흐름에 영향을 미치는 공격
 > ARP 리다이렉트, ICMP 리다이렉트, ARP 스푸핑 모두 엄밀히 말하면 MITM 공격이지만 일반적으로 MITM 공격을 말할 때는 이 세가지 공격을 언급하지는 않음
 > ARP 리다이렉트, ICMP 리다이렉트, ARP 스푸핑 공격은 우선 저달되는 패킷의 MAC이나 IP 주소는 바꾸나 패킷 내용을 바꾸지는 않지만 MITM은 패킷 내용을 바꾸는 것도 시도함


 * Web 정보 변조 실습
  > 공격에 쓰일 웹서버가 작동하는지 확인한다.
  > URL은 그림 파일을 직접 지정한다.

 * 실습 준비 사항
 1. 피싱 사이트 준비

< 타겟에게 보여줄 웹 이미지 >

 2. 이더필터 설치
  > 이더 필터(etterfilter)를 이용 Web 정보를 중간에 변조해보자
  > Etterfilter를 포함한 ettercap 패키지를 설치한다.


 3. Filter File 생성
  > Filter File은 타겟의 특정 문자열을 걸러내어 공격자가 설정한 것으로 바꾸어 주는 명령이 담긴 파일이다.
  > filter.txt 쉘 스크립트 내용

< 문자열의 내용을 바꿔 주는 것이므로 다양한 경우의 문자열을 예상해서 코드를 작성해야 한다. >

  > 생성된 Filter File을 etterfilter 명령을 이용 컴파일한다.
   #etterfilter -o filter.ef filter.txt


4. ettercap 을 이용 공격을 시작한다.
 > ettercap는 ARP 스푸핑과 fragrouter 기능을 동시에 수행한다.


 5. 타겟이 확인하는 인터넷 모습

< 타겟의 웹에서 보여줄 이미지>

< 타겟이 다른 웹에서 본 이미지 >












2015년 4월 10일 금요일

TCP 세션 하이재킹

ㅇ ㅂㅇ

TCP 세션 하이재킹

 * 세션 하이재킹 (Session Hijacking)
  > 사용자와 컴퓨터, 또는 두 컴퓨터 간의 활성화 상태인 세션(session) 가로채기
 * TCP 세션 하이재킹
  > 서버와 클라이언트 통신 시 TCP의 시퀀스 넘버를 제어하는 데 발생하는 문제 공격
  > 서버와 클라이언트가 TCP를 이용해 통신하고 있을 때 RST 패킷을 보내 일시적으로 TCP 세션을 끊고 시퀀스 넘버를 생성하여 세션을 빼앗고 인증을 회피하거나 연속적인 시퀀스 번호를 이용하는 방법이 있다.
  > Non-Blind Attack과 Blind Attack이 있음, Non-Blind Attack은 공격 대상을 탐지 할 수 있으며 서버와 클라이언트가 통신 할 때 시퀀스 넘버를 알아낼 수 있지만, Blind Attack은 불가능, 기본 알고리즘은 동일
  > 트러스트를 이용한 세션은 물론 텔넷, FTP 등 TCP를 이용한 거의 모든 세션의 갈취 가능, 인증 문제 해결을 위한 일회용 패스워드, 토큰 기반 인증을 이용한 세션도 갈취 가능

 * Blind Attack에서는 시퀀스 번호를 알 수 없음으로 RST 패킷을 이용 일단 접속을 closed 시킨 다음 재접속하는 방법을 이용한다.
 * Non blind attack는 전송되는 시퀀스 번호를 이용 세션에 끼어들고 클라이언트 쪽 세션을 제어하는 방법을 사용한다.
 * TCP는 FIN 패킷을 받는 경우에도 접속을 일정 시간 유지한다.
  > net.ipv4.tcp_fin_timeout 커널 파라미터가 대기 시간을 결정한다. (default:60)
  > 프로세서가 반응하지 않거나 로컬 프로세서가 종료된경우 커널은 접속 정보를 삭제하지만 로컬 프로세서가 대기중이라면 접속은 일정 시간 동안 유효하다.(응용에 따라 idle타임에 대한 반응은 다르다.)


 * hunt 설치
  > rpmforge와 fedora에서 모두 제공하므로 둘 중에 버전이 높은 것을 설치한다.


 * 클라이언트에서 telnet 서버로 telnet 접속


 * hunt 실행 후 이후 과정

< 실행 화면 >


< d 입력하여 데몬 설정과 관련된 메뉴로 들어 간다 >


< a 입력하여 arp spoof + relayer daemon을 작동시키는 메뉴로 들어 간다 >


< s 입력하여 데몬을 실행 시키고, a를 입력하여 세션 하이재킹을 할 주체를 입력한다. >

< hunt로 인해 바뀐 MAC 주소 >

< 세션 list 보기를 통해 현재 telnet으로 주고 받는 통신들에 대한 목록 확인 가능 >

 - a 를 선택하여 내가 원하는 번호의 통신을 hijack을 해보자


< 여러 설정을 한 이후 ctrl + c 버튼을 누르면 상대방이 텔넷을 통해 주고 받는 명령들을 확인 가능하다. >

< 세션을 뺏어 오기 위해 대기 >

< 세션을 뺏어와 그대로 이어서 하는 모습 >

< 세션을 뺏긴 클라이언트 >

< 맨 처음 화면에서 x를 누르면 종료 확인 메시지와 함께 확인 후 종료 >