NetHack Tools

sirseo·2023년 1월 27일
0

Network_Hacking

목록 보기
3/5

1. nmap

  • nmap은 가장 유명한 포트 스캔 툴인 만큼 네트워크 스캐닝 툴 중에서 쉽고 유연하며 강한 기능을 제공한다
  • 연결된 ip 주소들을 스캔할 수도 있고 ip를 인자로 주지 않고 도메인을 지정할 수도 있다
  1. 포트 스캔을 실시하면 nmap은 대상 서버에 포트 번호를 다르게 하여 SYN 패킷을 보낸다
  2. 열려있는 포트에서는 SYN/ACK 패킷이 돌아오며 이를 통해 TCP 프로토콜에서의 3 way handshake를 확인할 수 있다
  3. RST를 보내 연결을 끊어버리는 완전한 연결을 맺지 않은 하프스캔도 확인 가능하다
  • 많이 사용하는 NMAP 명령어 옵션
    -sT : connect() 함수를 이용한 open스캔(TCP를 이용하여 완전한 연결을 한다.)
    -sS : 세션을 성립하지 않는 SYN스캔
    -sF : FIN패킷을 이용한 스캔
    -sN : NULL값을 이용한 스캔
    -sX : X-MAS 패킷을 이용한 스캔
    -sP : Ping을 이용한 스캔
    -sU : UDP 포트 스캔
    --top-port [Number] : 가장 많이 사용하는 포트 [Number]개

✅TCP, UDP 외에도 Ethernet/IP 스캐닝을 위해

$ nmap -Pn -sU -p44818 --script enip-info <target>

✅이런 명령어로 제품의 정보 등을 캐낼 수 있다
❗Ethernet/IP 기기 일부는 TCP 포트 44818에서 명시적, UDP 포트 2222에서 함축적 메시징
✖️NPING, Netcat, Npcap 등 포함

2. Packet Generator

1. Ostinato

  • 가장 잘 알려진 패킷 생성기 툴 중 하나로 편리한 GUI와 필요한 모든 기능을 제공한다
  • 포트를 지정하여 해당 포트로 패킷을 전송 (UDP, Ethernet)

2. Trex

  • TRex는 리눅스 기반 패킷 생성기로 python으로 구동하기 때문에 자동화 검사와 네트워크 기기의 디버깅에 유용하다
  • 거의 모든 트래픽을 생성할 수 있고 large-scale DDOS 공격과 TCP-SYN, UDP, ICMP 등을 스트림할 수 있다

3. Snort

  • 실시간 트래픽 분석과 패킷 로깅을 수행하는 네트워크 침입 탐지 시스템 (IDS)
  • 윈도우, 리눅스 호환
  • 패킷 스니퍼
  • 패킷 로거
  • 네트워크 침입탐지(IDS/IPS)
  • 액션, 프로토콜, 송수신 등을 지정하여 룰을 생성할 수 있다
  • Action: 탐지 후 행동들
    alert : 경고를 발생시킨다.
    log : 로그를 기록한다.
    pass : 패킷을 무시한다.
    active : alert를 발생시키고 대응하는 dynamic을 유효화 한다.
    dynamic : active에 의해 유효화된 경우 한쪽의 패킷을 기록한다.
    drop : 패킷을 차단하고 기록한다.
  • Protocol: 탐지 할 프로토콜 종류
    TCP : TCP 탐지
    UDP : UDP 탐지
    ICMP : ICMP 탐지
    IP : IP 탐지
  • 송신 IP & PORP
    any : 모든 포트
    포트번호 : 특정 포트
    포트번호:포트번호 : 포트번호 ~ 포트번호
    :포트번호 : 포트번호 이하 모든 포트
    포트번호: : 포트번호 이상 모든 포트
    예시
    211.11.22.33 80
    211.11.22.0/24 443
    any 80
    211.11.22.33 any
    any any
    '$HOME_NET' 와 같이 snort.conf에서 지정한 변수를 참조할 수도 있다.
  • Direction
    -> : 출발지 -> 목적지 패킷 탐지
    <> : 출발지 목적지 사이 모든 패킷 탐지
  • 위는 룰 헤더 정보이며 바디에는 패킷 탐지를 위한 사용자 설정이 담긴다
  • 세미콜론으로 옵션들을 구분
  • 일반옵션 설정
    msg : alert 발생 시 이벤트 명
    sid : 스노트 룰 ID
    99이하 : 시스템 예약 ID
    100 ~ 1000000 이하 : snort 자체지정 sid
    1000001 이상 : 사용자 정의 sid
    rev : 룰 수정횟수 수정 시 숫자가 증가
  • 페이로드 범위 설정
    dsize : dzise:<바이트, dsize:바이트<>바이트 와 같이 상한선, 하한선, 범위를 지정할 수 있다.
    content : 문자, 바이너리로 패턴을 탐지한다.
    content: "문자"
    content: | 00 01 0A AA |
    content: "| 90 90 90 | /bin/sh"
    offset : 검색을 시작할 byte수를 지정한다.
    depth : offset부터 시작하여 검색할 byte수를 지정한다.
    nocase : 대소문 자를 구별하지 않는다.
    flags : TCP 제어 플래그를 지정한다. F, S, FA, FSA 등으로 지정 가능하다.
    pcre : 정규식을 사용한다.
  • threshold : 패킷의 발생량을 기반으로 탐지한다.
    아직까지 흔히 사용 되고 있지만 공식적으론 사용을 권장하지 않는다.
    비슷한 기능을 하진 detection_filter 사용이 권장된다.
    type limit(로그발생기준: 임계값), threshold(로그발생기준: 패킷량), both(로그발생기준:IP)
    track by_src , by_dst
    count n : number events used by the thresholding
    seconds m : time period over which count is accrued.

스노트 예제

  • alert tcp any any < > any ①[443,465,523] (②content:"|18 03 00|"; depth: 3; ③content:"|01|"; distance: 2; within: 1; ④content:!"|00|"; within: 1; ⑤msg: "SSLv3 Malicious Heartbleed Request V2"; sid:1;)
  1. 목적지 포트는 443번, 465번, 523번 포트로 지정한다.
  2. 3byte 내에 18 03 00 바이너리 값이 있는지 검사한다.
  3. 첫번째 컨텐츠 2byte 떨어진 곳에서 1byte 범위 내에 01 바이너리 값이 있는지 검사한다.
  4. 두번째 컨첸츠 끝난 위치에서 1byte 내에 00 바이너리 값이 없는지 검사한다.
  5. alert 알림명으로 SSL~V2를 쓴다.
  6. sid번호 (스노트 룰 번호)는 1로 지정한다.

cpppo

python3 -m cpppo.server.enip.list_services -vv -a 10.0.1.10 --list-identity
  • 위처럼 cpppo.server.enip 패키지를 사용하며 PLC를 파이썬 라이브러리를 이용한 명령어로 조회 및 수정을 할 수 있다
  • Cpppo.server.enip 패키지는 EtherNet/IP CIP 언어를 이용한 요청을 parse하는 파이썬 프로그램을 만드는데 사용된다 (as a server)
  • 혹은 해당 프로토콜로 요청을 만들어 내기도 한다 (as a client)

scapy

✖️ sniff()를 이용한 패킷 덤프, show()를 이용한 패킷 조회, send()/sr() 함수를 이용한 패킷 전송과 응답 수신, 반복 송신 loop기능 그리고 포트 스캔 기능까지!

  • scapy를 활용한 PLC와의 통신은 다음 handshakes들이 필요하다 (ENIP, CIP 활용)
    1. communication 채널을 열기 위한 TCP handshake
    2. ENIP 세션 등록을 위한 ENIP handshake
    3. optional CIP handshake
      https://github.com/scy-phy/scapy-cip-enip

0개의 댓글