Skip to content

A Blockchain-based Framework for Malware Recovery in IoT

Notifications You must be signed in to change notification settings

Lekssays/malrec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MalRec: A Blockchain-based Malware Recovery Framework for Internet of Things

Cite

@inproceedings{lekssays2022malrec,
  title={MalRec: A Blockchain-based Malware Recovery Framework for Internet of Things},
  author={Lekssays, Ahmed and Sirigu, Giorgia and Carminati, Barbara and Ferrari, Elena},
  booktitle={Proceedings of the 17th International Conference on Availability, Reliability and Security},
  pages={1--8},
  year={2022}
}

Getting Started

Prerequisites

  • Install docker
  • Install docker-compose
  • Install golang 1.14+ and add it to your PATH
  • Install npm and add it to your path

Run the system

  • Go to project directory cd malrec
  • Run the command: ./system.sh up
  • To display other options: ./system.sh

Supported Queries

Setup

  • Go to project directory cd malrec
  • Run
$ export CORE_PEER_TLS_ENABLED=true \
export CORE_PEER_LOCALMSPID='Org1MSP' \
export CORE_PEER_TLS_ROOTCERT_FILE=$(pwd)/network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt \
export CORE_PEER_MSPCONFIGPATH=$(pwd)/network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp \
export CORE_PEER_ADDRESS=0.0.0.0:1151 \
export FABRIC_CFG_PATH=$(pwd)/network/config/ \
export ORDERER_CA=$(pwd)/network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \
export ORDERER_ADDRESS=0.0.0.0:7050 \
export ORDERER_HOSTNAME=orderer.example.com

Add a Policy

$ peer chaincode invoke -o 0.0.0.0:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n policy --peerAddresses $CORE_PEER_ADDRESS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"function":"CreatePolicy","Args":["peer0.org1.example.com_policy", "3","1", "1", "1024"]}'

Add a Backup

$ peer chaincode invoke -o 0.0.0.0:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n backup --peerAddresses $CORE_PEER_ADDRESS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"function":"CreateBackup","Args":["BACKUP_52892114", "peer0.org1.example.com","QmdXYvmSEXrA9EoFBDQJRqrYiBLF6UB5o5M3pBSM4xJMuH", "https://drive.google.com/zerer;https://s3.amazonaws.com/bucketmalrec/ahsdlsdps;https://peer0.org1.example.com/hsqfhqsfaz", "some signature", "600"]}'

Get a Backup by backupID

$ peer chaincode query -o 0.0.0.0:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n backup --peerAddresses $CORE_PEER_ADDRESS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"function":"QueryBackup","Args":["BACKUP_52892114"]}'

Get Backups of a Specific Device by deviceID

$ peer chaincode query -o 0.0.0.0:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n backup --peerAddresses $CORE_PEER_ADDRESS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"function":"QueryBackupsByDeviceID","Args":["peer0.org1.example.com"]}'

Get Backups of a Specific Device during a Timestamp Range

$ peer chaincode query -o 0.0.0.0:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n backup --peerAddresses $CORE_PEER_ADDRESS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"function":"QueryBackupsByTimestamps","Args":["peer0.org1.example.com", "1621522261", "1621522261"]}'

Add a Malware

Adding a malware will automatically invalidate the backups of the corresponding device in the infection period. It perfoms a range query with timestamps where end_timestamp = current_timestamp and start_timestamp = end_timestamp - period. period is added as an argument to the query which denotes the estimated duration of infection in seconds (e.g., 600s in the example below).

$ peer chaincode invoke -o 0.0.0.0:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n malware --peerAddresses $CORE_PEER_ADDRESS --tlsRootCertFiles $CORE_PEER_TLS_ROOTCERT_FILE -c '{"function":"CreateMalware","Args":["MALWARE_52892114", "600","peer0.org1.example.com", "some checksum"]}'

Test the System with Hyperledger Caliper

Run a Benchmark

  • Go to caliper directory: $ cd caliper
  • Initialize a project: $ npm init -y
  • Install caliper: $ npm install --only=prod @hyperledger/caliper-cli@0.4.0
  • Bind it: $ npx caliper bind --caliper-bind-sut fabric:2.1 --caliper-bind-cwd ./
  • To test queryBackup run: $ npx caliper launch manager --caliper-workspace ./ --caliper-networkconfig networkConfig.yaml --caliper-benchconfig benchmarks/queryBackup.yaml --caliper-fabric-gateway-enabled --caliper-flow-only-test
  • To test queryBackupsByDeviceID run: $ npx caliper launch manager --caliper-workspace ./ --caliper-networkconfig networkConfig.yaml --caliper-benchconfig benchmarks/queryBackupsByDeviceID.yaml --caliper-fabric-gateway-enabled --caliper-flow-only-test
  • To test queryBackupsByTimestamps run: $ npx caliper launch manager --caliper-workspace ./ --caliper-networkconfig networkConfig.yaml --caliper-benchconfig benchmarks/queryBackupsByTimestamps.yaml --caliper-fabric-gateway-enabled --caliper-flow-only-test
  • Check caliper/report.html for the results of the tests.

Monitoring

Prometheus is enabled in the project as a monitoring framework. In addition, Grafana is added for better visualization. You can access Prometheus at: http://0.0.0.0:9090 and Grafana at http://0.0.0.0:3000.