본문 바로가기

Security

2. 네트워크 트래픽 분석

  # LOIC 트래픽 분석

   - LOIC : 공격대상에 대량의 UDP와 TCP 트래픽을 전송함(단 하나의 LOIC로는 공격대상의 자우너을 고갈시키지 못함)

   - 두 가지 모드를 제공함

       1. 사용자는 공격대상의 주소를 입력할 수 있음

       2. HIVEMIND, 사용자가 LOIC를 IRC서버로 연결시킴

         > 사용자들은 IRC에 연결된 사용자들이 자동으로 공격할 수있는 공격대상을 선정함

tcpdump 세션을 열어러 포트 80번을 필터링하고 결과를 ASCII형식으로 출력함.

sourceforge홈페이지에서 LOIC 파일 다운로드.

압축을 풀었더니 exe실행파일이라 실행불가. 

리눅스에서 exe파일 실행시켜준는 WINE도 설치해봤지만 실행할 수 없었음..

 

  1) IRC 명령어를 Hive에 파싱하기

   ※ 단순히 LOIC를 다운로드 하는 것은 불법이 아니지만, 어나니머스 HIVE에 연결하여 특정 사이트의 서비스에 영향을        미칠 목적으로 사용한다면 법에 위반 됨.

    - 공격 방법 : 특정 IRC(Internet Relay Chat) 서버로 연결하여 

      !lazor targetip=66.211.---.-- message=test_test port=80 method=tcp wait=flase random=true start 입력함

      > HIVEMIND 모드로 LOIC가 IRC에 연결되어 있는 모든 어나니머스 멤버는 즉시 공격대상에 공격 시작 가능

    - 대부분의 IRC서버는 TCP포트 6667번을 사용함

  

  2) 진행 중인 DDoS 공격 식별하기

   - 공격을 탐지하기 위해 패킷의 임계치를 설정함(특정 주소를 사용하고 있는 사용자로부터 이 패킷의 숫자가 넘으면         공격을 염두에 두고 좀 더 조사해야한다는 것을 의미함)

   - 이 수치가 넘었다고해서 100% 장담할 수 는 없지만 추가적으로 LOIC다운로드를 하고 HIVE 명령어를 수용한 후에         실제공격이 일어났다면 DDoS공격에 참여했다는 충분한 증거가 됨.

LOIC가 설치되지 않아 실행안됨.
findDownload()
findHivemind()
findAttack()

  3) TTL(Time-to-Live) 필드 이해하기

  - TTL 필드 : 8 bits(0~255의 값을 가짐)

  - IP 패킷을 전송할 때 컴퓨터는 TTL필드를 설정하여 패킷이 목적지까지 갈 때 까지 최대 몇 번의 홉을 할 수 있는 지        설정함.

  - 패킷이 거치는 모든 라우팅 장비에서는 TTL값을 1만큼 감소시킴.

  - 팔드의 값이 0이 되면 라우터는 무한 라우팅 룹(loop)을 방지하기 위해 패킷을 버리게 됨.

    ex. 8.8.8.8 이라는 주소에 TTL 값 64를 가지고 ping을 전송했는데 돌아온 값을 보니 TTL값이 53이었다면 패킷이 11        개의 라우팅 기기를 거친 것임

* ping(핑) : 다른 호스트에 IP데이터그램 도달 여부를 조사하기 위한 프로그램.

  - '-v' : 세부내용을 보여줌

  - '-nn' : 이름 변환 비활성화

  - 'host 8.8.8.8' : 8.8.8.8이라는 특정주소를 필터링함.

 

  4) Scapy로 TTL필드 처리하기

  - 소스 IP주소와 전송 받은 패킷의 TTL을 출력하는 스크립트

  - IP 층의 패킷을 검사하고, IP소스주소와 TTL 필드를 추출하여 이들 필드를 화면에 출력함.

  - checkTTL() : IP 소스 주소와 TTL을 입력 받아서 유효하지 않은 TTL에 대한 메시지를 출력함

                    > 조건문으로 사설 IP주소에서 오는 패킷을 제거함.

                    > IPy 라이브러리를 임포트함.

                    > 클래서 IP가 Scapy 클래스 IP와 충동하는 것을 방지하기 위해 IPTEST라고 분류함

                    > 만약 IPTEST(ipsrc).iptype()가 'PRIVATE'을 반환하면 checkTTL 함수에서 반환하여 패킷 검사를 무시함.

 

 

 # 스톰의 패스트 플럭스와 컴피커의 도메인 플럭스

해커의언어 치명적 파이썬

  1) DNS에 숨겨있는 정보

* nslookup : 네트워크 관리 명령 인터페이스 도구로서, 도메인 네임을 얻거나 IP주소 매핑 또는 다른 특정한 DNS 레코드를 도메인 네임 시스템(DNS)에 질의할 때 사용함.

 - 192.168.81.2에 있는 DNS 서버가 whitehouse.com을 ip주소 54.208.114.32로 변환함.

 - 클라이언트는 DNS Question Record(DNSQR)를 생성하여 whitehouse.com의 IPv4 주소를 요구함.

 - 서버는 DNS Resource Record(DNSRR)를 추가함으로써 응답함

 - DNSRR은 whitehouse.com의 IP주소를 제공함.

 

  2) Scapy로 DNS 트래픽 처리하기

  - DNS 프로토콜 요청을 Scapy로 보면 각각에 포함되어 있는 필드를 볼 수 있음.

  - DNSQR은 질문 이름(qname), 질문 종류(qtype), 질문 클래스(qclass) 등을 포함함.

  - 앞의 예(whitehouse.com)

     > qname : whitehouse.com, 

     > DNS 서버는 응답에 DNSRR을 추가함으로써 응답함.

  - DNSRR에는 리소스 기록 이름(rrname), 종류(type), 리소스 기록 클래스(rclass) 그리고 TTL이 포함되어 있음.

 

  3) Scapy로 패스트 플럭스 트래픽 탐지하기

  - DNS트래픽을 저장하고 있는 fastFlux.pcap 다운로드

https://github.com/bigsnarfdude/violentPythonForHackers/blob/master/CH4/fastFlux.pcap

 

bigsnarfdude/violentPythonForHackers

collection of python tools. Contribute to bigsnarfdude/violentPythonForHackers development by creating an account on GitHub.

github.com

  - pcap을 읽어들여 DNSRR가 포함된 패킷을 처리하는 파이썬 스크립트

  - Scapy의 .haslayer() : 프로토콜 타입을 입력받아서 불리언을 반환함.

  - 패킷이 DNSRR을 포함하고 있으면 도메인 이름과 IP주소를 포함하고 잇는 rrname과 rdata 변수를 읽어옴
    > 도메인 이름을 인덱스화해서 만들어놓은 딕셔너리에서 이 도메인 이름을 확인할 수 있음

       (만약 기존의 IP주소가 다르면 새로운 주소를 딕셔너리에 포함시킴)

testFastFlux.py

 

  4) Scapy로 도메인 플럭스 트래픽 탐지하기

    - 컨피커에 감염된 컴퓨터 분석해보기

      > 컨피커 : 도메인 플럭스 기법을 활용함

    - 서버에서 전송하는 응답 중에 도메인 이름에 대한 오류 메시지가 있는 부분을 살펴봄.

    - 서로 다른 버전의 컨피커는 여러 개의 DNS 이름을 시간마다 생성함.

    - 여러 개의 도메인 이름이 가짜였고, 실제 공격 명령 서버를 숨기기 위해 사용되었기 때문에 대부분 DNS서버는

      이름을 실제 주소로 변환할 수 없었고, 대신에 오류 메시지를 생성했음.

    - 오류 메시지가 있는 모든 DNS 응답을 식별하여 현재 진행중인 도메인 플럭스 공격을 확인함. 

 

    - pcap 파일 다운로드 ('domainFlux.pcap')

       https://github.com/bigsnarfdude/violentPythonForHackers/blob/master/CH4/domainFlux.pcap

 

bigsnarfdude/violentPythonForHackers

collection of python tools. Contribute to bigsnarfdude/violentPythonForHackers development by creating an account on GitHub.

github.com

  - testDomainFlux.py

    > 네트워크 캡쳐를 읽어들여서 캡쳐에 있는 모든 패킷을 살펴봄.

    > DNS 패킷 : anrode 필드를 포함하고 있음

    > 서버의 소스포트가 53으로 오는 것만 확인함

    > rcode가 3이면 도메인 이름이 존재하지 않는 것을 의미함. 

    > 도메인 이름을 화면에 출력하고 카운터를 하나 증가시킴

 

 # 케빈 미트닉과 TCP 일련 번호 예측 공격

 -> TCP 세션 하이재킹(TCP 일련번호 예측)

    - 각 네트워크의 연결을 추적하는 데 사용하는 일련번호에 무작위성이 없다는 것을 이용하여 IP 주소 스푸핑을

      통해 하이재킹하는 공격.

     

1) TCP 일련번호 예측 공격 만들기

  - 미트닉이 공격한 컴퓨터는 원격에 있는 서버와 신뢰관계가 있어 rlogin 프로토콜(TCP 포트 513번)을 사용하여

    접속할 수 있었음

  - rlogin은 공개 키나 패스워드 같은 방법이 아닌 소스 IP주소만을 확인하는 것을 인증체계로 하여 보안적이지 않았음

  - 미트닉 -> 시모무라 컴퓨터 공격하기

    (1) 서버가 신뢰하는 컴퓨터를 찾기

    (2) 신뢰하는 서버를 "침묵" 시킴

    (3) 그 서버로 연결을 스푸핑함

    (4) TCP 3방향 핸드쉐이크와 ACK를 스푸핑함

 

2) TCP 일련번호 계산하기

  - TCP SYN을 전송하고 TCP SYNACK를 기다림

  - 전송을 받으면 ACK에 있는 TCP일련번호를 제거하고 화면에 출력함

  - 4개의 패킷에 대해 반복적으로 수행하여 패턴이 있는 지 확인함.

  - Scapy에서 자동으로 값을 채워 넣기 때문에 모든 TCP와 IP필드를 채워넣을 필요가 없음.

 

 3) TCP 연결 스푸핑하기

  - 계산한 일련번호를 통해 ACK를 해당 일련번호로 전송한다.

 

 # SCAPY로 IDS 공격하기

  - IDS : 네트워크 침입탐지시스템으로 IP 네트워크에있는 패킷을 로깅하면서 실시간으로 트래픽 분석 가능함.

  - IDS는 이미 알려진 악성 시그니쳐와 패킷을 비교함으로써 공격이 성공하기 전에 네트워크 분석가에서 공격을 경고함.

  - SNORT IDS 시스템 : 정보수집, 공격, DOS 공격 등 다양한 공격 벡터 종류를 탐지할 수 있는 서로 다른 룰이 포함됨

      (룰 내용 : TFN, tfn2k, Trin00, DDoS 등 4가지 경고 탐지)

  - 공격자가 TFN, tfn2k 또는 Trin00을 해당 시스템에 사용하면 IDS는 이 공격을 탐지하여 분석가에게 알림

  - 그러나, 분석가가 해킹여부를 합리적으로 판단할 수 있는 것보다 더 많은 경고를 받으면 분석가들은 데이터 양에

    압도당해 중요한 공격 내용을 놓칠 수 있음

  - 공격자들은 분석가들을 압도하는 수준의 경고를 발생시키는 툴을 만듦.

  

  ** 실제 공격 실습은 나중에 더 해보기!!

'Security' 카테고리의 다른 글

정보수집  (0) 2020.03.29
무선 기기 해킹  (0) 2020.03.22
1. 네트워크 트래픽 분석(PyGeoIP, Dpkt 패킷, 구글어스)  (0) 2020.03.14
포렌식 수사(메타데이터)  (0) 2020.03.13
컨피커, 노력하면 된다  (0) 2020.03.12