Automater is a URL/Domain, IP Address, and Md5 Hash OSINT tool aimed at making the analysis process easier for intrusion Analysts. Given a target (URL, IP, or HASH) or a file full of targets Automater will return relevant results from sources like the following: IPvoid.com, Robtex.com, Fortiguard.com, unshorten.me, Urlvoid.com, Labs.alienvault.com, ThreatExpert, VxVault, and VirusTotal.
간략하게 Automater는 URL/Domain, IP 주소 등의 정보를 수집 및 분석하는 도구이다.
위의 내용을 보면 IPvoid.com, Robtex.com, Fortiguard.com 등에서 정보를 수집한다.
Usage
옵션에 대해서는 위의 내용을 참고하면 된다.
구글을 대상으로 automater를 사용하였다.
위의 사진을 보면 알 수 있듯이 URL이나 Malcode 등 결과값이 없다. 정보 수집하는 곳 중, https://malc0de.com이 뭔가 직접적으로 나에게 와닿아 사이트에 접속해보았다.(http://malc0de.com/database/)
Amap was the first next-generation scanning tool for pentesters. It attempts to identify applications even if they are running on a different port than normal. It also identifies non-ascii based applications. This is achieved by sending trigger packets, and looking up the responses in a list of response strings.
간략하게 Amap은 모의해킹을 위한 첫 스캐닝 도구로 일반적인 포트번호가 아닌 다른 포트로 실행 중인 어플리케이션까지도 탐지한다.
Usage
솔직히 말해서 amap의 기능들은 nmap을 통해 확인할 수 있기 때문에 굳이 필요한 기능인지 싶지만 first next-generation scanning tool이라고 명시되어 있기에 예의상 확인하고자 한다.
The tool is designed as a password dictionary attack tools that targets windows authentication via the SMB protocol. It is really a wrapper script around the 'smbclient' binary, and as a result is dependent on it for its execution.
간략하게 accheck는 SMB프로토콜을 통해 윈도우 인증을 대상으로 사전 공격(dictionary attack)을 하는 것이다. 즉, 미리 사전에 유추 단어를 저장해놓고 이를 기반으로 공격하는 형태로 이루어져있다.
Usage
위의 사용법을 보면 알 수 있듯이 꽤 간단하다.
주요 옵션은 아래와 같다.
-t [단일 호스트 IP 주소]
-T [파일로 구성된 타겟 IP 주소 리스트]
-p [단일 패스워드]
-P [파일로 구성된 패스워드 리스트]
-u [단일 사용자]
-U [파일로 구성된 사용자 리스트]
-v [자세히 봄]
예제
#acccheck -t 10.10.10.1
//단일 사용자의 주소만을 사용하며 이 때 사용자는 administrator이고 패스워드는 없을 때 가능
#acccheck -t 10.10.10.1 -P password.txt
//패스워드 리스트파일 password.txt를 사용하여 파일 리스트에 일치하는 패스워드로 administrator계정에 일치시킴
- IP 프로토콜은 IP패킷을 작은 몇개의 패킷으로 나누어 전송되고 목적지 시스템에서 재조합하는 것을 허용하는데 이러한 과정을 fragmentation이라고 부른다. IP fragmentation은 데이터그램이 네트워크를 통해 전송될 때, 전송되는 IP 데이터그램의 크기가 전송될 수 있는 최대크기 보다 클 경우 발생한다.
- ethernet에서 전송 가능한 IP 데이터그램의 최대크기(MTU)는 1,500바이트이다. 만약 1,500바이트보다 큰 데이터그램이 전송된다면 fragmentation이 발생하게 된다.
IP fragmentation 예제
Kali linux(192.168.100.14)에서 target pc(192.168.100.5)에 4000바이트의 ICMP데이터를 전송하였다.
데이터그램의 총 크기는 4,028(4000+20(ip header)+8(icmp header))바이트가 된다.
그러나 데이터그램의 최대 크기는 1,500바이트이기 때문에 fragment가 발생한다.
아래는 예이다. 자세한 내용은 최상위 첨부를 참고하면 된다.
다른건 위의 것과 동일하고 다만 ID만 54321에서 40818로 생각하면 되겠다.
요약
1. 공격자는 타겟에 4,000바이트의 ICMP 데이터를 전송하였다.
2. 데이터 그램의 총 바이트는 4,028이 된다.(4,000+20(ip header)+8(icmp header)) 3. MTU가 1,500바이트이기 때문에 3개로 fragment로 쪼개진다.
1)첫 조각1,500= 20(ip header)+8(icmp header)+1,472(data) //남은 데이터 수: 2,528
2)두 번째 조각1,500= 20(ip header)+1,480(data) //남은 데이터 수: 1,048
- tiny fragment는 최초의 조각을 아주 작게 만들어서 네트워크 침입탐지시스템이나 패킷 필터 장비를 우회할 수 있다. TCP 헤더(default 20바이트)가 2개의 조각으로 나뉘어질 정도로 작게 쪼개서 목적 포트가 두 번째 조각에 위치하도록 함
침입탐지시스템이나 패킷필터 장비에서 포트번호를 확인하는데 작게 쪼개어진 첫 번째 조각을 통과 시킨다. 또한, 실제 포트가 포함된 두 번째 조각을 검사 없이 통과시키기 때문에 서버에서 조각은 재 조합이 되어 공격자는 무사히 연결할 수 있다.
2) fragment overlap
- fragment overlap공격을 위해 공격자는 두 개의 조각을 생성한다. 첫 조각에는 필터 장비에서 허용하는 예를 들면 80포트를 가진다. 그리고 두 번째 조각에는 offset을 아주 작게 하여 재 조합 시, 두 번째 조각을 첫 번째 조각의 일부분을 덮어쓰게 한다. 일반적으로 첫 조각의 포트 번호를 포함하여 덮어쓴다.
침입 장비에서는 첫 번째 조각이 허용된 포트번호 80이기 때문에 통과시키고 두 번째 조각은 이미 허용된 id이기 때문에 역시 통과시키게 된다. 통과되면 재 조합 시 첫 번째 조각을 덮어쓰기 때문에 두 번째 포트번호의 포트번호로 전달되게 된다.
위의 그림을 보면 80번 포트는 OK를 해서 통과되고 이후 2번째 조각의 23번 포트로 1번포트를 덮어쓰고 서버 23번 포트의 응용프로그램으로 전달되는 것을 의미한다.
공격 대상 시스템은 이렇게 작게 조각화된 패킷을 모두 처리해야 하므로 정상적인 Ping의 경우보다 많은 부하가 걸림
-n 개수: 보낼 에코 요청 개수 결정(default 4) linux의 경우 -c 크기 (크기만큼 전송 후 종료) -w 시간 제한: 시간 제한 조정(default 1,000(1초)) linux의 경우 -i 크기(interval)
-l 크기: 패킷 크기 조정(default 32byte) linux의 경우 -s 크기(패킷사이즈)
-f: 조각 허용 안함(default 조각화 허용)
자세한건 man page 참고
- RFC-791 Internet Protocol에 따르면 헤더를 포함한 IP 패킷의 최대길이는 65,535(=16비트-1=2^16-1)까지로 제한되어 있다.
결국 공격자가 65,535보다 큰 사이즈의 패킷을 보내게 되면 수많은 조각이 생성되고 해당 Buffer가 overflow되어, 대상 시스템 및 서버는 충돌이 일어난다.
통상적으로 IP 패킷의 헤더는 특별한 옵션이 없으면 20바이트를 보내고, ICMP ECHO request 패킷은 8바이트의 ICMP 헤더를 사용하기 때문에 실제 데이터 길이의 최대값은 65,507(65,535-20-8)바이트가 된다. 하지만 요새 시스템은 비정상적으로 큰 ICMP 데이터를 발생시키지 못하도록 하기 때문에 많이 막혀있다.
기본적인 ping을 살펴보자
192.168.100.3(window)에서 192.168.100.5(target-ubuntu)로 ping을 보내고 kali에서 tcpdump로 5번을 지켜보았다. 귀찮아서 3번에 tcpdump를 안한것은 아니다.
기본적으로 ping은 32바이트(window)를 보낸다.(리눅스의 경우 56) 그렇기 때문에 위에서 설명했듯이 32+20(ip header)+8(request packet) 총 60바이트의 길이가 출력될 것이다.
즉, 총 length는 60을 확인할 수 있다.
앞서 요새 많이 막혔다고 하는데 실제로 다음과 같다.
실제 보낼 수 있는 데이터 길이의 최대값은 65,507(65,535-20-8)바이트이다.
윈도우의 경우 65500을 넘지 못한다.
kali의 경우 65507까지만 허용한다.
65,507을 넘을 경우 허용하지 않는다.
jolt2라는 툴을 사용하면 된다고 몇 개의 다큐먼트들이 있지만 다음에...(윈도우 NT, 2000 시스템 가능 확인 필요)
2) SYN Flooding (그림 출처: wiki)
- SYN flooding이란 SYN을 넘치게 하는 것을 뜻한다. 즉 클라이언트가 서버의 SYN Queue를 overflow시켜 서버를 오동작하거나 충돌시키는 공격이다.
위의 그림은 정상적인 3-way handshake 내용이다.
1. 클라이언트 alice는 서버에 접속을 요청하는 SYN패킷을 보낸다. 이 때 상태는 SYN/ACK 응답을 기다리는 SYN_SENT이다.
2. 서버는 SYN요청을 받고 alice에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 alice의 ACK응답을 기다린다. 이때 서버의 상태는 SYN_RECEIVED이다.
3. alice는 서버에 ACK를 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 서버의 상태는 ESTABLISHED이다.
위의 그림은 SYN flood공격 모습이다.
1. attacker는 스푸핑된 ip를 가지고 서버에 다수의 패킷을 보낸다. 하지만 ACK를 응답하지 않기 때문에 이를 half-opened라 부른다.
2. 서버는 스푸핑된 ip가 네트워크에 존재하지 않기 때문에 SYN/ACK패킷을 보낼 수 없고, 서버의 자원은 계속 소비하게 된다. 즉 SYN Queue의 내용은 계속 유지된다. 3. 합법클라이언트 alice는 서버에 연결을 시도하지만 거절당하게 된다.
4. attacker는 무한으로 보내게 되면 결국 서버의 Queue는 추가만 되기 때문에 overflow가 발생하게 된다.
공격: kali linux(192.168.100.14) -> target pc(192.168.100.5), fake ip(192.168.100.50)
위는 kali에서 기본적으로 제공하는 hping3으로 192.168.100.5에 192.168.100.50이라는 src ip로 80번의 목적지 포트에 SYN패킷을 초당 10개씩 보내라는 것을 의미한다. (hping3 소개: http://kkn1220.tistory.com/99 참고)
- 패킷을 전송할 때 출발지 IP주소와 목적지 IP주소 값을 타겟의 IP주소 값으로 똑같이 만들어서 타겟으로 보낸다.
- 시스템은 처음 시도된 SYN에 대한 reply 패킷을 출발지 IP 주소값을 참조하여 그 값을 목적지 IP주소 값으로 설정하여 패킷을 보낸다. 그러나 이 값은 자기 자신의 IP 주소값이기 때문에 네트워크 밖으로 나가지 않고 자기 자신에게 돌아오며 land 공격은 동시 사용자를 점유하는 것 동시에 CPU부하 또한 올리게 된다.
공격: kali linux(192.168.100.14) -> target pc(192.168.100.5)
kali에서 기본적으로 제공하는 hping3을 가지고 출발지ip와 목적지ip를 타겟ip로 설정하고 포트를 100으로 설정하였다.
첫 패킷을 확인하면 192.168.100.5.100 > 192.168.100.5.100 을 확인할 수 있는데 land attack 패치 이후 이후 패킷에서는 src port가 자동 증가되어 land attack에 피해를 입지 않는 것을 확인할 수 있다.
- 가장 일반적으로 사용하는 스니핑 도구로 불법적인 느낌, 해킹이라는 느낌보다는 관리자적인 느낌이 강한 도구이다.
처음부터 스니핑을 위한 도구로 개발된 것이 아니라 네트워크 관리를 위해 개발된 툴이며 Snort라는 IDS의 기반 프로그램이기도 하다.
man page에서 Tcpdump의 정의를 잠깐 살펴보고자 한다.
Tcpdump prints out a description of the contents of packets on a network interface that match the boolean expression; the description is preceded by a time stamp, printed, by default, as hours, minutes, seconds, and fractions of a second since midnight. It can also be run with the -w flag, which causes it to save the packet data to a file for later analysis, and/or with the -r flag, which causes it to read from a saved packet file rather than to read packets from a network interface. It can also be run with the -V flag, which causes it to read a list of saved packet files. In all cases, only packets that match expression will be processed by tcpdump.
뭐 내용을 잠깐 보면 Tcpdump는 boolean 표현식을 만족하는 네트워크 인터페이스의 패킷의 내용을 출력하고 파일로 저장하는 w플래그나 저장된 패킷으로부터 읽어들이는 r플래그 등이 존재한다는 것을 확인할 수 있다.
설치
Tcpdump는 libpcap 라이브러리를 사용하는데 칼리에서는 기본적으로 tcpdump가 설치되어 있고, 리눅스의 경우
apt-get install tcpdump, apt-get install libpcap 으로 필요 라이브러리를 설치하면 되는데 자세한 설치 방법은 칼리를 사용할 것이기 때문에 제외하도록 한다.
옵션(자주 쓰이는 것만 나열 (자세한 것은 man page 참고)
-c count 입력한 수만큼의 패킷이 출력된 후 종료
Exit after receiving count packets.
-d compiled된 packet-matching code를 사람이 읽을 수 있도록 바꾸어서 출력
Dump the compiled packet-matching code in a human readable form to standard output and stop.
-dd C프로그램의 fragment로 출력
Dump packet-matching code as a C program fragment.
-ddd decimal numbers(숫자) 로 출력
Dump packet-matching code as decimal numbers (preceded with a count).
-e 각각의 덤프 line의 link-level 헤더 출력
Print the link-level header on each dump line. This can be used, for example, to print MAC layer addresses for protocols such as Ethernet and IEEE 802.11.
-F file Filter 표현을 위한 입력으로 파일을 사용하고, 추가적인 표현 명령들은 무시
Use file as input for the filter expression. An additional expression given on the command line is ignored.
-h tcpdump, libpcap version 확인
-i interface 인터페이스 선택(많이 사용됨)
--interface=interface
Listen on interface. If unspecified, tcpdump searches the system interface list for the lowest numbered, configured up interface (excluding loopback), which may turn out to be, for example, ``eth0''.
-j tstamp_type Timestamp 타입 설정
--time-stamp-type=tstamp_type
Set the time stamp type for the capture to tstamp_type. The names to use for the time stamp types are given in pcap-tstamp(7); not all the types listed there will necessarily be valid for any given interface.
-K IP, TCP, UDP checksum을 하지 않음
--dont-verify-checksums
-l 표준 출력 데이터를 buffered함. 패킷을 캡처링할 때 데이터를 보고 싶을 때 많이씀
Make stdout line buffered. Useful if you want to see the data while capturing it.
-p promiscuous 모드로 설정하지 않음
--no-promiscuous-mode
-r file 파일로 부터 패킷을 읽어들임
Read packets from file (which was created with the -w option or by other tools that write pcap or pcap-ng files).
-T type 조건식에 의해 패킷들을 specified type으로 표시
-t 시간 표시 안함
Don't print a timestamp on each dump line.
-v 자세한 정보
When parsing and printing, produce (slightly more) verbose output. For example, the time to live, identification, total length and options in an IP packet are printed. Also enables additional packet integrity checks such as verifying the IP and ICMP header checksum.
When writing to a file with the -w option, report, every 10 seconds, the number of packets captured.
-vv 더 자세한 정보 출력
Even more verbose output. For example, additional fields are printed from NFS reply packets, and SMB packets are fully decoded.
예제
To print all packets arriving at or departing from sundown:
-> tcpdump host sundown
//sundown host의 출발 도착 패킷 출력
To print traffic between helios and either hot or ace:
-> tcpdump host helios and \( hot or ace \)
//helios와 hot, ace에서 발생하는 패킷 출력
To print all IP packets between ace and any host except helios:
-> tcpdump ip host ace and not helios
//helios를 제외한 ace와 다른 host간 ip 패킷 출력
To print all traffic between local hosts and hosts at Berkeley:
-> tcpdump net ucb-ether
//local host와 berkeley host사이에서 발생하는 모든 트래픽 출력
To print all ftp traffic through internet gateway snup: (note that the expression is quoted to prevent the shell from (mis-)interpreting the parentheses):
-> tcpdump 'gateway snup and (port ftp or ftp-data)'
//gateway snup을 통한 모든 ftp 패킷 출력
To print IP packets longer than 576 bytes sent through gateway snup:
-> 'sniff'는 사전에서 찾아보면 '코를 킁킁거리다'라는 의미를 가진다. 코를 킁킁거리듯이 정보를 데이터 속에서 찾는 것이라고 생각하면 된다.
-> 스니핑 공격은 막는 것도 어려우며, 탐지 역시 쉽지 않다. 스니핑 공격을 수동적 공격이라고도 말하는데, 그 이유는 공격 시 툴을 설치해놓은 상태로 충분하기 때문이다.
-> 랜에서의 스니핑은 promiscuous 모드에서 작동한다. 랜 카드는 설정된 IP 주소값과 고유한 MAC(Media Access Control) 주소 값을 가지고 있으며 자신의 랜카드에 들어오는 프로토콜 형식에 따른 전기적 신호의 헤더부분, 즉 주소 값을 인식하고 자신의 버퍼에 저장할지를 결정한다. 그러나 스니핑은 자신이 가지지 말아야 할 정보까지 모두 받아들이는 것이다. 이렇듯 자신의 주소값을 무시하고 모든 패킷을 받아들이는 상태를 promiscuous 모드라고 한다.