Kódování pro obnovitelné zabezpečení
Důležité
Toto je dokumentace k Azure Sphere (starší verze). Azure Sphere (starší verze) se vyřazuje 27. září 2027 a uživatelé musí do této doby migrovat do Azure Sphere (integrované). K zobrazení dokumentace k Azure Sphere (integrované) použijte selektor verzí umístěný nad obsahem.
Podpora obnovitelného zabezpečení je jednou ze sedmi vlastností vysoce zabezpečených zařízení. V Azure Sphere to znamená, že veškerý software na zařízení ( včetně vlastních aplikací) se dá podle potřeby aktualizovat, aby se vyřešily nově zjištěné chyby zabezpečení. Zabezpečení je důvodem, proč Azure Sphere existuje, a proto není příliš často nutné zdůraznit, že udržování zařízení v bezpečí je vždy nejdůležitější. Není možné napsat zcela zabezpečený kód, ale s dobrými postupy kódování, extrémní opatrností při reakci na nově zjištěná ohrožení zabezpečení a závazek obnovitelného zabezpečení, můžete zajistit, aby kód aplikace vysoké úrovně byl co nejbezpečnější. Model izolace aplikací Azure Sphere poskytuje řadu funkcí, které zajistí následující:
- Před instalací nebo spuštěním musí být všechny aplikace podepsány odpovídajícím způsobem.
- Aplikace má přístup pouze k hardwarovým funkcím a internetovým adresám zadaným v souboru manifestu aplikace aplikace.
- Rozhraní API poskytovaná sadou Azure Sphere SDK zahrnují mnohem omezenou podmnožinu standardní knihovny jazyka C, která vynechá potenciální bezpečnostní díry, jako jsou uživatelské účty a přístup k prostředí.
- Operační systém Azure Sphere a zákaznické aplikace je možné bezpečně aktualizovat pomocí služby zabezpečení Azure Sphere, protože jsou identifikovány a vyřešeny obavy týkající se zabezpečení.
Minimalizace prostoru pro podepisování kódu a útoku vás ale zatím bere jenom vy. Dodržováním sady osvědčených postupů pro zabezpečený vývoj softwaru můžete zajistit, aby aplikace, které podepisujete, byly co nejbezpečnější a nejbezpečnější. Tento článek popisuje některé nástroje, které tým Azure Sphere používá ve svých vlastních vývojových postupech.
Plánování pravidelných nasazení
Operační systém Azure Sphere a sada Azure Sphere SDK se aktualizují aspoň čtvrtletně. Měli byste se zaměřit na podobný plán nasazení vlastních aplikací.
Ujistěte se, že sada nástrojů zůstává aktuální.
Operační systém Azure Sphere a sada SDK tvoří velkou část sady nástrojů Azure Sphere, ale můžete mít další komponenty, které spravujete samostatně. Nezapomeňte pravidelně kontrolovat aktualizace těchto komponent.
Běžné ohrožení zabezpečení a ohrožení zabezpečení (CVE) jsou veřejné sestavy, které slouží k popisu ohrožení zabezpečení v systému, včetně Azure Sphere. Aktualizace operačního systému Azure Sphere pravidelně řeší cves a pomáhají udržovat vaše zařízení v bezpečí. Pokud je to možné, zahrňte do kanálů buildu kontroly CVE. Weby záložek, jako je domovská stránka CISA, která sleduje aktualizace zabezpečení. Při aktualizaci sady nástrojů znovu nasaďte aplikace a znovu je nasaďte.
Šíření a dodržování standardů kódování
Kód, který dodržuje známý standard, je snazší udržovat, snadněji kontrolovat a snadněji testovat. Existují veřejně dostupné standardy kódování pro jazyk C. MISRA je dobře zavedený a CERT má také kódovací standard pro jazyk C. Kromě těchto základních standardů doporučujeme používat životní cyklus vývoje zabezpečení všude, kde je to možné.
Ujistěte se, že kompilujete základní příznaky zabezpečení.
Všechny aplikace Azure Sphere jsou vytvořené pomocí kompilátorů jazyka C z kolekce Gnu Compiler Collection (GCC). Kompilátor jazyka C, gcc, poskytuje stovky příznaků kompilátoru a linkeru. Ve službě Azure Sphere se ve výchozím nastavení používají následující příznaky:
-fstack-protector-strong
: Generuje kód pro ochranu před útoky na rozmaškání zásobníku.pie
: Generuje spustitelné soubory nezávislé na pozici.fPIC
: generuje kód nezávislý na pozici.
Příznak -fstack-protector-all
poskytuje větší ochranu než -fstack-protector-strong
, ale zvyšuje využití zásobníku paměti. Vzhledem k omezené paměti na aktuálním hardwaru -fstack-protector-all
Azure Sphere se ve výchozím nastavení nepoužívá.
Azure Sphere také používá řadu příznaků upozornění – ty se dají použít k identifikaci problémů s kódem během kompilace, které je možné před nasazením opravit:
-Wall -Wswitch -Wempty-body -Wconversion -Wreturn-type -Wparentheses -Wno-format -Wuninitialized -Wunreachable-code -Wunused-function -Wunused-value -Wunused-variable -Wstrict-prototypes -Wno-pointer-sign -Werror=implicit-function-declaration
Kvůli většímu zabezpečení -Wl,-z,now
nebo -Wl,-z,relro
je možné je přidat, ale znovu se nepoužívají ve výchozím nastavení, protože způsobují dodatečné využití paměti.
Kontrola veškerého kódu
Revize kódu jsou jednoduchým, ale efektivním nástrojem pro zajištění vysoce kvalitního kódu. Doporučujeme, aby se žádný kód nekontroloval bez kontroly kódu od kvalifikovaného revidujícím. Jedno-on-one revize kódu, ve kterém vývojář prochází nový kód s jiným vývojářem, často pomáhají původnímu vývojáři objasnit myšlenku, která se dostala do vytváření kódu. To může odhalit slabá místa návrhu nebo zmeškané body větví i bez vstupu od vývojáře revizí.
Použití automatizovaných testů
Automatizované testovací architektury, jako je například gtest, umožňují spouštět sady testovacích funkcí při každém sestavení projektu. Osvědčeným postupem je zajistit, aby byl veškerý vrácený kód se změnami doprovázen alespoň jednou testovací funkcí; více je obvykle lepší. Mezi důležité typy testování patří:
- Základní testování jednotek spouští jednotlivé části kódu, aby ověřilo, že funguje podle návrhu. Testovací případy by měly být navrženy tak, aby testovat kód na hranách; rohové případy a hraniční případy jsou obvykle plodným zdrojem chyb.
- Přibližné testování kódu cvičení poskytnutím neočekávaného vstupu různých typů, aby funkce správně reagovala.
- Penetrační testování je užitečné pro identifikaci ohrožení zabezpečení, která útočníkům umožňují proniknout do aplikace.
Použití analyzátorů statického kódu
Analyzátory statického kódu vám můžou pomoct najít řadu běžných problémů s kódem. Většina se zaměřuje na konkrétní typy chyb. Mezi bezplatné a opensourcové nástroje patří vývojářskými týmy Azure Sphere a některými uživateli Azure Sphere:
- clang-tidy
- AddressSanitizer (ASan)
- MemorySanitizer (MSan)
- UndefinedBehaviorSanitizer (UBSan)
- Valgrind
Spuštění některých z těchto nástrojů může vyžadovat překompilování aplikace (nebo jeho části) pro jiný cílový operační systém.
Odebrání nepotřebného kódu
Sada Azure Sphere SDK poskytuje prořezanou verzi standardních vývojových knihoven jazyka C; kdykoli je to možné, měli byste hledat příležitosti k prokládání vlastního kódu do základních informací. Méně řádků kódu, menší prostor pro útoky je k dispozici pro potenciální hrozby. Upozornění na nedostupný nebo nepoužitý kód je možné použít k identifikaci nepotřebného kódu.