Wykład 10:
Bezpieczeństwo systemów

Mariusz Chilmon
m.chilmon@amw.gdynia.pl
uc.vmario.org

Dlaczego jakość kodu jest ważna?

Dlaczego jakość kodu jest ważna?

  • odróżnia programistę od klepacza kodu
  • programowanie jest grą zespołową
  • zapewnia odpowiednią kulturę pracy
  • znacznie zwiększa niezawodność

Unsafe' means ‘Somebody may die’.

— Safety officer

Upadek: Sprawa Boeinga

Przykłady standardów

  • MISRA C i MISRA C++ (Motor Industry Software Reliability Association)
  • AUTOSAR (AUTomotive Open System ARchitecture)
  • C++ Core Guidelines
  • PEP 20: The Zen of Python
  • Linux kernel coding style

Elementarne zalecenia

Literki są naprawdę za darmo


		int a = 0;
	

Literki są naprawdę za darmo


		int digitsOnDisplay = 0;
	

Wszelkie inne znaki też są za darmo (sic!)


		int readTemperature()
		{
		if (temperatureIsReady()) return i2cReadFrom(SENSOR_ADDRESS) else return 0;
		}
	

Wszelkie inne znaki też są za darmo (sic!)


		int readTemperature()
		{
			if (temperatureIsReady()) {
				return i2cReadFrom(SENSOR_ADDRESS);
			} else {
				return 0;
			}
		}
	

Funkcje i pliki są prawie za darmo

Dokumentuj kod


		int setCorrection(const int* coefficients)
		{
			…
		}
	

Dokumentuj kod


		/**
		 * Ustawia krzywą korekcji termopary wg standardu K.
		 *
		 * @param coefficients Tablica współczynników.
		 *
		 * @retval 0 Ustawiono poprawnie.
		 * @retval 1 Wystąpił błąd alokacji.
		 */
		int setCorrection(const int* coefficients)
		{
			…
		}
	

Wykorzystuj to, za co i tak zapłaciłeś

  • przerwania
  • timery
  • DMA (Direct Memory Access)
  • rejestry ustawiające i zerujące

Przedwczesna optymalizacja

Premature optimization is the root of all evil.

— Donald Knuth

dobra architektura ≠ przedwczesna optymalizacja

Sprzętowe wsparcie niezawodności

Watchdog

Redundancja

  • DMR — Dual Modular Redundancy
  • TMR — Triple Modular Redundancy

Lockstep

Cyberbezpieczeństwo

Podstawowe zagadnienia

  • zabezpieczenie przed odczytem
  • zabezpieczenie przed zapisem
  • podpis cyfrowy

Newag Impuls 45WE

  • pociągi Kolei Dolnośląskich nie ruszają po przeglądzie w warsztacie konkurencji
  • Dragon Sector pobiera wsad, dezasembluje i odkrywa blokady geograficzne
  • po zmianie bitu w konfiguracji pociągi ruszają
  • Newag S.A. nic nie wie (pikachu face)
  • sprzęt nie wspiera podpisu, więc udowodnijcie, że to my
  • poza tym jakim prawem używacie składów ze zmodyfikowanym oprogramowaniem?

Operacja Olympic Games

  • robak Stuxnet stworzony prawdopodobnie około 2009 r. przez USA i Izrael
  • robak zaraża komputery z Microsoft Windows np. przez pendrive'a (atak 0-day)
  • wyszukuje w sieci sterowniki PLC
  • aktywuje się, gdy rozpoznaje Siemens SIMATIC S7-300 lub S7-400
  • zwiększa częstotliwość pracy falownika
  • skutecznie psuje irańskie wirówki do wzbogacania uranu

TEE (Trusted Execution Environment)

  • fizycznie odizolowany mechanizm w procesorze
  • bezpieczny system operacyjny
  • chroni integralność danych
  • chroni integralność programu
  • wykorzystuje sprzętowe szyfrowanie pamięci
  • jednorazowo ustawiany klucz szyfrujący w procesorze

Implementacje TEE

  • AMD Platform Security Processor
  • Intel Software Guard Extensions
  • IBM Secure Service Container
  • RISC-V MultiZone Security Trusted Execution Environment
  • ARM TrustZone

TPM (Trusted Platform Module)

  • generator losowy
  • generator kluczy
  • podpis oprogramowania
  • bezpieczne (?) przechowywanie kluczy

Ataki sprzętowe

Zagrożenia

  • ataki na elektrownie, wodociągi
  • ataki na infrastrukturę energetyczną za pomocą oprogramowania domowej fotowoltaiki
  • ataki DDoS (Distributed Denial-of-Service) za pomocą IoT (Internet of Things)
  • ataki na samochody (nie tylko przez GSM, ale nawet DAB)
  • atak na Google Maps za pomocą…