44con 2014 - binary protocol analysis with canape, james forshaw

50
Binary Protocol Analysis with CANAPE James Forshaw

Upload: 44con

Post on 12-Jan-2015

279 views

Category:

Technology


4 download

DESCRIPTION

44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw CANAPE is an open source network proxy written in .NET. It has been developed to aid in the analysis and exploitation of unknown application network protocols using a similar use case to common HTTP proxies such as Burp or CAT. This workshop will go through the basics of analysing an unknown application protocol with hands on training examples. By the end of the workshop candidates should be able to better understand CANAPE’s functionality and be able to apply that to other protocols they come across.

TRANSCRIPT

Page 1: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Binary Protocol Analysis with CANAPE

James Forshaw

Page 2: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Schedule

1. What is CANAPE?

2. Say Hello to SuperFunkyChat

3. Proxying and Capturing Traffic

4. NetGraphs

5. Modelling State Transitions

6. Removing SSL/Layers

7. Traffic Manipulation and Replay

8. Developing Network Clients

9. Wrap Up

https://www.github.com/tyranid/44con_2014

Page 3: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Playing Along at Home

• Pre-built binaries available at:

• https://www.github.com/tyranid/44con_2014

• Example projects and slides will come later

ASK QUESTIONShttps://www.github.com/tyranid/44con_2014

Page 4: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

What is CANAPE?

• Arbitrary Network Protocol Capture Tool

• Specifically designed for Binary Protocols

• Windows focused (some Mono support)

• Open source, GPLv3, written in C#

• https://www.github.com/ctxis/canape

https://www.github.com/tyranid/44con_2014

Page 5: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

What Makes CANAPE Different?

• Number of tools to generate or fuzz network traffic

• Scapy, Peach, Sulley etc.

• Takes Web Application Testing Paradigm and applies to arbitrary protocols

• GUI

• Easy packet manipulation

• Quick feedback

https://www.github.com/tyranid/44con_2014

Page 6: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 0:Quick Tour of CANAPE

https://www.github.com/tyranid/44con_2014

Page 7: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Say Hello to Super Funky Chat!!11!

https://www.github.com/tyranid/44con_2014

Page 8: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

SuperFunkyChat

• Simple Windows IM Application

• Written originally as a CTF and CANAPE tutorial

• Uses a binary protocol

• Supports SOCKS

• Has a few “Undocumented” features

• Sourcecode available at https://www.github.com/tyranid/SuperFunkyChat

• Don’t use as a real IM system

https://www.github.com/tyranid/44con_2014

Page 9: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 1: Quick Tour of SuperFunkyChat

https://www.github.com/tyranid/44con_2014

Page 10: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Proxying and Capturing Traffic

• CANAPE Supports Many Ways of Proxying Traffic:

• TCP/UDP Port Forwarding

• SOCKS v4/v5 Proxy

• HTTP Forward and Reverse Proxies

• Can develop your own extensions to support other types of networks (NamedPipes, COM ports)

• Also supports Servers and Clients

https://www.github.com/tyranid/44con_2014

Page 11: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Identifying Suitable Traffic

• Need to work out what traffic to capture

• Reverse Engineering

• Wireshark/PCAP

https://www.github.com/tyranid/44con_2014

Page 12: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Forcing Traffic Through CANAPE

• CANAPE works at Application Level (TCP/UDP) not network

• Traffic from Application needs to go through CANAPE

• Proxy support

• DNS redirecting

• DNAT

• SOCKSifying tools (Proxifier for example)

https://www.github.com/tyranid/44con_2014

Page 13: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Services

• CANAPE insolates your project into a set of services.

• You define a template for your service:

• Data flow

• State model

• Dynamic content

• When a new connection is made an Instance is instantiated based on the template

https://www.github.com/tyranid/44con_2014

Page 14: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 2:Capturing SuperFunkyChat

https://www.github.com/tyranid/44con_2014

Page 15: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

NetGraphs

https://www.github.com/tyranid/44con_2014

Page 16: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

NetGraphs

• NetGraphs used to mode data flow and state

• Specified as a directed graph

• Standard graph nodes available

• Can implement custom nodes in C#/IronPython

https://www.github.com/tyranid/44con_2014

Page 17: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Specifying a NetGraph

Select Default Graph

https://www.github.com/tyranid/44con_2014

Page 18: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Netgraph in Service Context

Client Application Server Application

https://www.github.com/tyranid/44con_2014

Page 19: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Some Standard Nodes

Name Description

Log Node Logs packets as they traverse the node

Decision Node Performs an IF condition on packets

Switch Node Select on output based on state

Edit Node Displays a dialog to allow manual packet editing

Dynamic Node Scripted content

Layer Section Graph container and layer processing

https://www.github.com/tyranid/44con_2014

Page 20: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Graph User Interface

• Create a new graph by right clicking project explorer

• Left Click to Select and Drag Nodes

• Right Click to Add Nodes

• Hold and Drag Middle Button to Add Edges

• Can also hold left Control and use Left button

• Nodes can be disabled from right click menu

https://www.github.com/tyranid/44con_2014

Page 21: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Node Properties

https://www.github.com/tyranid/44con_2014

Page 22: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Node Filters

• Each node has a Filters property

• Defines match rules for what packets the node will process

https://www.github.com/tyranid/44con_2014

Page 23: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 3: Playing with Netgraphs

https://www.github.com/tyranid/44con_2014

Page 24: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Traffic Analysis

https://www.github.com/tyranid/44con_2014

Page 25: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Packet Logging

• Only packets which traverse a log node in a graph end up being logged (well unless you do it manually)

• Affected by node filters

• Can specify a number of properties:

• Colour

• Logged Name

https://www.github.com/tyranid/44con_2014

Page 26: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 4:Packet Logging Interface

https://www.github.com/tyranid/44con_2014

Page 27: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Packet Tools

• Analysis of traffic means looking at binary data

• Many different tasks:

• Comparing packets and sequences of packets

• Importing and exporting data

• Searching

https://www.github.com/tyranid/44con_2014

Page 28: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 5:Packet Tools

https://www.github.com/tyranid/44con_2014

Page 29: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Parsing Traffic

• CANAPE’s data pipeline can be scripted using C# or Python

• Not necessarily easy thing to do

• Parser editor to the rescue

https://www.github.com/tyranid/44con_2014

Page 30: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Parser Editor

https://www.github.com/tyranid/44con_2014

Page 31: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Parser Editor

• Build protocol structure in GUI

• Defines 3 types:

• Sequences

• Enumerations

• Parsers

• Supports complex expressions, TLV, sub-sequences etc.

• Compiles to C# parser script, can be exported and tweaked

https://www.github.com/tyranid/44con_2014

Page 32: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Parsed Packet Format

Root Key (/)

Key A

Value Y

Key B Value X

SelectionPath = /A/Y

• Nodes and filtes support a Selection Path• Uses an XPATH syntax to determine selection

https://www.github.com/tyranid/44con_2014

Page 33: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

SuperFunkyChat Packet Structure

Length (4 bytes)

Checksum (4 bytes)

Data (Length bytes)

Command (1 byte)

Command Specific Data(Length-1 bytes)

https://www.github.com/tyranid/44con_2014

Page 34: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 6:Parser Development

https://www.github.com/tyranid/44con_2014

Page 35: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Removing TLS/Layers

• One of the most common security protocols is TLS/SSL

• CANAPE doesn’t assume it knows better than you whether a connection is TLS or not

• Can wrap and decrypt entire connection

https://www.github.com/tyranid/44con_2014

Page 36: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 7:Remove TLS Encryption

https://www.github.com/tyranid/44con_2014

Page 37: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

State Modelling

https://www.github.com/tyranid/44con_2014

Page 38: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

State Modelling

• Most protocols aren’t simple streams of data

• Need to deal with State

• Main way of handling this in CANAPE is through the netgraphs

• Also simpler interface using state graphs

https://www.github.com/tyranid/44con_2014

Page 39: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Meta Data Storage

Service 1 Instance

Local Meta

Service 1 Instance

Global Meta Local

Meta

Service 2 Instance

Local Meta

ProjectMeta

https://www.github.com/tyranid/44con_2014

Page 40: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Accessing Meta Data Storage

• Local (Graph.Meta)

• Global (Graph.GlobalMeta)

• Project (CANAPEProject.CurrentProject.GlobalMeta)

• Layers (this.Meta/this.GlobalMeta)

https://www.github.com/tyranid/44con_2014

Page 41: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

MetaSelection

• Already seen XPATH SelectionPath

• Filters can also select on MetaData

• Examples:

• #MetaName – Select the local meta value

• $MetaName – Select the global meta value

https://www.github.com/tyranid/44con_2014

Page 42: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 8:Developing XOR Decryption

https://www.github.com/tyranid/44con_2014

Page 43: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Traffic Manipulation and Replay

https://www.github.com/tyranid/44con_2014

Page 44: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Dealing with Checksums

• Up to now we’ve only looked at packets, never changed and replayed them

• Something prevents us doing this, the checksum

• Could write a script to fix up checksum after modification

• Parser editor also gives some basic functions to do this for us

https://www.github.com/tyranid/44con_2014

Page 45: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Expressions

• Parser editor supports a python-like syntax expression evaluator

• Combine with calculated values to recalculate checksum

• Can even use python snippets:

DoChecksum.RunMe(Command, bytes(Payload))

https://www.github.com/tyranid/44con_2014

Page 46: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 9:Packet Replay and Injection

https://www.github.com/tyranid/44con_2014

Page 47: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Developing Network Clients

https://www.github.com/tyranid/44con_2014

Page 48: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Network Clients

• CANAPE supports developing network clients

• Designed to allow reuse of work developed through MitM(graphs/scripts) to be reused with the minimal of effort

• Can be used for fuzzing or other automated tasks.

https://www.github.com/tyranid/44con_2014

Page 49: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Workshop 10:Command Fuzzer

https://www.github.com/tyranid/44con_2014

Page 50: 44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw

Wrap Up

https://www.github.com/tyranid/44con_2014