banner

ICS410

Welcome to the CutSec SANS ICS410 resources page. These are just a few extra online resources and items that didn’t make it into the class. We hope these help your ICS / OT cybersecurity journey. Contact us if you have something to add or a suggestion.

Quick Reference Links

Certification Study Links

Books

Important OT Podcasts, Talks, and Interviews

General Topic Links

Equipment Links

  • Remote / Onsite Security Assessment Jumpkit – I started documenting my equipment in 2019. I’ll try to keep this up-to-date. Feel free to submit a Community Case to the project.
  • Essentials for Your ICS Incident Response Jump Bag – Dean Parson’s brief on “What’s inside your jump bag for incident response for industrial control systems? The gear you take with you is critical! Watch Dean explain the essential items you need in your ICS IR jump bag.”

Purdue Level 0/1 Links

Attack Consequence Videos

Attacks on Remote Sites

Physical Security Links

Managing Your IR Efforts

  • What are your goals?
  • What questions help you achieve your goals?
  • What data would answer those questions?
  • How do you acquire that data?

Incident Response Table Top Links

Velocio and PLC Links

Network Links

Radio Links

Remote Access Links

Just a few solutions to help start research into remote access solutions. These are not a recommendation, just links to the solutions.

NBAD / Asset Management Links

Just a few solutions to help start research into asset management and Network Behavior Anomaly Detection (NBAD) solutions. These are not a recommendation, just links to the solutions.

Software Bill of Materials (SBOM) Links

Just a few solutions to help start research into Software Bill of Materials (SBOM) solutions. These are not a recommendation, just links to the solutions.

Josh Wright Links

Jason Larsen Videos

Monta Elkins

Justin Searle Videos

Paul Piotrowski Links

Mike Hoffman Videos

Don C. Weber Videos

Podcasts

RfCat Send Modbus

In the ControlThings.io Linux virtual machine, start a terminal. Run the command ‘rfcat -r’. Paste in the following commands. NOTE: copy and paste this whole section. Some of the data does not display in the browser but it will be picked up when you copy it all. Paste into a text editor to confirm you have all code, even the bytes that are not displayed.

 
import time packets = ["\x00\x00\x00\x00\x00\x06\xff\x04\x08\xd2\x00\x02", \ 
    "\x7c\xfe\x00\x00\x00\xc9\xff\x04\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xdb\x00\x00\x01\xd6\x00\x00\x4a\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x61\x69\x6d\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x31\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", \ 
    "\x00\x04\x17\x02\x58\xb7\x78\xe7\xd1\xe0\x02\x5e\x08\x00\x45\x00\x00\x34\x70\x29\x40\x00\x80\x06\x00\x00\x8d\x51\x00\x0a\x8d\x51\x00\x56\xdf\x60\x01\xf6\x54\xdc\x43\x72\x80\x54\xd4\x37\x50\x18\xf8\x60\x1b\x29\x00\x00\x00\x01\x00\x00\x00\x06\xff\x02\x00\x63\x00\x1e", \ 
    "\x00\x00\x00\x00\x00\x07\xff\x04\x04\x00\x00\x00\x00"] 
d.setFreq(433000000) 
d.setMdmModulation(MOD_ASK_OOK) 
d.makePktFLEN(250) 
while True: 
    time.sleep(0.5) 
    d.RFxmit("A-ECS: Last Day, Best Day!!!") 
    for p in packets: 
        time.sleep(0.5) 
        d.RFxmit(p) 

TShark Commands

Industrial Control Protocols

Purpose:

  • Identify master servers and client / slaves
  • Identify common protocols in use by master servers
  • Also want to identify proprietary protocols in use, but this will be more difficult as Wireshark / Tshark may not have protocol dissectors for their identification and analysis.

# Modbus

## Masters
tshark -n -Y "mbtcp && tcp.dstport == 502" -T fields -e ip.src -r <file.pcap> | sort | uniq
## Masters with function codes
tshark -n -Y "mbtcp && tcp.dstport == 502" -T fields -e ip.src -e modbus.func_code -r <file.pcap> | sort | uniq
## Slaves
tshark -Y "mbtcp && tcp.dstport == 502" -T fields -e ip.dst -e eth.dst -r <file.pcap> | sort | uniq
### Note: The OUI hardware address does not resolve for field outputs. You have to check them yourself.
tshark -Y "mbtcp && tcp.dstport == 502" -T fields -e ip.dst -r <file.pcap> | sort | uniq | wc -l

# Aveva / WonderWare SuiteLink
## Servers
tshark -Y "tcp.dstport == 5413" -T fields -e ip.dst -r <file.pcap> | sort | uniq
## Clients
tshark -Y "tcp.dstport == 5413" -T fields -e ip.src -r <file.pcap> | sort | uniq

# Aveva / WonderWare InBatch
## Servers
tshark -Y "tcp.dstport >= 9000 && tcp.dstport >= 9015" -T fields -e ip.dst -r <file.pcap> | sort | uniq
# Clients
tshark -Y "tcp.dstport >= 9000 && tcp.dstport >= 9015" -T fields -e ip.src -r <file.pcap> | sort | uniq

# BACnet
## I-Am responses to Who-Is - sorted by source IP address
tshark -d udp.port==47809,bvlc -Y 'bacapp.unconfirmed_service == 0' -T fields -e ip.src -e bacapp.instance_number -e bacnet.sadr_mstp -e bacnet.snet -E separator=, -r <file.pcap>| sort | uniq | sort -g -t. -k 1,1 -k 2,2 -k 3,3 -k 4,4
## Device Count BACnet source
tshark -d udp.port==47809,bvlc -Y 'bacnet' -T fields -e ip.src -e ip.dst -r <file.pcap> | grep -v ',' | sort | uniq > <file.pcap>
### NOTE: The resulting file still needs to be counted. Probably best to export Wireshark filtered communications to an MS Excel file and do a pivot table.