정리 원본 링크
내부 저장소 컴퓨팅은 SSD를 활용하여 프로그램을 호스트에서 SSD로 이동시키는 것을 가능케 한다.
I/O 병목 현상을 해소하는 효과적인 방법이지만 내부 저장소 보안 문제가 존재한다.
현대 SSD 컨트롤러는 신뢰할 수 있는 실행 환경이 없어서 악의적인 프로그램이 데이터를 훔치거나 변경할 수 있다.
이를 방지하기 위해 IceClave라는 경량의 신뢰 실행 환경을 구축했다.
IceClave는 플래시 관리 기능과 내부 저장소 프로그램 사이의 보안 격리를 가능케 하며, 플래시 컨트롤러 내에 데이터 보호 메커니즘을 개발합니다. IceClave는 성능을 떨어뜨리지 않으면서 SSD 컨트롤러 내의 보안을 강화하고, 내부 저장소 컴퓨팅의 성능 이점을 유지한다.
내부 저장소 프로세서는 호스트 머신과 독립적으로 작동하기 때문에, 현대 SSD 컨트롤러는 SSD 내부에서 실행되는 프로그램에 대한 신뢰할 수 있는 실행 환경(TEE)을 제공하지 않기 때문에 사용자 데이터와 플래시 칩에 심각한 보안 위협을 제공한다.
악성 오프로드 프로그램은 버퍼 오버플로우와 같은 메모리 취약점을 이용하여 특권 상승을 가능케 하여 SSD DRAM의 FTL의 캐시된 매핑 테이블에 액세스하고 수정할 수 있다
보안 격리를 달성하기 위해(그림 1의 2), 우리는 오프로드된 프로그램을 호스팅하기 위해 내부 저장소 TEE를 구축하고, 내부 저장소 프로그램의 데이터 통신 및 처리에 대해 데이터 암호화 및 메모리 무결성 검사를 강제

최소의 하드웨어 비용으로 SSD 컨트롤러에 경량의 스트림 암호 엔진을 통합하는 것이 목표
악의적 사용자는 소프트웨어 및 물리적 공격을 통해 내부 저장소 프로그램에 의해 생성된 중간 데이터와 출력을 조작하여 잘못된 계산 결과를 유발할 수 있습니다.
악의적인 프로그램은 SSD의 FTL 기능 (예: GC 및 웨어 레벨링)을 가로채고 플래시 관리를 혼란스럽게 할 수 있습니다. 이로 인해 데이터 손실이나 장치 파괴가 발생할 수 있습니다.
악의적 사용자는 내부 저장소 프로그램이 플래시 칩에서 SSD DRAM으로 데이터를 로드할 때와 같은 물리적 공격으로부터 플래시 칩에 저장된 사용자 데이터를 탈취할 수 있습니다.
이러한 공격에 대응하기 위한 대안적인 솔루션은 내부 저장소 컴퓨팅을 위한 운영 체제 또는 하이퍼바이저를 개발하는 것입니다. 그러나 SSD 컨트롤러의 제한된 자원으로 인해 완전한 운영 체제를 실행하는 것은 SSD에 상당한 오버헤드를 초래하고 공격 표면을 증가시킬 수 있다.
또한 이러한 기술은 보드 수준의 물리적 공격과 같은 앞서 언급한 공격에 대응하기에 충분하지 않습니다. 컴퓨팅을 저장 장치에 가깝게 이동함에 따라 이러한 비전통적인 컴퓨팅 패러다임을 위한 경량 실행 환경이 매우 바람직합니다
비전통적인 컴퓨팅 패러다임을 위한 경량 실행 환경이 필요하다
내부 저장소 컴퓨팅을 위한 최초의 TEE(Tusted Execution Environment) 프레임워크
세 가지 공격에 대응하기 위해 목표로 합니다
내부 저장공간에 대한 공격
핵심 FTL 기능에 대한 공격
플래시 칩과 내부 저장공간에서 만들어진 데이터에 대한 가능한 물리적 공격

FTL의 보안이 약해서 악의적인 내부 저장소 프로그램이 이를 제어하게 되면, 다른 사용자의 데이터를 읽거나 지울 수 있고, 덮어쓸 수도 있다.
데이터 손실 및 유출과 같은 심각한 결과를 초래할 수 있음
안전한 메모리 영역은 그림4에 나타나 있다.
내 생각엔 FTL 및 IceClave 런타이 안전한 구역에서 실행되도록 하고, 전체 메모리 공간에 대한 읽기/쓰기 권한을 부여한다. 그리고 내부 저장소 응용 프로그램을 일반 구역에 배치하여 응용 프로그램이 FTL 및 IceClave 런타임의 코드 또는 데이터 영역에 접근할 수 없도록 하는 것이 핵심
메모리 암호화의 목표는 메모리 액세스에서 데이터나 코드가 유출되지 않도록 보호하는 것
일반적인 방법은 프로세서의 캐시 라인을 메모리에 쓰기 전에 암호화하는 것입니다. 최신 기술은 일반적으로 분할 카운터 암호화를 사용
이 방법은 캐시 라인을 가상의 원시키(OTP)를 사용하여 XOR로 암호화하고, OTP는 AES와 같은 블록 암호를 통해 카운터를 암호화하여 생성됩니다. 각 쓰기 후에 카운터를 증가시켜 시간적으로 고유성을 보장한다.
이 카운터는 주요 카운터와 보조 카운터의 연결로 인코딩됩니다. 보조 카운터가 오버플로우되면 주요 카운터가 증가하고, 다른 모든 보조 카운터가 재설정됩니다. 연관된 메모리 블록도 다시 암호화해야 합니다. 따라서 이러한 암호화 방식은 상당한 성능 오버헤드를 가진다
내부 저장소 프로그램이 생성한 데이터에 대한 변경사항이나 악의적인 프로그램이 메모리에 액세스하여 데이터를 변경하려는 시도를 감지하고 방어할 수 있도록 하기 위해 필요합니다. 이러한 방식으로 IceClave는 내부 저장소 프로그램의 실행 중에 생성된 데이터를 보호하고, 사용자의 데이터를 안전하게 보호할 수 있습니다
API


Figure 9에서 IceClave를 사용하여 인-저장소 프로그램을 실행하는 전체 워크플로우를 설명합니다.



IceClave의 효율성을 더 평가하기 위해, 여러 IceClave 인스턴스를 동시에 실행하고, 각 인스턴스는 Table 4에 설명된 인-스토리지 워크로드 중 하나를 호스팅합니다. 우리는 각 인-스토리지 애플리케이션이 다른 인스턴스와 동시에 실행되는 경우의 애플리케이션 성능을 비교합니다.
그림 17에 나타난 바와 같이, TPC-C 인스턴스를 다른 워크로드와 함께 공존시키면, 인-스토리지 애플리케이션의 성능이 6.1–15.7% 감소합니다. 공존하는 인스턴스 수를 늘릴수록(그림 18 참조), 그들의 성능은 평균적으로 21.4% 감소합니다. 이는 주로 (1) 공존 IceClave 인스턴스 간의 계산 간섭 및 (2) 보호된 메모리 영역의 캐시된 매핑 테이블에서의 캐시 미스(최대 8.7%)로 인해 발생합니다. 그러나 이러한 인-스토리지 프로그램은 여전히 SSD의 외부 I/O 대역폭에 제약을 받는 호스트 기반 접근법보다 성능이 우수합니다.
SSD 컨트롤러에서의 TEE 지원 부족으로 인해, 악의적인 사용자가 오프로드된 프로그램을 간섭하고, 플래시 관리를 해치며, 사용자 데이터를 도난하고 파괴할 수 있음. 이를 해결하기 위해, 우리는 인-스토리지 프로그램과 플래시 관리 간의 보안 격리를 가능하게 하는 경량 TEE인 IceClave를 개발했습니다. IceClave는 최소한의 하드웨어 비용으로 물리적 공격에 대항할 수 있음