Title : SmartNIC Security Isolation in the Cloud with S-NIC
Author: Yang Zhou, Mark Wilkening, James Mickens, and Minlan Yu
Published: Eurosys 2024
[paper]
Abstract
현대 smartNIC은 다른 tenant 간 llittle isolation이 존재하기 때문에 datacenter의 management OS로부터 network function을 보안적으로 보호할 수 없다. little isolation이 문제인 이유는 악의적으로 다른 network function이나 management OS로부터 정보가 수정되거나 유출될 수 있기 때문이다. (이에 대한 구체적인 공격은 추후에 설명할 것이다.)
network function 간의 little isolation이 아닌 strong isolation으로 서로의 data를 보호하기 위해서 논문은 새로운 하드웨서 design인 S-NIC을 제안한다. S-NIC은 strong isolation을 위해 하드웨어 가속기를 가상화하고 cache의 각 line과 RAM에 대해 single-owner를 시행한다. 즉, 특정 cache line과 RAM은 하나의 network function의 소유로 다른 network function으로부터 보호를 하는 것이다. (소유 network function만이 접근할 수 있음) 또한, 각 network function의 전용 bus bandwidth를 제공하여 다른 network function으로부터 보호한다.
* cache line(block) = cache와 memory 사이에 주고받는 데이터 크기 단위로 한 번 데이터를 가져올 때 한 block만큼 가져온다.
그렇게 함으로써, S-NIC은 공유하고 있는 HW 자원으로부터 side-channel을 제거하고 각 network function들이 private하게 S-NIC을 이용하는 것처럼 환상(illusion)을 제공한다.
* side-channel = 물리적인 구현에서 정보를 추출하는 공격기법
S-NIC은 기존의 데이터센터 기술(vLAN, SGX enclaves)과 결합이 가능하며 host-level code와 network function들이 데이터센터 운영자나 다른 network function(application)으로부터 하드웨어에서 보호를 받을 수 있음을 보장한다.
* vLAN = 가상화 Local Area Network로 물리적인 배치와 상관없이 논리적으로 LAN을 구성하는 것. 예를 들면, 같은 스위치에 연결된 node들을 논리적으로 분리시켜 접근할 수 없도록 한다.
* SGX enclaves (Software Guard Extension) = SGX는 인텔 CPU에 적용된 기술로, 사용자가 enclave라는 보호 영역을 설정해 CPU가 메모리 일부를 암호화하고 enclave 내부에서 실행되는 프로그램 외에는 접근할 수 없도록 하는 것.
1. Introduction
현대 분산 시스템에서는 network 관련 packet을 조작하는 network function이 굉장히 중요한데, 그 이유는 분산 서비스에서 개발자들이 service나 application 등을 배포할 때, 소프트웨어 구성요소와 함께 network function을 같이 배포해야만 한다. 하지만 서로 다른 런타임 환경에서는 안전, 성능, 운영비용과 관련하여 trade-off가 발생한다. 그래서 기존에는 datacenter-tenants는 virtual machine 내에서 function을 실행하였고 vm 간 isolation을 위해서 hyperviosr에 의존하였다. 하지만 hypervisor는 vm을 전체적으로 control 할 수 있기 때문에 isolation을 한 보안적 의미 없이 그 자체만으로 function들의 code와 data에 접근할 수 있었다. 즉, 암호화된 traffic을 다루는 암호화된 key와 같은 민감한 정보를 function이 조작하면 tenant들은 datacenter provider를 신뢰할 수 없다. 대처하기 위해서 CPU 내부에서 암호화를 하는 SGX enclaves를 funciton과 함께 실행했지만 잘 알려져 있다시피 SGX enclaves는 side-channel 공격에 취약성이 있기 때문에 hypervisor snooping으로부터 function을 보호할 수 없었다.
* hypervisor = 단일 물리적 머신에서 여러 가상 머신을 실행하는 소프트웨어
* snooping = 네트워크 상에서 떠도는 중요한 정보를 획득하는 행위
기존의 hypervisor에서 발생한 보안 문제로 인한 보안적인 취약점을 하드웨어 수준에서 network function을 처리하여 극복하기 위해 최근에 제안된 모델이 smart NICs이다. SoC-based smart NIC은 networking task를 최적화하는 hardware accelerator와 범용 cores가 집적되어 있어서 cpu가 처리해야 하는 task(packet comput)를 offload하여 smart NIC에서 직접 처리한다. 또한 CISC 기반인 x86 server cores를 사용하는 것보다 RISC core를 사용하여 낮은 전력 소비와 자본 비용을 유지한다. (accelerator와 함께 사용하면 CICS 보다 빠르기 때문에 성능 측면에서는 문제가 되지 않는다.) Smart NIC은 offload를 통해 server core의 수를 줄여 TCO를 97% 감소시키고 host RAM과 NIC RAM 사이에서 packet을 전송하면서 발생하는 PCIe latency 또한 없기 때문에 성능 측면에서 뛰어나다.
* TCO (Total-Cost-of-Ownership) = 자산이나 제품을 보유하고 유지하는 데 필요한 총 비용을 나타내는 지표
하지만 Smart NIC은 on-NIC RAM의 약한 access controls와 low-level hardware 자원(simple한 NF)은 가상화가 되지 않기 때문에 little isolation이 존재한다. Little isolation과 같은 결함은 function의 견고함과 안전에 피해를 주기 때문에 multi-tenant 점유가 안전하지 않다. 또한, single-tenant의 경우에도 버그가 생기거나 변형된 코드로 인해 위협이 될 수도 있다. 현재 smart NIC isolation에 대한 연구는 성능 측면에서만 이루어지고 보안 isolation에 대해 다뤄지지 않아 본 저자는 S-NIC을 제안한다. 논문에서는 최소한의 smart NIC HW변화, strong isolation이 가능한 오프로드된 function, 기존 offload가 제공했던 TCO 절감과 성능 향상을 유지하는 것을 목표로 한다.
S-NIC은 중요한 3가지 특징이 있다.
1) Aggressive disaggregation of internal resources (내부 자원의 공격적인 분리)
최근 데이터센터는 컴퓨팅 서버와 스토리지 서버를 분리시켜, datacenter tenants가 분리되어 있다는 걸 인식하지 못하도록 resource를 할당했다. 이 방식을 사용하여 S-NIC 또한 내부 resource를 4가지 구성요소로 분리시켰다. (programmable cores, TX/RX queues, hardware accelerators, RAM regions) 이 4가지 구성요소는 신뢰할 수 있는 hardware management bus를 사용하여 각 구성요소를 연결하였다.
2) Side-channel-free virtualization of NIC resources (NIC 자원의 side-channel 없는 가상화)
S-NIC은 virtual smart NIC을 사용하기 때문에 physical resource가 노출이 된다. 그렇기 때문에 side-channel 공격에 노출된다. 이를 제거하기 위해서 S-NIC은 메모리 블랙리스트를 사용하여 접근하지 못하도록 하거나, cache space를 예약하는 방식으로 side-channel을 제거한다.
3) Integration with preexisting datacenter management technologies (기존의 데이터센터 관리 기술과의 통합)
S-NIC을 사용하면 network function이 VXLAN endpoint로 작동할 수 있는데, 이는 tenant가 소유한 L2 데이터센터 토폴로지와 직접 통합할 수 있다는 의미이다. 또한 function이 원격으로 자신을 직접 증명할 수 있기 때문에 network function과 통합된 endpoint가 TLS middlebox와 같은 역할을 할 수 있다. 더하여 S-NIC을 SGX enclaves와 결합하여 strong isolation을 보장하는 고성능 분산 시스템을 구축할 수 있다.
* TLS middlebox (Transport Layer Security) = client와 server 사이에 위치하여 TLS 트래픽을 검사, 수정, 모니터링하는 네트워크 장치
논문에서 3가지 contribution을 제공한다.
1) Demonstrate that commodity smart NICs provide weak isolation (상용 smart NIC은 서로의 패킷을 손상시키고 계산 상태를 steal하고 서비스 거부 공격을 실행할 수 있는 wear isolation을 경험적으로 보여준다.)
2) We introduce new hardware-level isolation mechanisms for smart NICs (침해적인 microarchitecture 변경없이 NIC 리소스를 광범위하게 가상화하는 방법 결정)
3) Using extensive hardware-level simulations, we evaluate S-NIC (isolation 메커니즘은 처리량을 1.7% 감소시키고, isolation을 강화하기 위해 새로운 실리콘을 사용하여 면적은 최대 8.89% 증가, 전력 소모량은 최대 11.45% 증가한다. 즉 S-NIC은 기존에 제공한 TCO 이점의 91.6%를 유지한다.)
2. Threat model
기존의 데이터센터 운영자가 소유한 host os와 nic os와 같은 host-level sw, nic-level sw로부터 network functions을 격리하는 것이 S-NIC의 목표이다. 격리를 하는 이유는 직접적으로 function state를 tampering(보안이나 기능을 저하)할 수 있고 간접적으로는 side-channel을 통해 해당 tenant의 정보를 유출시킬 수 있기 때문이다. 마이크로아키텍처에서는 side-channel 공격을 없애기 위해 '성능 격리' 또한 제공하고 있다. 더 자세한 내용은 이 논문의 요지와 벗어나며 S-NIC은 향후 소프트웨어-level에서 또한 병렬적으로 완화를 할 것이다.
격리는 S-NIC 하드웨어로부터 실현이 되며, 버그가 없고 신뢰할 수 있음을 가정한다. 또한 데이터센터 운영자가 S-NIC의 메모리 버스에 tap을 하여 공격을 하는 것과 같은 공격에 대해서 기존 기술을 이용하여 방어한다.
격리를 하기 위해서는 endpoint 간 통신을 할 때, 패킷을 교환하기 전에 nic-level function과 host-level secure computations와 같이 신뢰할 수 있는 구성 속에서 endpoint를 검증하고 검증 후에 통신을 할 때 암호화를 하여 무결성과 기밀성을 보장한다. 통신을 할 때 암호화를 하는 이유는 데이터 운영자가 nic과 host 간 연결하는 버스 트래픽을 snooping하거나 tampering 할 수 있기 때문이다.
* snooping = 권한 없이 데이터를 가로채거나 모니터링하는 것. bus를 통해 데이터를 불법으로 엿볼 수 있음
* tampering = 데이터나 시스템을 악의적으로 변경하거나 조작하는 것이다. bus를 통해 데이터를 조작할 수 있음
3. Backgroud
S-NIC이 SoC 기반 Smart NIC인 이유는 non-trivial network functions이기 때문이다. (단순한 기능이 아니라 복잡하고 중요한 기능. 그래서 고급 언어로 쓰임) FPGA 기반 Smart NIC이 target이 아닌 이유는 FPGA는 병렬로 단순하고 결정적인 코드에 더 적합하기 때문에 더 복잡한 function을 사용할 S-NIC에는 적합하지 않다.
3.1 Building Blocks
SoC 기반 Smart NIC은 어떻게 구성되어 있는지 설명한다. (6가지 하드웨어 요소)
- Programmable cores : NF에 속하는 tenant 제공 코드를 실행시킨다.
- Management cores : NF 실행을 오케스트레이션 하는 SW를 실행시킨다. NF를 programmble cores에 management cpu가 할당하고 packet이 올바른 NF으로 forwarding할 수 있도록 routing hardware를 구성한다. core는 management sw랑 NF를 나란히 실행한다. management cores는 host memory로부터 DMA 전송을 사용하여 초기 코드와 데이터를 가져온다.
- Memory : DRAM과 SRAM이 포함되어 있다. DRAM은 모든 코어에 접근이 가능하며 각 코어에 접근할 때 각각의 latency가 균일하다. SRAM은 극단적인 경우에는 일부 코어에 접근이 불가능하며 각 코어에 접근할 때 latency가 균일하지 않다.
- HW accelerators : 데이터 암호화나 checksum 계산하는 것과 같은 단일 task에 대해서 최적화하는 core이다. network fuction은 필요한 것들을 설치하기 위해 메모리와 일치하는 가속기 레지스터에 write하고 설치가 완료되면 DRAM에 있는 queue를 통해 programmable cores와 통신한다. DRAM을 통해서는 queue를 통해 programmable cores와 가속기가 통신하고 SRMA은 처리되고 있는 NF data를 cache한다.
- Circuitry : packet의 ingress와 egress를 다루기 위함. NIC마다 세부사항은 설계에 따라 다른다. 네트워크 인터페이스에는 buffer가 존재하며 module이 copy를 하고 해당 NF의 DRAM에 복사를 한다. programmable core가 도착하는 packet에 대해서 학습하고 core가 packet을 다루는 것이 끝나면 core는 output module한테 인터럽트를 보낸다. 그러면 module은 DRAM으로부터 queue를 복사해서 tx buffer로 보낸다.
- IO bus : 각 구성요소들 간의 통신을 담당한다. network function들은 bus bandwidth를 두고 경쟁을 하게 되는데 이는 추후에 다룰 것이다
3.2 Representative Smart NIC Architectures
- Marvell LiquidIO
LiquidIO는 MIPS64 코어가 있는 OCTEON 프로세러를 사용한다. OCTEON 프로세서는 Marvell에서 개발한 멀티코어 MIPS 프로세서 중 하나이다. MIPS는 RISC 계열의 명령어 집합으로 MIPS64는 RISC 계열 구조를 이용한 64bit 마이크로 프로세서이다. LiquidIO의 각 코어에는 L1 i-cache와 d-cache가 있지만 모든 코어는 L2 cache와 DRAM을 공유한다. NIC은 체크섬 및 암호화 작업을 위한 accelerator hardware를 제공한다.
MIPS64 아키텍처는 segment로 가상 주소 공간을 나눈다. segment는 xuseg, xkseg, xkphys가 있다. xuseg 세그먼트는 user segment로 TLB를 이용하여 physical memory에 mapping한다. xkseg 세그먼트는 kernel segment로 xuseg와 마찬가지로 TLB를 이용하여 physical memory에 접근하지만 CPU 권한 비트가 1일 때만 access할 수 있는 권한이 있다. xkphys 세그먼트는 TLB를 이용하지 않고 바로 physical memory에 직접 mapping된다. 커널은 xkphys의 가상 주소에 사용자 수준 코드가 액세스할 수 있는지 결정하기 위해서 MMU를 구성한다.
MIPS 프로세서는 하드웨어가 아닌 소프트웨어를 통해 page table walk를 사용한다. (software-defined page table walks)
LiquidIO NIC은 두 가지 실행 모듈을 지원하는데 둘 다 MIPS CPU가 management core와 programmable core를 실행시킨다.
1) SE-S mode
NIC의 부트로더가 코어에 각 function을 설치한 다음 부트로더는 종료된다. 다음 부팅까지 function을 생성하거나 삭제할 수 없다. 즉, 커널이 없다. 대신 모든 기능이 권한 모드에서 실행된다. 부트로더는 xuseg가 function별 상태를 가리키도록 TLB entry를 구성하고 각 function은 xkphys에 대한 완전한 접근 권한을 받는다.
2) SE-UM mode
management os는 host system의 요청에 따라 network function을 생성하거나 파괴하는 멀티코어 Linux 커널이다. 각 function은 kernel이 코어에 할당하는 표준 linux process이다. xuseg는 function 코드와 데이터의 물리적 위치에 매핑하도록 코어의 TLB entry를 설정하며 NIC 구성 방식에 따라 xkphys는 액세스 권한을 부여받아 레지스터를 직접 조작할 수 있다.
SE-S모드나 xkphys가 액세스가 활성화된 SE-UM mode는 임의의 물리적 주소를 읽고 쓸 수 있고 하드웨어 가속기를 직접 조작할 수 있다. 그렇기 때문에 NF 또는 권한 있는 관리 소프트웨어 간에 isolation을 제공하지 않는다. 즉, 버그가 존재하거나 악의적인 OS로부터 두 모드 모두에서 NF를 보호할 수 없다.
- Netronome Agilio
Agilio NIC는 프로그래밍 가능한 코어와 관리 코어를 구분한다. 최대 120개의 Intel IXP 코어가 네트워크 기능을 실행하고, 소수의 StrongARM 또는 XScale 코어에서 관리 소프트웨어가 실행된다. 모든 메모리는 물리 주소를 사용하여 접근되며, 프로그래밍 코어는 페이지 테이블이나 TLB에 의해 제한되지 않는다. 이 구조는 단순하지만 네트워크 기능 간 격리가 불가능하다.
- Mellanox BlueField
BlueField NIC는 ARM 코어를 사용하며, 각 코어가 관리 코어와 프로그래밍 가능한 코어 역할을 모두 한다. BlueField는 ARM의 TrustZone 기술을 사용하여 네트워크 기능을 격리한다. TrustZone은 하드웨어 격리된 보안 계산 환경을 제공한다. TrustZone은 "정상 세계"와 "보안 세계"를 구분하는 새로운 권한 비트를 도입한다. 그러나 BlueField는 네트워크 기능을 보안 세계의 관리 OS로부터 격리하지 않는다. 네트워크 기능은 손상된(또는 고의적으로 악의적인) 보안 세계 OS로부터 보호받지 못한다. BlueField는 또한 메모리 버스와 같은 공유 마이크로아키텍처 리소스를 통한 side channel 공격을 방지하지 못한다. 스마트 NIC 중에서 가장 우수한 격리 기능을 제공하지만, 완전한 격리는 아직 불가능하다.
3.3 Concrete Attacks
상용 스마트 NIC가 네트워크 기능에 대해 성능 격리, 기밀성, 무결성 면에서 취약점을 가지고 있음을 보여주는 공격 사례들을 설명하고 있다.
Packet corruption (LiquidIO)
다른 코어에서 실행되는 두 개의 network function. MazuNAT 기능은 자신의 'xuseg 세그먼트'에 있는 번역 규칙을 사용하여 패킷 헤더를 수정한다. 악의적인 기능은 'xkphys'를 이용하여 모든 기능이 사용하는 버퍼 할당자의 메타데이터 구조를 스캔한다. 악의적인 기능은 MazuNAT의 패킷에 할당된 버퍼를 발견하고 그 패킷 헤더를 변조하여 의도된 NAT 변환을 방해하여 공격을 한다.
DPI ruleset stealing (LiquidIO)
LiquidIO NIC는 패킷 검사를 위해 정규 표현식 엔진인 DPI(Deep Packet Inspection) 가속기를 갖추고 있다. Network function은 DPI 규칙을 DRAM에 저장하고, 가속기가 필요에 따라 규칙을 가져온다. 악의적인 기능이 'xkphys'를 사용하여 다른 기능의 규칙셋을 훔쳐 정보 유출 문제를 일으킨다.
IO bus denial-of-service (Agilio)
현재 시중의 스마트 NIC들은 NIC의 내부 IO 버스에 대한 대역폭 예약을 구현하지 않아, 여러 Network function이 버스 대역폭을 놓고 경쟁한다. Agilio에서, 우리는 DRAM 속 세마포어를 감소시키는 test_subsat 지시어를 반복적으로 발행하여 이로 인해 버스가 포화 상태에 이르고 NIC가 하드 크래쉬되어 전원을 다시 켜야 하는 공격이다.
BlueField NIC에 대한 구체적인 공격은 진행하지 않았지만, BlueField NIC 또한 보안 세계 OS나 마이크로아키텍처 수준의 사이드 채널로부터 기능을 보호하지 못한다. S-NIC의 목표는 이러한 공격들을 방지하면서도 성능과 다이 면적에 미치는 영향을 최소화하는 것이다.
4. Design
S-NIC은 virtual smart nic의 추상화를 사용함으로써 virtual smart nic에 각 network function을 바인딩한다. S-NIC은 network function들 간의 isolation을 위해 ISA-level과 microarchitecture-level 둘 다 다른 virtual smart nic 또는 nic os로부터 virtual smart nic의 상태를 숨긴다. 아래 figure2는 S-nic의 high-level architectur를 보여준다. 1번부터 4번까지 S-NIC의 isolation을 입증하는 S-NIC의 desig인데, 1번은 각 core의 TLB entry는 lock-down기능을 사용하여 각 network function이 사용할 수 있는 메모리를 제한한다. 2번에서도 가상화된 하드웨어 가속기에 lock기능을 사용하여 network function의 사용을 제한하며, 3번에서는 프로그래머블 코어와 다른 컴포넌트에서 transfer할 때 예약된 버스 bandwidth를 제공한다. 4번은 하드웨어 신뢰 루트를 사용하여 각 network function이 원격으로 자신의 무결성을 기밀성을 증명할 수 있도록 한다.
* ISA level isolation = 다른 가상 스마트닉이나 nic os에서 virtual nic의 상태에 대해서 읽거나 쓸 수 없다.
* microarchitecture level isolation = nic 자원이 time slicing없이 single network function만 엄격하게 사용할 수 있도록 하거나 single network function이 공유가 될 수 있지만 예약한 owner의 패킷 패턴 정보가 유출되지 않도록 하드웨어 리소스 자원 강제한다.
4.1 Launching a Function
network function을 실행하기 위해 사전적으로 개발자는 원격으로 데이터센터의 RAM에 function의 초기 코드와 data 그리고 function의 구성 상태를 업로드 합니다. S-NIC의 NIC OS는 DMA를 사용하여 개발자가 업로드한 function의 초기 상태를 host ram에서 on-nic ram으로 전송하여 완료되면 nf_launch 명령어를 실행합니다. 이 명령어는 개발자가 업로드한 function을 automic하게 설치합니다. 하드웨어는 첫 번째 인자와 두 번째인자인 core_mask와 page_table을 사용하여 우선 요청된 코어가 사용가능한지 확인하고 페이지 테이블에 매핑된 물리적 페이지가 다른 function에 할당되었는지 점검합니다. 요청된 코어가 사용가능하고 패이지 테이블의 물리적 테이블이 다른 functio에 할당되지 않았으면 성공적으로 nf_launch 명령어가 성공합니다.
4.2 Single-owner RAM Semantics
RAM은 가장 중요한 ISA-visible 자원이다. 그 이유는 패킷이 들어오면 input module은 RAM에 패킷을 복사한다. 또한 패킷을 어디에 복사할지 결정하는 switiching rules 또한 RAM에 있다. 하드웨어 가속기는 RAM으로부터 명령어를 가져오고 output은 RAM에 출력한다. 또한 network function의 code와 data 또한 RAM에 있기 때문에 RAM은 보안적으로 가장 중요한 구성요소이다. 즉, S-NIC의 보안적인 목적인 RAM 지역에서 owner들이 single로 구현되는 것이다. (다른 network function을 참조하지 못하도록)
- Isolating the new funciton from the management core
앞에서 새로운 function을 core에 설치를 한 후에 다른 network function과 isolation을 위해 management core에 memory page blacklist를 설치하여 management core가 새로운 network function의 물리적 주소에 접근하는 것을 제한합니다. 블랙리스트 페이지 테이블 레지스터는 management core와 연결되어서 블랙리스트페이지 테이블에는 management os가 접근해서는 안되는 physical address에 대한 매핑이 있습니다. 이 메모리 페이지 블랙리스트를 구현하기 위해서 S-NIC은 블랙리스트 페이지 테이블 레지스터와 management core를 연결하였습니다. S-NIC은 이렇게 dual page table을 사용하여 보안을 강화합니다.
- Isolating old functions and the management core from the new function
nf_launch 명령어가 블랙리스트 설치를 완료하면 function의 programmable core에 대한 memory mapping을 설치합니다. 각 programmable core는 자신의 DRAM 페이지에만 접근할 수 있고 다른 network function이나 nic os의 메모리 페이지에는 접근하지 못하도록 합니다. 또한 network function이 host memory와 데이터를 주고받고자 할 때, S-NIC의 DMA 컨트롤러는 특정 RAM에만 접근할 수 있도록 isolation을 제공해야 합니다. 특정 RAM 영역에만 데이터를 전송하기 위해서 S-NIC은 각 프로그래머블 코어당 하나의 bank를 가지는데, 여기서 back는 데이터 전송을 관리하기 위한 독립적인 단위로 특정 ram에만 접근이 가능하도록 업스트림, 다운스트림 각각에 tlb entry를 두어 메모리 매핑을 하여 멀티뱅크 DMA 컨트롤러가 데이터 전송을 함으로써 isolatio을 달성합니다.
- Eliminating side channels
S-NIC은 각 function에 대해서 L1, L2 L3 cache 공간을 예약하는데 이때 side channel 공격을 제거하기 위해서 두 가지 옵션을 제안합니다. 첫 번째 옵션은 hard partitioning으로 이 옵션은 side-channel을 충분하게 제거하지만 cache 할당 크기를 동적으로 조정하는 것이 불가능하다는 단점이 있습니다. 그래서 하나 더 제안한 것은 SecDCP 캐시 파티셔닝입니다. SecDCP 캐시 파티셔닝을 통해 nic-os가 function에 side channel을 허용해주기 때문에 완전히 side-channel을 제거할 수는 없지만 캐시를 동적으로 할당을 할 수 있습니다.
4.3 Virtualizing Hardware Accelerators
smart nic은 네트워크 데이터를 처리하기 위해 하드웨어 가속기를 사용하는데요, 기존 상용 smart nic같은 경우에는, 단일의 하드웨어 가속기는 하나 이상의 하드웨어 스레드로 구성되어 있습니다. 가속기 내부의 스케줄러는 RAM의 qeueu로부터 요청을 가지고 와서 스레드에 할당하는 방식입니다. Figure 3(a)는 네트워크 데이터를 분석하는 DPI 가속기로 네트워크 데이터 분석을 위해 network function이 그래프를 RAM에 쓰고 DPI에 등록을 한 다음에 queue에 등록하여 가속기를 사용합니다. 기존 smart nic은 하드웨어 스레드가 물리적인 RAM에 무제한으로 접근을 할 수 있으며 network functio도 RAM에 제한없이 접근이 가능하기 때문에 network function에 대해서 기밀성과 무결성이 보장되지 않습니다.
이를 해결하기 위해서 S-NIC은 하드웨어 스레드를 클러스터로 묶어서 스레드 앞단에 TLB bank를 배치하였습니다. 해당 클러스터의 스레드가 network function에 할당된 물리적 메모리에만 접근할 수 있도록 TLB 뱅크를 구성하여 각 function의 메모리 블랙리스트를 사용하여 그래프와 queue는 무결성과 기밀성을 보장할 수 있습니다. 또한 각 vDPI 대해 network function이 예약된 DRAM 대역폭을 이용하여 side-channel을 방지할 수 있습니다.
4.4 Virtualizing Packet IO
S-NIC은 기존의 SR-IOV 기술에서 영감을 받아 각 network functio에 대한 packet 처리 workflow를 isolation하기 위해 VPP을 제안합니다. SR-IOV는 각 가상 NIC에 맥 주소를 할당하고, 들어오는 패킷을 해당 가상 NIC의 대기열로 보내는 역할을 합니다. S-NIC은 이에 기반하여 virtual packet pipelin을 도입하였습니다. VPP는 회선과 function의 RAM 간 function의 packet이 이동하는 하드웨어 리소스를 그룹화한 것으로, buffer space, packet 스케줄러, ram에서 들어오는 패킷을 vpp로 포워딩하는 스위치 구성 rule로 구성되어 있습니다.
Nf_launch 명령어의 인자 중 pkt_pipeline_config로 functio의 vpp를 설정할 수 있는데요, rx, tx 버퍼 크기와 원하는 스케줄링 알고리즘, 스위치 구성 규칙을 지정할 수 있습니다.
4.5 Bus Arbitration
IO 버스 contentio으로 발생하는 side channe을 제거하기 위해, S-NIC은 다른 tenant들의 bus 요청 간 간섭을 방지해야 합니다. 이를 위해 S-NIC은 버스 중재 기술을 도입하였고 이 기술은 다양한 접근법과 호환이 가능합니다. 이 논문의 실험에서는 temporal partitioning이라는 접근법을 사용하였습니다.
버스 중재 기술은 IO 버스에 접근하는 하드웨어 구성요소앞에 배치하였으며 S-NIC은 시간을 에포크로 나누어 한 에포크 동안 하나의 클라이언트 요청만 메모리 작업을 할 수 있도록 하였습니다.
이렇게 S-NIC의 버스 중재 기술은 테넌트 간의 간섭을 방지하고, 사이드 채널 공격을 막는 데 중요한 역할을 합니다.
4.6 Function Execution and Teardown
nf_launch 명령어는 network function을 설치하면서 메모리 페이지 블랙리스트나 메모리 매핑과 같이 다양한 부분을 설치를 하기 때문에 계속해서 누적 해시를 업데이트합니다. 그렇기 때문에 해시에는 함수의 초기 코드와 데이터부터 스위치 rule까지 포함되어 있습니다. Nf_launch 명령어가 완료되면 하드웨어 메모리에 명령어의 인수를 저장하는데 저장하게 되면 명령어가 function의 ID를 반환합니다. (불투명한 정수로) 즉, fucntion이 실행중인 상태를 의미하며 이 시점에서는 더 이상 NIC OS는 메모리 블랙리스트와 마이크로아키텍처 level에서 구현한 isolation 기술로 인해 접근할 수 없게 되고 관여할 수도 없습니다. NIC OS는 funciton의 정보에 접근하지 않는 방식으로 파괴하는 기능이 필요한데 그 기능이 nf_teardown입니다. 이 명령어를 실행하면 function의 코어와 하드웨어 가속기를 바인딩 해제하여 메모리 블랙리스트에서 제거합니다.
4.7 Attestation and Secure Constellations
증명을 통해 network function은 자신이 S-NIC위에서 실행되고 있으며 누적된 해시 정보를 가지고 있음을 외부 피어에 증명할 수 있습니다. F는 diffine ~ 교환에 참여함으로써 p를 증명합니다. F는 nic 하드웨어 공급업체로부터 인증된 NIC 전용 개인 키로 해시 값에 서명함으로써 증명 프로토콜이 완료가 되면 f와 p만 아는 대칭 키를 공유하게 됩니다. 반대로 p가 SGX enclaves나 trustzone에 있으면 f도 증명을 요청할 수 있고 쌍방으로 증명이 성공되면 엔드포인트간 암호화된 네트워크 채널이 공유을 통유하고, 서로의 계산 환경에 대해서 무결성과 기밀성을 상호 신뢰하게 됨을 보여줍니다.
5. Evaluation
S-NIC의 하드웨어 비용이 적당함을 evaluation에서 증명을 할 것이다. 5.2 Die Area and Power Consumption 섹션에서는 chip area가 오직 8.89%만 증가하였으며 전력 소비는 11.45%밖에 증가하지 않았음을 증명한다. 결과적으로 S-NIC은 smart NIC의 TCO 이점을 8.37%만 감소시켰다. 5.3 Performance Costs of Strong Isolation 섹션에서는 S-NIC의 TLB blacklisting, cache partitioning, and bus arbitration은 최악의 경우에서 function throughput을 1.7% 미만으로 감소시켰다. 그러므로 S-NIC은 기존의 오프로딩 성능 이점을 유지한다.
* Die = 집적 회로에서 Die는 반도체 물질의 자그마한 사각형 조각을 말하며, 여기에 회로가 제작되어 있다.
5.1 Workloads
6가지 network function을 사용하여 S-NIC 평가
1) Firewall(FW) : rule을 scan하여 packet을 drop시키는 stateful firewall이다. Emerging Threats 사이트의 규칙을 643개 사용하여 function을 구성하였다. (최근에 액세스한 규칙은 HashMap에 cache된다.)
2) DPI : Aho Corasick(AC) 알고리즘을 사용하는 pattern-matching application이다. SISM accelerated AC 구현을 사용하여 6개의 오픈소스 rule set에서 추출된 33,741개의 패턴을 사용한다.
3) NAT : MazuNAT에 기반한 네트워크 주소 변환기로, HashMap을 사용하여 처음 65,535개 흐름 결과만 기록한다.
4) Load Balancer (LB) : Maglev라고 불리는 Google의 소프트웨어 로드 밸런서로 일관된 hashing을 사용하여 흐름을 분산시킨다.
5) LPM : packet route를 위해 DIR-24-8 알고리즘을 사용하여 가장 긴 prefix를 일치시키는 것으로, NetBricks와 동일하게 조회 테이블에 16,000개의 random rule을 생성한다.
6) Monitor (Mon) : HashMap을 사용하여 5-tuple flow를 기록한다. ( source IP, destination IP, protocol, source port, and destination port )
DPI와 Monitor function은 직접 구현하였고 나머지 4개의 network fuction은 NetBricks 저장소에서 파생되었다. (NetBricks는 Rust 기반 Network function framework)
메모리 사용량과 처리량을 측정하기 위해 2가지 trace로 평가하였다.
1) anonymous CAIDA trace from 2016(one hour) → 2,670만 개의 TCP 흐름과 13억 4천 만 개의 패킷
https://catalog.caida.org/dataset/passive_2016_pcap
2) an ICTF trace from 2010 → a wide-area “capture-the-flag” competition 동안 수집되었으며 SafeBricks 논문에서 사용된 trace와 동일하다.
2가지 trace는 성능 스트레스 테스트에서 CAIDA trace packet을 64byte만큼 줄이고 5-tuple을 보존하였다. 각 실험을 10번 실행하고 메모리 사용량과 처리량의 중앙값을 report하였다.
5.2 Die Area and Power Consumption
기존에 존재하는 Smart NIC 기업들은 chip area와 power consumption을 공개하지 않는다. 그렇기 때문에 기존보다 어느 정도로 차이가 있는지 비교하기 위해서 S-NIC은성능 및 전력이 최적화된 ARM Cortex-A9 multicore processor를 확장했다. A9가 다른 smart NIC에 비해서 전체적인 size와 복잡성이 다르지만, process 기술(28nm)과 주파수 target(2.0GHz)은 일치한다. (process 기술과 frequency target은 die area와 power consumption에 영향을 미치기 때문에 비교 기준으로는 문제가 되지 않는다. 그렇기 때문에 TLB와 같은 구성요소는 비슷해야 한다. 또한, A9는 상대적으로 작은 프로세서이기 때문에 실제 적용이 된다면 더 높은 estimation이 나올 것이다.) Process 기술과 frequency target을 이용하여 cost를 측정하기 위해서, McPAT이라는 모델링 프레임워크를 이용할 것이다. McPAT은 아키텍처 커뮤니티로 multi-core processor의 area, power, timing estimate를 제공한다.
- Overall cost
S-NIC의 하드웨어 비용을 거의 차지하는 3가지는 (1) programmable cores용 TLB, (2) virtualized accelerators용 TLB, and (3) TLBs for the virtual packet pipeline and the DMA controller that manages NIC/host data transfers.
(가장 적게 차지하는 비용은 blacklisting logic과 bus arbiters)
→ 아래 3가지 표를 모두 요약하면 S-NIC의 추가 TLB entries는 기본 4-core A9에 비해 chip area가 8.89%, 전력 소비가 11.45% 많다.
(TLB는 가상 메모리 시스템에서 가상 주소를 물리 주소로 변환할 때 사용되는 캐시 메모리이다.)
Table2 → programmable core 수와 각 core가 access할 수 있어야 하는 메모리 양에 따라 (1) 비용이 어떻게 변하는지.
페이지 크기는 2MB로 가정하고 TLB는 완전 연관 논리를 사용한다. table2는 4개의 S-NIC processor의 경우 A9에서 최대 전체 면적의 3.19%와 소비 전력의 4.45%만 필요하다는 것을 보여준다. core의 개수가 증가할수록 TLB의 비용은 줄어들 것이다. 그 이유는 더 큰 cache directory와 코어의 상호연결 때문에 초선형적으로 확장될 것이다. table2에서 괄호는 A9 프로세서의 총 비용과 비교한 상대적인 하드웨어 오버헤드이다. 즉, 183 TLB entries일 때 4-core S-NIC은 A9보다 0.90%의 하드웨어 오버헤드가 발생한다. (첫 번째 행은 코어 당 366MB 메모리 매핑을 위해 183개의 TLB entries가 필요한 것이다. 예를 들어, 코어당 366MB 메모리 매핑을 위해서는 4-core S-NIC에서 0.045mm2(A9 대비 0.90%)의 면적 오버헤드가 발생하는 것이다.)
* fully-associative logic(완전 연관 논리) = 메인 메모리의 모든 블록이 캐시의 어느 곳에나 올 수 있는 구조. 즉 캐시에 빈 곳이 있으면 그곳에 메인 메모리 블록을 mapping시킨다.
Table 3 → virtualized accelerators용 TLB로, accelerator type과 cluster size를 변경시킬 때의 변화를 보여준다.
DIP, ZIP, RAID 가속기에 대해 총 TLB 하드웨어 비용을 합산하면, S-NIC은 512 TLB entries, 4-core A9를 고려할 때 die area가 최대 4.2%, 전력 소비가 5.3% 증가하였다. table3은 TLB bank를 구현하는데 필요한 비용으로 예를 들어 16cluster의 DPI는 TLB bank를 구현하기 위해 0.074mm2과 0.037W의 비용이 필요하다. 클러스터의 개수가 적어질수록 비용이 줄어든다.
Table 4 → NF 당 코어 수에 따라 (3) 비용이 어떻게 변하는지 보여준다. (packet pipeline과 DMA 용 TLB)
총 비용은 TLB 크기가 512 TLB entries 항목인 4-core A9를 고려할 때 chip area에서 1.5%, 추가적인 전력 소비가 1.7% 증가하였다.
- TCO impact
여기서는 기존 smart NIC과 S-NIC의 TCO에 대해 추정하여 S-NIC이 어느정도의 TCO를 유지하는지 보여준다. 저자는 기존 smart NIC을 12-core Marvell LiquidIO NIC을 선정하였고 해당 smart NIC에 대해서 최대 전력 소모와 구매 비용을 조사하고 미국 데이터센터의 평균 전기 가격과 3년간 LiquidIO NIC 및 host server의 코어당 TCO를 계산하여 163.56달러라는 결과를 보여주었다. S-NIC이 SoC chip area를 최대 8.89%, 전력 소모를 최대 11.45%까지 증가시킨다는 것을 감안하면 S-NIC 확장 LiquidIO NIC은 최악의 경우 코어당 42.53달러까지 증가한다. 즉, 기존 smart NIC의 TCO advantage를 최대 8.37%까지만 줄임을 알 수 있다. 이 숫자는 대략적인 추정치이며 그 외 다양한 요인이 있지만 S-NIC의 보안은 기존 smart NIC의 TCO 이점을 유지한다.
- Cost of management-core blacklisting and bus arbitration
3가지 표를 모두 요약하면 S-NIC의 추가 TLB entries는 기본 4-core A9에 비해 chip area가 8.89%, 전력 소비가 11.45% 많다.
여기서는 기존 smart NIC과 S-NIC의 TCO에 대해 추정하여 S-NIC이 어느정도의 TCO를 유지하는지 보여준다. 저자는 기존 smart NIC을 12-core Marvell LiquidIO NIC을 선정하였고 해당 smart NIC에 대해서 최대 전력 소모와 구매 비용을 조사하고 미국 데이터센터의 평균 전기 가격과 3년간 LiquidIO NIC 및 host server의 코어당 TCO를 계산하였습니다. S-NIC이 SoC chip area를 최대 8.89%, 전력 소모를 최대 11.45%까지 증가시킨다는 것을 감안하면 S-NIC 확장 LiquidIO NIC은 최악의 경우 코어당 42.53달러까지 증가한다. 즉, 기존 smart NIC의 TCO advantage를 최대 8.37%까지만 줄임을 알 수 있다. 이 숫자는 대략적인 추정치이며 그 외 다양한 요인이 있지만 S-NIC의 보안은 기존 smart NIC의 TCO 이점을 유지한다.
블랙리스팅과 버스 중재 비용은 가장 적게 차지하는 하드웨어 비용으로, 관해서는 S-NIC은 듀얼 페이지 테이블 탐색을 통해 메모리 블랙리스트 작성을 구현하며 하드웨어 수준 비용은 작은 EPT와 유사하며 bus 중재자 같은 경우는 시간적 파티셔닝을 하였을 때 최대 5%만 계산 속도를 감소시켜서 비용에 큰 영향을 주지 않는다.
SGX
https://bitboom.github.io/2020-03-11/sgx-overview
vLAN
https://onecellboy.tistory.com/278
ISA, micro architecture
https://melonicedlatte.com/computerarchitecture/2019/01/30/192433.html
smart nic
https://medium.com/@Asterfusion/what-is-smartnic-difference-of-dpu-and-smartnic-7928c93ecf7f
cache
https://parksb.github.io/article/29.html
RISC/CISC 설명 + MIPS architecture
https://blog.naver.com/whdgml1996/221491613863
virtual memory, MMU, TLB
segment
boot loader
https://jeongzero.oopy.io/40b4eec4-c89c-421c-a09c-d87f3cd7cd84
memory bank
https://ryotta-205.tistory.com/55
OP-TEE
https://www.trustedfirmware.org/projects/op-tee/
trustlet
https://learn.microsoft.com/ko-kr/windows/win32/procthread/isolated-user-mode--ium--processes
mazu nat
https://github.com/kohler/click/blob/master/conf/mazu-nat.click
semaphore
https://heeonii.tistory.com/14
cache
SGX enclaves
https://www.itworld.co.kr/news/139244
hypervisor
https://aws.amazon.com/ko/what-is/hypervisor/
die area
https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%9D%B4_%28%EC%A7%91%EC%A0%81_%ED%9A%8C%EB%A1%9C%29
NetBricks (OSDI '16)
https://people.eecs.berkeley.edu/~apanda/assets/papers/osdi16.pdf