
# DNS Labeled Data Set

An IXIA BreakingPoint box was used to simulate both normal and attack (DNS tunnelling) DNS traffic. The resulting pcaps were obtained and fields relevant to Apache Spot (incubating) were injested. The attacks can be differentiated from the normal activity due to codes that were inserted into the Transaction ID field (upon ingestion: ‘dns_id’) which identifies either the fact that the traffic was normal or identifies the specific DNS tunneling activity being used. We provide the schema for the injested pcap data as well as the location and specifications the ingested data within Amazon-S3. Information is also provided for how to interpret the dns_id field..



## Data Schema

The schema for this data includes one field ('dns_id') in addition to what is usually used for DNS data in Apache Spot (incubating). The schema is as follows:


| Name         | Type      |
|--------------|:---------:|
| frame_time   | string    |
| unix_tstamp  | bigint    |
| frame_len    | int       |
| ip_dst       | string    |
| ip_src       | string    |
| dns_qry_name | string    |
| dns_qry_class| string    |
| dns_qry_type | int       |
| dns_qry_rcode| int       |
| dns_a        | string    |
| dns_id       | string    |

## Interpreting dns_id
The value of dns_id indicates that either the data row was taken from a packet capture of simulated normal DNS traffic, or from a packet capture of a particular type of simulated DNS tunnelling.

Within BreakingPoint, Transaction IDs are represented as a decimal number. However, tshark dissects the transaction ID in its hexadecimal representation (the format contained within parenthesis in the table below).

Within Apache Spot (incubating), only responses from DNS servers are ingested since the response packet contains the query made by the client and the response from the server in the same packet.


| Super Flow Name           | Transaction ID     | Description |
|---------------------------|:------------------:|-------------|
| Brandon_DNS_domain_Test   | 1008 (0x000003f0)  | [Normal] This super flow simulates normal DNS queries.|
| DNS_Tunnel_BE_1           | 1002 (0x000003ea)  | [Attack] This super flow simulates a message being tunneled over DNS via the query name field (url's are random strings), with a ip address response (drawn from a file of randomly generated IPs) being sent via the DNS answer field. |
| DNS_Tunnel_BE_2           | 1003 (0x000003eb})  | [Attack] This super flow simulates a message being tunneled over DNS via the query name field (url's random strings), with a response being given as no such url found. |
| TCP_DNS_Tunnel_BE_1       | 1001 (0x000003e9)  | [Attack] This super Flow simulates tunneling random noise using TCP over DNS. The payload is generated by a Markov Dictionary and encoded in the DNS requests (responses) by using hex0x20Hack encoding. |
| TCP_DNS_Tunnel_BE_2       | 1005 (0x000003ed)  | [Attack] This super Flow simulates tunneling random noise using TCP over DNS. The payload is generated by a Markov Dictionary and encoded in the DNS requests (responses) by using Base16Alpha encoding. |
| TCP_DNS_Tunnel_BE_3       | 1007 (0x000003ef)  | [Attack] This super Flow simulates tunneling random noise using TCP over DNS. The payload is generated by a Markov Dictionary and encoded in the DNS requests (responses) by using Base63 encoding. |

## Data Location

| Simulation Date   | Type  | Location  | Size  | Additional Comments   |
|-------------------|:------|:---------:|:-----:|:---------------------:|
| May 9, 2017       | Tarball of ingested data (parquet format) | | | |


## Number of Rows associated to each Value of dns_id

| Simulation Date  | Total Records  | dns_id=1008 | dns_id=1002 | dns_id=1003 | dns_id=1001 | dns_id=1005 | dns_id=1007 |
|:-----------------|:--------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|
| 5/9/2017         | 391,364,387    | 391,314,477 | 16,317      | 21,666      | 4,156       | 2,743       | 5,028       |


