Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Internet of Things-technologie

DDS-beveiliging op de hard(ware) manier - SGX:deel 2 (Micro + beveiliging + SCONE)

Dit is deel 2 in een zes -blogreeks over dit onderwerp. Als je het overzicht van deel 1 hebt gemist, lees het dan hier.

Ontwikkeling voor Software Guard Extensions (SGX) is oorspronkelijk door Intel® ontworpen als een refactoringproces. Elke applicatie zou van de grond af worden ontworpen of opnieuw worden ontworpen om geheimen en geheimbeheercode van andere code te verdelen, en vervolgens gecompileerd met de SGX-softwareontwikkelingskit (SDK) om de gevoelige codepartitie te beschermen. Dit kwam overeen met Intel's doel om de Trusted Computing Base (TCB) tot het kleinst mogelijke gebied te reduceren.

Bij bestaande applicaties is dit echter een heel proces. Tijdens het testen hebben Intel en de United States Airforce Academy een open source pdf-viewer gerefactored in een vroege-toegangsstudie. De refactoring omvatte het toevoegen van toegangscontrole tot elk deel van een document (digitale redactie) en een open source Video Teleconferencing (VTC) applicatie (wire to screen encryptie). Het proces duurde twee manjaren om beide projecten te voltooien.

Omdat refactoring/recompiling zowel een zware last is als, erger nog, niet altijd mogelijk is vanwege toegang tot de code, zijn er een aantal andere projecten naar voren gekomen om SGX-beveiligde containers/LibOSes en cross-compilers te creëren. Grafeen en SCONE zijn goede voorbeelden van projecten die publiekelijk beschikbaar zijn om deze taken te volbrengen. Ik heb zowel naar Graphene als naar SCONE gekeken, en beide hebben voor- en nadelen voor de eindresultaten van een succesvolle build. SCONE kan echter al zowel RTI Connext® DDS Micro- als RTI Connext DDS Security-plug-ins kruislings compileren met alleen tweaks om scripts te bouwen en/of triviale wijzigingen in de musl-bibliotheek aan te brengen.

Bovendien produceert SCONE een statisch gekoppelde applicatie die uitvoerbaar is op een vanille Ubuntu 16.04 met de SGX-driver (en capabele CPU) geïnstalleerd.

Graphene vereist implementatie van ten minste één nieuwe systeemaanroep (getifaddrs) of wijzigingen in DDS om de oproep te vermijden, evenals verschillende wijzigingen in andere DDS-aanroepen die vaak worden gedaan in Connext DDS Micro met beperktere besturingssystemen (d.w.z. nanosleep). Grafeen moet ook worden uitgevoerd als een docker-container. Als gevolg hiervan ligt deze eerste focus op het implementeren van een veilige Connext DDS Micro-applicatie met SCONE. We zullen later in deze blogreeks meer over grafeen vertellen.

Een van de SCONE-projecten bestaat uit een cross-compiler die een uitvoerbaar binair bestand uitvoert dat de applicatie in een SGX-beveiligde omgeving verpakt. Deze cross-compiler linkt statisch tegen musl in plaats van GLibC. Als resultaat zullen we alle componenten die nodig zijn om onze applicatie te bouwen statisch compileren, inclusief OpenSSL en Connext DDS Micro.

Om verder te gaan, hebt u RTI DDS Connext Micro 3.0 (inclusief de bouwbare bron), openssl 1.0.2r-bron en SCONE nodig. RTI Connext DDS-producten zijn verkrijgbaar (met gelicentieerde toegang) door contact op te nemen met RTI; OpelSSL is beschikbaar op https://www.openssl.org/source/; en SCONE is toegankelijk via door SCONE samengestelde afbeeldingen op dockerhub. Deze SCONE-containers zijn privé en u moet toegang verkrijgen door contact op te nemen met SCONE via [email protected].

Mijn hostsysteem is geschikt voor SGX en draait Ubuntu 16.04 LTS. Je kunt zonder SGX-systeem meevolgen. Als je een SGX-systeem hebt – en SGX wilt gebruiken – moet je de Intel SGX-driver installeren vanaf https://github.com/intel/linux-sgx-driver. Als je deze blog leest, wordt er vanuit gegaan dat je weet hoe je docker, docker hub en Linux moet gebruiken (of bereid bent dit te leren).

Om te beginnen heb ik zowel de RTI DDS Connext Micro 3.0 als OpenSSL 1.0.2r in mijn homedirectory gezet. Ik pakte ze uit in de thuismap en eindigde met twee mappen:

openssl-1.0.2r
rti_connext_dds_micro-3.0.0

Alle volgende opdrachten zijn specifiek voor deze mappen. Log in op docker en zorg ervoor dat u zich in uw thuismap bevindt. Voer de volgende opdrachten uit om de container in de interactieve modus te starten. Als u meevolgt zonder SGX, laat dan de --device=/dev/isgx weg van het commando.

cd ~
docker run -it --device=/dev/isgx -v "$PWD":/home
sconecuratedimages/crosscompilers:ubuntu

Ik heb gemerkt dat de container een beetje licht is voor sommige noodzakelijke (en enkele handige) hulpmiddelen. Om dit te verhelpen, installeert u de tools rechtstreeks.

apt-update
apt install -y make default-jre cmake nano less
apt install -y perl --reinstall

Laten we vervolgens OpenSSL compileren. De vorige herinstallatie van perl zorgde voor enkele ontbrekende modules in het configuratiescript. Voer de volgende opdrachten uit om OpenSSL te maken, te testen en in uw container te installeren. Houd er rekening mee dat de test enige tijd in beslag zal nemen. Voor een benchmark voor een honkbalveld duurde het 45 minuten om de volgende opdrachten uit te voeren op een i5 NUC.

cd /home/openssl-1.0.2r
./config
maken
test maken
maak installatie
export OPENSSLHOME=/usr/local/ssl

ln -s /usr/local/ssl/lib/libcrypto.a /usr/local/ssl/lib/libcryptoz.a
ln -s /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libsslz.a

De softlinks aan het einde van de opdracht helpen bij de Makefile in het voorbeeld dat we zullen gebruiken. Ja, het is een beetje hacky (wat verwacht je van de beveiligingsman?), maar het werkt.

Laten we vervolgens RTI DDS Micro 3.0 compileren. Voer de volgende opdrachten uit.

cp /opt/scone/cross-compiler/x86_64-linux-musl/lib/libpthread.a /opt/scone/cross-compiler/x86_64-linux-musl/lib/libnsl.a

PATH=$PATH:/opt/scone/cross-compiler/libexec/gcc/x86_64-linux-musl/7.3.0/
export RTIMEHOME=/home/rti_connext_dds_micro-3.0.0
RTIMEARCH=sgxLinux_x64gcc exporteren

cd /home/rti_connext_dds_micro-3.0.0/

./resource/scripts/rtime-make -DRTI_NO_SHARED_LIB:bool=true -DOPENSSLHOME=/usr/local/ssl --delete --target self --name $RTIMEARCH -G "Unix Makefiles" --build -- config vrijgeven

Op dit moment zouden we bibliotheken van zowel OpenSSL als RTI DDS Micro (inclusief beveiliging) moeten hebben die zijn gekoppeld aan musl in plaats van GLibC.

Laten we verder gaan met een testtoepassing. Voer de volgende opdrachten uit.

cd /home/
cd rti_connext_dds_micro-3.0.0/example/unix/C/
cd HelloWorld_dpde_secure
rm -rf objs
maken

Als alles goed is gegaan, hebben we zowel een uitgever als een abonnee in de volgende map:/home/rti_connext_dds_micro-3.0.0/example/unix/C/HelloWorld_dpde_secure/objs/sgxLinux_x64gcc/. Laten we het uitvoeren om te zien wat we hebben.

SCONE_VERSION=1 SCONE_HEAP=87108864 ./objs/sgxLinux_x64gcc/HelloWorld_publisher

De uitvoer zou er ongeveer zo uit moeten zien:

SCONE_QUEUES=1 exporteren
SCONE_SLOTS=256 exporteren
SCONE_SIGPIPE=0 exporteren
SCONE_MMAP32BIT=0 exporteren
SCONE_SSPINS=100 exporteren
SCONE_SSLEEP=4000 exporteren
SCONE_KERNEL=0 exporteren
SCONE_HEAP=87108864 exporteren
SCONE_STACK=81920 exporteren
SCONE_CONFIG=/home/jason/sgx-musl.conf exporteren
SCONE_ESPINS=10000 exporteren
export SCONE_MODE=hw
export SCONE_SGXBOUNDS=nee
SCONE_VARYS=nee exporteren
export SCONE_ALLOW_DLOPEN=nee
export SCONE_MPROTECT=nee
Revisie:4be39d5943d5c15e11fa17055b859de4a25c0288 (do 23 aug 14:14:04 2018 +0200)
Branch:cf-java-fix (vuil)
Configureeropties:--enable-shared --enable-debug --prefix=/home/christof/GIT/subtree-scone/built/cross-compiler/x86_64-linux-musl

Enclave-hash:14fa1810e1d35799ba9910243cab89660b7146f96babb97a32caef9c06b3c9a2

[1555446711.154091000]FOUT:ModuleID=0 Errcode=17 X=1 E=0 T=1
osapi/posixThread.c:96/OSAPI_Thread_get_policy:sysrc=38
# Identiteit CA, :file:security/ca/ca.pem
# machtigingen CA, :file:security/ca/ca.pem
# PEER-certificaat:file:security/ca/certs/publisher.pem
# PEER-sleutel:file:security/ca/certs/publisher_key.pem
# XML-governance:file:security/xml/governance.p7s
# XML-machtigingen:file:security/xml/permissions_publisher.p7s

[1555446711.159431000]FOUT:ModuleID=0 Errcode=17 X=0 E=1 T=1
/:-1/:

[1555446711.159704000]FOUT:ModuleID=0 Errcode=17 X=0 E=1 T=1
/:-1/:

[1555446711.197874000]FOUT:ModuleID=0 Errcode=17 X=0 E=1 T=1
/:-1/:
Hallo Wereld! (0)

Hallo wereld! (1)
Hallo wereld! (2)
Hallo wereld! (3)
Hallo wereld! (4)

Wees niet bang voor de gerapporteerde f

[1] [2] 下一页

Internet of Things-technologie

  1. DDS-beveiliging op de hard(ware) manier - SGX Deel 3:Geharde DDS-services
  2. DDS-beveiliging op de hard(ware) manier - SGX:deel 1 (overzicht)
  3. De weg naar industriële IoT-beveiliging
  4. Beveiligingsproblemen van het industriële IoT aanpakken
  5. Het IoT beveiligen tegen cyberaanvallen
  6. De IoT-bedreigingsvector beveiligen
  7. Hyperconvergentie en berekening aan de rand:deel 3
  8. De beveiligingsuitdaging van het internet der dingen:deel 2
  9. De beveiligingsuitdaging van het internet der dingen:deel 1
  10. Het industriële IoT beschermen:een aanpak van de volgende generatie aannemen – deel 2
  11. Beveiliging versterkt het ware potentieel van IoT