본문 바로가기

Learning/ └Kali Linux

[Forensics Tools] p0f

 

fingerprinting(p0f)

■ Package Description

네트워크 상에 흐르는 패킷을 덤프하여, 분석하는 과정에서 해당 IP를 추적하다 보면 IP에서 

운영하는 서비스는 어떠한 시스템 에서 운영하고 있는지에 대한 정보를 파악해야 하는 경우가

발생한다. 이럴 때 사용하는 것 이 Fingerprint이다.

모의해킹이나, 해커가 공격하기 전에 정보를 수집하는 단계에서 많이 사용되며

Fingerprint를 검색해 보면 본래의 뜻은 '지문'이다. 하지만 여기서의 의미는

네트워크상에 흐르는 패킷의 특징적인 정보들을 추출해 내는 것 을 의미한다. 


  • 바닐라 TCP 연결의 양 끝점에서 운영 체제와 소프트웨어를 매우 확장 가능하고 매우 빠르게 식별합니다. 특히 NMap 프로브가 차단되거나 너무 느리거나 신뢰할 수 없거나 단순히 경보를 설정하는 설정에서는 더욱 그렇습니다.
  • 시스템 가동 시간 및 네트워크 연결, 거리 (NAT 또는 패킷 필터 뒤의 토폴로지 포함), 사용자 언어 기본 설정 등을 측정합니다.
  • 연결 공유 / NAT,로드 균형 조정 및 응용 프로그램 수준 프록 싱 설정의 자동화 된 탐지
  • X-Mailer 또는 User-Agent와 같은 선언문을 위조하는 클라이언트 및 서버 검색
p0f는 4가지 동작모드를 지원한다.
-SYN mode: 연결 시도 측 운영체제 정보 확인
-SYN + ACK mode: 응답하는 측 운영체제 정보 확인
-RST/RST+ ACK mode: 연결 시도 거부 시스템 측 정보 확인
-stray ACK mode: 기존 세션 검토

 

[사용방법]

syntax : p0f -i <interface name> -p

# p0f -i eth0 -p

# p0f -i eth0 -p -o /tmp/p0f.log

 

참조 사이트

http://lcamtuf.coredump.cx/p0f3/ 

https://www.youtube.com/watch?v=0I1D5SsMbOU

 

■ OPTIONS

# p0f -h

# p0f -h--- p0f 3.06b by Michal Zalewski <lcamtuf@coredump.cx> ---


./p0f: invalid option -- 'h'
Usage: p0f [ ...options... ] [ 'filter rule' ]

Network interface options:

    -i iface - listen on the specified network interface

    -r file - read offline pcap data from a given file

    -p - put the listening interface in promiscuous mode

    -L - list all available interfaces

 

Operating mode and output settings:

    -f file - read fingerprint database from 'file' (p0f.fp)

    -o file - write information to the specified log file

    -s name - answer to API queries at a named unix socket

    -u user - switch to the specified unprivileged account and chroot

    -d - fork into background (requires -o or -s)


Performance-related options:

    -S limit - limit number of parallel API connections (20)

    -t c,h - set connection / host cache age limits (30s,120m)

    -m c,h - cap the number of active connections / hosts (1000,10000)


Optional filter expressions (man tcpdump) can be specified in the command
line to prevent p0f from looking at incidental network traffic.

Problems? You can reach the author at <lcamtuf@coredump.cx>.

 

[EX] 사용 예제

# p0f -i eth0 -p -o /tmp/p0f.log

 --- p0f 3.07b by Michal Zalewski <lcamtuf@coredump.cx> ---


[+] Closed 1 file descriptor.
[+] Loaded 320 signatures from 'p0f.fp'.
[+] Intercepting traffic on interface 'eth0'.
[+] Default packet filtering configured [+VLAN].
[+] Log file '/tmp/p0f.log' opened for writing.
[+] Entered main event loop.

.-[ 192.168.1.15/35834 -> 173.246.39.185/873 (syn) ]-
|
| client   = 192.168.1.15/35834
| os       = Linux 2.2.x-3.x
| dist     = 0
| params   = generic
| raw_sig  = 4:64+0:0:1460:mss*20,10:mss,sok,ts,nop,ws:df,id+:0

- i 네트워크 인터페이스 지정

- p 무차별 모드

- o 결과를 파일로 저장

 

[실습] 네트워크 스니핑

@Kali Linux


터미널 및 브라우저 실행

[그림 1-1 사전준비단계]


인터페이스 검색

# p0f -L (that is not 0 or o that is number zero)

--- p0f 3.07b by Michal Zalewski <lcamtuf@coredump.cx> ---


-- Available interfaces --


  0: Name        : eth0

     Description : -

     IP address  : 192.168.10.50


  1: Name        : eth1

     Description : -

     IP address  : 192.168.20.50


  2: Name        : any

     Description : Pseudo-device that captures on all interfaces

     IP address  : (none)


  3: Name        : lo

     Description : -

     IP address  : 127.0.0.1


유효한 인터페이스 eth0 이라는걸 알 수 있다.


p0f 툴 실행(Listening 상태)

syntax : p0f -i <interface name> -p(promiscious)

# p0f -i eth0 -p(eth0 인터페이스 지정)

--- p0f 3.07b by Michal Zalewski <lcamtuf@coredump.cx> ---


[+] Closed 1 file descriptor.

[+] Loaded 320 signatures from 'p0f.fp'.

[+] Intercepting traffic on interface 'eth0'.

[+] Default packet filtering configured [+VLAN].

[+] Entered main event loop.

 

이제 브라우저를 통해 트래픽이 발생하면 p0f에 출력 됩니다.


브라우저 실행 후 p0f 터미널 확인

http:www.daum.net

root@kali:~# p0f -i eth0 -p

--- p0f 3.07b by Michal Zalewski <lcamtuf@coredump.cx> ---


[+] Closed 1 file descriptor.

[+] Loaded 320 signatures from 'p0f.fp'.

[+] Intercepting traffic on interface 'eth0'.

[+] Default packet filtering configured [+VLAN].

[+] Entered main event loop.


.-[ 192.168.10.50/45336 -> 183.110.25.181/80 (syn) ]-

|

| client   = 192.168.10.50/45336

| os       = Linux 3.11 and newer

| dist     = 0

| params   = none

| raw_sig  = 4:64+0:0:1460:mss*20,7:mss,sok,ts,nop,ws:df,id+:0

|

`----


.-[ 192.168.10.50/45336 -> 183.110.25.181/80 (mtu) ]-

|

| client   = 192.168.10.50/45336

| link     = Ethernet or modem

| raw_mtu  = 1500

|

`----


..................(중략)...........................................


.-[ 192.168.10.50/43574 -> 103.27.148.70/80 (syn+ack) ]-

|

| server   = 103.27.148.70/80

| os       = ???

| dist     = 0

| params   = none

| raw_sig  = 4:128+0:0:1460:mss*44,0:mss::0

|

`----


.-[ 192.168.10.50/43574 -> 103.27.148.70/80 (mtu) ]-

|

| server   = 103.27.148.70/80

| link     = Ethernet or modem

| raw_mtu  = 1500

|

`----

.-[ 192.168.10.50/57896 -> 180.70.134.139/80 (mtu) ]-

|

| server   = 180.70.134.139/80

| link     = Ethernet or modem

| raw_mtu  = 1500

|

`----


.-[ 192.168.10.50/36824 -> 183.110.25.168/80 (http request) ]-

|

| client   = 192.168.10.50/36824

| app      = Firefox 10.x or newer

| lang     = English

| params   = none

| raw_sig  = 1:Host,User-Agent,Accept=[image/png,image/*;q=0.8,*/*;q=0.5],Accept-Language=[en-US,en;q=0.5],Accept-Encoding=[gzip, deflate],?Referer,Connection=[keep-alive]:Accept-Charset,Keep-Alive:Mozilla/5.0 (X11; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0 Iceweasel/43.0.4

|

`----


트래픽 확인 결과 많은 패킷이 출력되었다.

source ip 와 destination IP 를 확인할 수 있고

서버의 IP및 사용된 포트, 서비스에 대한 OS를 확인할 수 있고 

디바이스의 가동시간 과 연결 방식 등 여러가지 정보를 출력한다.

통상적으로 해킹을 하기 전 footprint 단계에서 타겟 서비스의 정보를 파악하기 위해 사용하며

mitm 및 ssl 스트립과 함께 사용하면 더 많은 정보를 얻을 수 있다.


출발지 ip의 포트가 변하는걸 확인 할 수 있는데

-p 옵션을 지정하면 자신의 주소값을 무시하고 모든 패킷을 받아들이는 상태로 동작한다.

[그림 1-2 출처: 안랩]


[참고] footprint

공격대상 범위를 정하고 해당 대상의 정보를 모으는 방법


[참고] nmap 과의 차이점

nmap은 Active 한 것이고

p0f는 passive OS fingerprinting으로 수동적인 스니핑 툴 이다. 

passive한 경우 추가 또는 비정상적 트래픽을 생성하지 않는 것이 특징이다. 즉

정상적인 통신을 하면서 타겟 시스템의 OS를 확인할 수 있다.



파일로 저장하기 (# p0f -i eth0 -p -o /root/바탕화면/daum.log)

[그림 1-3 Listening상태로 기동중인 상태]




 

 

 

 

'Learning >  └Kali Linux' 카테고리의 다른 글

[Forensics Tools] pdfid  (0) 2017.01.11
[Forensics Tools] pdf-parser  (0) 2017.01.11
[Forensics Tools] iPhone Backup Analyzer  (0) 2017.01.11
[Forensics Tools] Guymager  (0) 2017.01.11