software_defined_customization
Protocol customization using a software defined network approach and a new Layer 4.5 customization framework
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.2%) to scientific vocabulary
Keywords
Repository
Protocol customization using a software defined network approach and a new Layer 4.5 customization framework
Statistics
- Stars: 6
- Watchers: 5
- Forks: 2
- Open Issues: 2
- Releases: 0
Topics
Metadata Files
README.md
Software Defined Network Customization at Layer 4.5
Prototype of Layer 4.5 customization framework to match NetSoft 2022 paper titled "Towards Software Defined Layer 4.5 Customization". Layer 4.5 contains a Network-wide Customization Orchestrator (NCO) to distribute Layer 4.5 customization modules to devices. The NCO communicates with a Device Customization Agent (DCA) to deliver the module (DCA_user). The DCA_kernel code will handle the registration of the customization module and inserting the module into the socket flow between the socket layer and transport layer.
Acronyms:
1) NCO: Network-wide Customization Orchestrator
1) DCA: Device Customization Agent
1) CIB: Customization Information Base
Overview:
1) NCO distributes customizations to devices over a control channel for insertion at Layer 4.5
* Layer 4.5 is transparent to application and transport layers
2) NCO has several internal components to support distribution and management of the deployed customization
* Construct: responsible for building the per-device customization module to include embedding necessary parameters and storing all values in the CIB
* Deploy: supports transport of customization modules, in binary format, to devices on the networ
* Revoke: support the removal of outdated or misbehaving customization modules from a customized device
* Monitor: allows for retrieving module use statistics across the network to aid in forensics analysis
* Security: provide a mechanism for adding per-network module security requirements to match a given threat model
* Middlebox: interface with network controlled middlebox device to allow processing a deployed customization
3) DCA establishes the control channel with NCO to manage customizations installed on the device.
* DCA_user establishes the control channel with NCO
* DCA_kernel encompasses Layer 4.5 logic to manage customizations on the device
3) Customization modules register with Layer 4.5 DCA
* register the protocol (TCP or UDP), application (task) name, destination port, destination IPv4 address, source IPv4 address (if server), and source port (if desired) for tracking sockets
* server knows the source and dest IP since it binds to a source IP
* clients don't know source IP since IP table lookup has not happened yet
* source port (client) generally not useful since randomly assigned value
* destination port (server) generally not useful since randomly assigned by the client
* provide send\_function and recv\_function pointers to be stored and
applied to customized sockets
* the send or recv function may also be NULL if not customizing that path
* if both are NULL, then customization is rejected
Layer 4.5 using Vagrant and VirtualBox:
Prerequisites:
1) Vagrant: https://www.vagrantup.com
1) VirtualBox: https://www.virtualbox.org
1) Approximately 30GB of hard drive space
* 5GB Vagrant box
* 11GB VMDK for server VM
* 11GB VMDK for client VM
Install Steps
1) Git clone this repo
* create your own branch after cloning to avoid accidental changes to master:
* `git checkout -b someName`
1) If changes to common variables or file paths are required/desired:
* Update config.sh with new value to existing variable
* Only need to update portion marked 'UPDATE SECTION'
* Execute config.sh to update all necessary files to reflect the new value
1) (Optional) Update Makefile to reflect desired debug level:
* software_defined_customization/DCA\_kernel/Makefile
* Makefile is set with DEBUG defined by default to print messages to a trace file
1) Navigate to the vagrant folder and install base machine:
* `cd software_defined_customization/vagrant`
* (Optional) Edit the included Vagrantfile with desired parameters
* a different vagrant box can be used, but must be configured with dependencies manually
* If desired, turn off the virtualbox GUI by commenting out vb.gui = true
* adjust the allotted memory if your machine does not have sufficient RAM to support 2 VM's with 8GB each
* setup.sh: shell script to run on first install (provisioning)
* `vagrant up`
* If you get 'bandwidthctl' error, then comment out that line in the vagrant file and run up command again
1) Wait for machine to download and install Layer 4.5 and dependencies
* NOTE: BTF error is not an issue at the moment and will be remedied later
1) Use the GUI or SSH into VM and check install:
* `vagrant ssh server` (client)
* `lsmod | grep layer`
* NOTE: location of layer4_5 module: /usr/lib/modules/$(uname -r)/layer4_5
* NOTE: Layer 4.5 will auto load at startup and any modules present in the new module customizations folder will load after checking if Layer 4.5 is running
Vagrant VM settings:
username/password: vagrant/vagrant
username/password: root/vagrant
VBOX specific:
- base memory: 8192
- 2 CPU
- video: 32MB
- Network 1: NAT, Paravirtualized adapter
- Network 2: Internal Network, Paravirtualized adapter, 1Gbps link speed
various aliases inserted by setup.sh script
Layer 4.5 on your own Ubuntu VM:
NOTE: Other Linux OS's are possible, but you need to adjust scripts to reflect your environment (mainly the installer file)
1) Download and configure Ubuntu 20.04+ running kernel 5.11+
* View notes in Vagrantfile and setup.sh on how to configure VM for experiments
1) Install layer 4.5 kernel module
* `cd software_defined_customization/DCA_kernel/bash`
* `sudo ./installer.sh`
Branches
1) Buffering: introduces a different approach for receive side processing to allow the customization module to buffer L4 data for the application. This basically allows processing for stricter applications, such as those that use TLS.
1) Rotating: introduces the capability to rotate customization modules on an active socket and maintain backward compatibility until both end points have same customization module active (i.e., due to transmission delays).
Next Steps:
1) To get experience with Layer 4.5 modules and how they are used, Use the README provided in the layer45modules/sample_modules folder to run the provided sample modules
* Sample modules don't use the NCO or user-space DCA component and focus on Layer 4.5 only
1) To run experiments from paper, see README in experiment_scripts/netsoft and modules in layer45modules/netsoft
Owner
- Login: danluke2
- Kind: user
- Repositories: 2
- Profile: https://github.com/danluke2
GitHub Events
Total
- Delete event: 1
- Issue comment event: 1
- Push event: 1
- Pull request event: 4
- Fork event: 1
- Create event: 1
Last Year
- Delete event: 1
- Issue comment event: 1
- Push event: 1
- Pull request event: 4
- Fork event: 1
- Create event: 1
Dependencies
- actions/checkout v3 composite
- actions/configure-pages v3 composite
- actions/deploy-pages v2 composite
- actions/upload-pages-artifact v1 composite
- ruby/setup-ruby v1 composite
- github-pages >= 0 development
- jekyll-feed >= 0 development
- jekyll-glossary_tooltip >= 0 development
- jekyll-liquify >= 0 development
- jekyll-remote-theme >= 0 development
- jekyll-sitemap >= 0 development
- just-the-docs >= 0
- tzinfo >= 1, < 3
- tzinfo-data >= 0
- webrick >= 0
- activesupport 7.0.4.2
- addressable 2.8.1
- bundler 2.3.25
- coffee-script 2.4.1
- coffee-script-source 1.11.1
- colorator 1.1.0
- commonmarker 0.23.8
- concurrent-ruby 1.2.2
- dnsruby 1.61.9
- em-websocket 0.5.3
- ethon 0.16.0
- eventmachine 1.2.7
- execjs 2.8.1
- faraday 2.7.4
- faraday-net_http 3.0.2
- ffi 1.15.5
- forwardable-extended 2.6.0
- gemoji 3.0.1
- github-pages 228
- github-pages-health-check 1.17.9
- html-pipeline 2.14.3
- http_parser.rb 0.8.0
- i18n 1.12.0
- jekyll 3.9.3
- jekyll-avatar 0.7.0
- jekyll-coffeescript 1.1.1
- jekyll-commonmark 1.4.0
- jekyll-commonmark-ghpages 0.4.0
- jekyll-default-layout 0.1.4
- jekyll-feed 0.15.1
- jekyll-gist 1.5.0
- jekyll-github-metadata 2.13.0
- jekyll-glossary_tooltip 1.5.0
- jekyll-include-cache 0.2.1
- jekyll-liquify 0.0.2
- jekyll-mentions 1.6.0
- jekyll-optional-front-matter 0.3.2
- jekyll-paginate 1.1.0
- jekyll-readme-index 0.3.0
- jekyll-redirect-from 0.16.0
- jekyll-relative-links 0.6.1
- jekyll-remote-theme 0.4.3
- jekyll-sass-converter 1.5.2
- jekyll-seo-tag 2.8.0
- jekyll-sitemap 1.4.0
- jekyll-swiss 1.0.0
- jekyll-theme-architect 0.2.0
- jekyll-theme-cayman 0.2.0
- jekyll-theme-dinky 0.2.0
- jekyll-theme-hacker 0.2.0
- jekyll-theme-leap-day 0.2.0
- jekyll-theme-merlot 0.2.0
- jekyll-theme-midnight 0.2.0
- jekyll-theme-minimal 0.2.0
- jekyll-theme-modernist 0.2.0
- jekyll-theme-primer 0.6.0
- jekyll-theme-slate 0.2.0
- jekyll-theme-tactile 0.2.0
- jekyll-theme-time-machine 0.2.0
- jekyll-titles-from-headings 0.5.3
- jekyll-watch 2.2.1
- jemoji 0.12.0
- just-the-docs 0.4.1
- kramdown 2.3.2
- kramdown-parser-gfm 1.1.0
- liquid 4.0.4
- listen 3.8.0
- mercenary 0.3.6
- minima 2.5.1
- minitest 5.17.0
- nokogiri 1.14.2
- octokit 4.25.1
- pathutil 0.16.2
- public_suffix 4.0.7
- racc 1.6.2
- rake 13.0.6
- rb-fsevent 0.11.2
- rb-inotify 0.10.1
- redcarpet 3.6.0
- rexml 3.2.5
- rouge 3.26.0
- ruby2_keywords 0.0.5
- rubyzip 2.3.2
- safe_yaml 1.0.5
- sass 3.7.4
- sass-listen 4.0.0
- sawyer 0.9.2
- simpleidn 0.2.1
- terminal-table 1.8.0
- typhoeus 1.4.0
- tzinfo 2.0.6
- unf 0.1.4
- unf_ext 0.0.8.2
- unicode-display_width 1.8.0
- webrick 1.8.1


